From 1a664f677a579987dbea030dca0ce6a6974c36ed Mon Sep 17 00:00:00 2001 From: minsung Date: Thu, 30 Jul 2026 17:06:38 +0900 Subject: [PATCH] feat(viewer2d): add complex linetype rendering & LIN pattern parser support --- .../{index-B3deAy7F.js => index-DIjyiS5T.js} | 1704 +++++++++++++++-- dist2/index.html | 2 +- src/viewer2d/Viewer2D.js | 410 +++- src/viewer2d/linData.ts | 3 + src/viewer2d/linParser.ts | 301 +++ 5 files changed, 2214 insertions(+), 206 deletions(-) rename dist2/assets/{index-B3deAy7F.js => index-DIjyiS5T.js} (50%) create mode 100644 src/viewer2d/linData.ts create mode 100644 src/viewer2d/linParser.ts diff --git a/dist2/assets/index-B3deAy7F.js b/dist2/assets/index-DIjyiS5T.js similarity index 50% rename from dist2/assets/index-B3deAy7F.js rename to dist2/assets/index-DIjyiS5T.js index 48670d4..7995e6d 100644 --- a/dist2/assets/index-B3deAy7F.js +++ b/dist2/assets/index-DIjyiS5T.js @@ -1,18 +1,18 @@ -var qp=Object.defineProperty;var $p=(n,e,t)=>e in n?qp(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Vt=(n,e,t)=>$p(n,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const a of r.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&i(a)}).observe(document,{childList:!0,subtree:!0});function t(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(s){if(s.ep)return;s.ep=!0;const r=t(s);fetch(s.href,r)}})();/** +var $p=Object.defineProperty;var Jp=(n,e,t)=>e in n?$p(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Vt=(n,e,t)=>Jp(n,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const a of r.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&i(a)}).observe(document,{childList:!0,subtree:!0});function t(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(s){if(s.ep)return;s.ep=!0;const r=t(s);fetch(s.href,r)}})();/** * @license * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT - */const Cc="185",ui={ROTATE:0,DOLLY:1,PAN:2},Li={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},Zp=0,fu=1,Kp=2,Ia=1,Jp=2,mr=3,Ni=0,un=1,zt=2,hi=0,ks=1,du=2,pu=3,mu=4,jp=5,$i=100,Qp=101,em=102,tm=103,nm=104,im=200,sm=201,rm=202,am=203,Sl=204,Ml=205,om=206,lm=207,cm=208,um=209,hm=210,fm=211,dm=212,pm=213,mm=214,El=0,Tl=1,Al=2,Gs=3,wl=4,Cl=5,Rl=6,Pl=7,Df=0,gm=1,xm=2,Kn=0,If=1,Uf=2,Of=3,Ff=4,Nf=5,kf=6,Bf=7,Hf=300,es=301,Vs=302,Mo=303,Eo=304,mo=306,Ll=1e3,li=1001,Dl=1002,Ft=1003,vm=1004,Wr=1005,Xt=1006,To=1007,Di=1008,Sn=1009,zf=1010,Gf=1011,Tr=1012,Rc=1013,Qn=1014,Ln=1015,mi=1016,Pc=1017,Lc=1018,Ar=1020,Vf=35902,Wf=35899,Xf=1021,Yf=1022,En=1023,gi=1026,ji=1027,qf=1028,Dc=1029,ts=1030,Ic=1031,Uc=1033,Ua=33776,Oa=33777,Fa=33778,Na=33779,Il=35840,Ul=35841,Ol=35842,Fl=35843,Nl=36196,kl=37492,Bl=37496,Hl=37488,zl=37489,Wa=37490,Gl=37491,Vl=37808,Wl=37809,Xl=37810,Yl=37811,ql=37812,$l=37813,Zl=37814,Kl=37815,Jl=37816,jl=37817,Ql=37818,ec=37819,tc=37820,nc=37821,ic=36492,sc=36494,rc=36495,ac=36283,oc=36284,Xa=36285,lc=36286,ym=3200,gu=0,_m=1,oi="",mn="srgb",Ya="srgb-linear",qa="linear",ft="srgb",ms=7680,xu=519,bm=512,Sm=513,Mm=514,Oc=515,Em=516,Tm=517,Fc=518,Am=519,cc=35044,uc="300 es",$n=2e3,$a=2001;function wm(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}function Za(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function Cm(){const n=Za("canvas");return n.style.display="block",n}const vu={};function Ka(...n){const e="THREE."+n.shift();console.log(e,...n)}function $f(n){const e=n[0];if(typeof e=="string"&&e.startsWith("TSL:")){const t=n[1];t&&t.isStackTrace?n[0]+=" "+t.getLocation():n[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return n}function We(...n){n=$f(n);const e="THREE."+n.shift();{const t=n[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...n)}}function st(...n){n=$f(n);const e="THREE."+n.shift();{const t=n[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...n)}}function Bs(...n){const e=n.join(" ");e in vu||(vu[e]=!0,We(...n))}function Rm(n,e,t){return new Promise(function(i,s){function r(){switch(n.clientWaitSync(e,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:s();break;case n.TIMEOUT_EXPIRED:setTimeout(r,t);break;default:i()}}setTimeout(r,t)})}const Pm={[El]:Tl,[Al]:Rl,[wl]:Pl,[Gs]:Cl,[Tl]:El,[Rl]:Al,[Pl]:wl,[Cl]:Gs};class zi{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){const i=this._listeners;return i===void 0?!1:i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){const i=this._listeners;if(i===void 0)return;const s=i[e];if(s!==void 0){const r=s.indexOf(t);r!==-1&&s.splice(r,1)}}dispatchEvent(e){const t=this._listeners;if(t===void 0)return;const i=t[e.type];if(i!==void 0){e.target=this;const s=i.slice(0);for(let r=0,a=s.length;r>8&255]+Zt[n>>16&255]+Zt[n>>24&255]+"-"+Zt[e&255]+Zt[e>>8&255]+"-"+Zt[e>>16&15|64]+Zt[e>>24&255]+"-"+Zt[t&63|128]+Zt[t>>8&255]+"-"+Zt[t>>16&255]+Zt[t>>24&255]+Zt[i&255]+Zt[i>>8&255]+Zt[i>>16&255]+Zt[i>>24&255]).toLowerCase()}function Qe(n,e,t){return Math.max(e,Math.min(t,n))}function Lm(n,e){return(n%e+e)%e}function Ao(n,e,t){return(1-t)*n+t*e}function qn(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("THREE.MathUtils: Invalid component type.")}}function gt(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("THREE.MathUtils: Invalid component type.")}}const Dm={DEG2RAD:ka},au=class au{constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("THREE.Vector2: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("THREE.Vector2: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,i=this.y,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6],this.y=s[1]*t+s[4]*i+s[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Qe(this.x,e.x,t.x),this.y=Qe(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Qe(this.x,e,t),this.y=Qe(this.y,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Qe(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Qe(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const i=Math.cos(t),s=Math.sin(t),r=this.x-e.x,a=this.y-e.y;return this.x=r*i-a*s+e.x,this.y=r*s+a*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}};au.prototype.isVector2=!0;let Ee=au;class ki{constructor(e=0,t=0,i=0,s=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=s}static slerpFlat(e,t,i,s,r,a,o){let l=i[s+0],c=i[s+1],u=i[s+2],f=i[s+3],h=r[a+0],d=r[a+1],p=r[a+2],x=r[a+3];if(f!==x||l!==h||c!==d||u!==p){let m=l*h+c*d+u*p+f*x;m<0&&(h=-h,d=-d,p=-p,x=-x,m=-m);let g=1-o;if(m<.9995){const M=Math.acos(m),E=Math.sin(M);g=Math.sin(g*M)/E,o=Math.sin(o*M)/E,l=l*g+h*o,c=c*g+d*o,u=u*g+p*o,f=f*g+x*o}else{l=l*g+h*o,c=c*g+d*o,u=u*g+p*o,f=f*g+x*o;const M=1/Math.sqrt(l*l+c*c+u*u+f*f);l*=M,c*=M,u*=M,f*=M}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=f}static multiplyQuaternionsFlat(e,t,i,s,r,a){const o=i[s],l=i[s+1],c=i[s+2],u=i[s+3],f=r[a],h=r[a+1],d=r[a+2],p=r[a+3];return e[t]=o*p+u*f+l*d-c*h,e[t+1]=l*p+u*h+c*f-o*d,e[t+2]=c*p+u*d+o*h-l*f,e[t+3]=u*p-o*f-l*h-c*d,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,s){return this._x=e,this._y=t,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){const i=e._x,s=e._y,r=e._z,a=e._order,o=Math.cos,l=Math.sin,c=o(i/2),u=o(s/2),f=o(r/2),h=l(i/2),d=l(s/2),p=l(r/2);switch(a){case"XYZ":this._x=h*u*f+c*d*p,this._y=c*d*f-h*u*p,this._z=c*u*p+h*d*f,this._w=c*u*f-h*d*p;break;case"YXZ":this._x=h*u*f+c*d*p,this._y=c*d*f-h*u*p,this._z=c*u*p-h*d*f,this._w=c*u*f+h*d*p;break;case"ZXY":this._x=h*u*f-c*d*p,this._y=c*d*f+h*u*p,this._z=c*u*p+h*d*f,this._w=c*u*f-h*d*p;break;case"ZYX":this._x=h*u*f-c*d*p,this._y=c*d*f+h*u*p,this._z=c*u*p-h*d*f,this._w=c*u*f+h*d*p;break;case"YZX":this._x=h*u*f+c*d*p,this._y=c*d*f+h*u*p,this._z=c*u*p-h*d*f,this._w=c*u*f-h*d*p;break;case"XZY":this._x=h*u*f-c*d*p,this._y=c*d*f-h*u*p,this._z=c*u*p+h*d*f,this._w=c*u*f+h*d*p;break;default:We("Quaternion: .setFromEuler() encountered an unknown order: "+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,s=Math.sin(i);return this._x=e.x*s,this._y=e.y*s,this._z=e.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],s=t[4],r=t[8],a=t[1],o=t[5],l=t[9],c=t[2],u=t[6],f=t[10],h=i+o+f;if(h>0){const d=.5/Math.sqrt(h+1);this._w=.25/d,this._x=(u-l)*d,this._y=(r-c)*d,this._z=(a-s)*d}else if(i>o&&i>f){const d=2*Math.sqrt(1+i-o-f);this._w=(u-l)/d,this._x=.25*d,this._y=(s+a)/d,this._z=(r+c)/d}else if(o>f){const d=2*Math.sqrt(1+o-i-f);this._w=(r-c)/d,this._x=(s+a)/d,this._y=.25*d,this._z=(l+u)/d}else{const d=2*Math.sqrt(1+f-i-o);this._w=(a-s)/d,this._x=(r+c)/d,this._y=(l+u)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<1e-8?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Qe(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(i===0)return this;const s=Math.min(1,t/i);return this.slerp(e,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,s=e._y,r=e._z,a=e._w,o=t._x,l=t._y,c=t._z,u=t._w;return this._x=i*u+a*o+s*c-r*l,this._y=s*u+a*l+r*o-i*c,this._z=r*u+a*c+i*l-s*o,this._w=a*u-i*o-s*l-r*c,this._onChangeCallback(),this}slerp(e,t){let i=e._x,s=e._y,r=e._z,a=e._w,o=this.dot(e);o<0&&(i=-i,s=-s,r=-r,a=-a,o=-o);let l=1-t;if(o<.9995){const c=Math.acos(o),u=Math.sin(c);l=Math.sin(l*c)/u,t=Math.sin(t*c)/u,this._x=this._x*l+i*t,this._y=this._y*l+s*t,this._z=this._z*l+r*t,this._w=this._w*l+a*t,this._onChangeCallback()}else this._x=this._x*l+i*t,this._y=this._y*l+s*t,this._z=this._z*l+r*t,this._w=this._w*l+a*t,this.normalize();return this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){const e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(s*Math.sin(e),s*Math.cos(e),r*Math.sin(t),r*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const ou=class ou{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("THREE.Vector3: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("THREE.Vector3: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(yu.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(yu.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,s=this.z,r=e.elements;return this.x=r[0]*t+r[3]*i+r[6]*s,this.y=r[1]*t+r[4]*i+r[7]*s,this.z=r[2]*t+r[5]*i+r[8]*s,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,r=e.elements,a=1/(r[3]*t+r[7]*i+r[11]*s+r[15]);return this.x=(r[0]*t+r[4]*i+r[8]*s+r[12])*a,this.y=(r[1]*t+r[5]*i+r[9]*s+r[13])*a,this.z=(r[2]*t+r[6]*i+r[10]*s+r[14])*a,this}applyQuaternion(e){const t=this.x,i=this.y,s=this.z,r=e.x,a=e.y,o=e.z,l=e.w,c=2*(a*s-o*i),u=2*(o*t-r*s),f=2*(r*i-a*t);return this.x=t+l*c+a*f-o*u,this.y=i+l*u+o*c-r*f,this.z=s+l*f+r*u-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,s=this.z,r=e.elements;return this.x=r[0]*t+r[4]*i+r[8]*s,this.y=r[1]*t+r[5]*i+r[9]*s,this.z=r[2]*t+r[6]*i+r[10]*s,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Qe(this.x,e.x,t.x),this.y=Qe(this.y,e.y,t.y),this.z=Qe(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Qe(this.x,e,t),this.y=Qe(this.y,e,t),this.z=Qe(this.z,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Qe(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,s=e.y,r=e.z,a=t.x,o=t.y,l=t.z;return this.x=s*l-r*o,this.y=r*a-i*l,this.z=i*o-s*a,this}projectOnVector(e){const t=e.lengthSq();if(t===0)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return wo.copy(this).projectOnVector(e),this.sub(wo)}reflect(e){return this.sub(wo.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Qe(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,s=this.z-e.z;return t*t+i*i+s*s}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){const s=Math.sin(t)*e;return this.x=s*Math.sin(i),this.y=Math.cos(t)*e,this.z=s*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),s=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=s,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,t=Math.random()*2-1,i=Math.sqrt(1-t*t);return this.x=i*Math.cos(e),this.y=t,this.z=i*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};ou.prototype.isVector3=!0;let B=ou;const wo=new B,yu=new ki,lu=class lu{constructor(e,t,i,s,r,a,o,l,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,i,s,r,a,o,l,c)}set(e,t,i,s,r,a,o,l,c){const u=this.elements;return u[0]=e,u[1]=s,u[2]=o,u[3]=t,u[4]=r,u[5]=l,u[6]=i,u[7]=a,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,r=this.elements,a=i[0],o=i[3],l=i[6],c=i[1],u=i[4],f=i[7],h=i[2],d=i[5],p=i[8],x=s[0],m=s[3],g=s[6],M=s[1],E=s[4],_=s[7],T=s[2],b=s[5],S=s[8];return r[0]=a*x+o*M+l*T,r[3]=a*m+o*E+l*b,r[6]=a*g+o*_+l*S,r[1]=c*x+u*M+f*T,r[4]=c*m+u*E+f*b,r[7]=c*g+u*_+f*S,r[2]=h*x+d*M+p*T,r[5]=h*m+d*E+p*b,r[8]=h*g+d*_+p*S,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[1],s=e[2],r=e[3],a=e[4],o=e[5],l=e[6],c=e[7],u=e[8];return t*a*u-t*o*c-i*r*u+i*o*l+s*r*c-s*a*l}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],r=e[3],a=e[4],o=e[5],l=e[6],c=e[7],u=e[8],f=u*a-o*c,h=o*l-u*r,d=c*r-a*l,p=t*f+i*h+s*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const x=1/p;return e[0]=f*x,e[1]=(s*c-u*i)*x,e[2]=(o*i-s*a)*x,e[3]=h*x,e[4]=(u*t-s*l)*x,e[5]=(s*r-o*t)*x,e[6]=d*x,e[7]=(i*l-c*t)*x,e[8]=(a*t-i*r)*x,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,s,r,a,o){const l=Math.cos(r),c=Math.sin(r);return this.set(i*l,i*c,-i*(l*a+c*o)+a+e,-s*c,s*l,-s*(-c*a+l*o)+o+t,0,0,1),this}scale(e,t){return Bs("Matrix3: .scale() is deprecated. Use .makeScale() instead."),this.premultiply(Co.makeScale(e,t)),this}rotate(e){return Bs("Matrix3: .rotate() is deprecated. Use .makeRotation() instead."),this.premultiply(Co.makeRotation(-e)),this}translate(e,t){return Bs("Matrix3: .translate() is deprecated. Use .makeTranslation() instead."),this.premultiply(Co.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<9;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}};lu.prototype.isMatrix3=!0;let $e=lu;const Co=new $e,_u=new $e().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),bu=new $e().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Im(){const n={enabled:!0,workingColorSpace:Ya,spaces:{},convert:function(s,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===ft&&(s.r=di(s.r),s.g=di(s.g),s.b=di(s.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(s.applyMatrix3(this.spaces[r].toXYZ),s.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===ft&&(s.r=Hs(s.r),s.g=Hs(s.g),s.b=Hs(s.b))),s},workingToColorSpace:function(s,r){return this.convert(s,this.workingColorSpace,r)},colorSpaceToWorking:function(s,r){return this.convert(s,r,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===oi?qa:this.spaces[s].transfer},getToneMappingMode:function(s){return this.spaces[s].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(s,r=this.workingColorSpace){return s.fromArray(this.spaces[r].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,r,a){return s.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(s,r){return Bs("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(s,r)},toWorkingColorSpace:function(s,r){return Bs("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),n.colorSpaceToWorking(s,r)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],i=[.3127,.329];return n.define({[Ya]:{primaries:e,whitePoint:i,transfer:qa,toXYZ:_u,fromXYZ:bu,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:mn},outputColorSpaceConfig:{drawingBufferColorSpace:mn}},[mn]:{primaries:e,whitePoint:i,transfer:ft,toXYZ:_u,fromXYZ:bu,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:mn}}}),n}const nt=Im();function di(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function Hs(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}let gs;class Um{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let i;if(e instanceof HTMLCanvasElement)i=e;else{gs===void 0&&(gs=Za("canvas")),gs.width=e.width,gs.height=e.height;const s=gs.getContext("2d");e instanceof ImageData?s.putImageData(e,0,0):s.drawImage(e,0,0,e.width,e.height),i=gs}return i.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const t=Za("canvas");t.width=e.width,t.height=e.height;const i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);const s=i.getImageData(0,0,e.width,e.height),r=s.data;for(let a=0;a1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Po).x}get height(){return this.source.getSize(Po).y}get depth(){return this.source.getSize(Po).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const t in e){const i=e[t];if(i===void 0){We(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){We(`Texture.setValues(): property '${t}' does not exist.`);continue}s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==Hf)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Ll:e.x=e.x-Math.floor(e.x);break;case li:e.x=e.x<0?0:1;break;case Dl:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case Ll:e.y=e.y-Math.floor(e.y);break;case li:e.y=e.y<0?0:1;break;case Dl:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}}Qt.DEFAULT_IMAGE=null;Qt.DEFAULT_MAPPING=Hf;Qt.DEFAULT_ANISOTROPY=1;const cu=class cu{constructor(e=0,t=0,i=0,s=1){this.x=e,this.y=t,this.z=i,this.w=s}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("THREE.Vector4: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("THREE.Vector4: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,r=this.w,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*s+a[12]*r,this.y=a[1]*t+a[5]*i+a[9]*s+a[13]*r,this.z=a[2]*t+a[6]*i+a[10]*s+a[14]*r,this.w=a[3]*t+a[7]*i+a[11]*s+a[15]*r,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,s,r;const l=e.elements,c=l[0],u=l[4],f=l[8],h=l[1],d=l[5],p=l[9],x=l[2],m=l[6],g=l[10];if(Math.abs(u-h)<.01&&Math.abs(f-x)<.01&&Math.abs(p-m)<.01){if(Math.abs(u+h)<.1&&Math.abs(f+x)<.1&&Math.abs(p+m)<.1&&Math.abs(c+d+g-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const E=(c+1)/2,_=(d+1)/2,T=(g+1)/2,b=(u+h)/4,S=(f+x)/4,v=(p+m)/4;return E>_&&E>T?E<.01?(i=0,s=.707106781,r=.707106781):(i=Math.sqrt(E),s=b/i,r=S/i):_>T?_<.01?(i=.707106781,s=0,r=.707106781):(s=Math.sqrt(_),i=b/s,r=v/s):T<.01?(i=.707106781,s=.707106781,r=0):(r=Math.sqrt(T),i=S/r,s=v/r),this.set(i,s,r,t),this}let M=Math.sqrt((m-p)*(m-p)+(f-x)*(f-x)+(h-u)*(h-u));return Math.abs(M)<.001&&(M=1),this.x=(m-p)/M,this.y=(f-x)/M,this.z=(h-u)/M,this.w=Math.acos((c+d+g-1)/2),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Qe(this.x,e.x,t.x),this.y=Qe(this.y,e.y,t.y),this.z=Qe(this.z,e.z,t.z),this.w=Qe(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Qe(this.x,e,t),this.y=Qe(this.y,e,t),this.z=Qe(this.z,e,t),this.w=Qe(this.w,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Qe(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}};cu.prototype.isVector4=!0;let Ct=cu;class Nm extends zi{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Xt,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1,useArrayDepthTexture:!1},i),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=i.depth,this.scissor=new Ct(0,0,e,t),this.scissorTest=!1,this.viewport=new Ct(0,0,e,t),this.textures=[];const s={width:e,height:t,depth:i.depth},r=new Qt(s),a=i.count;for(let o=0;o1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.pivot!==null&&(s.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(s.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(s.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),s.instanceInfo=this._instanceInfo.map(o=>({...o})),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(e),s.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(s.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(s.boundingBox=this.boundingBox.toJSON()));function r(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(e.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c0){s.children=[];for(let o=0;o0){s.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),u.length>0&&(i.images=u),f.length>0&&(i.shapes=f),h.length>0&&(i.skeletons=h),d.length>0&&(i.animations=d),p.length>0&&(i.nodes=p)}return i.object=s,i;function a(o){const l=[];for(const c in o){const u=o[c];delete u.metadata,l.push(u)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot!==null?e.pivot.clone():null,this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;id+p?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&h<=d-p&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(r=t.getPose(e.gripSpace,i),r!==null&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1,l.eventsEnabled&&l.dispatchEvent({type:"gripUpdated",data:e,target:this})));o!==null&&(s=t.getPose(e.targetRaySpace,i),s===null&&r!==null&&(s=r),s!==null&&(o.matrix.fromArray(s.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,s.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(s.linearVelocity)):o.hasLinearVelocity=!1,s.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(s.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Xm)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=r!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){const i=new gr;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}}const Jf={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Si={h:0,s:0,l:0},qr={h:0,s:0,l:0};function Io(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}class et{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,i)}set(e,t,i){if(t===void 0&&i===void 0){const s=e;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(e,t,i);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=mn){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,nt.colorSpaceToWorking(this,t),this}setRGB(e,t,i,s=nt.workingColorSpace){return this.r=e,this.g=t,this.b=i,nt.colorSpaceToWorking(this,s),this}setHSL(e,t,i,s=nt.workingColorSpace){if(e=Lm(e,1),t=Qe(t,0,1),i=Qe(i,0,1),t===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+t):i+t-i*t,a=2*i-r;this.r=Io(a,r,e+1/3),this.g=Io(a,r,e),this.b=Io(a,r,e-1/3)}return nt.colorSpaceToWorking(this,s),this}setStyle(e,t=mn){function i(r){r!==void 0&&parseFloat(r)<1&&We("Color: Alpha component of "+e+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(e)){let r;const a=s[1],o=s[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,t);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,t);break;default:We("Color: Unknown color model "+e)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(e)){const r=s[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,t);if(a===6)return this.setHex(parseInt(r,16),t);We("Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=mn){const i=Jf[e.toLowerCase()];return i!==void 0?this.setHex(i,t):We("Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=di(e.r),this.g=di(e.g),this.b=di(e.b),this}copyLinearToSRGB(e){return this.r=Hs(e.r),this.g=Hs(e.g),this.b=Hs(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=mn){return nt.workingToColorSpace(Kt.copy(this),e),Math.round(Qe(Kt.r*255,0,255))*65536+Math.round(Qe(Kt.g*255,0,255))*256+Math.round(Qe(Kt.b*255,0,255))}getHexString(e=mn){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=nt.workingColorSpace){nt.workingToColorSpace(Kt.copy(this),t);const i=Kt.r,s=Kt.g,r=Kt.b,a=Math.max(i,s,r),o=Math.min(i,s,r);let l,c;const u=(o+a)/2;if(o===a)l=0,c=0;else{const f=a-o;switch(c=u<=.5?f/(a+o):f/(2-a-o),a){case i:l=(s-r)/f+(s0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}const wn=new B,ii=new B,Uo=new B,si=new B,_s=new B,bs=new B,Ru=new B,Oo=new B,Fo=new B,No=new B,ko=new Ct,Bo=new Ct,Ho=new Ct;class Mn{constructor(e=new B,t=new B,i=new B){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,s){s.subVectors(i,t),wn.subVectors(e,t),s.cross(wn);const r=s.lengthSq();return r>0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(e,t,i,s,r){wn.subVectors(s,t),ii.subVectors(i,t),Uo.subVectors(e,t);const a=wn.dot(wn),o=wn.dot(ii),l=wn.dot(Uo),c=ii.dot(ii),u=ii.dot(Uo),f=a*c-o*o;if(f===0)return r.set(0,0,0),null;const h=1/f,d=(c*l-o*u)*h,p=(a*u-o*l)*h;return r.set(1-d-p,p,d)}static containsPoint(e,t,i,s){return this.getBarycoord(e,t,i,s,si)===null?!1:si.x>=0&&si.y>=0&&si.x+si.y<=1}static getInterpolation(e,t,i,s,r,a,o,l){return this.getBarycoord(e,t,i,s,si)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(r,si.x),l.addScaledVector(a,si.y),l.addScaledVector(o,si.z),l)}static getInterpolatedAttribute(e,t,i,s,r,a){return ko.setScalar(0),Bo.setScalar(0),Ho.setScalar(0),ko.fromBufferAttribute(e,t),Bo.fromBufferAttribute(e,i),Ho.fromBufferAttribute(e,s),a.setScalar(0),a.addScaledVector(ko,r.x),a.addScaledVector(Bo,r.y),a.addScaledVector(Ho,r.z),a}static isFrontFacing(e,t,i,s){return wn.subVectors(i,t),ii.subVectors(e,t),wn.cross(ii).dot(s)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,s){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[s]),this}setFromAttributeAndIndices(e,t,i,s){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,s),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return wn.subVectors(this.c,this.b),ii.subVectors(this.a,this.b),wn.cross(ii).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Mn.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return Mn.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,i,s,r){return Mn.getInterpolation(e,this.a,this.b,this.c,t,i,s,r)}containsPoint(e){return Mn.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Mn.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,s=this.b,r=this.c;let a,o;_s.subVectors(s,i),bs.subVectors(r,i),Oo.subVectors(e,i);const l=_s.dot(Oo),c=bs.dot(Oo);if(l<=0&&c<=0)return t.copy(i);Fo.subVectors(e,s);const u=_s.dot(Fo),f=bs.dot(Fo);if(u>=0&&f<=u)return t.copy(s);const h=l*f-u*c;if(h<=0&&l>=0&&u<=0)return a=l/(l-u),t.copy(i).addScaledVector(_s,a);No.subVectors(e,r);const d=_s.dot(No),p=bs.dot(No);if(p>=0&&d<=p)return t.copy(r);const x=d*c-l*p;if(x<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(i).addScaledVector(bs,o);const m=u*p-d*f;if(m<=0&&f-u>=0&&d-p>=0)return Ru.subVectors(r,s),o=(f-u)/(f-u+(d-p)),t.copy(s).addScaledVector(Ru,o);const g=1/(m+x+h);return a=x*g,o=h*g,t.copy(i).addScaledVector(_s,a).addScaledVector(bs,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}class Oi{constructor(e=new B(1/0,1/0,1/0),t=new B(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,i=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Cn),Cn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(sr),Zr.subVectors(this.max,sr),Ss.subVectors(e.a,sr),Ms.subVectors(e.b,sr),Es.subVectors(e.c,sr),Mi.subVectors(Ms,Ss),Ei.subVectors(Es,Ms),Gi.subVectors(Ss,Es);let t=[0,-Mi.z,Mi.y,0,-Ei.z,Ei.y,0,-Gi.z,Gi.y,Mi.z,0,-Mi.x,Ei.z,0,-Ei.x,Gi.z,0,-Gi.x,-Mi.y,Mi.x,0,-Ei.y,Ei.x,0,-Gi.y,Gi.x,0];return!zo(t,Ss,Ms,Es,Zr)||(t=[1,0,0,0,1,0,0,0,1],!zo(t,Ss,Ms,Es,Zr))?!1:(Kr.crossVectors(Mi,Ei),t=[Kr.x,Kr.y,Kr.z],zo(t,Ss,Ms,Es,Zr))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Cn).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Cn).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(ri[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),ri[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),ri[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),ri[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),ri[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),ri[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),ri[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),ri[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(ri),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}}const ri=[new B,new B,new B,new B,new B,new B,new B,new B],Cn=new B,$r=new Oi,Ss=new B,Ms=new B,Es=new B,Mi=new B,Ei=new B,Gi=new B,sr=new B,Zr=new B,Kr=new B,Vi=new B;function zo(n,e,t,i,s){for(let r=0,a=n.length-3;r<=a;r+=3){Vi.fromArray(n,r);const o=s.x*Math.abs(Vi.x)+s.y*Math.abs(Vi.y)+s.z*Math.abs(Vi.z),l=e.dot(Vi),c=t.dot(Vi),u=i.dot(Vi);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))>o)return!1}return!0}const It=new B,Jr=new Ee;let qm=0;class Dn extends zi{constructor(e,t,i=!1){if(super(),Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:qm++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=cc,this.updateRanges=[],this.gpuType=Ln,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let s=0,r=this.itemSize;sthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;rr.subVectors(e,this.center);const t=rr.lengthSq();if(t>this.radius*this.radius){const i=Math.sqrt(t),s=(i-this.radius)*.5;this.center.addScaledVector(rr,s/i),this.radius+=s}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Go.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(rr.copy(e.center).add(Go)),this.expandByPoint(rr.copy(e.center).sub(Go))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}}let Zm=0;const bn=new Tt,Vo=new sn,Ts=new B,pn=new Oi,ar=new Oi,Ht=new B;class wt extends zi{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Zm++}),this.uuid=fi(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={},this._transformed=!1}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(wm(e)?Qf:jf)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){const t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const r=new $e().getNormalMatrix(e);i.applyNormalMatrix(r),i.needsUpdate=!0}const s=this.attributes.tangent;return s!==void 0&&(s.transformDirection(e),s.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this._transformed=!0,this}applyQuaternion(e){return bn.makeRotationFromQuaternion(e),this.applyMatrix4(bn),this}rotateX(e){return bn.makeRotationX(e),this.applyMatrix4(bn),this}rotateY(e){return bn.makeRotationY(e),this.applyMatrix4(bn),this}rotateZ(e){return bn.makeRotationZ(e),this.applyMatrix4(bn),this}translate(e,t,i){return bn.makeTranslation(e,t,i),this.applyMatrix4(bn),this}scale(e,t,i){return bn.makeScale(e,t,i),this.applyMatrix4(bn),this}lookAt(e){return Vo.lookAt(e),Vo.updateMatrix(),this.applyMatrix4(Vo.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Ts).negate(),this.translate(Ts.x,Ts.y,Ts.z),this}setFromPoints(e){const t=this.getAttribute("position");if(t===void 0){const i=[];for(let s=0,r=e.length;st.count&&We("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Oi);const e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){st("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new B(-1/0,-1/0,-1/0),new B(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,s=t.length;i0&&(e.userData=this.userData),this.parameters!==void 0&&this._transformed!==!0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};const t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const l in i){const c=i[l];e.data.attributes[l]=c.toJSON(e.data)}const s={};let r=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],u=[];for(let f=0,h=c.length;f0&&(s[l]=u,r=!0)}r&&(e.data.morphAttributes=s,e.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;i!==null&&this.setIndex(i.clone());const s=e.attributes;for(const c in s){const u=s[c];this.setAttribute(c,u.clone(t))}const r=e.morphAttributes;for(const c in r){const u=[],f=r[c];for(let h=0,d=f.length;h0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const t in e){const i=e[t];if(i===void 0){We(`Material: parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){We(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(i):s&&s.isVector2&&i&&i.isVector2||s&&s.isEuler&&i&&i.isEuler||s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==ks&&(i.blending=this.blending),this.side!==Ni&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Sl&&(i.blendSrc=this.blendSrc),this.blendDst!==Ml&&(i.blendDst=this.blendDst),this.blendEquation!==$i&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==Gs&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==xu&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==ms&&(i.stencilFail=this.stencilFail),this.stencilZFail!==ms&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==ms&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.allowOverride===!1&&(i.allowOverride=!1),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function s(r){const a=[];for(const o in r){const l=r[o];delete l.metadata,a.push(l)}return a}if(t){const r=s(e.textures),a=s(e.images);r.length>0&&(i.textures=r),a.length>0&&(i.images=a)}return i}fromJSON(e,t){if(e.uuid!==void 0&&(this.uuid=e.uuid),e.name!==void 0&&(this.name=e.name),e.color!==void 0&&this.color!==void 0&&this.color.setHex(e.color),e.roughness!==void 0&&(this.roughness=e.roughness),e.metalness!==void 0&&(this.metalness=e.metalness),e.sheen!==void 0&&(this.sheen=e.sheen),e.sheenColor!==void 0&&(this.sheenColor=new et().setHex(e.sheenColor)),e.sheenRoughness!==void 0&&(this.sheenRoughness=e.sheenRoughness),e.emissive!==void 0&&this.emissive!==void 0&&this.emissive.setHex(e.emissive),e.specular!==void 0&&this.specular!==void 0&&this.specular.setHex(e.specular),e.specularIntensity!==void 0&&(this.specularIntensity=e.specularIntensity),e.specularColor!==void 0&&this.specularColor!==void 0&&this.specularColor.setHex(e.specularColor),e.shininess!==void 0&&(this.shininess=e.shininess),e.clearcoat!==void 0&&(this.clearcoat=e.clearcoat),e.clearcoatRoughness!==void 0&&(this.clearcoatRoughness=e.clearcoatRoughness),e.dispersion!==void 0&&(this.dispersion=e.dispersion),e.iridescence!==void 0&&(this.iridescence=e.iridescence),e.iridescenceIOR!==void 0&&(this.iridescenceIOR=e.iridescenceIOR),e.iridescenceThicknessRange!==void 0&&(this.iridescenceThicknessRange=e.iridescenceThicknessRange),e.transmission!==void 0&&(this.transmission=e.transmission),e.thickness!==void 0&&(this.thickness=e.thickness),e.attenuationDistance!==void 0&&(this.attenuationDistance=e.attenuationDistance),e.attenuationColor!==void 0&&this.attenuationColor!==void 0&&this.attenuationColor.setHex(e.attenuationColor),e.anisotropy!==void 0&&(this.anisotropy=e.anisotropy),e.anisotropyRotation!==void 0&&(this.anisotropyRotation=e.anisotropyRotation),e.fog!==void 0&&(this.fog=e.fog),e.flatShading!==void 0&&(this.flatShading=e.flatShading),e.blending!==void 0&&(this.blending=e.blending),e.combine!==void 0&&(this.combine=e.combine),e.side!==void 0&&(this.side=e.side),e.shadowSide!==void 0&&(this.shadowSide=e.shadowSide),e.opacity!==void 0&&(this.opacity=e.opacity),e.transparent!==void 0&&(this.transparent=e.transparent),e.alphaTest!==void 0&&(this.alphaTest=e.alphaTest),e.alphaHash!==void 0&&(this.alphaHash=e.alphaHash),e.depthFunc!==void 0&&(this.depthFunc=e.depthFunc),e.depthTest!==void 0&&(this.depthTest=e.depthTest),e.depthWrite!==void 0&&(this.depthWrite=e.depthWrite),e.colorWrite!==void 0&&(this.colorWrite=e.colorWrite),e.blendSrc!==void 0&&(this.blendSrc=e.blendSrc),e.blendDst!==void 0&&(this.blendDst=e.blendDst),e.blendEquation!==void 0&&(this.blendEquation=e.blendEquation),e.blendSrcAlpha!==void 0&&(this.blendSrcAlpha=e.blendSrcAlpha),e.blendDstAlpha!==void 0&&(this.blendDstAlpha=e.blendDstAlpha),e.blendEquationAlpha!==void 0&&(this.blendEquationAlpha=e.blendEquationAlpha),e.blendColor!==void 0&&this.blendColor!==void 0&&this.blendColor.setHex(e.blendColor),e.blendAlpha!==void 0&&(this.blendAlpha=e.blendAlpha),e.stencilWriteMask!==void 0&&(this.stencilWriteMask=e.stencilWriteMask),e.stencilFunc!==void 0&&(this.stencilFunc=e.stencilFunc),e.stencilRef!==void 0&&(this.stencilRef=e.stencilRef),e.stencilFuncMask!==void 0&&(this.stencilFuncMask=e.stencilFuncMask),e.stencilFail!==void 0&&(this.stencilFail=e.stencilFail),e.stencilZFail!==void 0&&(this.stencilZFail=e.stencilZFail),e.stencilZPass!==void 0&&(this.stencilZPass=e.stencilZPass),e.stencilWrite!==void 0&&(this.stencilWrite=e.stencilWrite),e.wireframe!==void 0&&(this.wireframe=e.wireframe),e.wireframeLinewidth!==void 0&&(this.wireframeLinewidth=e.wireframeLinewidth),e.wireframeLinecap!==void 0&&(this.wireframeLinecap=e.wireframeLinecap),e.wireframeLinejoin!==void 0&&(this.wireframeLinejoin=e.wireframeLinejoin),e.rotation!==void 0&&(this.rotation=e.rotation),e.linewidth!==void 0&&(this.linewidth=e.linewidth),e.dashSize!==void 0&&(this.dashSize=e.dashSize),e.gapSize!==void 0&&(this.gapSize=e.gapSize),e.scale!==void 0&&(this.scale=e.scale),e.polygonOffset!==void 0&&(this.polygonOffset=e.polygonOffset),e.polygonOffsetFactor!==void 0&&(this.polygonOffsetFactor=e.polygonOffsetFactor),e.polygonOffsetUnits!==void 0&&(this.polygonOffsetUnits=e.polygonOffsetUnits),e.dithering!==void 0&&(this.dithering=e.dithering),e.alphaToCoverage!==void 0&&(this.alphaToCoverage=e.alphaToCoverage),e.premultipliedAlpha!==void 0&&(this.premultipliedAlpha=e.premultipliedAlpha),e.forceSinglePass!==void 0&&(this.forceSinglePass=e.forceSinglePass),e.allowOverride!==void 0&&(this.allowOverride=e.allowOverride),e.visible!==void 0&&(this.visible=e.visible),e.toneMapped!==void 0&&(this.toneMapped=e.toneMapped),e.userData!==void 0&&(this.userData=e.userData),e.vertexColors!==void 0&&(typeof e.vertexColors=="number"?this.vertexColors=e.vertexColors>0:this.vertexColors=e.vertexColors),e.size!==void 0&&(this.size=e.size),e.sizeAttenuation!==void 0&&(this.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(this.map=t[e.map]||null),e.matcap!==void 0&&(this.matcap=t[e.matcap]||null),e.alphaMap!==void 0&&(this.alphaMap=t[e.alphaMap]||null),e.bumpMap!==void 0&&(this.bumpMap=t[e.bumpMap]||null),e.bumpScale!==void 0&&(this.bumpScale=e.bumpScale),e.normalMap!==void 0&&(this.normalMap=t[e.normalMap]||null),e.normalMapType!==void 0&&(this.normalMapType=e.normalMapType),e.normalScale!==void 0){let i=e.normalScale;Array.isArray(i)===!1&&(i=[i,i]),this.normalScale=new Ee().fromArray(i)}return e.displacementMap!==void 0&&(this.displacementMap=t[e.displacementMap]||null),e.displacementScale!==void 0&&(this.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(this.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(this.roughnessMap=t[e.roughnessMap]||null),e.metalnessMap!==void 0&&(this.metalnessMap=t[e.metalnessMap]||null),e.emissiveMap!==void 0&&(this.emissiveMap=t[e.emissiveMap]||null),e.emissiveIntensity!==void 0&&(this.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(this.specularMap=t[e.specularMap]||null),e.specularIntensityMap!==void 0&&(this.specularIntensityMap=t[e.specularIntensityMap]||null),e.specularColorMap!==void 0&&(this.specularColorMap=t[e.specularColorMap]||null),e.envMap!==void 0&&(this.envMap=t[e.envMap]||null),e.envMapRotation!==void 0&&this.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(this.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(this.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(this.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(this.lightMap=t[e.lightMap]||null),e.lightMapIntensity!==void 0&&(this.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(this.aoMap=t[e.aoMap]||null),e.aoMapIntensity!==void 0&&(this.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(this.gradientMap=t[e.gradientMap]||null),e.clearcoatMap!==void 0&&(this.clearcoatMap=t[e.clearcoatMap]||null),e.clearcoatRoughnessMap!==void 0&&(this.clearcoatRoughnessMap=t[e.clearcoatRoughnessMap]||null),e.clearcoatNormalMap!==void 0&&(this.clearcoatNormalMap=t[e.clearcoatNormalMap]||null),e.clearcoatNormalScale!==void 0&&(this.clearcoatNormalScale=new Ee().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(this.iridescenceMap=t[e.iridescenceMap]||null),e.iridescenceThicknessMap!==void 0&&(this.iridescenceThicknessMap=t[e.iridescenceThicknessMap]||null),e.transmissionMap!==void 0&&(this.transmissionMap=t[e.transmissionMap]||null),e.thicknessMap!==void 0&&(this.thicknessMap=t[e.thicknessMap]||null),e.anisotropyMap!==void 0&&(this.anisotropyMap=t[e.anisotropyMap]||null),e.sheenColorMap!==void 0&&(this.sheenColorMap=t[e.sheenColorMap]||null),e.sheenRoughnessMap!==void 0&&(this.sheenRoughnessMap=t[e.sheenRoughnessMap]||null),this}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(t!==null){const s=t.length;i=new Array(s);for(let r=0;r!==s;++r)i[r]=t[r].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}}class fc extends js{constructor(e){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new et(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.rotation=e.rotation,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}}let As;const or=new B,ws=new B,Cs=new B,Rs=new Ee,lr=new Ee,ed=new Tt,jr=new B,cr=new B,Qr=new B,Pu=new Ee,Wo=new Ee,Lu=new Ee;class Du extends sn{constructor(e=new fc){if(super(),this.isSprite=!0,this.type="Sprite",As===void 0){As=new wt;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),i=new Km(t,5);As.setIndex([0,1,2,0,2,3]),As.setAttribute("position",new Ja(i,3,0,!1)),As.setAttribute("uv",new Ja(i,2,3,!1))}this.geometry=As,this.material=e,this.center=new Ee(.5,.5),this.count=1}raycast(e,t){e.camera===null&&st('Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),ws.setFromMatrixScale(this.matrixWorld),ed.copy(e.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(e.camera.matrixWorldInverse,this.matrixWorld),Cs.setFromMatrixPosition(this.modelViewMatrix),e.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&ws.multiplyScalar(-Cs.z);const i=this.material.rotation;let s,r;i!==0&&(r=Math.cos(i),s=Math.sin(i));const a=this.center;ea(jr.set(-.5,-.5,0),Cs,a,ws,s,r),ea(cr.set(.5,-.5,0),Cs,a,ws,s,r),ea(Qr.set(.5,.5,0),Cs,a,ws,s,r),Pu.set(0,0),Wo.set(1,0),Lu.set(1,1);let o=e.ray.intersectTriangle(jr,cr,Qr,!1,or);if(o===null&&(ea(cr.set(-.5,.5,0),Cs,a,ws,s,r),Wo.set(0,1),o=e.ray.intersectTriangle(jr,Qr,cr,!1,or),o===null))return;const l=e.ray.origin.distanceTo(or);le.far||t.push({distance:l,point:or.clone(),uv:Mn.getInterpolation(or,jr,cr,Qr,Pu,Wo,Lu,new Ee),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}}function ea(n,e,t,i,s,r){Rs.subVectors(n,t).addScalar(.5).multiply(i),s!==void 0?(lr.x=r*Rs.x-s*Rs.y,lr.y=s*Rs.x+r*Rs.y):lr.copy(Rs),n.copy(e),n.x+=lr.x,n.y+=lr.y,n.applyMatrix4(ed)}const ai=new B,Xo=new B,ta=new B,Ti=new B,Yo=new B,na=new B,qo=new B;class kc{constructor(e=new B,t=new B(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,ai)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=ai.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(ai.copy(this.origin).addScaledVector(this.direction,t),ai.distanceToSquared(e))}distanceSqToSegment(e,t,i,s){Xo.copy(e).add(t).multiplyScalar(.5),ta.copy(t).sub(e).normalize(),Ti.copy(this.origin).sub(Xo);const r=e.distanceTo(t)*.5,a=-this.direction.dot(ta),o=Ti.dot(this.direction),l=-Ti.dot(ta),c=Ti.lengthSq(),u=Math.abs(1-a*a);let f,h,d,p;if(u>0)if(f=a*l-o,h=a*o-l,p=r*u,f>=0)if(h>=-p)if(h<=p){const x=1/u;f*=x,h*=x,d=f*(f+a*h+2*o)+h*(a*f+h+2*l)+c}else h=r,f=Math.max(0,-(a*h+o)),d=-f*f+h*(h+2*l)+c;else h=-r,f=Math.max(0,-(a*h+o)),d=-f*f+h*(h+2*l)+c;else h<=-p?(f=Math.max(0,-(-a*r+o)),h=f>0?-r:Math.min(Math.max(-r,-l),r),d=-f*f+h*(h+2*l)+c):h<=p?(f=0,h=Math.min(Math.max(-r,-l),r),d=h*(h+2*l)+c):(f=Math.max(0,-(a*r+o)),h=f>0?r:Math.min(Math.max(-r,-l),r),d=-f*f+h*(h+2*l)+c);else h=a>0?-r:r,f=Math.max(0,-(a*h+o)),d=-f*f+h*(h+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,f),s&&s.copy(Xo).addScaledVector(ta,h),d}intersectSphere(e,t){ai.subVectors(e.center,this.origin);const i=ai.dot(this.direction),s=ai.dot(ai)-i*i,r=e.radius*e.radius;if(s>r)return null;const a=Math.sqrt(r-s),o=i-a,l=i+a;return l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,s,r,a,o,l;const c=1/this.direction.x,u=1/this.direction.y,f=1/this.direction.z,h=this.origin;return c>=0?(i=(e.min.x-h.x)*c,s=(e.max.x-h.x)*c):(i=(e.max.x-h.x)*c,s=(e.min.x-h.x)*c),u>=0?(r=(e.min.y-h.y)*u,a=(e.max.y-h.y)*u):(r=(e.max.y-h.y)*u,a=(e.min.y-h.y)*u),i>a||r>s||((r>i||isNaN(i))&&(i=r),(a=0?(o=(e.min.z-h.z)*f,l=(e.max.z-h.z)*f):(o=(e.max.z-h.z)*f,l=(e.min.z-h.z)*f),i>l||o>s)||((o>i||i!==i)&&(i=o),(l=0?i:s,t)}intersectsBox(e){return this.intersectBox(e,ai)!==null}intersectTriangle(e,t,i,s,r){Yo.subVectors(t,e),na.subVectors(i,e),qo.crossVectors(Yo,na);let a=this.direction.dot(qo),o;if(a>0){if(s)return null;o=1}else if(a<0)o=-1,a=-a;else return null;Ti.subVectors(this.origin,e);const l=o*this.direction.dot(na.crossVectors(Ti,na));if(l<0)return null;const c=o*this.direction.dot(Yo.cross(Ti));if(c<0||l+c>a)return null;const u=-o*Ti.dot(qo);return u<0?null:this.at(u/a,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Vn extends js{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new et(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new ns,this.combine=Df,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const Iu=new Tt,Wi=new kc,ia=new go,Uu=new B,sa=new B,ra=new B,aa=new B,$o=new B,oa=new B,Ou=new B,la=new B;class Gt extends sn{constructor(e=new wt,t=new Vn){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,i=Object.keys(t);if(i.length>0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;r(e.far-e.near)**2))&&(Iu.copy(r).invert(),Wi.copy(e.ray).applyMatrix4(Iu),!(i.boundingBox!==null&&Wi.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,Wi)))}_computeIntersections(e,t,i){let s;const r=this.geometry,a=this.material,o=r.index,l=r.attributes.position,c=r.attributes.uv,u=r.attributes.uv1,f=r.attributes.normal,h=r.groups,d=r.drawRange;if(o!==null)if(Array.isArray(a))for(let p=0,x=h.length;pt.far?null:{distance:c,point:la.clone(),object:n}}function ca(n,e,t,i,s,r,a,o,l,c){n.getVertexPosition(o,sa),n.getVertexPosition(l,ra),n.getVertexPosition(c,aa);const u=jm(n,e,t,i,sa,ra,aa,Ou);if(u){const f=new B;Mn.getBarycoord(Ou,sa,ra,aa,f),s&&(u.uv=Mn.getInterpolatedAttribute(s,o,l,c,f,new Ee)),r&&(u.uv1=Mn.getInterpolatedAttribute(r,o,l,c,f,new Ee)),a&&(u.normal=Mn.getInterpolatedAttribute(a,o,l,c,f,new B),u.normal.dot(i.direction)>0&&u.normal.multiplyScalar(-1));const h={a:o,b:l,c,normal:new B,materialIndex:0};Mn.getNormal(sa,ra,aa,h.normal),u.face=h,u.barycoord=f}return u}class td extends Qt{constructor(e=null,t=1,i=1,s,r,a,o,l,c=Ft,u=Ft,f,h){super(null,a,o,l,c,u,s,r,f,h),this.isDataTexture=!0,this.image={data:e,width:t,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}const Zo=new B,Qm=new B,eg=new $e;class Ri{constructor(e=new B(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,s){return this.normal.set(e,t,i),this.constant=s,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,i){const s=Zo.subVectors(i,t).cross(Qm.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(s,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t,i=!0){const s=e.delta(Zo),r=this.normal.dot(s);if(r===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;const a=-(e.start.dot(this.normal)+this.constant)/r;return i===!0&&(a<0||a>1)?null:t.copy(e.start).addScaledVector(s,a)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||eg.getNormalMatrix(e),s=this.coplanarPoint(Zo).applyMatrix4(e),r=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Xi=new go,tg=new Ee(.5,.5),ua=new B;class nd{constructor(e=new Ri,t=new Ri,i=new Ri,s=new Ri,r=new Ri,a=new Ri){this.planes=[e,t,i,s,r,a]}set(e,t,i,s,r,a){const o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(s),o[4].copy(r),o[5].copy(a),this}copy(e){const t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e,t=$n,i=!1){const s=this.planes,r=e.elements,a=r[0],o=r[1],l=r[2],c=r[3],u=r[4],f=r[5],h=r[6],d=r[7],p=r[8],x=r[9],m=r[10],g=r[11],M=r[12],E=r[13],_=r[14],T=r[15];if(s[0].setComponents(c-a,d-u,g-p,T-M).normalize(),s[1].setComponents(c+a,d+u,g+p,T+M).normalize(),s[2].setComponents(c+o,d+f,g+x,T+E).normalize(),s[3].setComponents(c-o,d-f,g-x,T-E).normalize(),i)s[4].setComponents(l,h,m,_).normalize(),s[5].setComponents(c-l,d-h,g-m,T-_).normalize();else if(s[4].setComponents(c-l,d-h,g-m,T-_).normalize(),t===$n)s[5].setComponents(c+l,d+h,g+m,T+_).normalize();else if(t===$a)s[5].setComponents(l,h,m,_).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),Xi.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),Xi.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(Xi)}intersectsSprite(e){Xi.center.set(0,0,0);const t=tg.distanceTo(e.center);return Xi.radius=.7071067811865476+t,Xi.applyMatrix4(e.matrixWorld),this.intersectsSphere(Xi)}intersectsSphere(e){const t=this.planes,i=e.center,s=-e.radius;for(let r=0;r<6;r++)if(t[r].distanceToPoint(i)0?e.max.x:e.min.x,ua.y=s.normal.y>0?e.max.y:e.min.y,ua.z=s.normal.z>0?e.max.z:e.min.z,s.distanceToPoint(ua)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class Ns extends js{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new et(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}}const ja=new B,Qa=new B,Fu=new Tt,ur=new kc,ha=new go,Ko=new B,Nu=new B;let id=class extends sn{constructor(e=new wt,t=new Ns){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){const e=this.geometry;if(e.index===null){const t=e.attributes.position,i=[0];for(let s=1,r=t.count;s0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;ri)return;Ko.applyMatrix4(n.matrixWorld);const c=e.ray.origin.distanceTo(Ko);if(!(ce.far))return{distance:c,point:Nu.clone().applyMatrix4(n.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:n}}const ku=new B,Bu=new B;class da extends id{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const e=this.geometry;if(e.index===null){const t=e.attributes.position,i=[];for(let s=0,r=t.count;s0?1:-1,u.push(D.x,D.y,D.z),f.push(ee/S),f.push(1-ae/v),k+=1}}for(let ae=0;ae0)l=s-1;else{l=s;break}if(s=l,i[s]===a)return s/(r-1);const u=i[s],h=i[s+1]-u,d=(a-u)/h;return(s+d)/(r-1)}getTangent(e,t){let s=e-1e-4,r=e+1e-4;s<0&&(s=0),r>1&&(r=1);const a=this.getPoint(s),o=this.getPoint(r),l=t||(a.isVector2?new Ee:new B);return l.copy(o).sub(a).normalize(),l}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t=!1){const i=new B,s=[],r=[],a=[],o=new B,l=new Tt;for(let d=0;d<=e;d++){const p=d/e;s[d]=this.getTangentAt(p,new B)}r[0]=new B,a[0]=new B;let c=Number.MAX_VALUE;const u=Math.abs(s[0].x),f=Math.abs(s[0].y),h=Math.abs(s[0].z);u<=c&&(c=u,i.set(1,0,0)),f<=c&&(c=f,i.set(0,1,0)),h<=c&&i.set(0,0,1),o.crossVectors(s[0],i).normalize(),r[0].crossVectors(s[0],o),a[0].crossVectors(s[0],r[0]);for(let d=1;d<=e;d++){if(r[d]=r[d-1].clone(),a[d]=a[d-1].clone(),o.crossVectors(s[d-1],s[d]),o.length()>Number.EPSILON){o.normalize();const p=Math.acos(Qe(s[d-1].dot(s[d]),-1,1));r[d].applyMatrix4(l.makeRotationAxis(o,p))}a[d].crossVectors(s[d],r[d])}if(t===!0){let d=Math.acos(Qe(r[0].dot(r[e]),-1,1));d/=e,s[0].dot(o.crossVectors(r[0],r[e]))>0&&(d=-d);for(let p=1;p<=e;p++)r[p].applyMatrix4(l.makeRotationAxis(s[p],d*p)),a[p].crossVectors(s[p],r[p])}return{tangents:s,normals:r,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class Bc extends ei{constructor(e=0,t=0,i=1,s=1,r=0,a=Math.PI*2,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=s,this.aStartAngle=r,this.aEndAngle=a,this.aClockwise=o,this.aRotation=l}getPoint(e,t=new Ee){const i=t,s=Math.PI*2;let r=this.aEndAngle-this.aStartAngle;const a=Math.abs(r)s;)r-=s;r0?0:(Math.floor(Math.abs(o)/r)+1)*r:l===0&&o===r-1&&(o=r-2,l=1);let c,u;this.closed||o>0?c=s[(o-1)%r]:(zu.subVectors(s[0],s[1]).add(s[0]),c=zu);const f=s[o%r],h=s[(o+1)%r];if(this.closed||o+2s.length-2?s.length-1:a+1],f=s[a>s.length-3?s.length-1:a+2];return i.set(Gu(o,l.x,c.x,u.x,f.x),Gu(o,l.y,c.y,u.y,f.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t=i){const a=s[r]-i,o=this.curves[r],l=o.getLength(),c=l===0?0:1-a/l;return o.getPointAt(c,t)}r++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,s=this.curves.length;i1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t0){const f=c.getPoint(0);f.equals(this.currentPoint)||this.lineTo(f.x,f.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}};class ud extends Wu{constructor(e){super(e),this.uuid=fi(),this.type="Shape",this.holes=[]}getPointsHoles(e){const t=[];for(let i=0,s=this.holes.length;i80*t){o=n[0],l=n[1];let u=o,f=l;for(let h=t;hu&&(u=d),p>f&&(f=p)}c=Math.max(u-o,f-l),c=c!==0?32767/c:0}return wr(r,a,t,o,l,c,0),a}function hd(n,e,t,i,s){let r;if(s===Dg(n,e,t,i)>0)for(let a=e;a=e;a-=i)r=Xu(a/i|0,n[a],n[a+1],r);return r&&Xs(r,r.next)&&(Rr(r),r=r.next),r}function is(n,e){if(!n)return n;e||(e=n);let t=n,i;do if(i=!1,!t.steiner&&(Xs(t,t.next)||Et(t.prev,t,t.next)===0)){if(Rr(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function wr(n,e,t,i,s,r,a){if(!n)return;!a&&r&&Ag(n,i,s,r);let o=n;for(;n.prev!==n.next;){const l=n.prev,c=n.next;if(r?vg(n,i,s,r):xg(n)){e.push(l.i,n.i,c.i),Rr(n),n=c.next,o=c.next;continue}if(n=c,n===o){a?a===1?(n=yg(is(n),e),wr(n,e,t,i,s,r,2)):a===2&&_g(n,e,t,i,s,r):wr(is(n),e,t,i,s,r,1);break}}}function xg(n){const e=n.prev,t=n,i=n.next;if(Et(e,t,i)>=0)return!1;const s=e.x,r=t.x,a=i.x,o=e.y,l=t.y,c=i.y,u=Math.min(s,r,a),f=Math.min(o,l,c),h=Math.max(s,r,a),d=Math.max(o,l,c);let p=i.next;for(;p!==e;){if(p.x>=u&&p.x<=h&&p.y>=f&&p.y<=d&&xr(s,o,r,l,a,c,p.x,p.y)&&Et(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function vg(n,e,t,i){const s=n.prev,r=n,a=n.next;if(Et(s,r,a)>=0)return!1;const o=s.x,l=r.x,c=a.x,u=s.y,f=r.y,h=a.y,d=Math.min(o,l,c),p=Math.min(u,f,h),x=Math.max(o,l,c),m=Math.max(u,f,h),g=dc(d,p,e,t,i),M=dc(x,m,e,t,i);let E=n.prevZ,_=n.nextZ;for(;E&&E.z>=g&&_&&_.z<=M;){if(E.x>=d&&E.x<=x&&E.y>=p&&E.y<=m&&E!==s&&E!==a&&xr(o,u,l,f,c,h,E.x,E.y)&&Et(E.prev,E,E.next)>=0||(E=E.prevZ,_.x>=d&&_.x<=x&&_.y>=p&&_.y<=m&&_!==s&&_!==a&&xr(o,u,l,f,c,h,_.x,_.y)&&Et(_.prev,_,_.next)>=0))return!1;_=_.nextZ}for(;E&&E.z>=g;){if(E.x>=d&&E.x<=x&&E.y>=p&&E.y<=m&&E!==s&&E!==a&&xr(o,u,l,f,c,h,E.x,E.y)&&Et(E.prev,E,E.next)>=0)return!1;E=E.prevZ}for(;_&&_.z<=M;){if(_.x>=d&&_.x<=x&&_.y>=p&&_.y<=m&&_!==s&&_!==a&&xr(o,u,l,f,c,h,_.x,_.y)&&Et(_.prev,_,_.next)>=0)return!1;_=_.nextZ}return!0}function yg(n,e){let t=n;do{const i=t.prev,s=t.next.next;!Xs(i,s)&&dd(i,t,t.next,s)&&Cr(i,s)&&Cr(s,i)&&(e.push(i.i,t.i,s.i),Rr(t),Rr(t.next),t=n=s),t=t.next}while(t!==n);return is(t)}function _g(n,e,t,i,s,r){let a=n;do{let o=a.next.next;for(;o!==a.prev;){if(a.i!==o.i&&Rg(a,o)){let l=pd(a,o);a=is(a,a.next),l=is(l,l.next),wr(a,e,t,i,s,r,0),wr(l,e,t,i,s,r,0);return}o=o.next}a=a.next}while(a!==n)}function bg(n,e,t,i){const s=[];for(let r=0,a=e.length;r=t.next.y&&t.next.y!==t.y){const f=t.x+(s-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(f<=i&&f>r&&(r=f,a=t.x=t.x&&t.x>=l&&i!==t.x&&fd(sa.x||t.x===a.x&&Tg(a,t)))&&(a=t,u=f)}t=t.next}while(t!==o);return a}function Tg(n,e){return Et(n.prev,n,e.prev)<0&&Et(e.next,n,n.next)<0}function Ag(n,e,t,i){let s=n;do s.z===0&&(s.z=dc(s.x,s.y,e,t,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==n);s.prevZ.nextZ=null,s.prevZ=null,wg(s)}function wg(n){let e,t=1;do{let i=n,s;n=null;let r=null;for(e=0;i;){e++;let a=i,o=0;for(let c=0;c0||l>0&&a;)o!==0&&(l===0||!a||i.z<=a.z)?(s=i,i=i.nextZ,o--):(s=a,a=a.nextZ,l--),r?r.nextZ=s:n=s,s.prevZ=r,r=s;i=a}r.nextZ=null,t*=2}while(e>1);return n}function dc(n,e,t,i,s){return n=(n-t)*s|0,e=(e-i)*s|0,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,n|e<<1}function Cg(n){let e=n,t=n;do(e.x=(n-a)*(r-o)&&(n-a)*(i-o)>=(t-a)*(e-o)&&(t-a)*(r-o)>=(s-a)*(i-o)}function xr(n,e,t,i,s,r,a,o){return!(n===a&&e===o)&&fd(n,e,t,i,s,r,a,o)}function Rg(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!Pg(n,e)&&(Cr(n,e)&&Cr(e,n)&&Lg(n,e)&&(Et(n.prev,n,e.prev)||Et(n,e.prev,e))||Xs(n,e)&&Et(n.prev,n,n.next)>0&&Et(e.prev,e,e.next)>0)}function Et(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function Xs(n,e){return n.x===e.x&&n.y===e.y}function dd(n,e,t,i){const s=ga(Et(n,e,t)),r=ga(Et(n,e,i)),a=ga(Et(t,i,n)),o=ga(Et(t,i,e));return!!(s!==r&&a!==o||s===0&&ma(n,t,e)||r===0&&ma(n,i,e)||a===0&&ma(t,n,i)||o===0&&ma(t,e,i))}function ma(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function ga(n){return n>0?1:n<0?-1:0}function Pg(n,e){let t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&dd(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}function Cr(n,e){return Et(n.prev,n,n.next)<0?Et(n,e,n.next)>=0&&Et(n,n.prev,e)>=0:Et(n,e,n.prev)<0||Et(n,n.next,e)<0}function Lg(n,e){let t=n,i=!1;const s=(n.x+e.x)/2,r=(n.y+e.y)/2;do t.y>r!=t.next.y>r&&t.next.y!==t.y&&s<(t.next.x-t.x)*(r-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==n);return i}function pd(n,e){const t=pc(n.i,n.x,n.y),i=pc(e.i,e.x,e.y),s=n.next,r=e.prev;return n.next=e,e.prev=n,t.next=s,s.prev=t,i.next=t,t.prev=i,r.next=i,i.prev=r,i}function Xu(n,e,t,i){const s=pc(n,e,t);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function Rr(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function pc(n,e,t){return{i:n,x:e,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function Dg(n,e,t,i){let s=0;for(let r=e,a=t-i;r2&&n[e-1].equals(n[0])&&n.pop()}function qu(n,e){for(let t=0;t=0;--e)if(n[e]>=65535)return!0;return!1}function $a(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function L0(){const n=$a("canvas");return n.style.display="block",n}const vu={};function Ja(...n){const e="THREE."+n.shift();console.log(e,...n)}function Zd(n){const e=n[0];if(typeof e=="string"&&e.startsWith("TSL:")){const t=n[1];t&&t.isStackTrace?n[0]+=" "+t.getLocation():n[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return n}function Ke(...n){n=Zd(n);const e="THREE."+n.shift();{const t=n[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...n)}}function at(...n){n=Zd(n);const e="THREE."+n.shift();{const t=n[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...n)}}function Hs(...n){const e=n.join(" ");e in vu||(vu[e]=!0,Ke(...n))}function I0(n,e,t){return new Promise(function(i,s){function r(){switch(n.clientWaitSync(e,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:s();break;case n.TIMEOUT_EXPIRED:setTimeout(r,t);break;default:i()}}setTimeout(r,t)})}const P0={[Tl]:Cl,[wl]:Ll,[Rl]:Il,[Gs]:Dl,[Cl]:Tl,[Ll]:wl,[Il]:Rl,[Dl]:Gs};class Wi{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){const i=this._listeners;return i===void 0?!1:i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){const i=this._listeners;if(i===void 0)return;const s=i[e];if(s!==void 0){const r=s.indexOf(t);r!==-1&&s.splice(r,1)}}dispatchEvent(e){const t=this._listeners;if(t===void 0)return;const i=t[e.type];if(i!==void 0){e.target=this;const s=i.slice(0);for(let r=0,a=s.length;r>8&255]+Kt[n>>16&255]+Kt[n>>24&255]+"-"+Kt[e&255]+Kt[e>>8&255]+"-"+Kt[e>>16&15|64]+Kt[e>>24&255]+"-"+Kt[t&63|128]+Kt[t>>8&255]+"-"+Kt[t>>16&255]+Kt[t>>24&255]+Kt[i&255]+Kt[i>>8&255]+Kt[i>>16&255]+Kt[i>>24&255]).toLowerCase()}function Qe(n,e,t){return Math.max(e,Math.min(t,n))}function O0(n,e){return(n%e+e)%e}function Co(n,e,t){return(1-t)*n+t*e}function $n(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("THREE.MathUtils: Invalid component type.")}}function xt(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("THREE.MathUtils: Invalid component type.")}}const U0={DEG2RAD:Ba},lu=class lu{constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("THREE.Vector2: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("THREE.Vector2: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,i=this.y,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6],this.y=s[1]*t+s[4]*i+s[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Qe(this.x,e.x,t.x),this.y=Qe(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Qe(this.x,e,t),this.y=Qe(this.y,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Qe(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Qe(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const i=Math.cos(t),s=Math.sin(t),r=this.x-e.x,a=this.y-e.y;return this.x=r*i-a*s+e.x,this.y=r*s+a*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}};lu.prototype.isVector2=!0;let Me=lu;class zi{constructor(e=0,t=0,i=0,s=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=s}static slerpFlat(e,t,i,s,r,a,o){let l=i[s+0],c=i[s+1],u=i[s+2],d=i[s+3],h=r[a+0],f=r[a+1],m=r[a+2],_=r[a+3];if(d!==_||l!==h||c!==f||u!==m){let p=l*h+c*f+u*m+d*_;p<0&&(h=-h,f=-f,m=-m,_=-_,p=-p);let g=1-o;if(p<.9995){const b=Math.acos(p),A=Math.sin(b);g=Math.sin(g*b)/A,o=Math.sin(o*b)/A,l=l*g+h*o,c=c*g+f*o,u=u*g+m*o,d=d*g+_*o}else{l=l*g+h*o,c=c*g+f*o,u=u*g+m*o,d=d*g+_*o;const b=1/Math.sqrt(l*l+c*c+u*u+d*d);l*=b,c*=b,u*=b,d*=b}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d}static multiplyQuaternionsFlat(e,t,i,s,r,a){const o=i[s],l=i[s+1],c=i[s+2],u=i[s+3],d=r[a],h=r[a+1],f=r[a+2],m=r[a+3];return e[t]=o*m+u*d+l*f-c*h,e[t+1]=l*m+u*h+c*d-o*f,e[t+2]=c*m+u*f+o*h-l*d,e[t+3]=u*m-o*d-l*h-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,s){return this._x=e,this._y=t,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){const i=e._x,s=e._y,r=e._z,a=e._order,o=Math.cos,l=Math.sin,c=o(i/2),u=o(s/2),d=o(r/2),h=l(i/2),f=l(s/2),m=l(r/2);switch(a){case"XYZ":this._x=h*u*d+c*f*m,this._y=c*f*d-h*u*m,this._z=c*u*m+h*f*d,this._w=c*u*d-h*f*m;break;case"YXZ":this._x=h*u*d+c*f*m,this._y=c*f*d-h*u*m,this._z=c*u*m-h*f*d,this._w=c*u*d+h*f*m;break;case"ZXY":this._x=h*u*d-c*f*m,this._y=c*f*d+h*u*m,this._z=c*u*m+h*f*d,this._w=c*u*d-h*f*m;break;case"ZYX":this._x=h*u*d-c*f*m,this._y=c*f*d+h*u*m,this._z=c*u*m-h*f*d,this._w=c*u*d+h*f*m;break;case"YZX":this._x=h*u*d+c*f*m,this._y=c*f*d+h*u*m,this._z=c*u*m-h*f*d,this._w=c*u*d-h*f*m;break;case"XZY":this._x=h*u*d-c*f*m,this._y=c*f*d-h*u*m,this._z=c*u*m+h*f*d,this._w=c*u*d+h*f*m;break;default:Ke("Quaternion: .setFromEuler() encountered an unknown order: "+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,s=Math.sin(i);return this._x=e.x*s,this._y=e.y*s,this._z=e.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],s=t[4],r=t[8],a=t[1],o=t[5],l=t[9],c=t[2],u=t[6],d=t[10],h=i+o+d;if(h>0){const f=.5/Math.sqrt(h+1);this._w=.25/f,this._x=(u-l)*f,this._y=(r-c)*f,this._z=(a-s)*f}else if(i>o&&i>d){const f=2*Math.sqrt(1+i-o-d);this._w=(u-l)/f,this._x=.25*f,this._y=(s+a)/f,this._z=(r+c)/f}else if(o>d){const f=2*Math.sqrt(1+o-i-d);this._w=(r-c)/f,this._x=(s+a)/f,this._y=.25*f,this._z=(l+u)/f}else{const f=2*Math.sqrt(1+d-i-o);this._w=(a-s)/f,this._x=(r+c)/f,this._y=(l+u)/f,this._z=.25*f}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<1e-8?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Qe(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(i===0)return this;const s=Math.min(1,t/i);return this.slerp(e,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,s=e._y,r=e._z,a=e._w,o=t._x,l=t._y,c=t._z,u=t._w;return this._x=i*u+a*o+s*c-r*l,this._y=s*u+a*l+r*o-i*c,this._z=r*u+a*c+i*l-s*o,this._w=a*u-i*o-s*l-r*c,this._onChangeCallback(),this}slerp(e,t){let i=e._x,s=e._y,r=e._z,a=e._w,o=this.dot(e);o<0&&(i=-i,s=-s,r=-r,a=-a,o=-o);let l=1-t;if(o<.9995){const c=Math.acos(o),u=Math.sin(c);l=Math.sin(l*c)/u,t=Math.sin(t*c)/u,this._x=this._x*l+i*t,this._y=this._y*l+s*t,this._z=this._z*l+r*t,this._w=this._w*l+a*t,this._onChangeCallback()}else this._x=this._x*l+i*t,this._y=this._y*l+s*t,this._z=this._z*l+r*t,this._w=this._w*l+a*t,this.normalize();return this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){const e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(s*Math.sin(e),s*Math.cos(e),r*Math.sin(t),r*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const cu=class cu{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("THREE.Vector3: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("THREE.Vector3: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Su.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Su.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,s=this.z,r=e.elements;return this.x=r[0]*t+r[3]*i+r[6]*s,this.y=r[1]*t+r[4]*i+r[7]*s,this.z=r[2]*t+r[5]*i+r[8]*s,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,r=e.elements,a=1/(r[3]*t+r[7]*i+r[11]*s+r[15]);return this.x=(r[0]*t+r[4]*i+r[8]*s+r[12])*a,this.y=(r[1]*t+r[5]*i+r[9]*s+r[13])*a,this.z=(r[2]*t+r[6]*i+r[10]*s+r[14])*a,this}applyQuaternion(e){const t=this.x,i=this.y,s=this.z,r=e.x,a=e.y,o=e.z,l=e.w,c=2*(a*s-o*i),u=2*(o*t-r*s),d=2*(r*i-a*t);return this.x=t+l*c+a*d-o*u,this.y=i+l*u+o*c-r*d,this.z=s+l*d+r*u-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,s=this.z,r=e.elements;return this.x=r[0]*t+r[4]*i+r[8]*s,this.y=r[1]*t+r[5]*i+r[9]*s,this.z=r[2]*t+r[6]*i+r[10]*s,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Qe(this.x,e.x,t.x),this.y=Qe(this.y,e.y,t.y),this.z=Qe(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Qe(this.x,e,t),this.y=Qe(this.y,e,t),this.z=Qe(this.z,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Qe(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,s=e.y,r=e.z,a=t.x,o=t.y,l=t.z;return this.x=s*l-r*o,this.y=r*a-i*l,this.z=i*o-s*a,this}projectOnVector(e){const t=e.lengthSq();if(t===0)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return wo.copy(this).projectOnVector(e),this.sub(wo)}reflect(e){return this.sub(wo.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Qe(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,s=this.z-e.z;return t*t+i*i+s*s}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){const s=Math.sin(t)*e;return this.x=s*Math.sin(i),this.y=Math.cos(t)*e,this.z=s*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),s=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=s,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,t=Math.random()*2-1,i=Math.sqrt(1-t*t);return this.x=i*Math.cos(e),this.y=t,this.z=i*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};cu.prototype.isVector3=!0;let H=cu;const wo=new H,Su=new zi,uu=class uu{constructor(e,t,i,s,r,a,o,l,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,i,s,r,a,o,l,c)}set(e,t,i,s,r,a,o,l,c){const u=this.elements;return u[0]=e,u[1]=s,u[2]=o,u[3]=t,u[4]=r,u[5]=l,u[6]=i,u[7]=a,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,r=this.elements,a=i[0],o=i[3],l=i[6],c=i[1],u=i[4],d=i[7],h=i[2],f=i[5],m=i[8],_=s[0],p=s[3],g=s[6],b=s[1],A=s[4],x=s[7],E=s[2],S=s[5],M=s[8];return r[0]=a*_+o*b+l*E,r[3]=a*p+o*A+l*S,r[6]=a*g+o*x+l*M,r[1]=c*_+u*b+d*E,r[4]=c*p+u*A+d*S,r[7]=c*g+u*x+d*M,r[2]=h*_+f*b+m*E,r[5]=h*p+f*A+m*S,r[8]=h*g+f*x+m*M,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[1],s=e[2],r=e[3],a=e[4],o=e[5],l=e[6],c=e[7],u=e[8];return t*a*u-t*o*c-i*r*u+i*o*l+s*r*c-s*a*l}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],r=e[3],a=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=u*a-o*c,h=o*l-u*r,f=c*r-a*l,m=t*d+i*h+s*f;if(m===0)return this.set(0,0,0,0,0,0,0,0,0);const _=1/m;return e[0]=d*_,e[1]=(s*c-u*i)*_,e[2]=(o*i-s*a)*_,e[3]=h*_,e[4]=(u*t-s*l)*_,e[5]=(s*r-o*t)*_,e[6]=f*_,e[7]=(i*l-c*t)*_,e[8]=(a*t-i*r)*_,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,s,r,a,o){const l=Math.cos(r),c=Math.sin(r);return this.set(i*l,i*c,-i*(l*a+c*o)+a+e,-s*c,s*l,-s*(-c*a+l*o)+o+t,0,0,1),this}scale(e,t){return Hs("Matrix3: .scale() is deprecated. Use .makeScale() instead."),this.premultiply(Ro.makeScale(e,t)),this}rotate(e){return Hs("Matrix3: .rotate() is deprecated. Use .makeRotation() instead."),this.premultiply(Ro.makeRotation(-e)),this}translate(e,t){return Hs("Matrix3: .translate() is deprecated. Use .makeTranslation() instead."),this.premultiply(Ro.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<9;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}};uu.prototype.isMatrix3=!0;let Ze=uu;const Ro=new Ze,bu=new Ze().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Mu=new Ze().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function N0(){const n={enabled:!0,workingColorSpace:Ka,spaces:{},convert:function(s,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===pt&&(s.r=mi(s.r),s.g=mi(s.g),s.b=mi(s.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(s.applyMatrix3(this.spaces[r].toXYZ),s.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===pt&&(s.r=zs(s.r),s.g=zs(s.g),s.b=zs(s.b))),s},workingToColorSpace:function(s,r){return this.convert(s,this.workingColorSpace,r)},colorSpaceToWorking:function(s,r){return this.convert(s,r,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===ci?qa:this.spaces[s].transfer},getToneMappingMode:function(s){return this.spaces[s].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(s,r=this.workingColorSpace){return s.fromArray(this.spaces[r].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,r,a){return s.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(s,r){return Hs("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(s,r)},toWorkingColorSpace:function(s,r){return Hs("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),n.colorSpaceToWorking(s,r)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],i=[.3127,.329];return n.define({[Ka]:{primaries:e,whitePoint:i,transfer:qa,toXYZ:bu,fromXYZ:Mu,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:dn},outputColorSpaceConfig:{drawingBufferColorSpace:dn}},[dn]:{primaries:e,whitePoint:i,transfer:pt,toXYZ:bu,fromXYZ:Mu,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:dn}}}),n}const it=N0();function mi(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function zs(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}let _s;class k0{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let i;if(e instanceof HTMLCanvasElement)i=e;else{_s===void 0&&(_s=$a("canvas")),_s.width=e.width,_s.height=e.height;const s=_s.getContext("2d");e instanceof ImageData?s.putImageData(e,0,0):s.drawImage(e,0,0,e.width,e.height),i=_s}return i.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const t=$a("canvas");t.width=e.width,t.height=e.height;const i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);const s=i.getImageData(0,0,e.width,e.height),r=s.data;for(let a=0;a1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Lo).x}get height(){return this.source.getSize(Lo).y}get depth(){return this.source.getSize(Lo).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const t in e){const i=e[t];if(i===void 0){Ke(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){Ke(`Texture.setValues(): property '${t}' does not exist.`);continue}s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==zd)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Pl:e.x=e.x-Math.floor(e.x);break;case ui:e.x=e.x<0?0:1;break;case Ol:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case Pl:e.y=e.y-Math.floor(e.y);break;case ui:e.y=e.y<0?0:1;break;case Ol:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}}Jt.DEFAULT_IMAGE=null;Jt.DEFAULT_MAPPING=zd;Jt.DEFAULT_ANISOTROPY=1;const hu=class hu{constructor(e=0,t=0,i=0,s=1){this.x=e,this.y=t,this.z=i,this.w=s}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("THREE.Vector4: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("THREE.Vector4: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,r=this.w,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*s+a[12]*r,this.y=a[1]*t+a[5]*i+a[9]*s+a[13]*r,this.z=a[2]*t+a[6]*i+a[10]*s+a[14]*r,this.w=a[3]*t+a[7]*i+a[11]*s+a[15]*r,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,s,r;const l=e.elements,c=l[0],u=l[4],d=l[8],h=l[1],f=l[5],m=l[9],_=l[2],p=l[6],g=l[10];if(Math.abs(u-h)<.01&&Math.abs(d-_)<.01&&Math.abs(m-p)<.01){if(Math.abs(u+h)<.1&&Math.abs(d+_)<.1&&Math.abs(m+p)<.1&&Math.abs(c+f+g-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const A=(c+1)/2,x=(f+1)/2,E=(g+1)/2,S=(u+h)/4,M=(d+_)/4,y=(m+p)/4;return A>x&&A>E?A<.01?(i=0,s=.707106781,r=.707106781):(i=Math.sqrt(A),s=S/i,r=M/i):x>E?x<.01?(i=.707106781,s=0,r=.707106781):(s=Math.sqrt(x),i=S/s,r=y/s):E<.01?(i=.707106781,s=.707106781,r=0):(r=Math.sqrt(E),i=M/r,s=y/r),this.set(i,s,r,t),this}let b=Math.sqrt((p-m)*(p-m)+(d-_)*(d-_)+(h-u)*(h-u));return Math.abs(b)<.001&&(b=1),this.x=(p-m)/b,this.y=(d-_)/b,this.z=(h-u)/b,this.w=Math.acos((c+f+g-1)/2),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Qe(this.x,e.x,t.x),this.y=Qe(this.y,e.y,t.y),this.z=Qe(this.z,e.z,t.z),this.w=Qe(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Qe(this.x,e,t),this.y=Qe(this.y,e,t),this.z=Qe(this.z,e,t),this.w=Qe(this.w,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Qe(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}};hu.prototype.isVector4=!0;let wt=hu;class H0 extends Wi{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Wt,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1,useArrayDepthTexture:!1},i),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=i.depth,this.scissor=new wt(0,0,e,t),this.scissorTest=!1,this.viewport=new wt(0,0,e,t),this.textures=[];const s={width:e,height:t,depth:i.depth},r=new Jt(s),a=i.count;for(let o=0;o1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.pivot!==null&&(s.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(s.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(s.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),s.instanceInfo=this._instanceInfo.map(o=>({...o})),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(e),s.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(s.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(s.boundingBox=this.boundingBox.toJSON()));function r(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(e.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c0){s.children=[];for(let o=0;o0){s.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),u.length>0&&(i.images=u),d.length>0&&(i.shapes=d),h.length>0&&(i.skeletons=h),f.length>0&&(i.animations=f),m.length>0&&(i.nodes=m)}return i.object=s,i;function a(o){const l=[];for(const c in o){const u=o[c];delete u.metadata,l.push(u)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot!==null?e.pivot.clone():null,this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;if+m?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&h<=f-m&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(r=t.getPose(e.gripSpace,i),r!==null&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1,l.eventsEnabled&&l.dispatchEvent({type:"gripUpdated",data:e,target:this})));o!==null&&(s=t.getPose(e.targetRaySpace,i),s===null&&r!==null&&(s=r),s!==null&&(o.matrix.fromArray(s.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,s.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(s.linearVelocity)):o.hasLinearVelocity=!1,s.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(s.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(q0)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=r!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){const i=new _r;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}}const jd={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ei={h:0,s:0,l:0},qr={h:0,s:0,l:0};function Oo(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}class et{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,i)}set(e,t,i){if(t===void 0&&i===void 0){const s=e;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(e,t,i);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=dn){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,it.colorSpaceToWorking(this,t),this}setRGB(e,t,i,s=it.workingColorSpace){return this.r=e,this.g=t,this.b=i,it.colorSpaceToWorking(this,s),this}setHSL(e,t,i,s=it.workingColorSpace){if(e=O0(e,1),t=Qe(t,0,1),i=Qe(i,0,1),t===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+t):i+t-i*t,a=2*i-r;this.r=Oo(a,r,e+1/3),this.g=Oo(a,r,e),this.b=Oo(a,r,e-1/3)}return it.colorSpaceToWorking(this,s),this}setStyle(e,t=dn){function i(r){r!==void 0&&parseFloat(r)<1&&Ke("Color: Alpha component of "+e+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(e)){let r;const a=s[1],o=s[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,t);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,t);break;default:Ke("Color: Unknown color model "+e)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(e)){const r=s[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,t);if(a===6)return this.setHex(parseInt(r,16),t);Ke("Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=dn){const i=jd[e.toLowerCase()];return i!==void 0?this.setHex(i,t):Ke("Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=mi(e.r),this.g=mi(e.g),this.b=mi(e.b),this}copyLinearToSRGB(e){return this.r=zs(e.r),this.g=zs(e.g),this.b=zs(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=dn){return it.workingToColorSpace(qt.copy(this),e),Math.round(Qe(qt.r*255,0,255))*65536+Math.round(Qe(qt.g*255,0,255))*256+Math.round(Qe(qt.b*255,0,255))}getHexString(e=dn){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=it.workingColorSpace){it.workingToColorSpace(qt.copy(this),t);const i=qt.r,s=qt.g,r=qt.b,a=Math.max(i,s,r),o=Math.min(i,s,r);let l,c;const u=(o+a)/2;if(o===a)l=0,c=0;else{const d=a-o;switch(c=u<=.5?d/(a+o):d/(2-a-o),a){case i:l=(s-r)/d+(s0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}const Cn=new H,ri=new H,Uo=new H,ai=new H,Ss=new H,bs=new H,Lu=new H,No=new H,ko=new H,Fo=new H,Bo=new wt,Ho=new wt,zo=new wt;class vn{constructor(e=new H,t=new H,i=new H){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,s){s.subVectors(i,t),Cn.subVectors(e,t),s.cross(Cn);const r=s.lengthSq();return r>0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(e,t,i,s,r){Cn.subVectors(s,t),ri.subVectors(i,t),Uo.subVectors(e,t);const a=Cn.dot(Cn),o=Cn.dot(ri),l=Cn.dot(Uo),c=ri.dot(ri),u=ri.dot(Uo),d=a*c-o*o;if(d===0)return r.set(0,0,0),null;const h=1/d,f=(c*l-o*u)*h,m=(a*u-o*l)*h;return r.set(1-f-m,m,f)}static containsPoint(e,t,i,s){return this.getBarycoord(e,t,i,s,ai)===null?!1:ai.x>=0&&ai.y>=0&&ai.x+ai.y<=1}static getInterpolation(e,t,i,s,r,a,o,l){return this.getBarycoord(e,t,i,s,ai)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(r,ai.x),l.addScaledVector(a,ai.y),l.addScaledVector(o,ai.z),l)}static getInterpolatedAttribute(e,t,i,s,r,a){return Bo.setScalar(0),Ho.setScalar(0),zo.setScalar(0),Bo.fromBufferAttribute(e,t),Ho.fromBufferAttribute(e,i),zo.fromBufferAttribute(e,s),a.setScalar(0),a.addScaledVector(Bo,r.x),a.addScaledVector(Ho,r.y),a.addScaledVector(zo,r.z),a}static isFrontFacing(e,t,i,s){return Cn.subVectors(i,t),ri.subVectors(e,t),Cn.cross(ri).dot(s)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,s){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[s]),this}setFromAttributeAndIndices(e,t,i,s){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,s),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Cn.subVectors(this.c,this.b),ri.subVectors(this.a,this.b),Cn.cross(ri).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return vn.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return vn.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,i,s,r){return vn.getInterpolation(e,this.a,this.b,this.c,t,i,s,r)}containsPoint(e){return vn.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return vn.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,s=this.b,r=this.c;let a,o;Ss.subVectors(s,i),bs.subVectors(r,i),No.subVectors(e,i);const l=Ss.dot(No),c=bs.dot(No);if(l<=0&&c<=0)return t.copy(i);ko.subVectors(e,s);const u=Ss.dot(ko),d=bs.dot(ko);if(u>=0&&d<=u)return t.copy(s);const h=l*d-u*c;if(h<=0&&l>=0&&u<=0)return a=l/(l-u),t.copy(i).addScaledVector(Ss,a);Fo.subVectors(e,r);const f=Ss.dot(Fo),m=bs.dot(Fo);if(m>=0&&f<=m)return t.copy(r);const _=f*c-l*m;if(_<=0&&c>=0&&m<=0)return o=c/(c-m),t.copy(i).addScaledVector(bs,o);const p=u*m-f*d;if(p<=0&&d-u>=0&&f-m>=0)return Lu.subVectors(r,s),o=(d-u)/(d-u+(f-m)),t.copy(s).addScaledVector(Lu,o);const g=1/(p+_+h);return a=_*g,o=h*g,t.copy(i).addScaledVector(Ss,a).addScaledVector(bs,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}class Fi{constructor(e=new H(1/0,1/0,1/0),t=new H(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,i=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,wn),wn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(rr),$r.subVectors(this.max,rr),Ms.subVectors(e.a,rr),As.subVectors(e.b,rr),Es.subVectors(e.c,rr),Ti.subVectors(As,Ms),Ci.subVectors(Es,As),Yi.subVectors(Ms,Es);let t=[0,-Ti.z,Ti.y,0,-Ci.z,Ci.y,0,-Yi.z,Yi.y,Ti.z,0,-Ti.x,Ci.z,0,-Ci.x,Yi.z,0,-Yi.x,-Ti.y,Ti.x,0,-Ci.y,Ci.x,0,-Yi.y,Yi.x,0];return!Vo(t,Ms,As,Es,$r)||(t=[1,0,0,0,1,0,0,0,1],!Vo(t,Ms,As,Es,$r))?!1:(Jr.crossVectors(Ti,Ci),t=[Jr.x,Jr.y,Jr.z],Vo(t,Ms,As,Es,$r))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,wn).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(wn).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(oi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),oi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),oi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),oi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),oi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),oi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),oi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),oi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(oi),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}}const oi=[new H,new H,new H,new H,new H,new H,new H,new H],wn=new H,Zr=new Fi,Ms=new H,As=new H,Es=new H,Ti=new H,Ci=new H,Yi=new H,rr=new H,$r=new H,Jr=new H,Ki=new H;function Vo(n,e,t,i,s){for(let r=0,a=n.length-3;r<=a;r+=3){Ki.fromArray(n,r);const o=s.x*Math.abs(Ki.x)+s.y*Math.abs(Ki.y)+s.z*Math.abs(Ki.z),l=e.dot(Ki),c=t.dot(Ki),u=i.dot(Ki);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))>o)return!1}return!0}const Pt=new H,jr=new Me;let $0=0;class In extends Wi{constructor(e,t,i=!1){if(super(),Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:$0++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=hc,this.updateRanges=[],this.gpuType=Ln,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let s=0,r=this.itemSize;sthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;ar.subVectors(e,this.center);const t=ar.lengthSq();if(t>this.radius*this.radius){const i=Math.sqrt(t),s=(i-this.radius)*.5;this.center.addScaledVector(ar,s/i),this.radius+=s}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Go.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(ar.copy(e.center).add(Go)),this.expandByPoint(ar.copy(e.center).sub(Go))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}}let j0=0;const xn=new Et,Wo=new tn,Ts=new H,hn=new Fi,or=new Fi,Bt=new H;class Ct extends Wi{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:j0++}),this.uuid=pi(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={},this._transformed=!1}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(D0(e)?ef:Qd)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){const t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const r=new Ze().getNormalMatrix(e);i.applyNormalMatrix(r),i.needsUpdate=!0}const s=this.attributes.tangent;return s!==void 0&&(s.transformDirection(e),s.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this._transformed=!0,this}applyQuaternion(e){return xn.makeRotationFromQuaternion(e),this.applyMatrix4(xn),this}rotateX(e){return xn.makeRotationX(e),this.applyMatrix4(xn),this}rotateY(e){return xn.makeRotationY(e),this.applyMatrix4(xn),this}rotateZ(e){return xn.makeRotationZ(e),this.applyMatrix4(xn),this}translate(e,t,i){return xn.makeTranslation(e,t,i),this.applyMatrix4(xn),this}scale(e,t,i){return xn.makeScale(e,t,i),this.applyMatrix4(xn),this}lookAt(e){return Wo.lookAt(e),Wo.updateMatrix(),this.applyMatrix4(Wo.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Ts).negate(),this.translate(Ts.x,Ts.y,Ts.z),this}setFromPoints(e){const t=this.getAttribute("position");if(t===void 0){const i=[];for(let s=0,r=e.length;st.count&&Ke("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Fi);const e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){at("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new H(-1/0,-1/0,-1/0),new H(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,s=t.length;i0&&(e.userData=this.userData),this.parameters!==void 0&&this._transformed!==!0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};const t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const l in i){const c=i[l];e.data.attributes[l]=c.toJSON(e.data)}const s={};let r=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],u=[];for(let d=0,h=c.length;d0&&(s[l]=u,r=!0)}r&&(e.data.morphAttributes=s,e.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;i!==null&&this.setIndex(i.clone());const s=e.attributes;for(const c in s){const u=s[c];this.setAttribute(c,u.clone(t))}const r=e.morphAttributes;for(const c in r){const u=[],d=r[c];for(let h=0,f=d.length;h0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const t in e){const i=e[t];if(i===void 0){Ke(`Material: parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){Ke(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(i):s&&s.isVector2&&i&&i.isVector2||s&&s.isEuler&&i&&i.isEuler||s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==Bs&&(i.blending=this.blending),this.side!==Hi&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Al&&(i.blendSrc=this.blendSrc),this.blendDst!==El&&(i.blendDst=this.blendDst),this.blendEquation!==ji&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==Gs&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==yu&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==gs&&(i.stencilFail=this.stencilFail),this.stencilZFail!==gs&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==gs&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.allowOverride===!1&&(i.allowOverride=!1),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function s(r){const a=[];for(const o in r){const l=r[o];delete l.metadata,a.push(l)}return a}if(t){const r=s(e.textures),a=s(e.images);r.length>0&&(i.textures=r),a.length>0&&(i.images=a)}return i}fromJSON(e,t){if(e.uuid!==void 0&&(this.uuid=e.uuid),e.name!==void 0&&(this.name=e.name),e.color!==void 0&&this.color!==void 0&&this.color.setHex(e.color),e.roughness!==void 0&&(this.roughness=e.roughness),e.metalness!==void 0&&(this.metalness=e.metalness),e.sheen!==void 0&&(this.sheen=e.sheen),e.sheenColor!==void 0&&(this.sheenColor=new et().setHex(e.sheenColor)),e.sheenRoughness!==void 0&&(this.sheenRoughness=e.sheenRoughness),e.emissive!==void 0&&this.emissive!==void 0&&this.emissive.setHex(e.emissive),e.specular!==void 0&&this.specular!==void 0&&this.specular.setHex(e.specular),e.specularIntensity!==void 0&&(this.specularIntensity=e.specularIntensity),e.specularColor!==void 0&&this.specularColor!==void 0&&this.specularColor.setHex(e.specularColor),e.shininess!==void 0&&(this.shininess=e.shininess),e.clearcoat!==void 0&&(this.clearcoat=e.clearcoat),e.clearcoatRoughness!==void 0&&(this.clearcoatRoughness=e.clearcoatRoughness),e.dispersion!==void 0&&(this.dispersion=e.dispersion),e.iridescence!==void 0&&(this.iridescence=e.iridescence),e.iridescenceIOR!==void 0&&(this.iridescenceIOR=e.iridescenceIOR),e.iridescenceThicknessRange!==void 0&&(this.iridescenceThicknessRange=e.iridescenceThicknessRange),e.transmission!==void 0&&(this.transmission=e.transmission),e.thickness!==void 0&&(this.thickness=e.thickness),e.attenuationDistance!==void 0&&(this.attenuationDistance=e.attenuationDistance),e.attenuationColor!==void 0&&this.attenuationColor!==void 0&&this.attenuationColor.setHex(e.attenuationColor),e.anisotropy!==void 0&&(this.anisotropy=e.anisotropy),e.anisotropyRotation!==void 0&&(this.anisotropyRotation=e.anisotropyRotation),e.fog!==void 0&&(this.fog=e.fog),e.flatShading!==void 0&&(this.flatShading=e.flatShading),e.blending!==void 0&&(this.blending=e.blending),e.combine!==void 0&&(this.combine=e.combine),e.side!==void 0&&(this.side=e.side),e.shadowSide!==void 0&&(this.shadowSide=e.shadowSide),e.opacity!==void 0&&(this.opacity=e.opacity),e.transparent!==void 0&&(this.transparent=e.transparent),e.alphaTest!==void 0&&(this.alphaTest=e.alphaTest),e.alphaHash!==void 0&&(this.alphaHash=e.alphaHash),e.depthFunc!==void 0&&(this.depthFunc=e.depthFunc),e.depthTest!==void 0&&(this.depthTest=e.depthTest),e.depthWrite!==void 0&&(this.depthWrite=e.depthWrite),e.colorWrite!==void 0&&(this.colorWrite=e.colorWrite),e.blendSrc!==void 0&&(this.blendSrc=e.blendSrc),e.blendDst!==void 0&&(this.blendDst=e.blendDst),e.blendEquation!==void 0&&(this.blendEquation=e.blendEquation),e.blendSrcAlpha!==void 0&&(this.blendSrcAlpha=e.blendSrcAlpha),e.blendDstAlpha!==void 0&&(this.blendDstAlpha=e.blendDstAlpha),e.blendEquationAlpha!==void 0&&(this.blendEquationAlpha=e.blendEquationAlpha),e.blendColor!==void 0&&this.blendColor!==void 0&&this.blendColor.setHex(e.blendColor),e.blendAlpha!==void 0&&(this.blendAlpha=e.blendAlpha),e.stencilWriteMask!==void 0&&(this.stencilWriteMask=e.stencilWriteMask),e.stencilFunc!==void 0&&(this.stencilFunc=e.stencilFunc),e.stencilRef!==void 0&&(this.stencilRef=e.stencilRef),e.stencilFuncMask!==void 0&&(this.stencilFuncMask=e.stencilFuncMask),e.stencilFail!==void 0&&(this.stencilFail=e.stencilFail),e.stencilZFail!==void 0&&(this.stencilZFail=e.stencilZFail),e.stencilZPass!==void 0&&(this.stencilZPass=e.stencilZPass),e.stencilWrite!==void 0&&(this.stencilWrite=e.stencilWrite),e.wireframe!==void 0&&(this.wireframe=e.wireframe),e.wireframeLinewidth!==void 0&&(this.wireframeLinewidth=e.wireframeLinewidth),e.wireframeLinecap!==void 0&&(this.wireframeLinecap=e.wireframeLinecap),e.wireframeLinejoin!==void 0&&(this.wireframeLinejoin=e.wireframeLinejoin),e.rotation!==void 0&&(this.rotation=e.rotation),e.linewidth!==void 0&&(this.linewidth=e.linewidth),e.dashSize!==void 0&&(this.dashSize=e.dashSize),e.gapSize!==void 0&&(this.gapSize=e.gapSize),e.scale!==void 0&&(this.scale=e.scale),e.polygonOffset!==void 0&&(this.polygonOffset=e.polygonOffset),e.polygonOffsetFactor!==void 0&&(this.polygonOffsetFactor=e.polygonOffsetFactor),e.polygonOffsetUnits!==void 0&&(this.polygonOffsetUnits=e.polygonOffsetUnits),e.dithering!==void 0&&(this.dithering=e.dithering),e.alphaToCoverage!==void 0&&(this.alphaToCoverage=e.alphaToCoverage),e.premultipliedAlpha!==void 0&&(this.premultipliedAlpha=e.premultipliedAlpha),e.forceSinglePass!==void 0&&(this.forceSinglePass=e.forceSinglePass),e.allowOverride!==void 0&&(this.allowOverride=e.allowOverride),e.visible!==void 0&&(this.visible=e.visible),e.toneMapped!==void 0&&(this.toneMapped=e.toneMapped),e.userData!==void 0&&(this.userData=e.userData),e.vertexColors!==void 0&&(typeof e.vertexColors=="number"?this.vertexColors=e.vertexColors>0:this.vertexColors=e.vertexColors),e.size!==void 0&&(this.size=e.size),e.sizeAttenuation!==void 0&&(this.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(this.map=t[e.map]||null),e.matcap!==void 0&&(this.matcap=t[e.matcap]||null),e.alphaMap!==void 0&&(this.alphaMap=t[e.alphaMap]||null),e.bumpMap!==void 0&&(this.bumpMap=t[e.bumpMap]||null),e.bumpScale!==void 0&&(this.bumpScale=e.bumpScale),e.normalMap!==void 0&&(this.normalMap=t[e.normalMap]||null),e.normalMapType!==void 0&&(this.normalMapType=e.normalMapType),e.normalScale!==void 0){let i=e.normalScale;Array.isArray(i)===!1&&(i=[i,i]),this.normalScale=new Me().fromArray(i)}return e.displacementMap!==void 0&&(this.displacementMap=t[e.displacementMap]||null),e.displacementScale!==void 0&&(this.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(this.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(this.roughnessMap=t[e.roughnessMap]||null),e.metalnessMap!==void 0&&(this.metalnessMap=t[e.metalnessMap]||null),e.emissiveMap!==void 0&&(this.emissiveMap=t[e.emissiveMap]||null),e.emissiveIntensity!==void 0&&(this.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(this.specularMap=t[e.specularMap]||null),e.specularIntensityMap!==void 0&&(this.specularIntensityMap=t[e.specularIntensityMap]||null),e.specularColorMap!==void 0&&(this.specularColorMap=t[e.specularColorMap]||null),e.envMap!==void 0&&(this.envMap=t[e.envMap]||null),e.envMapRotation!==void 0&&this.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(this.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(this.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(this.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(this.lightMap=t[e.lightMap]||null),e.lightMapIntensity!==void 0&&(this.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(this.aoMap=t[e.aoMap]||null),e.aoMapIntensity!==void 0&&(this.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(this.gradientMap=t[e.gradientMap]||null),e.clearcoatMap!==void 0&&(this.clearcoatMap=t[e.clearcoatMap]||null),e.clearcoatRoughnessMap!==void 0&&(this.clearcoatRoughnessMap=t[e.clearcoatRoughnessMap]||null),e.clearcoatNormalMap!==void 0&&(this.clearcoatNormalMap=t[e.clearcoatNormalMap]||null),e.clearcoatNormalScale!==void 0&&(this.clearcoatNormalScale=new Me().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(this.iridescenceMap=t[e.iridescenceMap]||null),e.iridescenceThicknessMap!==void 0&&(this.iridescenceThicknessMap=t[e.iridescenceThicknessMap]||null),e.transmissionMap!==void 0&&(this.transmissionMap=t[e.transmissionMap]||null),e.thicknessMap!==void 0&&(this.thicknessMap=t[e.thicknessMap]||null),e.anisotropyMap!==void 0&&(this.anisotropyMap=t[e.anisotropyMap]||null),e.sheenColorMap!==void 0&&(this.sheenColorMap=t[e.sheenColorMap]||null),e.sheenRoughnessMap!==void 0&&(this.sheenRoughnessMap=t[e.sheenRoughnessMap]||null),this}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(t!==null){const s=t.length;i=new Array(s);for(let r=0;r!==s;++r)i[r]=t[r].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}}class pc extends Qs{constructor(e){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new et(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.rotation=e.rotation,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}}let Cs;const lr=new H,ws=new H,Rs=new H,Ds=new Me,cr=new Me,tf=new Et,Qr=new H,ur=new H,ea=new H,Iu=new Me,Xo=new Me,Pu=new Me;class Ou extends tn{constructor(e=new pc){if(super(),this.isSprite=!0,this.type="Sprite",Cs===void 0){Cs=new Ct;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),i=new Q0(t,5);Cs.setIndex([0,1,2,0,2,3]),Cs.setAttribute("position",new ja(i,3,0,!1)),Cs.setAttribute("uv",new ja(i,2,3,!1))}this.geometry=Cs,this.material=e,this.center=new Me(.5,.5),this.count=1}raycast(e,t){e.camera===null&&at('Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),ws.setFromMatrixScale(this.matrixWorld),tf.copy(e.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(e.camera.matrixWorldInverse,this.matrixWorld),Rs.setFromMatrixPosition(this.modelViewMatrix),e.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&ws.multiplyScalar(-Rs.z);const i=this.material.rotation;let s,r;i!==0&&(r=Math.cos(i),s=Math.sin(i));const a=this.center;ta(Qr.set(-.5,-.5,0),Rs,a,ws,s,r),ta(ur.set(.5,-.5,0),Rs,a,ws,s,r),ta(ea.set(.5,.5,0),Rs,a,ws,s,r),Iu.set(0,0),Xo.set(1,0),Pu.set(1,1);let o=e.ray.intersectTriangle(Qr,ur,ea,!1,lr);if(o===null&&(ta(ur.set(-.5,.5,0),Rs,a,ws,s,r),Xo.set(0,1),o=e.ray.intersectTriangle(Qr,ea,ur,!1,lr),o===null))return;const l=e.ray.origin.distanceTo(lr);le.far||t.push({distance:l,point:lr.clone(),uv:vn.getInterpolation(lr,Qr,ur,ea,Iu,Xo,Pu,new Me),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}}function ta(n,e,t,i,s,r){Ds.subVectors(n,t).addScalar(.5).multiply(i),s!==void 0?(cr.x=r*Ds.x-s*Ds.y,cr.y=s*Ds.x+r*Ds.y):cr.copy(Ds),n.copy(e),n.x+=cr.x,n.y+=cr.y,n.applyMatrix4(tf)}const li=new H,Yo=new H,na=new H,wi=new H,Ko=new H,ia=new H,qo=new H;class Hc{constructor(e=new H,t=new H(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,li)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=li.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(li.copy(this.origin).addScaledVector(this.direction,t),li.distanceToSquared(e))}distanceSqToSegment(e,t,i,s){Yo.copy(e).add(t).multiplyScalar(.5),na.copy(t).sub(e).normalize(),wi.copy(this.origin).sub(Yo);const r=e.distanceTo(t)*.5,a=-this.direction.dot(na),o=wi.dot(this.direction),l=-wi.dot(na),c=wi.lengthSq(),u=Math.abs(1-a*a);let d,h,f,m;if(u>0)if(d=a*l-o,h=a*o-l,m=r*u,d>=0)if(h>=-m)if(h<=m){const _=1/u;d*=_,h*=_,f=d*(d+a*h+2*o)+h*(a*d+h+2*l)+c}else h=r,d=Math.max(0,-(a*h+o)),f=-d*d+h*(h+2*l)+c;else h=-r,d=Math.max(0,-(a*h+o)),f=-d*d+h*(h+2*l)+c;else h<=-m?(d=Math.max(0,-(-a*r+o)),h=d>0?-r:Math.min(Math.max(-r,-l),r),f=-d*d+h*(h+2*l)+c):h<=m?(d=0,h=Math.min(Math.max(-r,-l),r),f=h*(h+2*l)+c):(d=Math.max(0,-(a*r+o)),h=d>0?r:Math.min(Math.max(-r,-l),r),f=-d*d+h*(h+2*l)+c);else h=a>0?-r:r,d=Math.max(0,-(a*h+o)),f=-d*d+h*(h+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,d),s&&s.copy(Yo).addScaledVector(na,h),f}intersectSphere(e,t){li.subVectors(e.center,this.origin);const i=li.dot(this.direction),s=li.dot(li)-i*i,r=e.radius*e.radius;if(s>r)return null;const a=Math.sqrt(r-s),o=i-a,l=i+a;return l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,s,r,a,o,l;const c=1/this.direction.x,u=1/this.direction.y,d=1/this.direction.z,h=this.origin;return c>=0?(i=(e.min.x-h.x)*c,s=(e.max.x-h.x)*c):(i=(e.max.x-h.x)*c,s=(e.min.x-h.x)*c),u>=0?(r=(e.min.y-h.y)*u,a=(e.max.y-h.y)*u):(r=(e.max.y-h.y)*u,a=(e.min.y-h.y)*u),i>a||r>s||((r>i||isNaN(i))&&(i=r),(a=0?(o=(e.min.z-h.z)*d,l=(e.max.z-h.z)*d):(o=(e.max.z-h.z)*d,l=(e.min.z-h.z)*d),i>l||o>s)||((o>i||i!==i)&&(i=o),(l=0?i:s,t)}intersectsBox(e){return this.intersectBox(e,li)!==null}intersectTriangle(e,t,i,s,r){Ko.subVectors(t,e),ia.subVectors(i,e),qo.crossVectors(Ko,ia);let a=this.direction.dot(qo),o;if(a>0){if(s)return null;o=1}else if(a<0)o=-1,a=-a;else return null;wi.subVectors(this.origin,e);const l=o*this.direction.dot(ia.crossVectors(wi,ia));if(l<0)return null;const c=o*this.direction.dot(Ko.cross(wi));if(c<0||l+c>a)return null;const u=-o*wi.dot(qo);return u<0?null:this.at(u/a,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Yn extends Qs{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new et(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new as,this.combine=Pd,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const Uu=new Et,qi=new Hc,sa=new _o,Nu=new H,ra=new H,aa=new H,oa=new H,Zo=new H,la=new H,ku=new H,ca=new H;class zt extends tn{constructor(e=new Ct,t=new Yn){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,i=Object.keys(t);if(i.length>0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;r(e.far-e.near)**2))&&(Uu.copy(r).invert(),qi.copy(e.ray).applyMatrix4(Uu),!(i.boundingBox!==null&&qi.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,qi)))}_computeIntersections(e,t,i){let s;const r=this.geometry,a=this.material,o=r.index,l=r.attributes.position,c=r.attributes.uv,u=r.attributes.uv1,d=r.attributes.normal,h=r.groups,f=r.drawRange;if(o!==null)if(Array.isArray(a))for(let m=0,_=h.length;m<_;m++){const p=h[m],g=a[p.materialIndex],b=Math.max(p.start,f.start),A=Math.min(o.count,Math.min(p.start+p.count,f.start+f.count));for(let x=b,E=A;xt.far?null:{distance:c,point:ca.clone(),object:n}}function ua(n,e,t,i,s,r,a,o,l,c){n.getVertexPosition(o,ra),n.getVertexPosition(l,aa),n.getVertexPosition(c,oa);const u=tm(n,e,t,i,ra,aa,oa,ku);if(u){const d=new H;vn.getBarycoord(ku,ra,aa,oa,d),s&&(u.uv=vn.getInterpolatedAttribute(s,o,l,c,d,new Me)),r&&(u.uv1=vn.getInterpolatedAttribute(r,o,l,c,d,new Me)),a&&(u.normal=vn.getInterpolatedAttribute(a,o,l,c,d,new H),u.normal.dot(i.direction)>0&&u.normal.multiplyScalar(-1));const h={a:o,b:l,c,normal:new H,materialIndex:0};vn.getNormal(ra,aa,oa,h.normal),u.face=h,u.barycoord=d}return u}class nf extends Jt{constructor(e=null,t=1,i=1,s,r,a,o,l,c=Ut,u=Ut,d,h){super(null,a,o,l,c,u,s,r,d,h),this.isDataTexture=!0,this.image={data:e,width:t,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}const $o=new H,nm=new H,im=new Ze;class Ii{constructor(e=new H(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,s){return this.normal.set(e,t,i),this.constant=s,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,i){const s=$o.subVectors(i,t).cross(nm.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(s,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t,i=!0){const s=e.delta($o),r=this.normal.dot(s);if(r===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;const a=-(e.start.dot(this.normal)+this.constant)/r;return i===!0&&(a<0||a>1)?null:t.copy(e.start).addScaledVector(s,a)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||im.getNormalMatrix(e),s=this.coplanarPoint($o).applyMatrix4(e),r=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Zi=new _o,sm=new Me(.5,.5),ha=new H;class sf{constructor(e=new Ii,t=new Ii,i=new Ii,s=new Ii,r=new Ii,a=new Ii){this.planes=[e,t,i,s,r,a]}set(e,t,i,s,r,a){const o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(s),o[4].copy(r),o[5].copy(a),this}copy(e){const t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e,t=Jn,i=!1){const s=this.planes,r=e.elements,a=r[0],o=r[1],l=r[2],c=r[3],u=r[4],d=r[5],h=r[6],f=r[7],m=r[8],_=r[9],p=r[10],g=r[11],b=r[12],A=r[13],x=r[14],E=r[15];if(s[0].setComponents(c-a,f-u,g-m,E-b).normalize(),s[1].setComponents(c+a,f+u,g+m,E+b).normalize(),s[2].setComponents(c+o,f+d,g+_,E+A).normalize(),s[3].setComponents(c-o,f-d,g-_,E-A).normalize(),i)s[4].setComponents(l,h,p,x).normalize(),s[5].setComponents(c-l,f-h,g-p,E-x).normalize();else if(s[4].setComponents(c-l,f-h,g-p,E-x).normalize(),t===Jn)s[5].setComponents(c+l,f+h,g+p,E+x).normalize();else if(t===Za)s[5].setComponents(l,h,p,x).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),Zi.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),Zi.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(Zi)}intersectsSprite(e){Zi.center.set(0,0,0);const t=sm.distanceTo(e.center);return Zi.radius=.7071067811865476+t,Zi.applyMatrix4(e.matrixWorld),this.intersectsSphere(Zi)}intersectsSphere(e){const t=this.planes,i=e.center,s=-e.radius;for(let r=0;r<6;r++)if(t[r].distanceToPoint(i)0?e.max.x:e.min.x,ha.y=s.normal.y>0?e.max.y:e.min.y,ha.z=s.normal.z>0?e.max.z:e.min.z,s.distanceToPoint(ha)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class Fs extends Qs{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new et(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}}const Qa=new H,eo=new H,Fu=new Et,hr=new Hc,da=new _o,Jo=new H,Bu=new H;let rf=class extends tn{constructor(e=new Ct,t=new Fs){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){const e=this.geometry;if(e.index===null){const t=e.attributes.position,i=[0];for(let s=1,r=t.count;s0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;ri)return;Jo.applyMatrix4(n.matrixWorld);const c=e.ray.origin.distanceTo(Jo);if(!(ce.far))return{distance:c,point:Bu.clone().applyMatrix4(n.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:n}}const Hu=new H,zu=new H;class pa extends rf{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const e=this.geometry;if(e.index===null){const t=e.attributes.position,i=[];for(let s=0,r=t.count;s0?1:-1,u.push(R.x,R.y,R.z),d.push(ae/M),d.push(1-re/y),F+=1}}for(let re=0;re0)l=s-1;else{l=s;break}if(s=l,i[s]===a)return s/(r-1);const u=i[s],h=i[s+1]-u,f=(a-u)/h;return(s+f)/(r-1)}getTangent(e,t){let s=e-1e-4,r=e+1e-4;s<0&&(s=0),r>1&&(r=1);const a=this.getPoint(s),o=this.getPoint(r),l=t||(a.isVector2?new Me:new H);return l.copy(o).sub(a).normalize(),l}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t=!1){const i=new H,s=[],r=[],a=[],o=new H,l=new Et;for(let f=0;f<=e;f++){const m=f/e;s[f]=this.getTangentAt(m,new H)}r[0]=new H,a[0]=new H;let c=Number.MAX_VALUE;const u=Math.abs(s[0].x),d=Math.abs(s[0].y),h=Math.abs(s[0].z);u<=c&&(c=u,i.set(1,0,0)),d<=c&&(c=d,i.set(0,1,0)),h<=c&&i.set(0,0,1),o.crossVectors(s[0],i).normalize(),r[0].crossVectors(s[0],o),a[0].crossVectors(s[0],r[0]);for(let f=1;f<=e;f++){if(r[f]=r[f-1].clone(),a[f]=a[f-1].clone(),o.crossVectors(s[f-1],s[f]),o.length()>Number.EPSILON){o.normalize();const m=Math.acos(Qe(s[f-1].dot(s[f]),-1,1));r[f].applyMatrix4(l.makeRotationAxis(o,m))}a[f].crossVectors(s[f],r[f])}if(t===!0){let f=Math.acos(Qe(r[0].dot(r[e]),-1,1));f/=e,s[0].dot(o.crossVectors(r[0],r[e]))>0&&(f=-f);for(let m=1;m<=e;m++)r[m].applyMatrix4(l.makeRotationAxis(s[m],f*m)),a[m].crossVectors(s[m],r[m])}return{tangents:s,normals:r,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class zc extends ii{constructor(e=0,t=0,i=1,s=1,r=0,a=Math.PI*2,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=s,this.aStartAngle=r,this.aEndAngle=a,this.aClockwise=o,this.aRotation=l}getPoint(e,t=new Me){const i=t,s=Math.PI*2;let r=this.aEndAngle-this.aStartAngle;const a=Math.abs(r)s;)r-=s;r0?0:(Math.floor(Math.abs(o)/r)+1)*r:l===0&&o===r-1&&(o=r-2,l=1);let c,u;this.closed||o>0?c=s[(o-1)%r]:(Gu.subVectors(s[0],s[1]).add(s[0]),c=Gu);const d=s[o%r],h=s[(o+1)%r];if(this.closed||o+2s.length-2?s.length-1:a+1],d=s[a>s.length-3?s.length-1:a+2];return i.set(Wu(o,l.x,c.x,u.x,d.x),Wu(o,l.y,c.y,u.y,d.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t=i){const a=s[r]-i,o=this.curves[r],l=o.getLength(),c=l===0?0:1-a/l;return o.getPointAt(c,t)}r++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,s=this.curves.length;i1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t0){const d=c.getPoint(0);d.equals(this.currentPoint)||this.lineTo(d.x,d.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}};class df extends Yu{constructor(e){super(e),this.uuid=pi(),this.type="Shape",this.holes=[]}getPointsHoles(e){const t=[];for(let i=0,s=this.holes.length;i80*t){o=n[0],l=n[1];let u=o,d=l;for(let h=t;hu&&(u=f),m>d&&(d=m)}c=Math.max(u-o,d-l),c=c!==0?32767/c:0}return wr(r,a,t,o,l,c,0),a}function ff(n,e,t,i,s){let r;if(s===Um(n,e,t,i)>0)for(let a=e;a=e;a-=i)r=Ku(a/i|0,n[a],n[a+1],r);return r&&Ys(r,r.next)&&(Dr(r),r=r.next),r}function os(n,e){if(!n)return n;e||(e=n);let t=n,i;do if(i=!1,!t.steiner&&(Ys(t,t.next)||At(t.prev,t,t.next)===0)){if(Dr(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function wr(n,e,t,i,s,r,a){if(!n)return;!a&&r&&Rm(n,i,s,r);let o=n;for(;n.prev!==n.next;){const l=n.prev,c=n.next;if(r?Sm(n,i,s,r):vm(n)){e.push(l.i,n.i,c.i),Dr(n),n=c.next,o=c.next;continue}if(n=c,n===o){a?a===1?(n=bm(os(n),e),wr(n,e,t,i,s,r,2)):a===2&&Mm(n,e,t,i,s,r):wr(os(n),e,t,i,s,r,1);break}}}function vm(n){const e=n.prev,t=n,i=n.next;if(At(e,t,i)>=0)return!1;const s=e.x,r=t.x,a=i.x,o=e.y,l=t.y,c=i.y,u=Math.min(s,r,a),d=Math.min(o,l,c),h=Math.max(s,r,a),f=Math.max(o,l,c);let m=i.next;for(;m!==e;){if(m.x>=u&&m.x<=h&&m.y>=d&&m.y<=f&&xr(s,o,r,l,a,c,m.x,m.y)&&At(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function Sm(n,e,t,i){const s=n.prev,r=n,a=n.next;if(At(s,r,a)>=0)return!1;const o=s.x,l=r.x,c=a.x,u=s.y,d=r.y,h=a.y,f=Math.min(o,l,c),m=Math.min(u,d,h),_=Math.max(o,l,c),p=Math.max(u,d,h),g=mc(f,m,e,t,i),b=mc(_,p,e,t,i);let A=n.prevZ,x=n.nextZ;for(;A&&A.z>=g&&x&&x.z<=b;){if(A.x>=f&&A.x<=_&&A.y>=m&&A.y<=p&&A!==s&&A!==a&&xr(o,u,l,d,c,h,A.x,A.y)&&At(A.prev,A,A.next)>=0||(A=A.prevZ,x.x>=f&&x.x<=_&&x.y>=m&&x.y<=p&&x!==s&&x!==a&&xr(o,u,l,d,c,h,x.x,x.y)&&At(x.prev,x,x.next)>=0))return!1;x=x.nextZ}for(;A&&A.z>=g;){if(A.x>=f&&A.x<=_&&A.y>=m&&A.y<=p&&A!==s&&A!==a&&xr(o,u,l,d,c,h,A.x,A.y)&&At(A.prev,A,A.next)>=0)return!1;A=A.prevZ}for(;x&&x.z<=b;){if(x.x>=f&&x.x<=_&&x.y>=m&&x.y<=p&&x!==s&&x!==a&&xr(o,u,l,d,c,h,x.x,x.y)&&At(x.prev,x,x.next)>=0)return!1;x=x.nextZ}return!0}function bm(n,e){let t=n;do{const i=t.prev,s=t.next.next;!Ys(i,s)&&mf(i,t,t.next,s)&&Rr(i,s)&&Rr(s,i)&&(e.push(i.i,t.i,s.i),Dr(t),Dr(t.next),t=n=s),t=t.next}while(t!==n);return os(t)}function Mm(n,e,t,i,s,r){let a=n;do{let o=a.next.next;for(;o!==a.prev;){if(a.i!==o.i&&Im(a,o)){let l=gf(a,o);a=os(a,a.next),l=os(l,l.next),wr(a,e,t,i,s,r,0),wr(l,e,t,i,s,r,0);return}o=o.next}a=a.next}while(a!==n)}function Am(n,e,t,i){const s=[];for(let r=0,a=e.length;r=t.next.y&&t.next.y!==t.y){const d=t.x+(s-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(d<=i&&d>r&&(r=d,a=t.x=t.x&&t.x>=l&&i!==t.x&&pf(sa.x||t.x===a.x&&wm(a,t)))&&(a=t,u=d)}t=t.next}while(t!==o);return a}function wm(n,e){return At(n.prev,n,e.prev)<0&&At(e.next,n,n.next)<0}function Rm(n,e,t,i){let s=n;do s.z===0&&(s.z=mc(s.x,s.y,e,t,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==n);s.prevZ.nextZ=null,s.prevZ=null,Dm(s)}function Dm(n){let e,t=1;do{let i=n,s;n=null;let r=null;for(e=0;i;){e++;let a=i,o=0;for(let c=0;c0||l>0&&a;)o!==0&&(l===0||!a||i.z<=a.z)?(s=i,i=i.nextZ,o--):(s=a,a=a.nextZ,l--),r?r.nextZ=s:n=s,s.prevZ=r,r=s;i=a}r.nextZ=null,t*=2}while(e>1);return n}function mc(n,e,t,i,s){return n=(n-t)*s|0,e=(e-i)*s|0,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,n|e<<1}function Lm(n){let e=n,t=n;do(e.x=(n-a)*(r-o)&&(n-a)*(i-o)>=(t-a)*(e-o)&&(t-a)*(r-o)>=(s-a)*(i-o)}function xr(n,e,t,i,s,r,a,o){return!(n===a&&e===o)&&pf(n,e,t,i,s,r,a,o)}function Im(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!Pm(n,e)&&(Rr(n,e)&&Rr(e,n)&&Om(n,e)&&(At(n.prev,n,e.prev)||At(n,e.prev,e))||Ys(n,e)&&At(n.prev,n,n.next)>0&&At(e.prev,e,e.next)>0)}function At(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function Ys(n,e){return n.x===e.x&&n.y===e.y}function mf(n,e,t,i){const s=_a(At(n,e,t)),r=_a(At(n,e,i)),a=_a(At(t,i,n)),o=_a(At(t,i,e));return!!(s!==r&&a!==o||s===0&&ga(n,t,e)||r===0&&ga(n,i,e)||a===0&&ga(t,n,i)||o===0&&ga(t,e,i))}function ga(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function _a(n){return n>0?1:n<0?-1:0}function Pm(n,e){let t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&mf(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}function Rr(n,e){return At(n.prev,n,n.next)<0?At(n,e,n.next)>=0&&At(n,n.prev,e)>=0:At(n,e,n.prev)<0||At(n,n.next,e)<0}function Om(n,e){let t=n,i=!1;const s=(n.x+e.x)/2,r=(n.y+e.y)/2;do t.y>r!=t.next.y>r&&t.next.y!==t.y&&s<(t.next.x-t.x)*(r-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==n);return i}function gf(n,e){const t=gc(n.i,n.x,n.y),i=gc(e.i,e.x,e.y),s=n.next,r=e.prev;return n.next=e,e.prev=n,t.next=s,s.prev=t,i.next=t,t.prev=i,r.next=i,i.prev=r,i}function Ku(n,e,t,i){const s=gc(n,e,t);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function Dr(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function gc(n,e,t){return{i:n,x:e,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function Um(n,e,t,i){let s=0;for(let r=e,a=t-i;r2&&n[e-1].equals(n[0])&&n.pop()}function Zu(n,e){for(let t=0;t0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const i={};for(const s in this.extensions)this.extensions[s]===!0&&(i[s]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}fromJSON(e,t){if(super.fromJSON(e,t),e.uniforms!==void 0)for(const i in e.uniforms){const s=e.uniforms[i];switch(this.uniforms[i]={},s.type){case"t":this.uniforms[i].value=t[s.value]||null;break;case"c":this.uniforms[i].value=new et().setHex(s.value);break;case"v2":this.uniforms[i].value=new Ee().fromArray(s.value);break;case"v3":this.uniforms[i].value=new B().fromArray(s.value);break;case"v4":this.uniforms[i].value=new Ct().fromArray(s.value);break;case"m3":this.uniforms[i].value=new $e().fromArray(s.value);break;case"m4":this.uniforms[i].value=new Tt().fromArray(s.value);break;default:this.uniforms[i].value=s.value}}if(e.defines!==void 0&&(this.defines=e.defines),e.vertexShader!==void 0&&(this.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(this.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(this.glslVersion=e.glslVersion),e.extensions!==void 0)for(const i in e.extensions)this.extensions[i]=e.extensions[i];return e.lights!==void 0&&(this.lights=e.lights),e.clipping!==void 0&&(this.clipping=e.clipping),this}}class Bg extends In{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}}class Hg extends js{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=ym,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class zg extends js{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class Gg extends Ns{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}const xa=new B,va=new ki,Bn=new B;class gd extends sn{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Tt,this.projectionMatrix=new Tt,this.projectionMatrixInverse=new Tt,this.coordinateSystem=$n,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorld.decompose(xa,va,Bn),Bn.x===1&&Bn.y===1&&Bn.z===1?this.matrixWorldInverse.copy(this.matrixWorld).invert():this.matrixWorldInverse.compose(xa,va,Bn.set(1,1,1)).invert()}updateWorldMatrix(e,t,i=!1){super.updateWorldMatrix(e,t,i),this.matrixWorld.decompose(xa,va,Bn),Bn.x===1&&Bn.y===1&&Bn.z===1?this.matrixWorldInverse.copy(this.matrixWorld).invert():this.matrixWorldInverse.compose(xa,va,Bn.set(1,1,1)).invert()}clone(){return new this.constructor().copy(this)}}const Ai=new B,Zu=new Ee,Ku=new Ee;class Pn extends gd{constructor(e=50,t=1,i=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=s,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=hc*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(ka*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return hc*2*Math.atan(Math.tan(ka*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,i){Ai.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(Ai.x,Ai.y).multiplyScalar(-e/Ai.z),Ai.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set(Ai.x,Ai.y).multiplyScalar(-e/Ai.z)}getViewSize(e,t){return this.getViewBounds(e,Zu,Ku),t.subVectors(Ku,Zu)}setViewOffset(e,t,i,s,r,a){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(ka*.5*this.fov)/this.zoom,i=2*t,s=this.aspect*i,r=-.5*s;const a=this.view;if(this.view!==null&&this.view.enabled){const l=a.fullWidth,c=a.fullHeight;r+=a.offsetX*s/l,t-=a.offsetY*i/c,s*=a.width/l,i*=a.height/c}const o=this.filmOffset;o!==0&&(r+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+s,t,t-i,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}class Gc extends gd{constructor(e=-1,t=1,i=1,s=-1,r=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=s,this.near=r,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,i,s,r,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,s=(this.top+this.bottom)/2;let r=i-e,a=i+e,o=s+t,l=s-t;if(this.view!==null&&this.view.enabled){const c=(this.right-this.left)/this.view.fullWidth/this.zoom,u=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=c*this.view.offsetX,a=r+c*this.view.width,o-=u*this.view.offsetY,l=o-u*this.view.height}this.projectionMatrix.makeOrthographic(r,a,o,l,this.near,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null&&(t.object.view=Object.assign({},this.view)),t}}const Ps=-90,Ls=1;class Vg extends sn{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new Pn(Ps,Ls,e,t);s.layers=this.layers,this.add(s);const r=new Pn(Ps,Ls,e,t);r.layers=this.layers,this.add(r);const a=new Pn(Ps,Ls,e,t);a.layers=this.layers,this.add(a);const o=new Pn(Ps,Ls,e,t);o.layers=this.layers,this.add(o);const l=new Pn(Ps,Ls,e,t);l.layers=this.layers,this.add(l);const c=new Pn(Ps,Ls,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const e=this.coordinateSystem,t=this.children.concat(),[i,s,r,a,o,l]=t;for(const c of t)this.remove(c);if(e===$n)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(e===$a)i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(const c of t)this.add(c),c.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());const[r,a,o,l,c,u]=this.children,f=e.getRenderTarget(),h=e.getActiveCubeFace(),d=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;const x=i.texture.generateMipmaps;i.texture.generateMipmaps=!1;let m=!1;e.isWebGLRenderer===!0?m=e.state.buffers.depth.getReversed():m=e.reversedDepthBuffer,e.setRenderTarget(i,0,s),m&&e.autoClear===!1&&e.clearDepth(),e.render(t,r),e.setRenderTarget(i,1,s),m&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(i,2,s),m&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(i,3,s),m&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(i,4,s),m&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),i.texture.generateMipmaps=x,e.setRenderTarget(i,5,s),m&&e.autoClear===!1&&e.clearDepth(),e.render(t,u),e.setRenderTarget(f,h,d),e.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class Wg extends Pn{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}}class Ju{constructor(e=1,t=0,i=0){this.radius=e,this.phi=t,this.theta=i}set(e,t,i){return this.radius=e,this.phi=t,this.theta=i,this}copy(e){return this.radius=e.radius,this.phi=e.phi,this.theta=e.theta,this}makeSafe(){return this.phi=Qe(this.phi,1e-6,Math.PI-1e-6),this}setFromVector3(e){return this.setFromCartesianCoords(e.x,e.y,e.z)}setFromCartesianCoords(e,t,i){return this.radius=Math.sqrt(e*e+t*t+i*i),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(e,i),this.phi=Math.acos(Qe(t/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}}const uu=class uu{constructor(e,t,i,s){this.elements=[1,0,0,1],e!==void 0&&this.set(e,t,i,s)}identity(){return this.set(1,0,0,1),this}fromArray(e,t=0){for(let i=0;i<4;i++)this.elements[i]=e[i+t];return this}set(e,t,i,s){const r=this.elements;return r[0]=e,r[2]=t,r[1]=i,r[3]=s,this}};uu.prototype.isMatrix2=!0;let ju=uu;class Xg extends zi{constructor(e,t=null){super(),this.object=e,this.domElement=t,this.enabled=!0,this.state=-1,this.keys={},this.mouseButtons={LEFT:null,MIDDLE:null,RIGHT:null},this.touches={ONE:null,TWO:null}}connect(e){if(e===void 0){We("Controls: connect() now requires an element.");return}this.domElement!==null&&this.disconnect(),this.domElement=e}disconnect(){}dispose(){}update(){}}function Qu(n,e,t,i){const s=Yg(i);switch(t){case Xf:return n*e;case qf:return n*e/s.components*s.byteLength;case Dc:return n*e/s.components*s.byteLength;case ts:return n*e*2/s.components*s.byteLength;case Ic:return n*e*2/s.components*s.byteLength;case Yf:return n*e*3/s.components*s.byteLength;case En:return n*e*4/s.components*s.byteLength;case Uc:return n*e*4/s.components*s.byteLength;case Ua:case Oa:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Fa:case Na:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Ul:case Fl:return Math.max(n,16)*Math.max(e,8)/4;case Il:case Ol:return Math.max(n,8)*Math.max(e,8)/2;case Nl:case kl:case Hl:case zl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Bl:case Wa:case Gl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Vl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Wl:return Math.floor((n+4)/5)*Math.floor((e+3)/4)*16;case Xl:return Math.floor((n+4)/5)*Math.floor((e+4)/5)*16;case Yl:return Math.floor((n+5)/6)*Math.floor((e+4)/5)*16;case ql:return Math.floor((n+5)/6)*Math.floor((e+5)/6)*16;case $l:return Math.floor((n+7)/8)*Math.floor((e+4)/5)*16;case Zl:return Math.floor((n+7)/8)*Math.floor((e+5)/6)*16;case Kl:return Math.floor((n+7)/8)*Math.floor((e+7)/8)*16;case Jl:return Math.floor((n+9)/10)*Math.floor((e+4)/5)*16;case jl:return Math.floor((n+9)/10)*Math.floor((e+5)/6)*16;case Ql:return Math.floor((n+9)/10)*Math.floor((e+7)/8)*16;case ec:return Math.floor((n+9)/10)*Math.floor((e+9)/10)*16;case tc:return Math.floor((n+11)/12)*Math.floor((e+9)/10)*16;case nc:return Math.floor((n+11)/12)*Math.floor((e+11)/12)*16;case ic:case sc:case rc:return Math.ceil(n/4)*Math.ceil(e/4)*16;case ac:case oc:return Math.ceil(n/4)*Math.ceil(e/4)*8;case Xa:case lc:return Math.ceil(n/4)*Math.ceil(e/4)*16}throw new Error(`Unable to determine texture byte length for ${t} format.`)}function Yg(n){switch(n){case Sn:case zf:return{byteLength:1,components:1};case Tr:case Gf:case mi:return{byteLength:2,components:1};case Pc:case Lc:return{byteLength:2,components:4};case Qn:case Rc:case Ln:return{byteLength:4,components:1};case Vf:case Wf:return{byteLength:4,components:3}}throw new Error(`THREE.TextureUtils: Unknown texture type ${n}.`)}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:Cc}}));typeof window<"u"&&(window.__THREE__?We("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=Cc);/** +}`;class Pn extends Qs{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=Hm,this.fragmentShader=zm,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=Ks(e.uniforms),this.uniformsGroups=Fm(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this.defaultAttributeValues=Object.assign({},e.defaultAttributeValues),this.index0AttributeName=e.index0AttributeName,this.uniformsNeedUpdate=e.uniformsNeedUpdate,this}toJSON(e){const t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(const s in this.uniforms){const a=this.uniforms[s].value;a&&a.isTexture?t.uniforms[s]={type:"t",value:a.toJSON(e).uuid}:a&&a.isColor?t.uniforms[s]={type:"c",value:a.getHex()}:a&&a.isVector2?t.uniforms[s]={type:"v2",value:a.toArray()}:a&&a.isVector3?t.uniforms[s]={type:"v3",value:a.toArray()}:a&&a.isVector4?t.uniforms[s]={type:"v4",value:a.toArray()}:a&&a.isMatrix3?t.uniforms[s]={type:"m3",value:a.toArray()}:a&&a.isMatrix4?t.uniforms[s]={type:"m4",value:a.toArray()}:t.uniforms[s]={value:a}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const i={};for(const s in this.extensions)this.extensions[s]===!0&&(i[s]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}fromJSON(e,t){if(super.fromJSON(e,t),e.uniforms!==void 0)for(const i in e.uniforms){const s=e.uniforms[i];switch(this.uniforms[i]={},s.type){case"t":this.uniforms[i].value=t[s.value]||null;break;case"c":this.uniforms[i].value=new et().setHex(s.value);break;case"v2":this.uniforms[i].value=new Me().fromArray(s.value);break;case"v3":this.uniforms[i].value=new H().fromArray(s.value);break;case"v4":this.uniforms[i].value=new wt().fromArray(s.value);break;case"m3":this.uniforms[i].value=new Ze().fromArray(s.value);break;case"m4":this.uniforms[i].value=new Et().fromArray(s.value);break;default:this.uniforms[i].value=s.value}}if(e.defines!==void 0&&(this.defines=e.defines),e.vertexShader!==void 0&&(this.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(this.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(this.glslVersion=e.glslVersion),e.extensions!==void 0)for(const i in e.extensions)this.extensions[i]=e.extensions[i];return e.lights!==void 0&&(this.lights=e.lights),e.clipping!==void 0&&(this.clipping=e.clipping),this}}class Vm extends Pn{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}}class Gm extends Qs{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=b0,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class Wm extends Qs{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class Xm extends Fs{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}const xa=new H,ya=new zi,Vn=new H;class xf extends tn{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Et,this.projectionMatrix=new Et,this.projectionMatrixInverse=new Et,this.coordinateSystem=Jn,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorld.decompose(xa,ya,Vn),Vn.x===1&&Vn.y===1&&Vn.z===1?this.matrixWorldInverse.copy(this.matrixWorld).invert():this.matrixWorldInverse.compose(xa,ya,Vn.set(1,1,1)).invert()}updateWorldMatrix(e,t,i=!1){super.updateWorldMatrix(e,t,i),this.matrixWorld.decompose(xa,ya,Vn),Vn.x===1&&Vn.y===1&&Vn.z===1?this.matrixWorldInverse.copy(this.matrixWorld).invert():this.matrixWorldInverse.compose(xa,ya,Vn.set(1,1,1)).invert()}clone(){return new this.constructor().copy(this)}}const Ri=new H,Ju=new Me,ju=new Me;class Dn extends xf{constructor(e=50,t=1,i=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=s,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=fc*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(Ba*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return fc*2*Math.atan(Math.tan(Ba*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,i){Ri.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(Ri.x,Ri.y).multiplyScalar(-e/Ri.z),Ri.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set(Ri.x,Ri.y).multiplyScalar(-e/Ri.z)}getViewSize(e,t){return this.getViewBounds(e,Ju,ju),t.subVectors(ju,Ju)}setViewOffset(e,t,i,s,r,a){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(Ba*.5*this.fov)/this.zoom,i=2*t,s=this.aspect*i,r=-.5*s;const a=this.view;if(this.view!==null&&this.view.enabled){const l=a.fullWidth,c=a.fullHeight;r+=a.offsetX*s/l,t-=a.offsetY*i/c,s*=a.width/l,i*=a.height/c}const o=this.filmOffset;o!==0&&(r+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+s,t,t-i,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}class Wc extends xf{constructor(e=-1,t=1,i=1,s=-1,r=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=s,this.near=r,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,i,s,r,a){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,s=(this.top+this.bottom)/2;let r=i-e,a=i+e,o=s+t,l=s-t;if(this.view!==null&&this.view.enabled){const c=(this.right-this.left)/this.view.fullWidth/this.zoom,u=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=c*this.view.offsetX,a=r+c*this.view.width,o-=u*this.view.offsetY,l=o-u*this.view.height}this.projectionMatrix.makeOrthographic(r,a,o,l,this.near,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null&&(t.object.view=Object.assign({},this.view)),t}}const Ls=-90,Is=1;class Ym extends tn{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new Dn(Ls,Is,e,t);s.layers=this.layers,this.add(s);const r=new Dn(Ls,Is,e,t);r.layers=this.layers,this.add(r);const a=new Dn(Ls,Is,e,t);a.layers=this.layers,this.add(a);const o=new Dn(Ls,Is,e,t);o.layers=this.layers,this.add(o);const l=new Dn(Ls,Is,e,t);l.layers=this.layers,this.add(l);const c=new Dn(Ls,Is,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const e=this.coordinateSystem,t=this.children.concat(),[i,s,r,a,o,l]=t;for(const c of t)this.remove(c);if(e===Jn)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(e===Za)i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(const c of t)this.add(c),c.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());const[r,a,o,l,c,u]=this.children,d=e.getRenderTarget(),h=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),m=e.xr.enabled;e.xr.enabled=!1;const _=i.texture.generateMipmaps;i.texture.generateMipmaps=!1;let p=!1;e.isWebGLRenderer===!0?p=e.state.buffers.depth.getReversed():p=e.reversedDepthBuffer,e.setRenderTarget(i,0,s),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,r),e.setRenderTarget(i,1,s),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(i,2,s),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(i,3,s),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(i,4,s),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),i.texture.generateMipmaps=_,e.setRenderTarget(i,5,s),p&&e.autoClear===!1&&e.clearDepth(),e.render(t,u),e.setRenderTarget(d,h,f),e.xr.enabled=m,i.texture.needsPMREMUpdate=!0}}class Km extends Dn{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}}class Qu{constructor(e=1,t=0,i=0){this.radius=e,this.phi=t,this.theta=i}set(e,t,i){return this.radius=e,this.phi=t,this.theta=i,this}copy(e){return this.radius=e.radius,this.phi=e.phi,this.theta=e.theta,this}makeSafe(){return this.phi=Qe(this.phi,1e-6,Math.PI-1e-6),this}setFromVector3(e){return this.setFromCartesianCoords(e.x,e.y,e.z)}setFromCartesianCoords(e,t,i){return this.radius=Math.sqrt(e*e+t*t+i*i),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(e,i),this.phi=Math.acos(Qe(t/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}}const du=class du{constructor(e,t,i,s){this.elements=[1,0,0,1],e!==void 0&&this.set(e,t,i,s)}identity(){return this.set(1,0,0,1),this}fromArray(e,t=0){for(let i=0;i<4;i++)this.elements[i]=e[i+t];return this}set(e,t,i,s){const r=this.elements;return r[0]=e,r[2]=t,r[1]=i,r[3]=s,this}};du.prototype.isMatrix2=!0;let eh=du;class qm extends Wi{constructor(e,t=null){super(),this.object=e,this.domElement=t,this.enabled=!0,this.state=-1,this.keys={},this.mouseButtons={LEFT:null,MIDDLE:null,RIGHT:null},this.touches={ONE:null,TWO:null}}connect(e){if(e===void 0){Ke("Controls: connect() now requires an element.");return}this.domElement!==null&&this.disconnect(),this.domElement=e}disconnect(){}dispose(){}update(){}}function th(n,e,t,i){const s=Zm(i);switch(t){case Yd:return n*e;case qd:return n*e/s.components*s.byteLength;case Oc:return n*e/s.components*s.byteLength;case rs:return n*e*2/s.components*s.byteLength;case Uc:return n*e*2/s.components*s.byteLength;case Kd:return n*e*3/s.components*s.byteLength;case Sn:return n*e*4/s.components*s.byteLength;case Nc:return n*e*4/s.components*s.byteLength;case Ua:case Na:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case ka:case Fa:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Nl:case Fl:return Math.max(n,16)*Math.max(e,8)/4;case Ul:case kl:return Math.max(n,8)*Math.max(e,8)/2;case Bl:case Hl:case Vl:case Gl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case zl:case Xa:case Wl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Xl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Yl:return Math.floor((n+4)/5)*Math.floor((e+3)/4)*16;case Kl:return Math.floor((n+4)/5)*Math.floor((e+4)/5)*16;case ql:return Math.floor((n+5)/6)*Math.floor((e+4)/5)*16;case Zl:return Math.floor((n+5)/6)*Math.floor((e+5)/6)*16;case $l:return Math.floor((n+7)/8)*Math.floor((e+4)/5)*16;case Jl:return Math.floor((n+7)/8)*Math.floor((e+5)/6)*16;case jl:return Math.floor((n+7)/8)*Math.floor((e+7)/8)*16;case Ql:return Math.floor((n+9)/10)*Math.floor((e+4)/5)*16;case ec:return Math.floor((n+9)/10)*Math.floor((e+5)/6)*16;case tc:return Math.floor((n+9)/10)*Math.floor((e+7)/8)*16;case nc:return Math.floor((n+9)/10)*Math.floor((e+9)/10)*16;case ic:return Math.floor((n+11)/12)*Math.floor((e+9)/10)*16;case sc:return Math.floor((n+11)/12)*Math.floor((e+11)/12)*16;case rc:case ac:case oc:return Math.ceil(n/4)*Math.ceil(e/4)*16;case lc:case cc:return Math.ceil(n/4)*Math.ceil(e/4)*8;case Ya:case uc:return Math.ceil(n/4)*Math.ceil(e/4)*16}throw new Error(`Unable to determine texture byte length for ${t} format.`)}function Zm(n){switch(n){case yn:case Vd:return{byteLength:1,components:1};case Tr:case Gd:case _i:return{byteLength:2,components:1};case Ic:case Pc:return{byteLength:2,components:4};case ni:case Lc:case Ln:return{byteLength:4,components:1};case Wd:case Xd:return{byteLength:4,components:3}}throw new Error(`THREE.TextureUtils: Unknown texture type ${n}.`)}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:Dc}}));typeof window<"u"&&(window.__THREE__?Ke("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=Dc);/** * @license * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT - */function xd(){let n=null,e=!1,t=null,i=null;function s(r,a){t(r,a),i=n.requestAnimationFrame(s)}return{start:function(){e!==!0&&t!==null&&n!==null&&(i=n.requestAnimationFrame(s),e=!0)},stop:function(){n!==null&&n.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(r){t=r},setContext:function(r){n=r}}}function qg(n){const e=new WeakMap;function t(o,l){const c=o.array,u=o.usage,f=c.byteLength,h=n.createBuffer();n.bindBuffer(l,h),n.bufferData(l,c,u),o.onUploadCallback();let d;if(c instanceof Float32Array)d=n.FLOAT;else if(typeof Float16Array<"u"&&c instanceof Float16Array)d=n.HALF_FLOAT;else if(c instanceof Uint16Array)o.isFloat16BufferAttribute?d=n.HALF_FLOAT:d=n.UNSIGNED_SHORT;else if(c instanceof Int16Array)d=n.SHORT;else if(c instanceof Uint32Array)d=n.UNSIGNED_INT;else if(c instanceof Int32Array)d=n.INT;else if(c instanceof Int8Array)d=n.BYTE;else if(c instanceof Uint8Array)d=n.UNSIGNED_BYTE;else if(c instanceof Uint8ClampedArray)d=n.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+c);return{buffer:h,type:d,bytesPerElement:c.BYTES_PER_ELEMENT,version:o.version,size:f}}function i(o,l,c){const u=l.array,f=l.updateRanges;if(n.bindBuffer(c,o),f.length===0)n.bufferSubData(c,0,u);else{f.sort((d,p)=>d.start-p.start);let h=0;for(let d=1;df.start-m.start);let h=0;for(let f=1;fe in n?qp(n,e,{enumerable:!0,config : cases.z; return clamp( threshold , 1.0e-6, 1.0 ); } -#endif`,Kg=`#ifdef USE_ALPHAMAP +#endif`,Qm=`#ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g; -#endif`,Jg=`#ifdef USE_ALPHAMAP +#endif`,eg=`#ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,jg=`#ifdef USE_ALPHATEST +#endif`,tg=`#ifdef USE_ALPHATEST #ifdef ALPHA_TO_COVERAGE diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a ); if ( diffuseColor.a == 0.0 ) discard; #else if ( diffuseColor.a < alphaTest ) discard; #endif -#endif`,Qg=`#ifdef USE_ALPHATEST +#endif`,ng=`#ifdef USE_ALPHATEST uniform float alphaTest; -#endif`,e0=`#ifdef USE_AOMAP +#endif`,ig=`#ifdef USE_AOMAP float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0; reflectedLight.indirectDiffuse *= ambientOcclusion; #if defined( USE_CLEARCOAT ) @@ -73,10 +73,10 @@ var qp=Object.defineProperty;var $p=(n,e,t)=>e in n?qp(n,e,{enumerable:!0,config float dotNV = saturate( dot( geometryNormal, geometryViewDir ) ); reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); #endif -#endif`,t0=`#ifdef USE_AOMAP +#endif`,sg=`#ifdef USE_AOMAP uniform sampler2D aoMap; uniform float aoMapIntensity; -#endif`,n0=`#ifdef USE_BATCHING +#endif`,rg=`#ifdef USE_BATCHING #if ! defined( GL_ANGLE_multi_draw ) #define gl_DrawID _gl_DrawID uniform int _gl_DrawID; @@ -110,15 +110,15 @@ var qp=Object.defineProperty;var $p=(n,e,t)=>e in n?qp(n,e,{enumerable:!0,config int y = j / size; return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ); } -#endif`,i0=`#ifdef USE_BATCHING +#endif`,ag=`#ifdef USE_BATCHING mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) ); -#endif`,s0=`vec3 transformed = vec3( position ); +#endif`,og=`vec3 transformed = vec3( position ); #ifdef USE_ALPHAHASH vPosition = vec3( position ); -#endif`,r0=`vec3 objectNormal = vec3( normal ); +#endif`,lg=`vec3 objectNormal = vec3( normal ); #ifdef USE_TANGENT vec3 objectTangent = vec3( tangent.xyz ); -#endif`,a0=`float G_BlinnPhong_Implicit( ) { +#endif`,cg=`float G_BlinnPhong_Implicit( ) { return 0.25; } float D_BlinnPhong( const in float shininess, const in float dotNH ) { @@ -132,7 +132,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve float G = G_BlinnPhong_Implicit( ); float D = D_BlinnPhong( shininess, dotNH ); return F * ( G * D ); -} // validated`,o0=`#ifdef USE_IRIDESCENCE +} // validated`,ug=`#ifdef USE_IRIDESCENCE const mat3 XYZ_TO_REC709 = mat3( 3.2404542, -0.9692660, 0.0556434, -1.5371385, 1.8760108, -0.2040259, @@ -195,7 +195,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve } return max( I, vec3( 0.0 ) ); } -#endif`,l0=`#ifdef USE_BUMPMAP +#endif`,hg=`#ifdef USE_BUMPMAP uniform sampler2D bumpMap; uniform float bumpScale; vec2 dHdxy_fwd() { @@ -216,7 +216,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); return normalize( abs( fDet ) * surf_norm - vGrad ); } -#endif`,c0=`#if NUM_CLIPPING_PLANES > 0 +#endif`,dg=`#if NUM_CLIPPING_PLANES > 0 vec4 plane; #ifdef ALPHA_TO_COVERAGE float distanceToPlane, distanceGradient; @@ -262,20 +262,20 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve if ( clipped ) discard; #endif #endif -#endif`,u0=`#if NUM_CLIPPING_PLANES > 0 +#endif`,fg=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,h0=`#if NUM_CLIPPING_PLANES > 0 +#endif`,pg=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; -#endif`,f0=`#if NUM_CLIPPING_PLANES > 0 +#endif`,mg=`#if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; -#endif`,d0=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) +#endif`,gg=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) diffuseColor *= vColor; -#endif`,p0=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) +#endif`,_g=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) varying vec4 vColor; -#endif`,m0=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) +#endif`,xg=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) varying vec4 vColor; -#endif`,g0=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) +#endif`,yg=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) vColor = vec4( 1.0 ); #endif #ifdef USE_COLOR_ALPHA @@ -288,7 +288,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve #endif #ifdef USE_BATCHING_COLOR vColor *= getBatchingColor( getIndirectIndex( gl_DrawID ) ); -#endif`,x0=`#define PI 3.141592653589793 +#endif`,vg=`#define PI 3.141592653589793 #define PI2 6.283185307179586 #define PI_HALF 1.5707963267948966 #define RECIPROCAL_PI 0.3183098861837907 @@ -359,7 +359,7 @@ vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,v0=`#ifdef ENVMAP_TYPE_CUBE_UV +} // validated`,Sg=`#ifdef ENVMAP_TYPE_CUBE_UV #define cubeUV_minMipLevel 4.0 #define cubeUV_minTileSize 16.0 float getFace( vec3 direction ) { @@ -452,7 +452,7 @@ float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { return vec4( mix( color0, color1, mipF ), 1.0 ); } } -#endif`,y0=`vec3 transformedNormal = objectNormal; +#endif`,bg=`vec3 transformedNormal = objectNormal; #ifdef USE_TANGENT vec3 transformedTangent = objectTangent; #endif @@ -478,21 +478,21 @@ transformedNormal = normalMatrix * transformedNormal; #endif #ifdef USE_TANGENT transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz; -#endif`,_0=`#ifdef USE_DISPLACEMENTMAP +#endif`,Mg=`#ifdef USE_DISPLACEMENTMAP uniform sampler2D displacementMap; uniform float displacementScale; uniform float displacementBias; -#endif`,b0=`#ifdef USE_DISPLACEMENTMAP +#endif`,Ag=`#ifdef USE_DISPLACEMENTMAP transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,S0=`#ifdef USE_EMISSIVEMAP +#endif`,Eg=`#ifdef USE_EMISSIVEMAP vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE emissiveColor = sRGBTransferEOTF( emissiveColor ); #endif totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,M0=`#ifdef USE_EMISSIVEMAP +#endif`,Tg=`#ifdef USE_EMISSIVEMAP uniform sampler2D emissiveMap; -#endif`,E0="gl_FragColor = linearToOutputTexel( gl_FragColor );",T0=`vec4 LinearTransferOETF( in vec4 value ) { +#endif`,Cg="gl_FragColor = linearToOutputTexel( gl_FragColor );",wg=`vec4 LinearTransferOETF( in vec4 value ) { return value; } vec4 sRGBTransferEOTF( in vec4 value ) { @@ -500,7 +500,7 @@ vec4 sRGBTransferEOTF( in vec4 value ) { } vec4 sRGBTransferOETF( in vec4 value ) { return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); -}`,A0=`#ifdef USE_ENVMAP +}`,Rg=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vec3 cameraToFrag; if ( isOrthographic ) { @@ -527,7 +527,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { outgoingLight += envColor.xyz * specularStrength * reflectivity; #endif #endif -#endif`,w0=`#ifdef USE_ENVMAP +#endif`,Dg=`#ifdef USE_ENVMAP uniform float envMapIntensity; uniform mat3 envMapRotation; #ifdef ENVMAP_TYPE_CUBE @@ -535,7 +535,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #else uniform sampler2D envMap; #endif -#endif`,C0=`#ifdef USE_ENVMAP +#endif`,Lg=`#ifdef USE_ENVMAP uniform float reflectivity; #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS @@ -546,7 +546,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #else varying vec3 vReflect; #endif -#endif`,R0=`#ifdef USE_ENVMAP +#endif`,Ig=`#ifdef USE_ENVMAP #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS #endif @@ -557,7 +557,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { varying vec3 vReflect; uniform float refractionRatio; #endif -#endif`,P0=`#ifdef USE_ENVMAP +#endif`,Pg=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vWorldPosition = worldPosition.xyz; #else @@ -574,18 +574,18 @@ vec4 sRGBTransferOETF( in vec4 value ) { vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); #endif #endif -#endif`,L0=`#ifdef USE_FOG +#endif`,Og=`#ifdef USE_FOG vFogDepth = - mvPosition.z; -#endif`,D0=`#ifdef USE_FOG +#endif`,Ug=`#ifdef USE_FOG varying float vFogDepth; -#endif`,I0=`#ifdef USE_FOG +#endif`,Ng=`#ifdef USE_FOG #ifdef FOG_EXP2 float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); #else float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); #endif gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,U0=`#ifdef USE_FOG +#endif`,kg=`#ifdef USE_FOG uniform vec3 fogColor; varying float vFogDepth; #ifdef FOG_EXP2 @@ -594,7 +594,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { uniform float fogNear; uniform float fogFar; #endif -#endif`,O0=`#ifdef USE_GRADIENTMAP +#endif`,Fg=`#ifdef USE_GRADIENTMAP uniform sampler2D gradientMap; #endif vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { @@ -606,12 +606,12 @@ vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { vec2 fw = fwidth( coord ) * 0.5; return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); #endif -}`,F0=`#ifdef USE_LIGHTMAP +}`,Bg=`#ifdef USE_LIGHTMAP uniform sampler2D lightMap; uniform float lightMapIntensity; -#endif`,N0=`LambertMaterial material; +#endif`,Hg=`LambertMaterial material; material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,k0=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,zg=`varying vec3 vViewPosition; struct LambertMaterial { vec3 diffuseColor; float specularStrength; @@ -625,7 +625,7 @@ void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometr reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,B0=`uniform bool receiveShadow; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,Vg=`uniform bool receiveShadow; uniform vec3 ambientLightColor; #if defined( USE_LIGHT_PROBES ) uniform vec3 lightProbe[ 9 ]; @@ -742,7 +742,7 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi return irradiance; } #endif -#include `,H0=`#ifdef USE_ENVMAP +#include `,Gg=`#ifdef USE_ENVMAP vec3 getIBLIrradiance( const in vec3 normal ) { #ifdef ENVMAP_TYPE_CUBE_UV vec3 worldNormal = transformNormalByInverseViewMatrix( normal, viewMatrix ); @@ -775,8 +775,8 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi #endif } #endif -#endif`,z0=`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,G0=`varying vec3 vViewPosition; +#endif`,Wg=`ToonMaterial material; +material.diffuseColor = diffuseColor.rgb;`,Xg=`varying vec3 vViewPosition; struct ToonMaterial { vec3 diffuseColor; }; @@ -788,11 +788,11 @@ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPo reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,V0=`BlinnPhongMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,Yg=`BlinnPhongMaterial material; material.diffuseColor = diffuseColor.rgb; material.specularColor = specular; material.specularShininess = shininess; -material.specularStrength = specularStrength;`,W0=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,Kg=`varying vec3 vViewPosition; struct BlinnPhongMaterial { vec3 diffuseColor; vec3 specularColor; @@ -809,7 +809,7 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geom reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,X0=`PhysicalMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,qg=`PhysicalMaterial material; material.diffuseColor = diffuseColor.rgb; material.diffuseContribution = diffuseColor.rgb * ( 1.0 - metalnessFactor ); material.metalness = metalnessFactor; @@ -899,7 +899,7 @@ material.roughness = min( material.roughness, 1.0 ); material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,Y0=`uniform sampler2D dfgLUT; +#endif`,Zg=`uniform sampler2D dfgLUT; struct PhysicalMaterial { vec3 diffuseColor; vec3 diffuseContribution; @@ -1259,7 +1259,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia #define RE_IndirectSpecular RE_IndirectSpecular_Physical float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,q0=` +}`,$g=` vec3 geometryPosition = - vViewPosition; vec3 geometryNormal = normal; vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); @@ -1381,7 +1381,7 @@ IncidentLight directLight; #if defined( RE_IndirectSpecular ) vec3 radiance = vec3( 0.0 ); vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,$0=`#if defined( RE_IndirectDiffuse ) +#endif`,Jg=`#if defined( RE_IndirectDiffuse ) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; @@ -1402,7 +1402,7 @@ IncidentLight directLight; #ifdef USE_CLEARCOAT clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); #endif -#endif`,Z0=`#if defined( RE_IndirectDiffuse ) +#endif`,jg=`#if defined( RE_IndirectDiffuse ) #if defined( LAMBERT ) || defined( PHONG ) irradiance += iblIrradiance; #endif @@ -1410,7 +1410,7 @@ IncidentLight directLight; #endif #if defined( RE_IndirectSpecular ) RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,K0=`#ifdef USE_LIGHT_PROBES_GRID +#endif`,Qg=`#ifdef USE_LIGHT_PROBES_GRID uniform highp sampler3D probesSH; uniform vec3 probesMin; uniform vec3 probesMax; @@ -1455,27 +1455,27 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { result += c8 * 0.429043 * ( x * x - y * y ); return max( result, vec3( 0.0 ) ); } -#endif`,J0=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,e_=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,j0=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,t_=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) uniform float logDepthBufFC; varying float vFragDepth; varying float vIsPerspective; -#endif`,Q0=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,n_=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER varying float vFragDepth; varying float vIsPerspective; -#endif`,ex=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,i_=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER vFragDepth = 1.0 + gl_Position.w; vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,tx=`#ifdef USE_MAP +#endif`,s_=`#ifdef USE_MAP vec4 sampledDiffuseColor = texture2D( map, vMapUv ); #ifdef DECODE_VIDEO_TEXTURE sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor ); #endif diffuseColor *= sampledDiffuseColor; -#endif`,nx=`#ifdef USE_MAP +#endif`,r_=`#ifdef USE_MAP uniform sampler2D map; -#endif`,ix=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) +#endif`,a_=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) #if defined( USE_POINTS_UV ) vec2 uv = vUv; #else @@ -1487,7 +1487,7 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { #endif #ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,sx=`#if defined( USE_POINTS_UV ) +#endif`,o_=`#if defined( USE_POINTS_UV ) varying vec2 vUv; #else #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) @@ -1499,19 +1499,19 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { #endif #ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,rx=`float metalnessFactor = metalness; +#endif`,l_=`float metalnessFactor = metalness; #ifdef USE_METALNESSMAP vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); metalnessFactor *= texelMetalness.b; -#endif`,ax=`#ifdef USE_METALNESSMAP +#endif`,c_=`#ifdef USE_METALNESSMAP uniform sampler2D metalnessMap; -#endif`,ox=`#ifdef USE_INSTANCING_MORPH +#endif`,u_=`#ifdef USE_INSTANCING_MORPH float morphTargetInfluences[ MORPHTARGETS_COUNT ]; float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; } -#endif`,lx=`#if defined( USE_MORPHCOLORS ) +#endif`,h_=`#if defined( USE_MORPHCOLORS ) vColor *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { #if defined( USE_COLOR_ALPHA ) @@ -1520,12 +1520,12 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; #endif } -#endif`,cx=`#ifdef USE_MORPHNORMALS +#endif`,d_=`#ifdef USE_MORPHNORMALS objectNormal *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; } -#endif`,ux=`#ifdef USE_MORPHTARGETS +#endif`,f_=`#ifdef USE_MORPHTARGETS #ifndef USE_INSTANCING_MORPH uniform float morphTargetBaseInfluence; uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; @@ -1539,12 +1539,12 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { ivec3 morphUV = ivec3( x, y, morphTargetIndex ); return texelFetch( morphTargetsTexture, morphUV, 0 ); } -#endif`,hx=`#ifdef USE_MORPHTARGETS +#endif`,p_=`#ifdef USE_MORPHTARGETS transformed *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; } -#endif`,fx=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; +#endif`,m_=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; #ifdef FLAT_SHADED vec3 fdx = dFdx( vViewPosition ); vec3 fdy = dFdy( vViewPosition ); @@ -1585,7 +1585,7 @@ vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { tbn2[1] *= faceDirection; #endif #endif -vec3 nonPerturbedNormal = normal;`,dx=`#ifdef USE_NORMALMAP_OBJECTSPACE +vec3 nonPerturbedNormal = normal;`,g_=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; #ifdef FLIP_SIDED normal = - normal; @@ -1603,19 +1603,19 @@ vec3 nonPerturbedNormal = normal;`,dx=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = normalize( tbn * mapN ); #elif defined( USE_BUMPMAP ) normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,px=`#ifndef FLAT_SHADED +#endif`,__=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,mx=`#ifndef FLAT_SHADED +#endif`,x_=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,gx=`#ifndef FLAT_SHADED +#endif`,y_=`#ifndef FLAT_SHADED vNormal = normalize( transformedNormal ); #ifdef USE_TANGENT vTangent = normalize( transformedTangent ); @@ -1624,7 +1624,7 @@ vec3 nonPerturbedNormal = normal;`,dx=`#ifdef USE_NORMALMAP_OBJECTSPACE vBitangent = - vBitangent; #endif #endif -#endif`,xx=`#ifdef USE_NORMALMAP +#endif`,v_=`#ifdef USE_NORMALMAP uniform sampler2D normalMap; uniform vec2 normalScale; #endif @@ -1646,13 +1646,13 @@ vec3 nonPerturbedNormal = normal;`,dx=`#ifdef USE_NORMALMAP_OBJECTSPACE float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); return mat3( T * scale, B * scale, N ); } -#endif`,vx=`#ifdef USE_CLEARCOAT +#endif`,S_=`#ifdef USE_CLEARCOAT vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,yx=`#ifdef USE_CLEARCOAT_NORMALMAP +#endif`,b_=`#ifdef USE_CLEARCOAT_NORMALMAP vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; clearcoatMapN.xy *= clearcoatNormalScale; clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,_x=`#ifdef USE_CLEARCOATMAP +#endif`,M_=`#ifdef USE_CLEARCOATMAP uniform sampler2D clearcoatMap; #endif #ifdef USE_CLEARCOAT_NORMALMAP @@ -1661,18 +1661,18 @@ vec3 nonPerturbedNormal = normal;`,dx=`#ifdef USE_NORMALMAP_OBJECTSPACE #endif #ifdef USE_CLEARCOAT_ROUGHNESSMAP uniform sampler2D clearcoatRoughnessMap; -#endif`,bx=`#ifdef USE_IRIDESCENCEMAP +#endif`,A_=`#ifdef USE_IRIDESCENCEMAP uniform sampler2D iridescenceMap; #endif #ifdef USE_IRIDESCENCE_THICKNESSMAP uniform sampler2D iridescenceThicknessMap; -#endif`,Sx=`#ifdef OPAQUE +#endif`,E_=`#ifdef OPAQUE diffuseColor.a = 1.0; #endif #ifdef USE_TRANSMISSION diffuseColor.a *= material.transmissionAlpha; #endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,Mx=`vec3 packNormalToRGB( const in vec3 normal ) { +gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,T_=`vec3 packNormalToRGB( const in vec3 normal ) { return normalize( normal ) * 0.5 + 0.5; } vec3 unpackRGBToNormal( const in vec3 rgb ) { @@ -1751,9 +1751,9 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const #else return ( near * far ) / ( ( far - near ) * depth - far ); #endif -}`,Ex=`#ifdef PREMULTIPLIED_ALPHA +}`,C_=`#ifdef PREMULTIPLIED_ALPHA gl_FragColor.rgb *= gl_FragColor.a; -#endif`,Tx=`vec4 mvPosition = vec4( transformed, 1.0 ); +#endif`,w_=`vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING mvPosition = batchingMatrix * mvPosition; #endif @@ -1761,22 +1761,22 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const mvPosition = instanceMatrix * mvPosition; #endif mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,Ax=`#ifdef DITHERING +gl_Position = projectionMatrix * mvPosition;`,R_=`#ifdef DITHERING gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,wx=`#ifdef DITHERING +#endif`,D_=`#ifdef DITHERING vec3 dithering( vec3 color ) { float grid_position = rand( gl_FragCoord.xy ); vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); return color + dither_shift_RGB; } -#endif`,Cx=`float roughnessFactor = roughness; +#endif`,L_=`float roughnessFactor = roughness; #ifdef USE_ROUGHNESSMAP vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); roughnessFactor *= texelRoughness.g; -#endif`,Rx=`#ifdef USE_ROUGHNESSMAP +#endif`,I_=`#ifdef USE_ROUGHNESSMAP uniform sampler2D roughnessMap; -#endif`,Px=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,P_=`#if NUM_SPOT_LIGHT_COORDS > 0 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif #if NUM_SPOT_LIGHT_MAPS > 0 @@ -1976,7 +1976,7 @@ gl_Position = projectionMatrix * mvPosition;`,Ax=`#ifdef DITHERING } #endif #endif -#endif`,Lx=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,O_=`#if NUM_SPOT_LIGHT_COORDS > 0 uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif @@ -2017,7 +2017,7 @@ gl_Position = projectionMatrix * mvPosition;`,Ax=`#ifdef DITHERING }; uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; #endif -#endif`,Dx=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) +#endif`,U_=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) #ifdef HAS_NORMAL vec3 shadowWorldNormal = transformNormalByInverseViewMatrix( transformedNormal, viewMatrix ); #else @@ -2053,7 +2053,7 @@ gl_Position = projectionMatrix * mvPosition;`,Ax=`#ifdef DITHERING vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end -#endif`,Ix=`float getShadowMask() { +#endif`,N_=`float getShadowMask() { float shadow = 1.0; #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 @@ -2085,12 +2085,12 @@ gl_Position = projectionMatrix * mvPosition;`,Ax=`#ifdef DITHERING #endif #endif return shadow; -}`,Ux=`#ifdef USE_SKINNING +}`,k_=`#ifdef USE_SKINNING mat4 boneMatX = getBoneMatrix( skinIndex.x ); mat4 boneMatY = getBoneMatrix( skinIndex.y ); mat4 boneMatZ = getBoneMatrix( skinIndex.z ); mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,Ox=`#ifdef USE_SKINNING +#endif`,F_=`#ifdef USE_SKINNING uniform mat4 bindMatrix; uniform mat4 bindMatrixInverse; uniform highp sampler2D boneTexture; @@ -2105,7 +2105,7 @@ gl_Position = projectionMatrix * mvPosition;`,Ax=`#ifdef DITHERING vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); return mat4( v1, v2, v3, v4 ); } -#endif`,Fx=`#ifdef USE_SKINNING +#endif`,B_=`#ifdef USE_SKINNING vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); vec4 skinned = vec4( 0.0 ); skinned += boneMatX * skinVertex * skinWeight.x; @@ -2113,7 +2113,7 @@ gl_Position = projectionMatrix * mvPosition;`,Ax=`#ifdef DITHERING skinned += boneMatZ * skinVertex * skinWeight.z; skinned += boneMatW * skinVertex * skinWeight.w; transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,Nx=`#ifdef USE_SKINNING +#endif`,H_=`#ifdef USE_SKINNING mat4 skinMatrix = mat4( 0.0 ); skinMatrix += skinWeight.x * boneMatX; skinMatrix += skinWeight.y * boneMatY; @@ -2124,17 +2124,17 @@ gl_Position = projectionMatrix * mvPosition;`,Ax=`#ifdef DITHERING #ifdef USE_TANGENT objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; #endif -#endif`,kx=`float specularStrength; +#endif`,z_=`float specularStrength; #ifdef USE_SPECULARMAP vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); specularStrength = texelSpecular.r; #else specularStrength = 1.0; -#endif`,Bx=`#ifdef USE_SPECULARMAP +#endif`,V_=`#ifdef USE_SPECULARMAP uniform sampler2D specularMap; -#endif`,Hx=`#if defined( TONE_MAPPING ) +#endif`,G_=`#if defined( TONE_MAPPING ) gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,zx=`#ifndef saturate +#endif`,W_=`#ifndef saturate #define saturate( a ) clamp( a, 0.0, 1.0 ) #endif uniform float toneMappingExposure; @@ -2231,7 +2231,7 @@ vec3 NeutralToneMapping( vec3 color ) { float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); return mix( color, vec3( newPeak ), g ); } -vec3 CustomToneMapping( vec3 color ) { return color; }`,Gx=`#ifdef USE_TRANSMISSION +vec3 CustomToneMapping( vec3 color ) { return color; }`,X_=`#ifdef USE_TRANSMISSION material.transmission = transmission; material.transmissionAlpha = 1.0; material.thickness = thickness; @@ -2252,7 +2252,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,Gx=`#ifdef USE_TRANSMISS material.attenuationColor, material.attenuationDistance ); material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,Vx=`#ifdef USE_TRANSMISSION +#endif`,Y_=`#ifdef USE_TRANSMISSION uniform float transmission; uniform float thickness; uniform float attenuationDistance; @@ -2378,7 +2378,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,Gx=`#ifdef USE_TRANSMISS float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); } -#endif`,Wx=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,K_=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2448,7 +2448,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,Gx=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,Xx=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,q_=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2542,7 +2542,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,Gx=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,Yx=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,Z_=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) vUv = vec3( uv, 1 ).xy; #endif #ifdef USE_MAP @@ -2613,7 +2613,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,Gx=`#ifdef USE_TRANSMISS #endif #ifdef USE_THICKNESSMAP vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,qx=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 +#endif`,$_=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 vec4 worldPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING worldPosition = batchingMatrix * worldPosition; @@ -2622,12 +2622,12 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,Gx=`#ifdef USE_TRANSMISS worldPosition = instanceMatrix * worldPosition; #endif worldPosition = modelMatrix * worldPosition; -#endif`;const $x=`varying vec2 vUv; +#endif`;const J_=`varying vec2 vUv; uniform mat3 uvTransform; void main() { vUv = ( uvTransform * vec3( uv, 1 ) ).xy; gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,Zx=`uniform sampler2D t2D; +}`,j_=`uniform sampler2D t2D; uniform float backgroundIntensity; varying vec2 vUv; void main() { @@ -2639,14 +2639,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,Kx=`varying vec3 vWorldDirection; +}`,Q_=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,Jx=`#ifdef ENVMAP_TYPE_CUBE +}`,ex=`#ifdef ENVMAP_TYPE_CUBE uniform samplerCube envMap; #elif defined( ENVMAP_TYPE_CUBE_UV ) uniform sampler2D envMap; @@ -2668,14 +2668,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,jx=`varying vec3 vWorldDirection; +}`,tx=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,Qx=`uniform samplerCube tCube; +}`,nx=`uniform samplerCube tCube; uniform float tFlip; uniform float opacity; varying vec3 vWorldDirection; @@ -2685,7 +2685,7 @@ void main() { gl_FragColor.a *= opacity; #include #include -}`,ev=`#include +}`,ix=`#include #include #include #include @@ -2712,7 +2712,7 @@ void main() { #include #include vHighPrecisionZW = gl_Position.zw; -}`,tv=`#if DEPTH_PACKING == 3200 +}`,sx=`#if DEPTH_PACKING == 3200 uniform float opacity; #endif #include @@ -2750,7 +2750,7 @@ void main() { #elif DEPTH_PACKING == 3203 gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); #endif -}`,nv=`#define DISTANCE +}`,rx=`#define DISTANCE varying vec3 vWorldPosition; #include #include @@ -2777,7 +2777,7 @@ void main() { #include #include vWorldPosition = worldPosition.xyz; -}`,iv=`#define DISTANCE +}`,ax=`#define DISTANCE uniform vec3 referencePosition; uniform float nearDistance; uniform float farDistance; @@ -2800,13 +2800,13 @@ void main() { dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); dist = saturate( dist ); gl_FragColor = vec4( dist, 0.0, 0.0, 1.0 ); -}`,sv=`varying vec3 vWorldDirection; +}`,ox=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include -}`,rv=`uniform sampler2D tEquirect; +}`,lx=`uniform sampler2D tEquirect; varying vec3 vWorldDirection; #include void main() { @@ -2815,7 +2815,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); #include #include -}`,av=`uniform float scale; +}`,cx=`uniform float scale; attribute float lineDistance; varying float vLineDistance; #include @@ -2837,7 +2837,7 @@ void main() { #include #include #include -}`,ov=`uniform vec3 diffuse; +}`,ux=`uniform vec3 diffuse; uniform float opacity; uniform float dashSize; uniform float totalSize; @@ -2865,7 +2865,7 @@ void main() { #include #include #include -}`,lv=`#include +}`,hx=`#include #include #include #include @@ -2897,7 +2897,7 @@ void main() { #include #include #include -}`,cv=`uniform vec3 diffuse; +}`,dx=`uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; @@ -2945,7 +2945,7 @@ void main() { #include #include #include -}`,uv=`#define LAMBERT +}`,fx=`#define LAMBERT varying vec3 vViewPosition; #include #include @@ -2984,7 +2984,7 @@ void main() { #include #include #include -}`,hv=`#define LAMBERT +}`,px=`#define LAMBERT uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3042,7 +3042,7 @@ void main() { #include #include #include -}`,fv=`#define MATCAP +}`,mx=`#define MATCAP varying vec3 vViewPosition; #include #include @@ -3076,7 +3076,7 @@ void main() { #include #include vViewPosition = - mvPosition.xyz; -}`,dv=`#define MATCAP +}`,gx=`#define MATCAP uniform vec3 diffuse; uniform float opacity; uniform sampler2D matcap; @@ -3122,7 +3122,7 @@ void main() { #include #include #include -}`,pv=`#define NORMAL +}`,_x=`#define NORMAL #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; #endif @@ -3155,7 +3155,7 @@ void main() { #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) vViewPosition = - mvPosition.xyz; #endif -}`,mv=`#define NORMAL +}`,xx=`#define NORMAL uniform float opacity; #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; @@ -3176,7 +3176,7 @@ void main() { #ifdef OPAQUE gl_FragColor.a = 1.0; #endif -}`,gv=`#define PHONG +}`,yx=`#define PHONG varying vec3 vViewPosition; #include #include @@ -3215,7 +3215,7 @@ void main() { #include #include #include -}`,xv=`#define PHONG +}`,vx=`#define PHONG uniform vec3 diffuse; uniform vec3 emissive; uniform vec3 specular; @@ -3275,7 +3275,7 @@ void main() { #include #include #include -}`,vv=`#define STANDARD +}`,Sx=`#define STANDARD varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; @@ -3318,7 +3318,7 @@ void main() { #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif -}`,yv=`#define STANDARD +}`,bx=`#define STANDARD #ifdef PHYSICAL #define IOR #define USE_SPECULAR @@ -3443,7 +3443,7 @@ void main() { #include #include #include -}`,_v=`#define TOON +}`,Mx=`#define TOON varying vec3 vViewPosition; #include #include @@ -3480,7 +3480,7 @@ void main() { #include #include #include -}`,bv=`#define TOON +}`,Ax=`#define TOON uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3532,7 +3532,7 @@ void main() { #include #include #include -}`,Sv=`uniform float size; +}`,Ex=`uniform float size; uniform float scale; #include #include @@ -3563,7 +3563,7 @@ void main() { #include #include #include -}`,Mv=`uniform vec3 diffuse; +}`,Tx=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3588,7 +3588,7 @@ void main() { #include #include #include -}`,Ev=`#include +}`,Cx=`#include #include #include #include @@ -3611,7 +3611,7 @@ void main() { #include #include #include -}`,Tv=`uniform vec3 color; +}`,wx=`uniform vec3 color; uniform float opacity; #include #include @@ -3627,7 +3627,7 @@ void main() { #include #include #include -}`,Av=`uniform float rotation; +}`,Rx=`uniform float rotation; uniform vec2 center; #include #include @@ -3651,7 +3651,7 @@ void main() { #include #include #include -}`,wv=`uniform vec3 diffuse; +}`,Dx=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3676,7 +3676,7 @@ void main() { #include #include #include -}`,Je={alphahash_fragment:$g,alphahash_pars_fragment:Zg,alphamap_fragment:Kg,alphamap_pars_fragment:Jg,alphatest_fragment:jg,alphatest_pars_fragment:Qg,aomap_fragment:e0,aomap_pars_fragment:t0,batching_pars_vertex:n0,batching_vertex:i0,begin_vertex:s0,beginnormal_vertex:r0,bsdfs:a0,iridescence_fragment:o0,bumpmap_pars_fragment:l0,clipping_planes_fragment:c0,clipping_planes_pars_fragment:u0,clipping_planes_pars_vertex:h0,clipping_planes_vertex:f0,color_fragment:d0,color_pars_fragment:p0,color_pars_vertex:m0,color_vertex:g0,common:x0,cube_uv_reflection_fragment:v0,defaultnormal_vertex:y0,displacementmap_pars_vertex:_0,displacementmap_vertex:b0,emissivemap_fragment:S0,emissivemap_pars_fragment:M0,colorspace_fragment:E0,colorspace_pars_fragment:T0,envmap_fragment:A0,envmap_common_pars_fragment:w0,envmap_pars_fragment:C0,envmap_pars_vertex:R0,envmap_physical_pars_fragment:H0,envmap_vertex:P0,fog_vertex:L0,fog_pars_vertex:D0,fog_fragment:I0,fog_pars_fragment:U0,gradientmap_pars_fragment:O0,lightmap_pars_fragment:F0,lights_lambert_fragment:N0,lights_lambert_pars_fragment:k0,lights_pars_begin:B0,lights_toon_fragment:z0,lights_toon_pars_fragment:G0,lights_phong_fragment:V0,lights_phong_pars_fragment:W0,lights_physical_fragment:X0,lights_physical_pars_fragment:Y0,lights_fragment_begin:q0,lights_fragment_maps:$0,lights_fragment_end:Z0,lightprobes_pars_fragment:K0,logdepthbuf_fragment:J0,logdepthbuf_pars_fragment:j0,logdepthbuf_pars_vertex:Q0,logdepthbuf_vertex:ex,map_fragment:tx,map_pars_fragment:nx,map_particle_fragment:ix,map_particle_pars_fragment:sx,metalnessmap_fragment:rx,metalnessmap_pars_fragment:ax,morphinstance_vertex:ox,morphcolor_vertex:lx,morphnormal_vertex:cx,morphtarget_pars_vertex:ux,morphtarget_vertex:hx,normal_fragment_begin:fx,normal_fragment_maps:dx,normal_pars_fragment:px,normal_pars_vertex:mx,normal_vertex:gx,normalmap_pars_fragment:xx,clearcoat_normal_fragment_begin:vx,clearcoat_normal_fragment_maps:yx,clearcoat_pars_fragment:_x,iridescence_pars_fragment:bx,opaque_fragment:Sx,packing:Mx,premultiplied_alpha_fragment:Ex,project_vertex:Tx,dithering_fragment:Ax,dithering_pars_fragment:wx,roughnessmap_fragment:Cx,roughnessmap_pars_fragment:Rx,shadowmap_pars_fragment:Px,shadowmap_pars_vertex:Lx,shadowmap_vertex:Dx,shadowmask_pars_fragment:Ix,skinbase_vertex:Ux,skinning_pars_vertex:Ox,skinning_vertex:Fx,skinnormal_vertex:Nx,specularmap_fragment:kx,specularmap_pars_fragment:Bx,tonemapping_fragment:Hx,tonemapping_pars_fragment:zx,transmission_fragment:Gx,transmission_pars_fragment:Vx,uv_pars_fragment:Wx,uv_pars_vertex:Xx,uv_vertex:Yx,worldpos_vertex:qx,background_vert:$x,background_frag:Zx,backgroundCube_vert:Kx,backgroundCube_frag:Jx,cube_vert:jx,cube_frag:Qx,depth_vert:ev,depth_frag:tv,distance_vert:nv,distance_frag:iv,equirect_vert:sv,equirect_frag:rv,linedashed_vert:av,linedashed_frag:ov,meshbasic_vert:lv,meshbasic_frag:cv,meshlambert_vert:uv,meshlambert_frag:hv,meshmatcap_vert:fv,meshmatcap_frag:dv,meshnormal_vert:pv,meshnormal_frag:mv,meshphong_vert:gv,meshphong_frag:xv,meshphysical_vert:vv,meshphysical_frag:yv,meshtoon_vert:_v,meshtoon_frag:bv,points_vert:Sv,points_frag:Mv,shadow_vert:Ev,shadow_frag:Tv,sprite_vert:Av,sprite_frag:wv},we={common:{diffuse:{value:new et(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new $e},alphaMap:{value:null},alphaMapTransform:{value:new $e},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new $e}},envmap:{envMap:{value:null},envMapRotation:{value:new $e},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new $e}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new $e}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new $e},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new $e},normalScale:{value:new Ee(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new $e},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new $e}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new $e}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new $e}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new et(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null},probesSH:{value:null},probesMin:{value:new B},probesMax:{value:new B},probesResolution:{value:new B}},points:{diffuse:{value:new et(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new $e},alphaTest:{value:0},uvTransform:{value:new $e}},sprite:{diffuse:{value:new et(16777215)},opacity:{value:1},center:{value:new Ee(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new $e},alphaMap:{value:null},alphaMapTransform:{value:new $e},alphaTest:{value:0}}},Yn={basic:{uniforms:nn([we.common,we.specularmap,we.envmap,we.aomap,we.lightmap,we.fog]),vertexShader:Je.meshbasic_vert,fragmentShader:Je.meshbasic_frag},lambert:{uniforms:nn([we.common,we.specularmap,we.envmap,we.aomap,we.lightmap,we.emissivemap,we.bumpmap,we.normalmap,we.displacementmap,we.fog,we.lights,{emissive:{value:new et(0)},envMapIntensity:{value:1}}]),vertexShader:Je.meshlambert_vert,fragmentShader:Je.meshlambert_frag},phong:{uniforms:nn([we.common,we.specularmap,we.envmap,we.aomap,we.lightmap,we.emissivemap,we.bumpmap,we.normalmap,we.displacementmap,we.fog,we.lights,{emissive:{value:new et(0)},specular:{value:new et(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:Je.meshphong_vert,fragmentShader:Je.meshphong_frag},standard:{uniforms:nn([we.common,we.envmap,we.aomap,we.lightmap,we.emissivemap,we.bumpmap,we.normalmap,we.displacementmap,we.roughnessmap,we.metalnessmap,we.fog,we.lights,{emissive:{value:new et(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Je.meshphysical_vert,fragmentShader:Je.meshphysical_frag},toon:{uniforms:nn([we.common,we.aomap,we.lightmap,we.emissivemap,we.bumpmap,we.normalmap,we.displacementmap,we.gradientmap,we.fog,we.lights,{emissive:{value:new et(0)}}]),vertexShader:Je.meshtoon_vert,fragmentShader:Je.meshtoon_frag},matcap:{uniforms:nn([we.common,we.bumpmap,we.normalmap,we.displacementmap,we.fog,{matcap:{value:null}}]),vertexShader:Je.meshmatcap_vert,fragmentShader:Je.meshmatcap_frag},points:{uniforms:nn([we.points,we.fog]),vertexShader:Je.points_vert,fragmentShader:Je.points_frag},dashed:{uniforms:nn([we.common,we.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Je.linedashed_vert,fragmentShader:Je.linedashed_frag},depth:{uniforms:nn([we.common,we.displacementmap]),vertexShader:Je.depth_vert,fragmentShader:Je.depth_frag},normal:{uniforms:nn([we.common,we.bumpmap,we.normalmap,we.displacementmap,{opacity:{value:1}}]),vertexShader:Je.meshnormal_vert,fragmentShader:Je.meshnormal_frag},sprite:{uniforms:nn([we.sprite,we.fog]),vertexShader:Je.sprite_vert,fragmentShader:Je.sprite_frag},background:{uniforms:{uvTransform:{value:new $e},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Je.background_vert,fragmentShader:Je.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new $e}},vertexShader:Je.backgroundCube_vert,fragmentShader:Je.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Je.cube_vert,fragmentShader:Je.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Je.equirect_vert,fragmentShader:Je.equirect_frag},distance:{uniforms:nn([we.common,we.displacementmap,{referencePosition:{value:new B},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Je.distance_vert,fragmentShader:Je.distance_frag},shadow:{uniforms:nn([we.lights,we.fog,{color:{value:new et(0)},opacity:{value:1}}]),vertexShader:Je.shadow_vert,fragmentShader:Je.shadow_frag}};Yn.physical={uniforms:nn([Yn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new $e},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new $e},clearcoatNormalScale:{value:new Ee(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new $e},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new $e},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new $e},sheen:{value:0},sheenColor:{value:new et(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new $e},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new $e},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new $e},transmissionSamplerSize:{value:new Ee},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new $e},attenuationDistance:{value:0},attenuationColor:{value:new et(0)},specularColor:{value:new et(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new $e},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new $e},anisotropyVector:{value:new Ee},anisotropyMap:{value:null},anisotropyMapTransform:{value:new $e}}]),vertexShader:Je.meshphysical_vert,fragmentShader:Je.meshphysical_frag};const ya={r:0,b:0,g:0},Cv=new Tt,vd=new $e;vd.set(-1,0,0,0,1,0,0,0,1);function Rv(n,e,t,i,s,r){const a=new et(0);let o=s===!0?0:1,l,c,u=null,f=0,h=null;function d(M){let E=M.isScene===!0?M.background:null;if(E&&E.isTexture){const _=M.backgroundBlurriness>0;E=e.get(E,_)}return E}function p(M){let E=!1;const _=d(M);_===null?m(a,o):_&&_.isColor&&(m(_,1),E=!0);const T=n.xr.getEnvironmentBlendMode();T==="additive"?t.buffers.color.setClear(0,0,0,1,r):T==="alpha-blend"&&t.buffers.color.setClear(0,0,0,0,r),(n.autoClear||E)&&(t.buffers.depth.setTest(!0),t.buffers.depth.setMask(!0),t.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function x(M,E){const _=d(E);_&&(_.isCubeTexture||_.mapping===mo)?(c===void 0&&(c=new Gt(new Ur(1,1,1),new In({name:"BackgroundCubeMaterial",uniforms:Ys(Yn.backgroundCube.uniforms),vertexShader:Yn.backgroundCube.vertexShader,fragmentShader:Yn.backgroundCube.fragmentShader,side:un,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(T,b,S){this.matrixWorld.copyPosition(S.matrixWorld)},Object.defineProperty(c.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(c)),c.material.uniforms.envMap.value=_,c.material.uniforms.backgroundBlurriness.value=E.backgroundBlurriness,c.material.uniforms.backgroundIntensity.value=E.backgroundIntensity,c.material.uniforms.backgroundRotation.value.setFromMatrix4(Cv.makeRotationFromEuler(E.backgroundRotation)).transpose(),_.isCubeTexture&&_.isRenderTargetTexture===!1&&c.material.uniforms.backgroundRotation.value.premultiply(vd),c.material.toneMapped=nt.getTransfer(_.colorSpace)!==ft,(u!==_||f!==_.version||h!==n.toneMapping)&&(c.material.needsUpdate=!0,u=_,f=_.version,h=n.toneMapping),c.layers.enableAll(),M.unshift(c,c.geometry,c.material,0,0,null)):_&&_.isTexture&&(l===void 0&&(l=new Gt(new Qi(2,2),new In({name:"BackgroundMaterial",uniforms:Ys(Yn.background.uniforms),vertexShader:Yn.background.vertexShader,fragmentShader:Yn.background.fragmentShader,side:Ni,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(l)),l.material.uniforms.t2D.value=_,l.material.uniforms.backgroundIntensity.value=E.backgroundIntensity,l.material.toneMapped=nt.getTransfer(_.colorSpace)!==ft,_.matrixAutoUpdate===!0&&_.updateMatrix(),l.material.uniforms.uvTransform.value.copy(_.matrix),(u!==_||f!==_.version||h!==n.toneMapping)&&(l.material.needsUpdate=!0,u=_,f=_.version,h=n.toneMapping),l.layers.enableAll(),M.unshift(l,l.geometry,l.material,0,0,null))}function m(M,E){M.getRGB(ya,md(n)),t.buffers.color.setClear(ya.r,ya.g,ya.b,E,r)}function g(){c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0),l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0)}return{getClearColor:function(){return a},setClearColor:function(M,E=1){a.set(M),o=E,m(a,o)},getClearAlpha:function(){return o},setClearAlpha:function(M){o=M,m(a,o)},render:p,addToRenderList:x,dispose:g}}function Pv(n,e){const t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},s=h(null);let r=s,a=!1;function o(L,C,O,N,U){let Z=!1;const k=f(L,N,O,C);r!==k&&(r=k,c(r.object)),Z=d(L,N,O,U),Z&&p(L,N,O,U),U!==null&&e.update(U,n.ELEMENT_ARRAY_BUFFER),(Z||a)&&(a=!1,_(L,C,O,N),U!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(U).buffer))}function l(){return n.createVertexArray()}function c(L){return n.bindVertexArray(L)}function u(L){return n.deleteVertexArray(L)}function f(L,C,O,N){const U=N.wireframe===!0;let Z=i[C.id];Z===void 0&&(Z={},i[C.id]=Z);const k=L.isInstancedMesh===!0?L.id:0;let $=Z[k];$===void 0&&($={},Z[k]=$);let D=$[O.id];D===void 0&&(D={},$[O.id]=D);let ae=D[U];return ae===void 0&&(ae=h(l()),D[U]=ae),ae}function h(L){const C=[],O=[],N=[];for(let U=0;U=0){const re=U[D];let ee=Z[D];if(ee===void 0&&(D==="instanceMatrix"&&L.instanceMatrix&&(ee=L.instanceMatrix),D==="instanceColor"&&L.instanceColor&&(ee=L.instanceColor)),re===void 0||re.attribute!==ee||ee&&re.data!==ee.data)return!0;k++}return r.attributesNum!==k||r.index!==N}function p(L,C,O,N){const U={},Z=C.attributes;let k=0;const $=O.getAttributes();for(const D in $)if($[D].location>=0){let re=Z[D];re===void 0&&(D==="instanceMatrix"&&L.instanceMatrix&&(re=L.instanceMatrix),D==="instanceColor"&&L.instanceColor&&(re=L.instanceColor));const ee={};ee.attribute=re,re&&re.data&&(ee.data=re.data),U[D]=ee,k++}r.attributes=U,r.attributesNum=k,r.index=N}function x(){const L=r.newAttributes;for(let C=0,O=L.length;C=0){let ae=U[$];if(ae===void 0&&($==="instanceMatrix"&&L.instanceMatrix&&(ae=L.instanceMatrix),$==="instanceColor"&&L.instanceColor&&(ae=L.instanceColor)),ae!==void 0){const re=ae.normalized,ee=ae.itemSize,ce=e.get(ae);if(ce===void 0)continue;const he=ce.buffer,fe=ce.type,X=ce.bytesPerElement,se=fe===n.INT||fe===n.UNSIGNED_INT||ae.gpuType===Rc;if(ae.isInterleavedBufferAttribute){const Q=ae.data,ye=Q.stride,ve=ae.offset;if(Q.isInstancedInterleavedBuffer){for(let _e=0;_e0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";S="mediump"}return S==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp";const u=l(c);u!==c&&(We("WebGLRenderer:",c,"not supported, using",u,"instead."),c=u);const f=t.logarithmicDepthBuffer===!0,h=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control");t.reversedDepthBuffer===!0&&h===!1&&We("WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.");const d=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),p=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),x=n.getParameter(n.MAX_TEXTURE_SIZE),m=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),g=n.getParameter(n.MAX_VERTEX_ATTRIBS),M=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),E=n.getParameter(n.MAX_VARYING_VECTORS),_=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),T=n.getParameter(n.MAX_SAMPLES),b=n.getParameter(n.SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:f,reversedDepthBuffer:h,maxTextures:d,maxVertexTextures:p,maxTextureSize:x,maxCubemapSize:m,maxAttributes:g,maxVertexUniforms:M,maxVaryings:E,maxFragmentUniforms:_,maxSamples:T,samples:b}}function Iv(n){const e=this;let t=null,i=0,s=!1,r=!1;const a=new Ri,o=new $e,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(f,h){const d=f.length!==0||h||i!==0||s;return s=h,i=f.length,d},this.beginShadows=function(){r=!0,u(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(f,h){t=u(f,h,0)},this.setState=function(f,h,d){const p=f.clippingPlanes,x=f.clipIntersection,m=f.clipShadows,g=n.get(f);if(!s||p===null||p.length===0||r&&!m)r?u(null):c();else{const M=r?0:i,E=M*4;let _=g.clippingState||null;l.value=_,_=u(p,h,E,d);for(let T=0;T!==E;++T)_[T]=t[T];g.clippingState=_,this.numIntersection=x?this.numPlanes:0,this.numPlanes+=M}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(f,h,d,p){const x=f!==null?f.length:0;let m=null;if(x!==0){if(m=l.value,p!==!0||m===null){const g=d+x*4,M=h.matrixWorldInverse;o.getNormalMatrix(M),(m===null||m.length0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=rh(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=sh(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._ggxMaterial!==null&&this._ggxMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?T:0,T,T),f.setRenderTarget(s),g&&f.render(x,l),f.render(e,l)}f.toneMapping=d,f.autoClear=h,e.background=M}_textureToCubeUV(e,t){const i=this._renderer,s=e.mapping===es||e.mapping===Vs;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=rh()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=sh());const r=s?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=r;const o=r.uniforms;o.envMap.value=e;const l=this._cubeSize;Ds(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(a,hr)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;const s=this._lodMeshes.length;for(let r=1;rp-Ii?i-p+Ii:0),g=4*(this._cubeSize-x);l.envMap.value=e.texture,l.roughness.value=d,l.mipInt.value=p-t,Ds(r,m,g,3*x,2*x),s.setRenderTarget(r),s.render(o,hr),l.envMap.value=r.texture,l.roughness.value=0,l.mipInt.value=p-i,Ds(e,m,g,3*x,2*x),s.setRenderTarget(e),s.render(o,hr)}_blur(e,t,i,s,r){const a=this._pingPongRenderTarget;this._halfBlur(e,a,t,i,s,"latitudinal",r),this._halfBlur(a,e,i,i,s,"longitudinal",r)}_halfBlur(e,t,i,s,r,a,o){const l=this._renderer,c=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&st("blur direction must be either latitudinal or longitudinal!");const u=3,f=this._lodMeshes[s];f.material=c;const h=c.uniforms,d=this._sizeLods[i]-1,p=isFinite(r)?Math.PI/(2*d):2*Math.PI/(2*Zi-1),x=r/p,m=isFinite(r)?1+Math.floor(u*x):Zi;m>Zi&&We(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Zi}`);const g=[];let M=0;for(let S=0;SE-Ii?s-E+Ii:0),b=4*(this._cubeSize-_);Ds(t,T,b,3*_,2*_),l.setRenderTarget(t),l.render(f,hr)}}function Fv(n){const e=[],t=[],i=[];let s=n;const r=n-Ii+1+eh.length;for(let a=0;an-Ii?l=eh[a-n+Ii-1]:a===0&&(l=0),t.push(l);const c=1/(o-2),u=-c,f=1+c,h=[u,u,f,u,f,f,u,u,f,f,u,f],d=6,p=6,x=3,m=2,g=1,M=new Float32Array(x*p*d),E=new Float32Array(m*p*d),_=new Float32Array(g*p*d);for(let b=0;b2?0:-1,w=[S,v,0,S+2/3,v,0,S+2/3,v+1,0,S,v,0,S+2/3,v+1,0,S,v+1,0];M.set(w,x*p*b),E.set(h,m*p*b);const I=[b,b,b,b,b,b];_.set(I,g*p*b)}const T=new wt;T.setAttribute("position",new Dn(M,x)),T.setAttribute("uv",new Dn(E,m)),T.setAttribute("faceIndex",new Dn(_,g)),i.push(new Gt(T,null)),s>Ii&&s--}return{lodMeshes:i,sizeLods:e,sigmas:t}}function ih(n,e,t){const i=new Jn(n,e,t);return i.texture.mapping=mo,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Ds(n,e,t,i,s){n.viewport.set(e,t,i,s),n.scissor.set(e,t,i,s)}function Nv(n,e,t){return new In({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:Uv,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:xo(),fragmentShader:` +}`,Je={alphahash_fragment:Jm,alphahash_pars_fragment:jm,alphamap_fragment:Qm,alphamap_pars_fragment:eg,alphatest_fragment:tg,alphatest_pars_fragment:ng,aomap_fragment:ig,aomap_pars_fragment:sg,batching_pars_vertex:rg,batching_vertex:ag,begin_vertex:og,beginnormal_vertex:lg,bsdfs:cg,iridescence_fragment:ug,bumpmap_pars_fragment:hg,clipping_planes_fragment:dg,clipping_planes_pars_fragment:fg,clipping_planes_pars_vertex:pg,clipping_planes_vertex:mg,color_fragment:gg,color_pars_fragment:_g,color_pars_vertex:xg,color_vertex:yg,common:vg,cube_uv_reflection_fragment:Sg,defaultnormal_vertex:bg,displacementmap_pars_vertex:Mg,displacementmap_vertex:Ag,emissivemap_fragment:Eg,emissivemap_pars_fragment:Tg,colorspace_fragment:Cg,colorspace_pars_fragment:wg,envmap_fragment:Rg,envmap_common_pars_fragment:Dg,envmap_pars_fragment:Lg,envmap_pars_vertex:Ig,envmap_physical_pars_fragment:Gg,envmap_vertex:Pg,fog_vertex:Og,fog_pars_vertex:Ug,fog_fragment:Ng,fog_pars_fragment:kg,gradientmap_pars_fragment:Fg,lightmap_pars_fragment:Bg,lights_lambert_fragment:Hg,lights_lambert_pars_fragment:zg,lights_pars_begin:Vg,lights_toon_fragment:Wg,lights_toon_pars_fragment:Xg,lights_phong_fragment:Yg,lights_phong_pars_fragment:Kg,lights_physical_fragment:qg,lights_physical_pars_fragment:Zg,lights_fragment_begin:$g,lights_fragment_maps:Jg,lights_fragment_end:jg,lightprobes_pars_fragment:Qg,logdepthbuf_fragment:e_,logdepthbuf_pars_fragment:t_,logdepthbuf_pars_vertex:n_,logdepthbuf_vertex:i_,map_fragment:s_,map_pars_fragment:r_,map_particle_fragment:a_,map_particle_pars_fragment:o_,metalnessmap_fragment:l_,metalnessmap_pars_fragment:c_,morphinstance_vertex:u_,morphcolor_vertex:h_,morphnormal_vertex:d_,morphtarget_pars_vertex:f_,morphtarget_vertex:p_,normal_fragment_begin:m_,normal_fragment_maps:g_,normal_pars_fragment:__,normal_pars_vertex:x_,normal_vertex:y_,normalmap_pars_fragment:v_,clearcoat_normal_fragment_begin:S_,clearcoat_normal_fragment_maps:b_,clearcoat_pars_fragment:M_,iridescence_pars_fragment:A_,opaque_fragment:E_,packing:T_,premultiplied_alpha_fragment:C_,project_vertex:w_,dithering_fragment:R_,dithering_pars_fragment:D_,roughnessmap_fragment:L_,roughnessmap_pars_fragment:I_,shadowmap_pars_fragment:P_,shadowmap_pars_vertex:O_,shadowmap_vertex:U_,shadowmask_pars_fragment:N_,skinbase_vertex:k_,skinning_pars_vertex:F_,skinning_vertex:B_,skinnormal_vertex:H_,specularmap_fragment:z_,specularmap_pars_fragment:V_,tonemapping_fragment:G_,tonemapping_pars_fragment:W_,transmission_fragment:X_,transmission_pars_fragment:Y_,uv_pars_fragment:K_,uv_pars_vertex:q_,uv_vertex:Z_,worldpos_vertex:$_,background_vert:J_,background_frag:j_,backgroundCube_vert:Q_,backgroundCube_frag:ex,cube_vert:tx,cube_frag:nx,depth_vert:ix,depth_frag:sx,distance_vert:rx,distance_frag:ax,equirect_vert:ox,equirect_frag:lx,linedashed_vert:cx,linedashed_frag:ux,meshbasic_vert:hx,meshbasic_frag:dx,meshlambert_vert:fx,meshlambert_frag:px,meshmatcap_vert:mx,meshmatcap_frag:gx,meshnormal_vert:_x,meshnormal_frag:xx,meshphong_vert:yx,meshphong_frag:vx,meshphysical_vert:Sx,meshphysical_frag:bx,meshtoon_vert:Mx,meshtoon_frag:Ax,points_vert:Ex,points_frag:Tx,shadow_vert:Cx,shadow_frag:wx,sprite_vert:Rx,sprite_frag:Dx},Ce={common:{diffuse:{value:new et(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Ze},alphaMap:{value:null},alphaMapTransform:{value:new Ze},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Ze}},envmap:{envMap:{value:null},envMapRotation:{value:new Ze},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Ze}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Ze}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Ze},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Ze},normalScale:{value:new Me(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Ze},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Ze}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Ze}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Ze}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new et(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null},probesSH:{value:null},probesMin:{value:new H},probesMax:{value:new H},probesResolution:{value:new H}},points:{diffuse:{value:new et(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Ze},alphaTest:{value:0},uvTransform:{value:new Ze}},sprite:{diffuse:{value:new et(16777215)},opacity:{value:1},center:{value:new Me(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Ze},alphaMap:{value:null},alphaMapTransform:{value:new Ze},alphaTest:{value:0}}},Zn={basic:{uniforms:en([Ce.common,Ce.specularmap,Ce.envmap,Ce.aomap,Ce.lightmap,Ce.fog]),vertexShader:Je.meshbasic_vert,fragmentShader:Je.meshbasic_frag},lambert:{uniforms:en([Ce.common,Ce.specularmap,Ce.envmap,Ce.aomap,Ce.lightmap,Ce.emissivemap,Ce.bumpmap,Ce.normalmap,Ce.displacementmap,Ce.fog,Ce.lights,{emissive:{value:new et(0)},envMapIntensity:{value:1}}]),vertexShader:Je.meshlambert_vert,fragmentShader:Je.meshlambert_frag},phong:{uniforms:en([Ce.common,Ce.specularmap,Ce.envmap,Ce.aomap,Ce.lightmap,Ce.emissivemap,Ce.bumpmap,Ce.normalmap,Ce.displacementmap,Ce.fog,Ce.lights,{emissive:{value:new et(0)},specular:{value:new et(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:Je.meshphong_vert,fragmentShader:Je.meshphong_frag},standard:{uniforms:en([Ce.common,Ce.envmap,Ce.aomap,Ce.lightmap,Ce.emissivemap,Ce.bumpmap,Ce.normalmap,Ce.displacementmap,Ce.roughnessmap,Ce.metalnessmap,Ce.fog,Ce.lights,{emissive:{value:new et(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Je.meshphysical_vert,fragmentShader:Je.meshphysical_frag},toon:{uniforms:en([Ce.common,Ce.aomap,Ce.lightmap,Ce.emissivemap,Ce.bumpmap,Ce.normalmap,Ce.displacementmap,Ce.gradientmap,Ce.fog,Ce.lights,{emissive:{value:new et(0)}}]),vertexShader:Je.meshtoon_vert,fragmentShader:Je.meshtoon_frag},matcap:{uniforms:en([Ce.common,Ce.bumpmap,Ce.normalmap,Ce.displacementmap,Ce.fog,{matcap:{value:null}}]),vertexShader:Je.meshmatcap_vert,fragmentShader:Je.meshmatcap_frag},points:{uniforms:en([Ce.points,Ce.fog]),vertexShader:Je.points_vert,fragmentShader:Je.points_frag},dashed:{uniforms:en([Ce.common,Ce.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Je.linedashed_vert,fragmentShader:Je.linedashed_frag},depth:{uniforms:en([Ce.common,Ce.displacementmap]),vertexShader:Je.depth_vert,fragmentShader:Je.depth_frag},normal:{uniforms:en([Ce.common,Ce.bumpmap,Ce.normalmap,Ce.displacementmap,{opacity:{value:1}}]),vertexShader:Je.meshnormal_vert,fragmentShader:Je.meshnormal_frag},sprite:{uniforms:en([Ce.sprite,Ce.fog]),vertexShader:Je.sprite_vert,fragmentShader:Je.sprite_frag},background:{uniforms:{uvTransform:{value:new Ze},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Je.background_vert,fragmentShader:Je.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Ze}},vertexShader:Je.backgroundCube_vert,fragmentShader:Je.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Je.cube_vert,fragmentShader:Je.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Je.equirect_vert,fragmentShader:Je.equirect_frag},distance:{uniforms:en([Ce.common,Ce.displacementmap,{referencePosition:{value:new H},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Je.distance_vert,fragmentShader:Je.distance_frag},shadow:{uniforms:en([Ce.lights,Ce.fog,{color:{value:new et(0)},opacity:{value:1}}]),vertexShader:Je.shadow_vert,fragmentShader:Je.shadow_frag}};Zn.physical={uniforms:en([Zn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Ze},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Ze},clearcoatNormalScale:{value:new Me(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Ze},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Ze},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Ze},sheen:{value:0},sheenColor:{value:new et(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Ze},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Ze},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Ze},transmissionSamplerSize:{value:new Me},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Ze},attenuationDistance:{value:0},attenuationColor:{value:new et(0)},specularColor:{value:new et(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Ze},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Ze},anisotropyVector:{value:new Me},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Ze}}]),vertexShader:Je.meshphysical_vert,fragmentShader:Je.meshphysical_frag};const va={r:0,b:0,g:0},Lx=new Et,vf=new Ze;vf.set(-1,0,0,0,1,0,0,0,1);function Ix(n,e,t,i,s,r){const a=new et(0);let o=s===!0?0:1,l,c,u=null,d=0,h=null;function f(b){let A=b.isScene===!0?b.background:null;if(A&&A.isTexture){const x=b.backgroundBlurriness>0;A=e.get(A,x)}return A}function m(b){let A=!1;const x=f(b);x===null?p(a,o):x&&x.isColor&&(p(x,1),A=!0);const E=n.xr.getEnvironmentBlendMode();E==="additive"?t.buffers.color.setClear(0,0,0,1,r):E==="alpha-blend"&&t.buffers.color.setClear(0,0,0,0,r),(n.autoClear||A)&&(t.buffers.depth.setTest(!0),t.buffers.depth.setMask(!0),t.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function _(b,A){const x=f(A);x&&(x.isCubeTexture||x.mapping===go)?(c===void 0&&(c=new zt(new Ur(1,1,1),new Pn({name:"BackgroundCubeMaterial",uniforms:Ks(Zn.backgroundCube.uniforms),vertexShader:Zn.backgroundCube.vertexShader,fragmentShader:Zn.backgroundCube.fragmentShader,side:on,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(E,S,M){this.matrixWorld.copyPosition(M.matrixWorld)},Object.defineProperty(c.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(c)),c.material.uniforms.envMap.value=x,c.material.uniforms.backgroundBlurriness.value=A.backgroundBlurriness,c.material.uniforms.backgroundIntensity.value=A.backgroundIntensity,c.material.uniforms.backgroundRotation.value.setFromMatrix4(Lx.makeRotationFromEuler(A.backgroundRotation)).transpose(),x.isCubeTexture&&x.isRenderTargetTexture===!1&&c.material.uniforms.backgroundRotation.value.premultiply(vf),c.material.toneMapped=it.getTransfer(x.colorSpace)!==pt,(u!==x||d!==x.version||h!==n.toneMapping)&&(c.material.needsUpdate=!0,u=x,d=x.version,h=n.toneMapping),c.layers.enableAll(),b.unshift(c,c.geometry,c.material,0,0,null)):x&&x.isTexture&&(l===void 0&&(l=new zt(new is(2,2),new Pn({name:"BackgroundMaterial",uniforms:Ks(Zn.background.uniforms),vertexShader:Zn.background.vertexShader,fragmentShader:Zn.background.fragmentShader,side:Hi,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(l)),l.material.uniforms.t2D.value=x,l.material.uniforms.backgroundIntensity.value=A.backgroundIntensity,l.material.toneMapped=it.getTransfer(x.colorSpace)!==pt,x.matrixAutoUpdate===!0&&x.updateMatrix(),l.material.uniforms.uvTransform.value.copy(x.matrix),(u!==x||d!==x.version||h!==n.toneMapping)&&(l.material.needsUpdate=!0,u=x,d=x.version,h=n.toneMapping),l.layers.enableAll(),b.unshift(l,l.geometry,l.material,0,0,null))}function p(b,A){b.getRGB(va,_f(n)),t.buffers.color.setClear(va.r,va.g,va.b,A,r)}function g(){c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0),l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0)}return{getClearColor:function(){return a},setClearColor:function(b,A=1){a.set(b),o=A,p(a,o)},getClearAlpha:function(){return o},setClearAlpha:function(b){o=b,p(a,o)},render:m,addToRenderList:_,dispose:g}}function Px(n,e){const t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},s=h(null);let r=s,a=!1;function o(L,w,U,k,O){let $=!1;const F=d(L,k,U,w);r!==F&&(r=F,c(r.object)),$=f(L,k,U,O),$&&m(L,k,U,O),O!==null&&e.update(O,n.ELEMENT_ARRAY_BUFFER),($||a)&&(a=!1,x(L,w,U,k),O!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(O).buffer))}function l(){return n.createVertexArray()}function c(L){return n.bindVertexArray(L)}function u(L){return n.deleteVertexArray(L)}function d(L,w,U,k){const O=k.wireframe===!0;let $=i[w.id];$===void 0&&($={},i[w.id]=$);const F=L.isInstancedMesh===!0?L.id:0;let Z=$[F];Z===void 0&&(Z={},$[F]=Z);let R=Z[U.id];R===void 0&&(R={},Z[U.id]=R);let re=R[O];return re===void 0&&(re=h(l()),R[O]=re),re}function h(L){const w=[],U=[],k=[];for(let O=0;O=0){const se=O[R];let ae=$[R];if(ae===void 0&&(R==="instanceMatrix"&&L.instanceMatrix&&(ae=L.instanceMatrix),R==="instanceColor"&&L.instanceColor&&(ae=L.instanceColor)),se===void 0||se.attribute!==ae||ae&&se.data!==ae.data)return!0;F++}return r.attributesNum!==F||r.index!==k}function m(L,w,U,k){const O={},$=w.attributes;let F=0;const Z=U.getAttributes();for(const R in Z)if(Z[R].location>=0){let se=$[R];se===void 0&&(R==="instanceMatrix"&&L.instanceMatrix&&(se=L.instanceMatrix),R==="instanceColor"&&L.instanceColor&&(se=L.instanceColor));const ae={};ae.attribute=se,se&&se.data&&(ae.data=se.data),O[R]=ae,F++}r.attributes=O,r.attributesNum=F,r.index=k}function _(){const L=r.newAttributes;for(let w=0,U=L.length;w=0){let re=O[Z];if(re===void 0&&(Z==="instanceMatrix"&&L.instanceMatrix&&(re=L.instanceMatrix),Z==="instanceColor"&&L.instanceColor&&(re=L.instanceColor)),re!==void 0){const se=re.normalized,ae=re.itemSize,ge=e.get(re);if(ge===void 0)continue;const he=ge.buffer,oe=ge.type,G=ge.bytesPerElement,ne=oe===n.INT||oe===n.UNSIGNED_INT||re.gpuType===Lc;if(re.isInterleavedBufferAttribute){const j=re.data,xe=j.stride,be=re.offset;if(j.isInstancedInterleavedBuffer){for(let ve=0;ve0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";M="mediump"}return M==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp";const u=l(c);u!==c&&(Ke("WebGLRenderer:",c,"not supported, using",u,"instead."),c=u);const d=t.logarithmicDepthBuffer===!0,h=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control");t.reversedDepthBuffer===!0&&h===!1&&Ke("WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.");const f=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),m=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),_=n.getParameter(n.MAX_TEXTURE_SIZE),p=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),g=n.getParameter(n.MAX_VERTEX_ATTRIBS),b=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),A=n.getParameter(n.MAX_VARYING_VECTORS),x=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),E=n.getParameter(n.MAX_SAMPLES),S=n.getParameter(n.SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:d,reversedDepthBuffer:h,maxTextures:f,maxVertexTextures:m,maxTextureSize:_,maxCubemapSize:p,maxAttributes:g,maxVertexUniforms:b,maxVaryings:A,maxFragmentUniforms:x,maxSamples:E,samples:S}}function Nx(n){const e=this;let t=null,i=0,s=!1,r=!1;const a=new Ii,o=new Ze,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(d,h){const f=d.length!==0||h||i!==0||s;return s=h,i=d.length,f},this.beginShadows=function(){r=!0,u(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(d,h){t=u(d,h,0)},this.setState=function(d,h,f){const m=d.clippingPlanes,_=d.clipIntersection,p=d.clipShadows,g=n.get(d);if(!s||m===null||m.length===0||r&&!p)r?u(null):c();else{const b=r?0:i,A=b*4;let x=g.clippingState||null;l.value=x,x=u(m,h,A,f);for(let E=0;E!==A;++E)x[E]=t[E];g.clippingState=x,this.numIntersection=_?this.numPlanes:0,this.numPlanes+=b}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(d,h,f,m){const _=d!==null?d.length:0;let p=null;if(_!==0){if(p=l.value,m!==!0||p===null){const g=f+_*4,b=h.matrixWorldInverse;o.getNormalMatrix(b),(p===null||p.length0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=oh(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=ah(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._ggxMaterial!==null&&this._ggxMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?E:0,E,E),d.setRenderTarget(s),g&&d.render(_,l),d.render(e,l)}d.toneMapping=f,d.autoClear=h,e.background=b}_textureToCubeUV(e,t){const i=this._renderer,s=e.mapping===ss||e.mapping===Ws;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=oh()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=ah());const r=s?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=r;const o=r.uniforms;o.envMap.value=e;const l=this._cubeSize;Ps(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(a,dr)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;const s=this._lodMeshes.length;for(let r=1;rm-Ni?i-m+Ni:0),g=4*(this._cubeSize-_);l.envMap.value=e.texture,l.roughness.value=f,l.mipInt.value=m-t,Ps(r,p,g,3*_,2*_),s.setRenderTarget(r),s.render(o,dr),l.envMap.value=r.texture,l.roughness.value=0,l.mipInt.value=m-i,Ps(e,p,g,3*_,2*_),s.setRenderTarget(e),s.render(o,dr)}_blur(e,t,i,s,r){const a=this._pingPongRenderTarget;this._halfBlur(e,a,t,i,s,"latitudinal",r),this._halfBlur(a,e,i,i,s,"longitudinal",r)}_halfBlur(e,t,i,s,r,a,o){const l=this._renderer,c=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&at("blur direction must be either latitudinal or longitudinal!");const u=3,d=this._lodMeshes[s];d.material=c;const h=c.uniforms,f=this._sizeLods[i]-1,m=isFinite(r)?Math.PI/(2*f):2*Math.PI/(2*Qi-1),_=r/m,p=isFinite(r)?1+Math.floor(u*_):Qi;p>Qi&&Ke(`sigmaRadians, ${r}, is too large and will clip, as it requested ${p} samples when the maximum is set to ${Qi}`);const g=[];let b=0;for(let M=0;MA-Ni?s-A+Ni:0),S=4*(this._cubeSize-x);Ps(t,E,S,3*x,2*x),l.setRenderTarget(t),l.render(d,dr)}}function Bx(n){const e=[],t=[],i=[];let s=n;const r=n-Ni+1+nh.length;for(let a=0;an-Ni?l=nh[a-n+Ni-1]:a===0&&(l=0),t.push(l);const c=1/(o-2),u=-c,d=1+c,h=[u,u,d,u,d,d,u,u,d,d,u,d],f=6,m=6,_=3,p=2,g=1,b=new Float32Array(_*m*f),A=new Float32Array(p*m*f),x=new Float32Array(g*m*f);for(let S=0;S2?0:-1,T=[M,y,0,M+2/3,y,0,M+2/3,y+1,0,M,y,0,M+2/3,y+1,0,M,y+1,0];b.set(T,_*m*S),A.set(h,p*m*S);const I=[S,S,S,S,S,S];x.set(I,g*m*S)}const E=new Ct;E.setAttribute("position",new In(b,_)),E.setAttribute("uv",new In(A,p)),E.setAttribute("faceIndex",new In(x,g)),i.push(new zt(E,null)),s>Ni&&s--}return{lodMeshes:i,sizeLods:e,sigmas:t}}function rh(n,e,t){const i=new ei(n,e,t);return i.texture.mapping=go,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Ps(n,e,t,i,s){n.viewport.set(e,t,i,s),n.scissor.set(e,t,i,s)}function Hx(n,e,t){return new Pn({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:kx,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:xo(),fragmentShader:` precision highp float; precision highp int; @@ -3780,7 +3780,7 @@ void main() { gl_FragColor = vec4(prefilteredColor, 1.0); } - `,blending:hi,depthTest:!1,depthWrite:!1})}function kv(n,e,t){const i=new Float32Array(Zi),s=new B(0,1,0);return new In({name:"SphericalGaussianBlur",defines:{n:Zi,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:xo(),fragmentShader:` + `,blending:fi,depthTest:!1,depthWrite:!1})}function zx(n,e,t){const i=new Float32Array(Qi),s=new H(0,1,0);return new Pn({name:"SphericalGaussianBlur",defines:{n:Qi,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:xo(),fragmentShader:` precision mediump float; precision mediump int; @@ -3840,7 +3840,7 @@ void main() { } } - `,blending:hi,depthTest:!1,depthWrite:!1})}function sh(){return new In({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:xo(),fragmentShader:` + `,blending:fi,depthTest:!1,depthWrite:!1})}function ah(){return new Pn({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:xo(),fragmentShader:` precision mediump float; precision mediump int; @@ -3859,7 +3859,7 @@ void main() { gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } - `,blending:hi,depthTest:!1,depthWrite:!1})}function rh(){return new In({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:xo(),fragmentShader:` + `,blending:fi,depthTest:!1,depthWrite:!1})}function oh(){return new Pn({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:xo(),fragmentShader:` precision mediump float; precision mediump int; @@ -3875,7 +3875,7 @@ void main() { gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); } - `,blending:hi,depthTest:!1,depthWrite:!1})}function xo(){return` + `,blending:fi,depthTest:!1,depthWrite:!1})}function xo(){return` precision mediump float; precision mediump int; @@ -3930,7 +3930,7 @@ void main() { gl_Position = vec4( position, 1.0 ); } - `}class yd extends Jn{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const i={width:e,height:e,depth:1},s=[i,i,i,i,i,i];this.texture=new sd(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:` + `}class Sf extends ei{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const i={width:e,height:e,depth:1},s=[i,i,i,i,i,i];this.texture=new af(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:` varying vec3 vWorldDirection; @@ -3965,7 +3965,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); } - `},s=new Ur(5,5,5),r=new In({name:"CubemapFromEquirect",uniforms:Ys(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:un,blending:hi});r.uniforms.tEquirect.value=t;const a=new Gt(s,r),o=t.minFilter;return t.minFilter===Di&&(t.minFilter=Xt),new Vg(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t=!0,i=!0,s=!0){const r=e.getRenderTarget();for(let a=0;a<6;a++)e.setRenderTarget(this,a),e.clear(t,i,s);e.setRenderTarget(r)}}function Bv(n){let e=new WeakMap,t=new WeakMap,i=null;function s(h,d=!1){return h==null?null:d?a(h):r(h)}function r(h){if(h&&h.isTexture){const d=h.mapping;if(d===Mo||d===Eo)if(e.has(h)){const p=e.get(h).texture;return o(p,h.mapping)}else{const p=h.image;if(p&&p.height>0){const x=new yd(p.height);return x.fromEquirectangularTexture(n,h),e.set(h,x),h.addEventListener("dispose",c),o(x.texture,h.mapping)}else return null}}return h}function a(h){if(h&&h.isTexture){const d=h.mapping,p=d===Mo||d===Eo,x=d===es||d===Vs;if(p||x){let m=t.get(h);const g=m!==void 0?m.texture.pmremVersion:0;if(h.isRenderTargetTexture&&h.pmremVersion!==g)return i===null&&(i=new nh(n)),m=p?i.fromEquirectangular(h,m):i.fromCubemap(h,m),m.texture.pmremVersion=h.pmremVersion,t.set(h,m),m.texture;if(m!==void 0)return m.texture;{const M=h.image;return p&&M&&M.height>0||x&&M&&l(M)?(i===null&&(i=new nh(n)),m=p?i.fromEquirectangular(h):i.fromCubemap(h),m.texture.pmremVersion=h.pmremVersion,t.set(h,m),h.addEventListener("dispose",u),m.texture):null}}}return h}function o(h,d){return d===Mo?h.mapping=es:d===Eo&&(h.mapping=Vs),h}function l(h){let d=0;const p=6;for(let x=0;x=65535?Qf:jf)(h,1);m.version=x;const g=r.get(f);g&&e.remove(g),r.set(f,m)}function u(f){const h=r.get(f);if(h){const d=f.index;d!==null&&h.versione.maxTextureSize&&(b=Math.ceil(T/e.maxTextureSize),T=e.maxTextureSize);const S=new Float32Array(T*b*4*f),v=new Zf(S,T,b,f);v.type=Ln,v.needsUpdate=!0;const w=_*4;for(let L=0;L0){const _=new Sf(m.height);return _.fromEquirectangularTexture(n,h),e.set(h,_),h.addEventListener("dispose",c),o(_.texture,h.mapping)}else return null}}return h}function a(h){if(h&&h.isTexture){const f=h.mapping,m=f===Ao||f===Eo,_=f===ss||f===Ws;if(m||_){let p=t.get(h);const g=p!==void 0?p.texture.pmremVersion:0;if(h.isRenderTargetTexture&&h.pmremVersion!==g)return i===null&&(i=new sh(n)),p=m?i.fromEquirectangular(h,p):i.fromCubemap(h,p),p.texture.pmremVersion=h.pmremVersion,t.set(h,p),p.texture;if(p!==void 0)return p.texture;{const b=h.image;return m&&b&&b.height>0||_&&b&&l(b)?(i===null&&(i=new sh(n)),p=m?i.fromEquirectangular(h):i.fromCubemap(h),p.texture.pmremVersion=h.pmremVersion,t.set(h,p),h.addEventListener("dispose",u),p.texture):null}}}return h}function o(h,f){return f===Ao?h.mapping=ss:f===Eo&&(h.mapping=Ws),h}function l(h){let f=0;const m=6;for(let _=0;_=65535?ef:Qd)(h,1);p.version=_;const g=r.get(d);g&&e.remove(g),r.set(d,p)}function u(d){const h=r.get(d);if(h){const f=d.index;f!==null&&h.versione.maxTextureSize&&(S=Math.ceil(E/e.maxTextureSize),E=e.maxTextureSize);const M=new Float32Array(E*S*4*d),y=new $d(M,E,S,d);y.type=Ln,y.needsUpdate=!0;const T=x*4;for(let L=0;L0&&g[0].isRenderPass===!0;const _=a.width,T=a.height;for(let b=0;b0)return n;const s=e*t;let r=ah[s];if(r===void 0&&(r=new Float32Array(s),ah[s]=r),e!==0){i.toArray(r,0);for(let a=1,o=0;a!==e;++a)o+=t,n[a].toArray(r,o)}return r}function Nt(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t0&&(this.seq=s.concat(r))}setValue(e,t,i,s){const r=this.map[t];r!==void 0&&r.setValue(e,i,s)}setOptional(e,t,i){const s=t[i];s!==void 0&&this.setValue(e,i,s)}static upload(e,t,i,s){for(let r=0,a=t.length;r!==a;++r){const o=t[r],l=i[o.id];l.needsUpdate!==!1&&o.setValue(e,l.value,s)}}static seqWithValue(e,t){const i=[];for(let s=0,r=e.length;s!==r;++s){const a=e[s];a.id in t&&i.push(a)}return i}}function fh(n,e,t){const i=n.createShader(e);return n.shaderSource(i,t),n.compileShader(i),i}const ky=37297;let By=0;function Hy(n,e){const t=n.split(` + }`,depthTest:!1,depthWrite:!1}),u=new zt(l,c),d=new Wc(-1,1,1,-1,0,1);let h=null,f=null,m=!1,_,p=null,g=[],b=!1;this.setSize=function(A,x){a.setSize(A,x),o.setSize(A,x);for(let E=0;E0&&g[0].isRenderPass===!0;const x=a.width,E=a.height;for(let S=0;S0)return n;const s=e*t;let r=lh[s];if(r===void 0&&(r=new Float32Array(s),lh[s]=r),e!==0){i.toArray(r,0);for(let a=1,o=0;a!==e;++a)o+=t,n[a].toArray(r,o)}return r}function Nt(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t0&&(this.seq=s.concat(r))}setValue(e,t,i,s){const r=this.map[t];r!==void 0&&r.setValue(e,i,s)}setOptional(e,t,i){const s=t[i];s!==void 0&&this.setValue(e,i,s)}static upload(e,t,i,s){for(let r=0,a=t.length;r!==a;++r){const o=t[r],l=i[o.id];l.needsUpdate!==!1&&o.setValue(e,l.value,s)}}static seqWithValue(e,t){const i=[];for(let s=0,r=e.length;s!==r;++s){const a=e[s];a.id in t&&i.push(a)}return i}}function ph(n,e,t){const i=n.createShader(e);return n.shaderSource(i,t),n.compileShader(i),i}const z1=37297;let V1=0;function G1(n,e){const t=n.split(` `),i=[],s=Math.max(e-6,0),r=Math.min(e+6,t.length);for(let a=s;a":" "} ${o}: ${t[a]}`)}return i.join(` -`)}const dh=new $e;function zy(n){nt._getMatrix(dh,nt.workingColorSpace,n);const e=`mat3( ${dh.elements.map(t=>t.toFixed(4))} )`;switch(nt.getTransfer(n)){case qa:return[e,"LinearTransferOETF"];case ft:return[e,"sRGBTransferOETF"];default:return We("WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function ph(n,e,t){const i=n.getShaderParameter(e,n.COMPILE_STATUS),r=(n.getShaderInfoLog(e)||"").trim();if(i&&r==="")return"";const a=/ERROR: 0:(\d+)/.exec(r);if(a){const o=parseInt(a[1]);return t.toUpperCase()+` +`)}const mh=new Ze;function W1(n){it._getMatrix(mh,it.workingColorSpace,n);const e=`mat3( ${mh.elements.map(t=>t.toFixed(4))} )`;switch(it.getTransfer(n)){case qa:return[e,"LinearTransferOETF"];case pt:return[e,"sRGBTransferOETF"];default:return Ke("WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function gh(n,e,t){const i=n.getShaderParameter(e,n.COMPILE_STATUS),r=(n.getShaderInfoLog(e)||"").trim();if(i&&r==="")return"";const a=/ERROR: 0:(\d+)/.exec(r);if(a){const o=parseInt(a[1]);return t.toUpperCase()+` `+r+` -`+Hy(n.getShaderSource(e),o)}else return r}function Gy(n,e){const t=zy(e);return[`vec4 ${n}( vec4 value ) {`,` return ${t[1]}( vec4( value.rgb * ${t[0]}, value.a ) );`,"}"].join(` -`)}const Vy={[If]:"Linear",[Uf]:"Reinhard",[Of]:"Cineon",[Ff]:"ACESFilmic",[kf]:"AgX",[Bf]:"Neutral",[Nf]:"Custom"};function Wy(n,e){const t=Vy[e];return t===void 0?(We("WebGLProgram: Unsupported toneMapping:",e),"vec3 "+n+"( vec3 color ) { return LinearToneMapping( color ); }"):"vec3 "+n+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}const _a=new B;function Xy(){nt.getLuminanceCoefficients(_a);const n=_a.x.toFixed(4),e=_a.y.toFixed(4),t=_a.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${n}, ${e}, ${t} );`," return dot( weights, rgb );","}"].join(` -`)}function Yy(n){return[n.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",n.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(vr).join(` -`)}function qy(n){const e=[];for(const t in n){const i=n[t];i!==!1&&e.push("#define "+t+" "+i)}return e.join(` -`)}function $y(n,e){const t={},i=n.getProgramParameter(e,n.ACTIVE_ATTRIBUTES);for(let s=0;s/gm;function gc(n){return n.replace(Zy,Jy)}const Ky=new Map;function Jy(n,e){let t=Je[e];if(t===void 0){const i=Ky.get(e);if(i!==void 0)t=Je[i],We('WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',e,i);else throw new Error("THREE.WebGLProgram: Can not resolve #include <"+e+">")}return gc(t)}const jy=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function xh(n){return n.replace(jy,Qy)}function Qy(n,e,t,i){let s="";for(let r=parseInt(e);r/gm;function xc(n){return n.replace(j1,ey)}const Q1=new Map;function ey(n,e){let t=Je[e];if(t===void 0){const i=Q1.get(e);if(i!==void 0)t=Je[i],Ke('WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',e,i);else throw new Error("THREE.WebGLProgram: Can not resolve #include <"+e+">")}return xc(t)}const ty=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function yh(n){return n.replace(ty,ny)}function ny(n,e,t,i){let s="";for(let r=parseInt(e);r0&&(m+=` -`),g=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p].filter(vr).join(` +#define LOW_PRECISION`),e}const iy={[Oa]:"SHADOWMAP_TYPE_PCF",[gr]:"SHADOWMAP_TYPE_VSM"};function sy(n){return iy[n.shadowMapType]||"SHADOWMAP_TYPE_BASIC"}const ry={[ss]:"ENVMAP_TYPE_CUBE",[Ws]:"ENVMAP_TYPE_CUBE",[go]:"ENVMAP_TYPE_CUBE_UV"};function ay(n){return n.envMap===!1?"ENVMAP_TYPE_CUBE":ry[n.envMapMode]||"ENVMAP_TYPE_CUBE"}const oy={[Ws]:"ENVMAP_MODE_REFRACTION"};function ly(n){return n.envMap===!1?"ENVMAP_MODE_REFLECTION":oy[n.envMapMode]||"ENVMAP_MODE_REFLECTION"}const cy={[Pd]:"ENVMAP_BLENDING_MULTIPLY",[y0]:"ENVMAP_BLENDING_MIX",[v0]:"ENVMAP_BLENDING_ADD"};function uy(n){return n.envMap===!1?"ENVMAP_BLENDING_NONE":cy[n.combine]||"ENVMAP_BLENDING_NONE"}function hy(n){const e=n.envMapCubeUVHeight;if(e===null)return null;const t=Math.log2(e)-2,i=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),7*16)),texelHeight:i,maxMip:t}}function dy(n,e,t,i){const s=n.getContext(),r=t.defines;let a=t.vertexShader,o=t.fragmentShader;const l=sy(t),c=ay(t),u=ly(t),d=uy(t),h=hy(t),f=Z1(t),m=$1(r),_=s.createProgram();let p,g,b=t.glslVersion?"#version "+t.glslVersion+` +`:"";t.isRawShaderMaterial?(p=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m].filter(yr).join(` +`),p.length>0&&(p+=` +`),g=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m].filter(yr).join(` `),g.length>0&&(g+=` -`)):(m=[vh(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+u:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexNormals?"#define HAS_NORMAL":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` -`].filter(vr).join(` -`),g=[vh(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+u:"",t.envMap?"#define "+f:"",h?"#define CUBEUV_TEXEL_WIDTH "+h.texelWidth:"",h?"#define CUBEUV_TEXEL_HEIGHT "+h.texelHeight:"",h?"#define CUBEUV_MAX_MIP "+h.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.packedNormalMap?"#define USE_PACKED_NORMALMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor?"#define USE_COLOR":"",t.vertexAlphas||t.batchingColor?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.numLightProbeGrids>0?"#define USE_LIGHT_PROBES_GRID":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Kn?"#define TONE_MAPPING":"",t.toneMapping!==Kn?Je.tonemapping_pars_fragment:"",t.toneMapping!==Kn?Wy("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",Je.colorspace_pars_fragment,Gy("linearToOutputTexel",t.outputColorSpace),Xy(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` -`].filter(vr).join(` -`)),a=gc(a),a=mh(a,t),a=gh(a,t),o=gc(o),o=mh(o,t),o=gh(o,t),a=xh(a),o=xh(o),t.isRawShaderMaterial!==!0&&(M=`#version 300 es -`,m=[d,"#define attribute in","#define varying out","#define texture2D texture"].join(` +`)):(p=[vh(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+u:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexNormals?"#define HAS_NORMAL":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` +`].filter(yr).join(` +`),g=[vh(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+u:"",t.envMap?"#define "+d:"",h?"#define CUBEUV_TEXEL_WIDTH "+h.texelWidth:"",h?"#define CUBEUV_TEXEL_HEIGHT "+h.texelHeight:"",h?"#define CUBEUV_MAX_MIP "+h.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.packedNormalMap?"#define USE_PACKED_NORMALMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor?"#define USE_COLOR":"",t.vertexAlphas||t.batchingColor?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.numLightProbeGrids>0?"#define USE_LIGHT_PROBES_GRID":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Qn?"#define TONE_MAPPING":"",t.toneMapping!==Qn?Je.tonemapping_pars_fragment:"",t.toneMapping!==Qn?K1("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",Je.colorspace_pars_fragment,X1("linearToOutputTexel",t.outputColorSpace),q1(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` +`].filter(yr).join(` +`)),a=xc(a),a=_h(a,t),a=xh(a,t),o=xc(o),o=_h(o,t),o=xh(o,t),a=yh(a),o=yh(o),t.isRawShaderMaterial!==!0&&(b=`#version 300 es +`,p=[f,"#define attribute in","#define varying out","#define texture2D texture"].join(` `)+` -`+m,g=["#define varying in",t.glslVersion===uc?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===uc?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` +`+p,g=["#define varying in",t.glslVersion===dc?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===dc?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` `)+` -`+g);const E=M+m+a,_=M+g+o,T=fh(s,s.VERTEX_SHADER,E),b=fh(s,s.FRAGMENT_SHADER,_);s.attachShader(x,T),s.attachShader(x,b),t.index0AttributeName!==void 0?s.bindAttribLocation(x,0,t.index0AttributeName):t.hasPositionAttribute===!0&&s.bindAttribLocation(x,0,"position"),s.linkProgram(x);function S(L){if(n.debug.checkShaderErrors){const C=s.getProgramInfoLog(x)||"",O=s.getShaderInfoLog(T)||"",N=s.getShaderInfoLog(b)||"",U=C.trim(),Z=O.trim(),k=N.trim();let $=!0,D=!0;if(s.getProgramParameter(x,s.LINK_STATUS)===!1)if($=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(s,x,T,b);else{const ae=ph(s,T,"vertex"),re=ph(s,b,"fragment");st("WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(x,s.VALIDATE_STATUS)+` +`+g);const A=b+p+a,x=b+g+o,E=ph(s,s.VERTEX_SHADER,A),S=ph(s,s.FRAGMENT_SHADER,x);s.attachShader(_,E),s.attachShader(_,S),t.index0AttributeName!==void 0?s.bindAttribLocation(_,0,t.index0AttributeName):t.hasPositionAttribute===!0&&s.bindAttribLocation(_,0,"position"),s.linkProgram(_);function M(L){if(n.debug.checkShaderErrors){const w=s.getProgramInfoLog(_)||"",U=s.getShaderInfoLog(E)||"",k=s.getShaderInfoLog(S)||"",O=w.trim(),$=U.trim(),F=k.trim();let Z=!0,R=!0;if(s.getProgramParameter(_,s.LINK_STATUS)===!1)if(Z=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(s,_,E,S);else{const re=gh(s,E,"vertex"),se=gh(s,S,"fragment");at("WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(_,s.VALIDATE_STATUS)+` Material Name: `+L.name+` Material Type: `+L.type+` -Program Info Log: `+U+` -`+ae+` -`+re)}else U!==""?We("WebGLProgram: Program Info Log:",U):(Z===""||k==="")&&(D=!1);D&&(L.diagnostics={runnable:$,programLog:U,vertexShader:{log:Z,prefix:m},fragmentShader:{log:k,prefix:g}})}s.deleteShader(T),s.deleteShader(b),v=new Ba(s,x),w=$y(s,x)}let v;this.getUniforms=function(){return v===void 0&&S(this),v};let w;this.getAttributes=function(){return w===void 0&&S(this),w};let I=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return I===!1&&(I=s.getProgramParameter(x,ky)),I},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(x),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=By++,this.cacheKey=e,this.usedTimes=1,this.program=x,this.vertexShader=T,this.fragmentShader=b,this}let u_=0;class h_{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e,t,i){const s=this._getShaderCacheForMaterial(e);return s.has(t)===!1&&(s.add(t),t.usedTimes++),s.has(i)===!1&&(s.add(i),i.usedTimes++),this}remove(e){const t=this.materialCache.get(e);for(const i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderStage(e){return this._getShaderStage(e.vertexShader)}getFragmentShaderStage(e){return this._getShaderStage(e.fragmentShader)}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){const t=this.materialCache;let i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){const t=this.shaderCache;let i=t.get(e);return i===void 0&&(i=new f_(e),t.set(e,i)),i}}class f_{constructor(e){this.id=u_++,this.code=e,this.usedTimes=0}}function d_(n){return n===ts||n===Wa||n===Xa}function p_(n,e,t,i,s,r){const a=new Kf,o=new h_,l=new Set,c=[],u=new Map,f=i.logarithmicDepthBuffer;let h=i.precision;const d={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distance",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function p(v){return l.add(v),v===0?"uv":`uv${v}`}function x(v,w,I,L,C,O){const N=L.fog,U=C.geometry,Z=v.isMeshStandardMaterial||v.isMeshLambertMaterial||v.isMeshPhongMaterial?L.environment:null,k=v.isMeshStandardMaterial||v.isMeshLambertMaterial&&!v.envMap||v.isMeshPhongMaterial&&!v.envMap,$=e.get(v.envMap||Z,k),D=$&&$.mapping===mo?$.image.height:null,ae=d[v.type];v.precision!==null&&(h=i.getMaxPrecision(v.precision),h!==v.precision&&We("WebGLProgram.getParameters:",v.precision,"not supported, using",h,"instead."));const re=U.morphAttributes.position||U.morphAttributes.normal||U.morphAttributes.color,ee=re!==void 0?re.length:0;let ce=0;U.morphAttributes.position!==void 0&&(ce=1),U.morphAttributes.normal!==void 0&&(ce=2),U.morphAttributes.color!==void 0&&(ce=3);let he,fe,X,se;if(ae){const Le=Yn[ae];he=Le.vertexShader,fe=Le.fragmentShader}else{he=v.vertexShader,fe=v.fragmentShader;const Le=o.getVertexShaderStage(v),yt=o.getFragmentShaderStage(v);o.update(v,Le,yt),X=Le.id,se=yt.id}const Q=n.getRenderTarget(),ye=n.state.buffers.depth.getReversed(),ve=C.isInstancedMesh===!0,_e=C.isBatchedMesh===!0,Ze=!!v.map,Ye=!!v.matcap,Oe=!!$,Fe=!!v.aoMap,Ve=!!v.lightMap,at=!!v.bumpMap&&v.wireframe===!1,ot=!!v.normalMap,pt=!!v.displacementMap,vt=!!v.emissiveMap,ct=!!v.metalnessMap,ut=!!v.roughnessMap,R=v.anisotropy>0,Ae=v.clearcoat>0,W=v.dispersion>0,P=v.iridescence>0,y=v.sheen>0,H=v.transmission>0,F=R&&!!v.anisotropyMap,G=Ae&&!!v.clearcoatMap,te=Ae&&!!v.clearcoatNormalMap,oe=Ae&&!!v.clearcoatRoughnessMap,V=P&&!!v.iridescenceMap,K=P&&!!v.iridescenceThicknessMap,ie=y&&!!v.sheenColorMap,de=y&&!!v.sheenRoughnessMap,pe=!!v.specularMap,ge=!!v.specularColorMap,Me=!!v.specularIntensityMap,He=H&&!!v.transmissionMap,qe=H&&!!v.thicknessMap,z=!!v.gradientMap,xe=!!v.alphaMap,le=v.alphaTest>0,be=!!v.alphaHash,Ce=!!v.extensions;let ue=Kn;v.toneMapped&&(Q===null||Q.isXRRenderTarget===!0)&&(ue=n.toneMapping);const ke={shaderID:ae,shaderType:v.type,shaderName:v.name,vertexShader:he,fragmentShader:fe,defines:v.defines,customVertexShaderID:X,customFragmentShaderID:se,isRawShaderMaterial:v.isRawShaderMaterial===!0,glslVersion:v.glslVersion,precision:h,batching:_e,batchingColor:_e&&C._colorsTexture!==null,instancing:ve,instancingColor:ve&&C.instanceColor!==null,instancingMorph:ve&&C.morphTexture!==null,outputColorSpace:Q===null?n.outputColorSpace:Q.isXRRenderTarget===!0?Q.texture.colorSpace:nt.workingColorSpace,alphaToCoverage:!!v.alphaToCoverage,map:Ze,matcap:Ye,envMap:Oe,envMapMode:Oe&&$.mapping,envMapCubeUVHeight:D,aoMap:Fe,lightMap:Ve,bumpMap:at,normalMap:ot,displacementMap:pt,emissiveMap:vt,normalMapObjectSpace:ot&&v.normalMapType===_m,normalMapTangentSpace:ot&&v.normalMapType===gu,packedNormalMap:ot&&v.normalMapType===gu&&d_(v.normalMap.format),metalnessMap:ct,roughnessMap:ut,anisotropy:R,anisotropyMap:F,clearcoat:Ae,clearcoatMap:G,clearcoatNormalMap:te,clearcoatRoughnessMap:oe,dispersion:W,iridescence:P,iridescenceMap:V,iridescenceThicknessMap:K,sheen:y,sheenColorMap:ie,sheenRoughnessMap:de,specularMap:pe,specularColorMap:ge,specularIntensityMap:Me,transmission:H,transmissionMap:He,thicknessMap:qe,gradientMap:z,opaque:v.transparent===!1&&v.blending===ks&&v.alphaToCoverage===!1,alphaMap:xe,alphaTest:le,alphaHash:be,combine:v.combine,mapUv:Ze&&p(v.map.channel),aoMapUv:Fe&&p(v.aoMap.channel),lightMapUv:Ve&&p(v.lightMap.channel),bumpMapUv:at&&p(v.bumpMap.channel),normalMapUv:ot&&p(v.normalMap.channel),displacementMapUv:pt&&p(v.displacementMap.channel),emissiveMapUv:vt&&p(v.emissiveMap.channel),metalnessMapUv:ct&&p(v.metalnessMap.channel),roughnessMapUv:ut&&p(v.roughnessMap.channel),anisotropyMapUv:F&&p(v.anisotropyMap.channel),clearcoatMapUv:G&&p(v.clearcoatMap.channel),clearcoatNormalMapUv:te&&p(v.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:oe&&p(v.clearcoatRoughnessMap.channel),iridescenceMapUv:V&&p(v.iridescenceMap.channel),iridescenceThicknessMapUv:K&&p(v.iridescenceThicknessMap.channel),sheenColorMapUv:ie&&p(v.sheenColorMap.channel),sheenRoughnessMapUv:de&&p(v.sheenRoughnessMap.channel),specularMapUv:pe&&p(v.specularMap.channel),specularColorMapUv:ge&&p(v.specularColorMap.channel),specularIntensityMapUv:Me&&p(v.specularIntensityMap.channel),transmissionMapUv:He&&p(v.transmissionMap.channel),thicknessMapUv:qe&&p(v.thicknessMap.channel),alphaMapUv:xe&&p(v.alphaMap.channel),vertexTangents:!!U.attributes.tangent&&(ot||R),vertexNormals:!!U.attributes.normal,vertexColors:v.vertexColors,vertexAlphas:v.vertexColors===!0&&!!U.attributes.color&&U.attributes.color.itemSize===4,pointsUvs:C.isPoints===!0&&!!U.attributes.uv&&(Ze||xe),fog:!!N,useFog:v.fog===!0,fogExp2:!!N&&N.isFogExp2,flatShading:v.wireframe===!1&&(v.flatShading===!0||U.attributes.normal===void 0&&ot===!1&&(v.isMeshLambertMaterial||v.isMeshPhongMaterial||v.isMeshStandardMaterial||v.isMeshPhysicalMaterial)),sizeAttenuation:v.sizeAttenuation===!0,logarithmicDepthBuffer:f,reversedDepthBuffer:ye,skinning:C.isSkinnedMesh===!0,hasPositionAttribute:U.attributes.position!==void 0,morphTargets:U.morphAttributes.position!==void 0,morphNormals:U.morphAttributes.normal!==void 0,morphColors:U.morphAttributes.color!==void 0,morphTargetsCount:ee,morphTextureStride:ce,numDirLights:w.directional.length,numPointLights:w.point.length,numSpotLights:w.spot.length,numSpotLightMaps:w.spotLightMap.length,numRectAreaLights:w.rectArea.length,numHemiLights:w.hemi.length,numDirLightShadows:w.directionalShadowMap.length,numPointLightShadows:w.pointShadowMap.length,numSpotLightShadows:w.spotShadowMap.length,numSpotLightShadowsWithMaps:w.numSpotLightShadowsWithMaps,numLightProbes:w.numLightProbes,numLightProbeGrids:O.length,numClippingPlanes:r.numPlanes,numClipIntersection:r.numIntersection,dithering:v.dithering,shadowMapEnabled:n.shadowMap.enabled&&I.length>0,shadowMapType:n.shadowMap.type,toneMapping:ue,decodeVideoTexture:Ze&&v.map.isVideoTexture===!0&&nt.getTransfer(v.map.colorSpace)===ft,decodeVideoTextureEmissive:vt&&v.emissiveMap.isVideoTexture===!0&&nt.getTransfer(v.emissiveMap.colorSpace)===ft,premultipliedAlpha:v.premultipliedAlpha,doubleSided:v.side===zt,flipSided:v.side===un,useDepthPacking:v.depthPacking>=0,depthPacking:v.depthPacking||0,index0AttributeName:v.index0AttributeName,extensionClipCullDistance:Ce&&v.extensions.clipCullDistance===!0&&t.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Ce&&v.extensions.multiDraw===!0||_e)&&t.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:t.has("KHR_parallel_shader_compile"),customProgramCacheKey:v.customProgramCacheKey()};return ke.vertexUv1s=l.has(1),ke.vertexUv2s=l.has(2),ke.vertexUv3s=l.has(3),l.clear(),ke}function m(v){const w=[];if(v.shaderID?w.push(v.shaderID):(w.push(v.customVertexShaderID),w.push(v.customFragmentShaderID)),v.defines!==void 0)for(const I in v.defines)w.push(I),w.push(v.defines[I]);return v.isRawShaderMaterial===!1&&(g(w,v),M(w,v),w.push(n.outputColorSpace)),w.push(v.customProgramCacheKey),w.join()}function g(v,w){v.push(w.precision),v.push(w.outputColorSpace),v.push(w.envMapMode),v.push(w.envMapCubeUVHeight),v.push(w.mapUv),v.push(w.alphaMapUv),v.push(w.lightMapUv),v.push(w.aoMapUv),v.push(w.bumpMapUv),v.push(w.normalMapUv),v.push(w.displacementMapUv),v.push(w.emissiveMapUv),v.push(w.metalnessMapUv),v.push(w.roughnessMapUv),v.push(w.anisotropyMapUv),v.push(w.clearcoatMapUv),v.push(w.clearcoatNormalMapUv),v.push(w.clearcoatRoughnessMapUv),v.push(w.iridescenceMapUv),v.push(w.iridescenceThicknessMapUv),v.push(w.sheenColorMapUv),v.push(w.sheenRoughnessMapUv),v.push(w.specularMapUv),v.push(w.specularColorMapUv),v.push(w.specularIntensityMapUv),v.push(w.transmissionMapUv),v.push(w.thicknessMapUv),v.push(w.combine),v.push(w.fogExp2),v.push(w.sizeAttenuation),v.push(w.morphTargetsCount),v.push(w.morphAttributeCount),v.push(w.numDirLights),v.push(w.numPointLights),v.push(w.numSpotLights),v.push(w.numSpotLightMaps),v.push(w.numHemiLights),v.push(w.numRectAreaLights),v.push(w.numDirLightShadows),v.push(w.numPointLightShadows),v.push(w.numSpotLightShadows),v.push(w.numSpotLightShadowsWithMaps),v.push(w.numLightProbes),v.push(w.shadowMapType),v.push(w.toneMapping),v.push(w.numClippingPlanes),v.push(w.numClipIntersection),v.push(w.depthPacking)}function M(v,w){a.disableAll(),w.instancing&&a.enable(0),w.instancingColor&&a.enable(1),w.instancingMorph&&a.enable(2),w.matcap&&a.enable(3),w.envMap&&a.enable(4),w.normalMapObjectSpace&&a.enable(5),w.normalMapTangentSpace&&a.enable(6),w.clearcoat&&a.enable(7),w.iridescence&&a.enable(8),w.alphaTest&&a.enable(9),w.vertexColors&&a.enable(10),w.vertexAlphas&&a.enable(11),w.vertexUv1s&&a.enable(12),w.vertexUv2s&&a.enable(13),w.vertexUv3s&&a.enable(14),w.vertexTangents&&a.enable(15),w.anisotropy&&a.enable(16),w.alphaHash&&a.enable(17),w.batching&&a.enable(18),w.dispersion&&a.enable(19),w.batchingColor&&a.enable(20),w.gradientMap&&a.enable(21),w.packedNormalMap&&a.enable(22),w.vertexNormals&&a.enable(23),v.push(a.mask),a.disableAll(),w.fog&&a.enable(0),w.useFog&&a.enable(1),w.flatShading&&a.enable(2),w.logarithmicDepthBuffer&&a.enable(3),w.reversedDepthBuffer&&a.enable(4),w.skinning&&a.enable(5),w.morphTargets&&a.enable(6),w.morphNormals&&a.enable(7),w.morphColors&&a.enable(8),w.premultipliedAlpha&&a.enable(9),w.shadowMapEnabled&&a.enable(10),w.doubleSided&&a.enable(11),w.flipSided&&a.enable(12),w.useDepthPacking&&a.enable(13),w.dithering&&a.enable(14),w.transmission&&a.enable(15),w.sheen&&a.enable(16),w.opaque&&a.enable(17),w.pointsUvs&&a.enable(18),w.decodeVideoTexture&&a.enable(19),w.decodeVideoTextureEmissive&&a.enable(20),w.alphaToCoverage&&a.enable(21),w.numLightProbeGrids>0&&a.enable(22),w.hasPositionAttribute&&a.enable(23),v.push(a.mask)}function E(v){const w=d[v.type];let I;if(w){const L=Yn[w];I=Fg.clone(L.uniforms)}else I=v.uniforms;return I}function _(v,w){let I=u.get(w);return I!==void 0?++I.usedTimes:(I=new c_(n,w,v,s),c.push(I),u.set(w,I)),I}function T(v){if(--v.usedTimes===0){const w=c.indexOf(v);c[w]=c[c.length-1],c.pop(),u.delete(v.cacheKey),v.destroy()}}function b(v){o.remove(v)}function S(){o.dispose()}return{getParameters:x,getProgramCacheKey:m,getUniforms:E,acquireProgram:_,releaseProgram:T,releaseShaderCache:b,programs:c,dispose:S}}function m_(){let n=new WeakMap;function e(a){return n.has(a)}function t(a){let o=n.get(a);return o===void 0&&(o={},n.set(a,o)),o}function i(a){n.delete(a)}function s(a,o,l){n.get(a)[o]=l}function r(){n=new WeakMap}return{has:e,get:t,remove:i,update:s,dispose:r}}function g_(n,e){return n.groupOrder!==e.groupOrder?n.groupOrder-e.groupOrder:n.renderOrder!==e.renderOrder?n.renderOrder-e.renderOrder:n.material.id!==e.material.id?n.material.id-e.material.id:n.materialVariant!==e.materialVariant?n.materialVariant-e.materialVariant:n.z!==e.z?n.z-e.z:n.id-e.id}function yh(n,e){return n.groupOrder!==e.groupOrder?n.groupOrder-e.groupOrder:n.renderOrder!==e.renderOrder?n.renderOrder-e.renderOrder:n.z!==e.z?e.z-n.z:n.id-e.id}function _h(){const n=[];let e=0;const t=[],i=[],s=[];function r(){e=0,t.length=0,i.length=0,s.length=0}function a(h){let d=0;return h.isInstancedMesh&&(d+=2),h.isSkinnedMesh&&(d+=1),d}function o(h,d,p,x,m,g){let M=n[e];return M===void 0?(M={id:h.id,object:h,geometry:d,material:p,materialVariant:a(h),groupOrder:x,renderOrder:h.renderOrder,z:m,group:g},n[e]=M):(M.id=h.id,M.object=h,M.geometry=d,M.material=p,M.materialVariant=a(h),M.groupOrder=x,M.renderOrder=h.renderOrder,M.z=m,M.group=g),e++,M}function l(h,d,p,x,m,g){const M=o(h,d,p,x,m,g);p.transmission>0?i.push(M):p.transparent===!0?s.push(M):t.push(M)}function c(h,d,p,x,m,g){const M=o(h,d,p,x,m,g);p.transmission>0?i.unshift(M):p.transparent===!0?s.unshift(M):t.unshift(M)}function u(h,d,p){t.length>1&&t.sort(h||g_),i.length>1&&i.sort(d||yh),s.length>1&&s.sort(d||yh),p&&(t.reverse(),i.reverse(),s.reverse())}function f(){for(let h=e,d=n.length;h=r.length?(a=new _h,r.push(a)):a=r[s],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function v_(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new B,color:new et};break;case"SpotLight":t={position:new B,direction:new B,color:new et,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new B,color:new et,distance:0,decay:0};break;case"HemisphereLight":t={direction:new B,skyColor:new et,groundColor:new et};break;case"RectAreaLight":t={color:new et,position:new B,halfWidth:new B,halfHeight:new B};break}return n[e.id]=t,t}}}function y_(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Ee};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Ee};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Ee,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}let __=0;function b_(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function S_(n){const e=new v_,t=y_(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)i.probe.push(new B);const s=new B,r=new Tt,a=new Tt;function o(c){let u=0,f=0,h=0;for(let w=0;w<9;w++)i.probe[w].set(0,0,0);let d=0,p=0,x=0,m=0,g=0,M=0,E=0,_=0,T=0,b=0,S=0;c.sort(b_);for(let w=0,I=c.length;w0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=we.LTC_FLOAT_1,i.rectAreaLTC2=we.LTC_FLOAT_2):(i.rectAreaLTC1=we.LTC_HALF_1,i.rectAreaLTC2=we.LTC_HALF_2)),i.ambient[0]=u,i.ambient[1]=f,i.ambient[2]=h;const v=i.hash;(v.directionalLength!==d||v.pointLength!==p||v.spotLength!==x||v.rectAreaLength!==m||v.hemiLength!==g||v.numDirectionalShadows!==M||v.numPointShadows!==E||v.numSpotShadows!==_||v.numSpotMaps!==T||v.numLightProbes!==S)&&(i.directional.length=d,i.spot.length=x,i.rectArea.length=m,i.point.length=p,i.hemi.length=g,i.directionalShadow.length=M,i.directionalShadowMap.length=M,i.pointShadow.length=E,i.pointShadowMap.length=E,i.spotShadow.length=_,i.spotShadowMap.length=_,i.directionalShadowMatrix.length=M,i.pointShadowMatrix.length=E,i.spotLightMatrix.length=_+T-b,i.spotLightMap.length=T,i.numSpotLightShadowsWithMaps=b,i.numLightProbes=S,v.directionalLength=d,v.pointLength=p,v.spotLength=x,v.rectAreaLength=m,v.hemiLength=g,v.numDirectionalShadows=M,v.numPointShadows=E,v.numSpotShadows=_,v.numSpotMaps=T,v.numLightProbes=S,i.version=__++)}function l(c,u){let f=0,h=0,d=0,p=0,x=0;const m=u.matrixWorldInverse;for(let g=0,M=c.length;g=a.length?(o=new bh(n),a.push(o)):o=a[r],o}function i(){e=new WeakMap}return{get:t,dispose:i}}const E_=`void main() { +Program Info Log: `+O+` +`+re+` +`+se)}else O!==""?Ke("WebGLProgram: Program Info Log:",O):($===""||F==="")&&(R=!1);R&&(L.diagnostics={runnable:Z,programLog:O,vertexShader:{log:$,prefix:p},fragmentShader:{log:F,prefix:g}})}s.deleteShader(E),s.deleteShader(S),y=new Ha(s,_),T=J1(s,_)}let y;this.getUniforms=function(){return y===void 0&&M(this),y};let T;this.getAttributes=function(){return T===void 0&&M(this),T};let I=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return I===!1&&(I=s.getProgramParameter(_,z1)),I},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(_),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=V1++,this.cacheKey=e,this.usedTimes=1,this.program=_,this.vertexShader=E,this.fragmentShader=S,this}let fy=0;class py{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e,t,i){const s=this._getShaderCacheForMaterial(e);return s.has(t)===!1&&(s.add(t),t.usedTimes++),s.has(i)===!1&&(s.add(i),i.usedTimes++),this}remove(e){const t=this.materialCache.get(e);for(const i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderStage(e){return this._getShaderStage(e.vertexShader)}getFragmentShaderStage(e){return this._getShaderStage(e.fragmentShader)}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){const t=this.materialCache;let i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){const t=this.shaderCache;let i=t.get(e);return i===void 0&&(i=new my(e),t.set(e,i)),i}}class my{constructor(e){this.id=fy++,this.code=e,this.usedTimes=0}}function gy(n){return n===rs||n===Xa||n===Ya}function _y(n,e,t,i,s,r){const a=new Jd,o=new py,l=new Set,c=[],u=new Map,d=i.logarithmicDepthBuffer;let h=i.precision;const f={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distance",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function m(y){return l.add(y),y===0?"uv":`uv${y}`}function _(y,T,I,L,w,U){const k=L.fog,O=w.geometry,$=y.isMeshStandardMaterial||y.isMeshLambertMaterial||y.isMeshPhongMaterial?L.environment:null,F=y.isMeshStandardMaterial||y.isMeshLambertMaterial&&!y.envMap||y.isMeshPhongMaterial&&!y.envMap,Z=e.get(y.envMap||$,F),R=Z&&Z.mapping===go?Z.image.height:null,re=f[y.type];y.precision!==null&&(h=i.getMaxPrecision(y.precision),h!==y.precision&&Ke("WebGLProgram.getParameters:",y.precision,"not supported, using",h,"instead."));const se=O.morphAttributes.position||O.morphAttributes.normal||O.morphAttributes.color,ae=se!==void 0?se.length:0;let ge=0;O.morphAttributes.position!==void 0&&(ge=1),O.morphAttributes.normal!==void 0&&(ge=2),O.morphAttributes.color!==void 0&&(ge=3);let he,oe,G,ne;if(re){const Oe=Zn[re];he=Oe.vertexShader,oe=Oe.fragmentShader}else{he=y.vertexShader,oe=y.fragmentShader;const Oe=o.getVertexShaderStage(y),ot=o.getFragmentShaderStage(y);o.update(y,Oe,ot),G=Oe.id,ne=ot.id}const j=n.getRenderTarget(),xe=n.state.buffers.depth.getReversed(),be=w.isInstancedMesh===!0,ve=w.isBatchedMesh===!0,Be=!!y.map,Ve=!!y.matcap,Ne=!!Z,ke=!!y.aoMap,Xe=!!y.lightMap,tt=!!y.bumpMap&&y.wireframe===!1,rt=!!y.normalMap,gt=!!y.displacementMap,vt=!!y.emissiveMap,ht=!!y.metalnessMap,dt=!!y.roughnessMap,D=y.anisotropy>0,Ee=y.clearcoat>0,z=y.dispersion>0,P=y.iridescence>0,v=y.sheen>0,B=y.transmission>0,Y=D&&!!y.anisotropyMap,N=Ee&&!!y.clearcoatMap,J=Ee&&!!y.clearcoatNormalMap,ie=Ee&&!!y.clearcoatRoughnessMap,X=P&&!!y.iridescenceMap,W=P&&!!y.iridescenceThicknessMap,ce=v&&!!y.sheenColorMap,le=v&&!!y.sheenRoughnessMap,de=!!y.specularMap,pe=!!y.specularColorMap,Le=!!y.specularIntensityMap,we=B&&!!y.transmissionMap,Ye=B&&!!y.thicknessMap,V=!!y.gradientMap,_e=!!y.alphaMap,ue=y.alphaTest>0,ye=!!y.alphaHash,Te=!!y.extensions;let fe=Qn;y.toneMapped&&(j===null||j.isXRRenderTarget===!0)&&(fe=n.toneMapping);const He={shaderID:re,shaderType:y.type,shaderName:y.name,vertexShader:he,fragmentShader:oe,defines:y.defines,customVertexShaderID:G,customFragmentShaderID:ne,isRawShaderMaterial:y.isRawShaderMaterial===!0,glslVersion:y.glslVersion,precision:h,batching:ve,batchingColor:ve&&w._colorsTexture!==null,instancing:be,instancingColor:be&&w.instanceColor!==null,instancingMorph:be&&w.morphTexture!==null,outputColorSpace:j===null?n.outputColorSpace:j.isXRRenderTarget===!0?j.texture.colorSpace:it.workingColorSpace,alphaToCoverage:!!y.alphaToCoverage,map:Be,matcap:Ve,envMap:Ne,envMapMode:Ne&&Z.mapping,envMapCubeUVHeight:R,aoMap:ke,lightMap:Xe,bumpMap:tt,normalMap:rt,displacementMap:gt,emissiveMap:vt,normalMapObjectSpace:rt&&y.normalMapType===M0,normalMapTangentSpace:rt&&y.normalMapType===xu,packedNormalMap:rt&&y.normalMapType===xu&&gy(y.normalMap.format),metalnessMap:ht,roughnessMap:dt,anisotropy:D,anisotropyMap:Y,clearcoat:Ee,clearcoatMap:N,clearcoatNormalMap:J,clearcoatRoughnessMap:ie,dispersion:z,iridescence:P,iridescenceMap:X,iridescenceThicknessMap:W,sheen:v,sheenColorMap:ce,sheenRoughnessMap:le,specularMap:de,specularColorMap:pe,specularIntensityMap:Le,transmission:B,transmissionMap:we,thicknessMap:Ye,gradientMap:V,opaque:y.transparent===!1&&y.blending===Bs&&y.alphaToCoverage===!1,alphaMap:_e,alphaTest:ue,alphaHash:ye,combine:y.combine,mapUv:Be&&m(y.map.channel),aoMapUv:ke&&m(y.aoMap.channel),lightMapUv:Xe&&m(y.lightMap.channel),bumpMapUv:tt&&m(y.bumpMap.channel),normalMapUv:rt&&m(y.normalMap.channel),displacementMapUv:gt&&m(y.displacementMap.channel),emissiveMapUv:vt&&m(y.emissiveMap.channel),metalnessMapUv:ht&&m(y.metalnessMap.channel),roughnessMapUv:dt&&m(y.roughnessMap.channel),anisotropyMapUv:Y&&m(y.anisotropyMap.channel),clearcoatMapUv:N&&m(y.clearcoatMap.channel),clearcoatNormalMapUv:J&&m(y.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:ie&&m(y.clearcoatRoughnessMap.channel),iridescenceMapUv:X&&m(y.iridescenceMap.channel),iridescenceThicknessMapUv:W&&m(y.iridescenceThicknessMap.channel),sheenColorMapUv:ce&&m(y.sheenColorMap.channel),sheenRoughnessMapUv:le&&m(y.sheenRoughnessMap.channel),specularMapUv:de&&m(y.specularMap.channel),specularColorMapUv:pe&&m(y.specularColorMap.channel),specularIntensityMapUv:Le&&m(y.specularIntensityMap.channel),transmissionMapUv:we&&m(y.transmissionMap.channel),thicknessMapUv:Ye&&m(y.thicknessMap.channel),alphaMapUv:_e&&m(y.alphaMap.channel),vertexTangents:!!O.attributes.tangent&&(rt||D),vertexNormals:!!O.attributes.normal,vertexColors:y.vertexColors,vertexAlphas:y.vertexColors===!0&&!!O.attributes.color&&O.attributes.color.itemSize===4,pointsUvs:w.isPoints===!0&&!!O.attributes.uv&&(Be||_e),fog:!!k,useFog:y.fog===!0,fogExp2:!!k&&k.isFogExp2,flatShading:y.wireframe===!1&&(y.flatShading===!0||O.attributes.normal===void 0&&rt===!1&&(y.isMeshLambertMaterial||y.isMeshPhongMaterial||y.isMeshStandardMaterial||y.isMeshPhysicalMaterial)),sizeAttenuation:y.sizeAttenuation===!0,logarithmicDepthBuffer:d,reversedDepthBuffer:xe,skinning:w.isSkinnedMesh===!0,hasPositionAttribute:O.attributes.position!==void 0,morphTargets:O.morphAttributes.position!==void 0,morphNormals:O.morphAttributes.normal!==void 0,morphColors:O.morphAttributes.color!==void 0,morphTargetsCount:ae,morphTextureStride:ge,numDirLights:T.directional.length,numPointLights:T.point.length,numSpotLights:T.spot.length,numSpotLightMaps:T.spotLightMap.length,numRectAreaLights:T.rectArea.length,numHemiLights:T.hemi.length,numDirLightShadows:T.directionalShadowMap.length,numPointLightShadows:T.pointShadowMap.length,numSpotLightShadows:T.spotShadowMap.length,numSpotLightShadowsWithMaps:T.numSpotLightShadowsWithMaps,numLightProbes:T.numLightProbes,numLightProbeGrids:U.length,numClippingPlanes:r.numPlanes,numClipIntersection:r.numIntersection,dithering:y.dithering,shadowMapEnabled:n.shadowMap.enabled&&I.length>0,shadowMapType:n.shadowMap.type,toneMapping:fe,decodeVideoTexture:Be&&y.map.isVideoTexture===!0&&it.getTransfer(y.map.colorSpace)===pt,decodeVideoTextureEmissive:vt&&y.emissiveMap.isVideoTexture===!0&&it.getTransfer(y.emissiveMap.colorSpace)===pt,premultipliedAlpha:y.premultipliedAlpha,doubleSided:y.side===Ht,flipSided:y.side===on,useDepthPacking:y.depthPacking>=0,depthPacking:y.depthPacking||0,index0AttributeName:y.index0AttributeName,extensionClipCullDistance:Te&&y.extensions.clipCullDistance===!0&&t.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Te&&y.extensions.multiDraw===!0||ve)&&t.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:t.has("KHR_parallel_shader_compile"),customProgramCacheKey:y.customProgramCacheKey()};return He.vertexUv1s=l.has(1),He.vertexUv2s=l.has(2),He.vertexUv3s=l.has(3),l.clear(),He}function p(y){const T=[];if(y.shaderID?T.push(y.shaderID):(T.push(y.customVertexShaderID),T.push(y.customFragmentShaderID)),y.defines!==void 0)for(const I in y.defines)T.push(I),T.push(y.defines[I]);return y.isRawShaderMaterial===!1&&(g(T,y),b(T,y),T.push(n.outputColorSpace)),T.push(y.customProgramCacheKey),T.join()}function g(y,T){y.push(T.precision),y.push(T.outputColorSpace),y.push(T.envMapMode),y.push(T.envMapCubeUVHeight),y.push(T.mapUv),y.push(T.alphaMapUv),y.push(T.lightMapUv),y.push(T.aoMapUv),y.push(T.bumpMapUv),y.push(T.normalMapUv),y.push(T.displacementMapUv),y.push(T.emissiveMapUv),y.push(T.metalnessMapUv),y.push(T.roughnessMapUv),y.push(T.anisotropyMapUv),y.push(T.clearcoatMapUv),y.push(T.clearcoatNormalMapUv),y.push(T.clearcoatRoughnessMapUv),y.push(T.iridescenceMapUv),y.push(T.iridescenceThicknessMapUv),y.push(T.sheenColorMapUv),y.push(T.sheenRoughnessMapUv),y.push(T.specularMapUv),y.push(T.specularColorMapUv),y.push(T.specularIntensityMapUv),y.push(T.transmissionMapUv),y.push(T.thicknessMapUv),y.push(T.combine),y.push(T.fogExp2),y.push(T.sizeAttenuation),y.push(T.morphTargetsCount),y.push(T.morphAttributeCount),y.push(T.numDirLights),y.push(T.numPointLights),y.push(T.numSpotLights),y.push(T.numSpotLightMaps),y.push(T.numHemiLights),y.push(T.numRectAreaLights),y.push(T.numDirLightShadows),y.push(T.numPointLightShadows),y.push(T.numSpotLightShadows),y.push(T.numSpotLightShadowsWithMaps),y.push(T.numLightProbes),y.push(T.shadowMapType),y.push(T.toneMapping),y.push(T.numClippingPlanes),y.push(T.numClipIntersection),y.push(T.depthPacking)}function b(y,T){a.disableAll(),T.instancing&&a.enable(0),T.instancingColor&&a.enable(1),T.instancingMorph&&a.enable(2),T.matcap&&a.enable(3),T.envMap&&a.enable(4),T.normalMapObjectSpace&&a.enable(5),T.normalMapTangentSpace&&a.enable(6),T.clearcoat&&a.enable(7),T.iridescence&&a.enable(8),T.alphaTest&&a.enable(9),T.vertexColors&&a.enable(10),T.vertexAlphas&&a.enable(11),T.vertexUv1s&&a.enable(12),T.vertexUv2s&&a.enable(13),T.vertexUv3s&&a.enable(14),T.vertexTangents&&a.enable(15),T.anisotropy&&a.enable(16),T.alphaHash&&a.enable(17),T.batching&&a.enable(18),T.dispersion&&a.enable(19),T.batchingColor&&a.enable(20),T.gradientMap&&a.enable(21),T.packedNormalMap&&a.enable(22),T.vertexNormals&&a.enable(23),y.push(a.mask),a.disableAll(),T.fog&&a.enable(0),T.useFog&&a.enable(1),T.flatShading&&a.enable(2),T.logarithmicDepthBuffer&&a.enable(3),T.reversedDepthBuffer&&a.enable(4),T.skinning&&a.enable(5),T.morphTargets&&a.enable(6),T.morphNormals&&a.enable(7),T.morphColors&&a.enable(8),T.premultipliedAlpha&&a.enable(9),T.shadowMapEnabled&&a.enable(10),T.doubleSided&&a.enable(11),T.flipSided&&a.enable(12),T.useDepthPacking&&a.enable(13),T.dithering&&a.enable(14),T.transmission&&a.enable(15),T.sheen&&a.enable(16),T.opaque&&a.enable(17),T.pointsUvs&&a.enable(18),T.decodeVideoTexture&&a.enable(19),T.decodeVideoTextureEmissive&&a.enable(20),T.alphaToCoverage&&a.enable(21),T.numLightProbeGrids>0&&a.enable(22),T.hasPositionAttribute&&a.enable(23),y.push(a.mask)}function A(y){const T=f[y.type];let I;if(T){const L=Zn[T];I=Bm.clone(L.uniforms)}else I=y.uniforms;return I}function x(y,T){let I=u.get(T);return I!==void 0?++I.usedTimes:(I=new dy(n,T,y,s),c.push(I),u.set(T,I)),I}function E(y){if(--y.usedTimes===0){const T=c.indexOf(y);c[T]=c[c.length-1],c.pop(),u.delete(y.cacheKey),y.destroy()}}function S(y){o.remove(y)}function M(){o.dispose()}return{getParameters:_,getProgramCacheKey:p,getUniforms:A,acquireProgram:x,releaseProgram:E,releaseShaderCache:S,programs:c,dispose:M}}function xy(){let n=new WeakMap;function e(a){return n.has(a)}function t(a){let o=n.get(a);return o===void 0&&(o={},n.set(a,o)),o}function i(a){n.delete(a)}function s(a,o,l){n.get(a)[o]=l}function r(){n=new WeakMap}return{has:e,get:t,remove:i,update:s,dispose:r}}function yy(n,e){return n.groupOrder!==e.groupOrder?n.groupOrder-e.groupOrder:n.renderOrder!==e.renderOrder?n.renderOrder-e.renderOrder:n.material.id!==e.material.id?n.material.id-e.material.id:n.materialVariant!==e.materialVariant?n.materialVariant-e.materialVariant:n.z!==e.z?n.z-e.z:n.id-e.id}function Sh(n,e){return n.groupOrder!==e.groupOrder?n.groupOrder-e.groupOrder:n.renderOrder!==e.renderOrder?n.renderOrder-e.renderOrder:n.z!==e.z?e.z-n.z:n.id-e.id}function bh(){const n=[];let e=0;const t=[],i=[],s=[];function r(){e=0,t.length=0,i.length=0,s.length=0}function a(h){let f=0;return h.isInstancedMesh&&(f+=2),h.isSkinnedMesh&&(f+=1),f}function o(h,f,m,_,p,g){let b=n[e];return b===void 0?(b={id:h.id,object:h,geometry:f,material:m,materialVariant:a(h),groupOrder:_,renderOrder:h.renderOrder,z:p,group:g},n[e]=b):(b.id=h.id,b.object=h,b.geometry=f,b.material=m,b.materialVariant=a(h),b.groupOrder=_,b.renderOrder=h.renderOrder,b.z=p,b.group=g),e++,b}function l(h,f,m,_,p,g){const b=o(h,f,m,_,p,g);m.transmission>0?i.push(b):m.transparent===!0?s.push(b):t.push(b)}function c(h,f,m,_,p,g){const b=o(h,f,m,_,p,g);m.transmission>0?i.unshift(b):m.transparent===!0?s.unshift(b):t.unshift(b)}function u(h,f,m){t.length>1&&t.sort(h||yy),i.length>1&&i.sort(f||Sh),s.length>1&&s.sort(f||Sh),m&&(t.reverse(),i.reverse(),s.reverse())}function d(){for(let h=e,f=n.length;h=r.length?(a=new bh,r.push(a)):a=r[s],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function Sy(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new H,color:new et};break;case"SpotLight":t={position:new H,direction:new H,color:new et,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new H,color:new et,distance:0,decay:0};break;case"HemisphereLight":t={direction:new H,skyColor:new et,groundColor:new et};break;case"RectAreaLight":t={color:new et,position:new H,halfWidth:new H,halfHeight:new H};break}return n[e.id]=t,t}}}function by(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Me};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Me};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Me,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}let My=0;function Ay(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function Ey(n){const e=new Sy,t=by(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)i.probe.push(new H);const s=new H,r=new Et,a=new Et;function o(c){let u=0,d=0,h=0;for(let T=0;T<9;T++)i.probe[T].set(0,0,0);let f=0,m=0,_=0,p=0,g=0,b=0,A=0,x=0,E=0,S=0,M=0;c.sort(Ay);for(let T=0,I=c.length;T0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=Ce.LTC_FLOAT_1,i.rectAreaLTC2=Ce.LTC_FLOAT_2):(i.rectAreaLTC1=Ce.LTC_HALF_1,i.rectAreaLTC2=Ce.LTC_HALF_2)),i.ambient[0]=u,i.ambient[1]=d,i.ambient[2]=h;const y=i.hash;(y.directionalLength!==f||y.pointLength!==m||y.spotLength!==_||y.rectAreaLength!==p||y.hemiLength!==g||y.numDirectionalShadows!==b||y.numPointShadows!==A||y.numSpotShadows!==x||y.numSpotMaps!==E||y.numLightProbes!==M)&&(i.directional.length=f,i.spot.length=_,i.rectArea.length=p,i.point.length=m,i.hemi.length=g,i.directionalShadow.length=b,i.directionalShadowMap.length=b,i.pointShadow.length=A,i.pointShadowMap.length=A,i.spotShadow.length=x,i.spotShadowMap.length=x,i.directionalShadowMatrix.length=b,i.pointShadowMatrix.length=A,i.spotLightMatrix.length=x+E-S,i.spotLightMap.length=E,i.numSpotLightShadowsWithMaps=S,i.numLightProbes=M,y.directionalLength=f,y.pointLength=m,y.spotLength=_,y.rectAreaLength=p,y.hemiLength=g,y.numDirectionalShadows=b,y.numPointShadows=A,y.numSpotShadows=x,y.numSpotMaps=E,y.numLightProbes=M,i.version=My++)}function l(c,u){let d=0,h=0,f=0,m=0,_=0;const p=u.matrixWorldInverse;for(let g=0,b=c.length;g=a.length?(o=new Mh(n),a.push(o)):o=a[r],o}function i(){e=new WeakMap}return{get:t,dispose:i}}const Cy=`void main() { gl_Position = vec4( position, 1.0 ); -}`,T_=`uniform sampler2D shadow_pass; +}`,wy=`uniform sampler2D shadow_pass; uniform vec2 resolution; uniform float radius; void main() { @@ -4089,12 +4089,12 @@ void main() { squared_mean = squared_mean / samples; float std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) ); gl_FragColor = vec4( mean, std_dev, 0.0, 1.0 ); -}`,A_=[new B(1,0,0),new B(-1,0,0),new B(0,1,0),new B(0,-1,0),new B(0,0,1),new B(0,0,-1)],w_=[new B(0,-1,0),new B(0,-1,0),new B(0,0,1),new B(0,0,-1),new B(0,-1,0),new B(0,-1,0)],Sh=new Tt,fr=new B,rl=new B;function C_(n,e,t){let i=new nd;const s=new Ee,r=new Ee,a=new Ct,o=new Hg,l=new zg,c={},u=t.maxTextureSize,f={[Ni]:un,[un]:Ni,[zt]:zt},h=new In({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Ee},radius:{value:4}},vertexShader:E_,fragmentShader:T_}),d=h.clone();d.defines.HORIZONTAL_PASS=1;const p=new wt;p.setAttribute("position",new Dn(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const x=new Gt(p,h),m=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=Ia;let g=this.type;this.render=function(b,S,v){if(m.enabled===!1||m.autoUpdate===!1&&m.needsUpdate===!1||b.length===0)return;this.type===Jp&&(We("WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead."),this.type=Ia);const w=n.getRenderTarget(),I=n.getActiveCubeFace(),L=n.getActiveMipmapLevel(),C=n.state;C.setBlending(hi),C.buffers.depth.getReversed()===!0?C.buffers.color.setClear(0,0,0,0):C.buffers.color.setClear(1,1,1,1),C.buffers.depth.setTest(!0),C.setScissorTest(!1);const O=g!==this.type;O&&S.traverse(function(N){N.material&&(Array.isArray(N.material)?N.material.forEach(U=>U.needsUpdate=!0):N.material.needsUpdate=!0)});for(let N=0,U=b.length;Nu||s.y>u)&&(s.x>u&&(r.x=Math.floor(u/$.x),s.x=r.x*$.x,k.mapSize.x=r.x),s.y>u&&(r.y=Math.floor(u/$.y),s.y=r.y*$.y,k.mapSize.y=r.y));const D=n.state.buffers.depth.getReversed();if(k.camera._reversedDepth=D,k.map===null||O===!0){if(k.map!==null&&(k.map.depthTexture!==null&&(k.map.depthTexture.dispose(),k.map.depthTexture=null),k.map.dispose()),this.type===mr){if(Z.isPointLight){We("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}k.map=new Jn(s.x,s.y,{format:ts,type:mi,minFilter:Xt,magFilter:Xt,generateMipmaps:!1}),k.map.texture.name=Z.name+".shadowMap",k.map.depthTexture=new Ws(s.x,s.y,Ln),k.map.depthTexture.name=Z.name+".shadowMapDepth",k.map.depthTexture.format=gi,k.map.depthTexture.compareFunction=null,k.map.depthTexture.minFilter=Ft,k.map.depthTexture.magFilter=Ft}else Z.isPointLight?(k.map=new yd(s.x),k.map.depthTexture=new ng(s.x,Qn)):(k.map=new Jn(s.x,s.y),k.map.depthTexture=new Ws(s.x,s.y,Qn)),k.map.depthTexture.name=Z.name+".shadowMap",k.map.depthTexture.format=gi,this.type===Ia?(k.map.depthTexture.compareFunction=D?Fc:Oc,k.map.depthTexture.minFilter=Xt,k.map.depthTexture.magFilter=Xt):(k.map.depthTexture.compareFunction=null,k.map.depthTexture.minFilter=Ft,k.map.depthTexture.magFilter=Ft);k.camera.updateProjectionMatrix()}const ae=k.map.isWebGLCubeRenderTarget?6:1;for(let re=0;re0||S.map&&S.alphaTest>0||S.alphaToCoverage===!0){const C=I.uuid,O=S.uuid;let N=c[C];N===void 0&&(N={},c[C]=N);let U=N[O];U===void 0&&(U=I.clone(),N[O]=U,S.addEventListener("dispose",T)),I=U}if(I.visible=S.visible,I.wireframe=S.wireframe,w===mr?I.side=S.shadowSide!==null?S.shadowSide:S.side:I.side=S.shadowSide!==null?S.shadowSide:f[S.side],I.alphaMap=S.alphaMap,I.alphaTest=S.alphaToCoverage===!0?.5:S.alphaTest,I.map=S.map,I.clipShadows=S.clipShadows,I.clippingPlanes=S.clippingPlanes,I.clipIntersection=S.clipIntersection,I.displacementMap=S.displacementMap,I.displacementScale=S.displacementScale,I.displacementBias=S.displacementBias,I.wireframeLinewidth=S.wireframeLinewidth,I.linewidth=S.linewidth,v.isPointLight===!0&&I.isMeshDistanceMaterial===!0){const C=n.properties.get(I);C.light=v}return I}function _(b,S,v,w,I){if(b.visible===!1)return;if(b.layers.test(S.layers)&&(b.isMesh||b.isLine||b.isPoints)&&(b.castShadow||b.receiveShadow&&I===mr)&&(!b.frustumCulled||i.intersectsObject(b))){b.modelViewMatrix.multiplyMatrices(v.matrixWorldInverse,b.matrixWorld);const O=e.update(b),N=b.material;if(Array.isArray(N)){const U=O.groups;for(let Z=0,k=U.length;Z=1):D.indexOf("OpenGL ES")!==-1&&($=parseFloat(/^OpenGL ES (\d)/.exec(D)[1]),k=$>=2);let ae=null,re={};const ee=n.getParameter(n.SCISSOR_BOX),ce=n.getParameter(n.VIEWPORT),he=new Ct().fromArray(ee),fe=new Ct().fromArray(ce);function X(z,xe,le,be){const Ce=new Uint8Array(4),ue=n.createTexture();n.bindTexture(z,ue),n.texParameteri(z,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(z,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let ke=0;ke"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new Ee,u=new WeakMap,f=new Set;let h;const d=new WeakMap;let p=!1;try{p=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function x(P,y){return p?new OffscreenCanvas(P,y):Za("canvas")}function m(P,y,H){let F=1;const G=W(P);if((G.width>H||G.height>H)&&(F=H/Math.max(G.width,G.height)),F<1)if(typeof HTMLImageElement<"u"&&P instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&P instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&P instanceof ImageBitmap||typeof VideoFrame<"u"&&P instanceof VideoFrame){const te=Math.floor(F*G.width),oe=Math.floor(F*G.height);h===void 0&&(h=x(te,oe));const V=y?x(te,oe):h;return V.width=te,V.height=oe,V.getContext("2d").drawImage(P,0,0,te,oe),We("WebGLRenderer: Texture has been resized from ("+G.width+"x"+G.height+") to ("+te+"x"+oe+")."),V}else return"data"in P&&We("WebGLRenderer: Image in DataTexture is too big ("+G.width+"x"+G.height+")."),P;return P}function g(P){return P.generateMipmaps}function M(P){n.generateMipmap(P)}function E(P){return P.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:P.isWebGL3DRenderTarget?n.TEXTURE_3D:P.isWebGLArrayRenderTarget||P.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function _(P,y,H,F,G,te=!1){if(P!==null){if(n[P]!==void 0)return n[P];We("WebGLRenderer: Attempt to use non-existing WebGL internal format '"+P+"'")}let oe;F&&(oe=e.get("EXT_texture_norm16"),oe||We("WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension"));let V=y;if(y===n.RED&&(H===n.FLOAT&&(V=n.R32F),H===n.HALF_FLOAT&&(V=n.R16F),H===n.UNSIGNED_BYTE&&(V=n.R8),H===n.UNSIGNED_SHORT&&oe&&(V=oe.R16_EXT),H===n.SHORT&&oe&&(V=oe.R16_SNORM_EXT)),y===n.RED_INTEGER&&(H===n.UNSIGNED_BYTE&&(V=n.R8UI),H===n.UNSIGNED_SHORT&&(V=n.R16UI),H===n.UNSIGNED_INT&&(V=n.R32UI),H===n.BYTE&&(V=n.R8I),H===n.SHORT&&(V=n.R16I),H===n.INT&&(V=n.R32I)),y===n.RG&&(H===n.FLOAT&&(V=n.RG32F),H===n.HALF_FLOAT&&(V=n.RG16F),H===n.UNSIGNED_BYTE&&(V=n.RG8),H===n.UNSIGNED_SHORT&&oe&&(V=oe.RG16_EXT),H===n.SHORT&&oe&&(V=oe.RG16_SNORM_EXT)),y===n.RG_INTEGER&&(H===n.UNSIGNED_BYTE&&(V=n.RG8UI),H===n.UNSIGNED_SHORT&&(V=n.RG16UI),H===n.UNSIGNED_INT&&(V=n.RG32UI),H===n.BYTE&&(V=n.RG8I),H===n.SHORT&&(V=n.RG16I),H===n.INT&&(V=n.RG32I)),y===n.RGB_INTEGER&&(H===n.UNSIGNED_BYTE&&(V=n.RGB8UI),H===n.UNSIGNED_SHORT&&(V=n.RGB16UI),H===n.UNSIGNED_INT&&(V=n.RGB32UI),H===n.BYTE&&(V=n.RGB8I),H===n.SHORT&&(V=n.RGB16I),H===n.INT&&(V=n.RGB32I)),y===n.RGBA_INTEGER&&(H===n.UNSIGNED_BYTE&&(V=n.RGBA8UI),H===n.UNSIGNED_SHORT&&(V=n.RGBA16UI),H===n.UNSIGNED_INT&&(V=n.RGBA32UI),H===n.BYTE&&(V=n.RGBA8I),H===n.SHORT&&(V=n.RGBA16I),H===n.INT&&(V=n.RGBA32I)),y===n.RGB&&(H===n.UNSIGNED_SHORT&&oe&&(V=oe.RGB16_EXT),H===n.SHORT&&oe&&(V=oe.RGB16_SNORM_EXT),H===n.UNSIGNED_INT_5_9_9_9_REV&&(V=n.RGB9_E5),H===n.UNSIGNED_INT_10F_11F_11F_REV&&(V=n.R11F_G11F_B10F)),y===n.RGBA){const K=te?qa:nt.getTransfer(G);H===n.FLOAT&&(V=n.RGBA32F),H===n.HALF_FLOAT&&(V=n.RGBA16F),H===n.UNSIGNED_BYTE&&(V=K===ft?n.SRGB8_ALPHA8:n.RGBA8),H===n.UNSIGNED_SHORT&&oe&&(V=oe.RGBA16_EXT),H===n.SHORT&&oe&&(V=oe.RGBA16_SNORM_EXT),H===n.UNSIGNED_SHORT_4_4_4_4&&(V=n.RGBA4),H===n.UNSIGNED_SHORT_5_5_5_1&&(V=n.RGB5_A1)}return(V===n.R16F||V===n.R32F||V===n.RG16F||V===n.RG32F||V===n.RGBA16F||V===n.RGBA32F)&&e.get("EXT_color_buffer_float"),V}function T(P,y){let H;return P?y===null||y===Qn||y===Ar?H=n.DEPTH24_STENCIL8:y===Ln?H=n.DEPTH32F_STENCIL8:y===Tr&&(H=n.DEPTH24_STENCIL8,We("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):y===null||y===Qn||y===Ar?H=n.DEPTH_COMPONENT24:y===Ln?H=n.DEPTH_COMPONENT32F:y===Tr&&(H=n.DEPTH_COMPONENT16),H}function b(P,y){return g(P)===!0||P.isFramebufferTexture&&P.minFilter!==Ft&&P.minFilter!==Xt?Math.log2(Math.max(y.width,y.height))+1:P.mipmaps!==void 0&&P.mipmaps.length>0?P.mipmaps.length:P.isCompressedTexture&&Array.isArray(P.image)?y.mipmaps.length:1}function S(P){const y=P.target;y.removeEventListener("dispose",S),w(y),y.isVideoTexture&&u.delete(y),y.isHTMLTexture&&f.delete(y)}function v(P){const y=P.target;y.removeEventListener("dispose",v),L(y)}function w(P){const y=i.get(P);if(y.__webglInit===void 0)return;const H=P.source,F=d.get(H);if(F){const G=F[y.__cacheKey];G.usedTimes--,G.usedTimes===0&&I(P),Object.keys(F).length===0&&d.delete(H)}i.remove(P)}function I(P){const y=i.get(P);n.deleteTexture(y.__webglTexture);const H=P.source,F=d.get(H);delete F[y.__cacheKey],a.memory.textures--}function L(P){const y=i.get(P);if(P.depthTexture&&(P.depthTexture.dispose(),i.remove(P.depthTexture)),P.isWebGLCubeRenderTarget)for(let F=0;F<6;F++){if(Array.isArray(y.__webglFramebuffer[F]))for(let G=0;G=s.maxTextures&&We("WebGLTextures: Trying to use "+P+" texture units while this GPU supports only "+s.maxTextures),C+=1,P}function k(P){const y=[];return y.push(P.wrapS),y.push(P.wrapT),y.push(P.wrapR||0),y.push(P.magFilter),y.push(P.minFilter),y.push(P.anisotropy),y.push(P.internalFormat),y.push(P.format),y.push(P.type),y.push(P.generateMipmaps),y.push(P.premultiplyAlpha),y.push(P.flipY),y.push(P.unpackAlignment),y.push(P.colorSpace),y.join()}function $(P,y){const H=i.get(P);if(P.isVideoTexture&&R(P),P.isRenderTargetTexture===!1&&P.isExternalTexture!==!0&&P.version>0&&H.__version!==P.version){const F=P.image;if(F===null)We("WebGLRenderer: Texture marked for update but no image data found.");else if(F.complete===!1)We("WebGLRenderer: Texture marked for update but image is incomplete");else{ye(H,P,y);return}}else P.isExternalTexture&&(H.__webglTexture=P.sourceTexture?P.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,H.__webglTexture,n.TEXTURE0+y)}function D(P,y){const H=i.get(P);if(P.isRenderTargetTexture===!1&&P.version>0&&H.__version!==P.version){ye(H,P,y);return}else P.isExternalTexture&&(H.__webglTexture=P.sourceTexture?P.sourceTexture:null);t.bindTexture(n.TEXTURE_2D_ARRAY,H.__webglTexture,n.TEXTURE0+y)}function ae(P,y){const H=i.get(P);if(P.isRenderTargetTexture===!1&&P.version>0&&H.__version!==P.version){ye(H,P,y);return}t.bindTexture(n.TEXTURE_3D,H.__webglTexture,n.TEXTURE0+y)}function re(P,y){const H=i.get(P);if(P.isCubeDepthTexture!==!0&&P.version>0&&H.__version!==P.version){ve(H,P,y);return}t.bindTexture(n.TEXTURE_CUBE_MAP,H.__webglTexture,n.TEXTURE0+y)}const ee={[Ll]:n.REPEAT,[li]:n.CLAMP_TO_EDGE,[Dl]:n.MIRRORED_REPEAT},ce={[Ft]:n.NEAREST,[vm]:n.NEAREST_MIPMAP_NEAREST,[Wr]:n.NEAREST_MIPMAP_LINEAR,[Xt]:n.LINEAR,[To]:n.LINEAR_MIPMAP_NEAREST,[Di]:n.LINEAR_MIPMAP_LINEAR},he={[bm]:n.NEVER,[Am]:n.ALWAYS,[Sm]:n.LESS,[Oc]:n.LEQUAL,[Mm]:n.EQUAL,[Fc]:n.GEQUAL,[Em]:n.GREATER,[Tm]:n.NOTEQUAL};function fe(P,y){if(y.type===Ln&&e.has("OES_texture_float_linear")===!1&&(y.magFilter===Xt||y.magFilter===To||y.magFilter===Wr||y.magFilter===Di||y.minFilter===Xt||y.minFilter===To||y.minFilter===Wr||y.minFilter===Di)&&We("WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(P,n.TEXTURE_WRAP_S,ee[y.wrapS]),n.texParameteri(P,n.TEXTURE_WRAP_T,ee[y.wrapT]),(P===n.TEXTURE_3D||P===n.TEXTURE_2D_ARRAY)&&n.texParameteri(P,n.TEXTURE_WRAP_R,ee[y.wrapR]),n.texParameteri(P,n.TEXTURE_MAG_FILTER,ce[y.magFilter]),n.texParameteri(P,n.TEXTURE_MIN_FILTER,ce[y.minFilter]),y.compareFunction&&(n.texParameteri(P,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(P,n.TEXTURE_COMPARE_FUNC,he[y.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(y.magFilter===Ft||y.minFilter!==Wr&&y.minFilter!==Di||y.type===Ln&&e.has("OES_texture_float_linear")===!1)return;if(y.anisotropy>1||i.get(y).__currentAnisotropy){const H=e.get("EXT_texture_filter_anisotropic");n.texParameterf(P,H.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(y.anisotropy,s.getMaxAnisotropy())),i.get(y).__currentAnisotropy=y.anisotropy}}}function X(P,y){let H=!1;P.__webglInit===void 0&&(P.__webglInit=!0,y.addEventListener("dispose",S));const F=y.source;let G=d.get(F);G===void 0&&(G={},d.set(F,G));const te=k(y);if(te!==P.__cacheKey){G[te]===void 0&&(G[te]={texture:n.createTexture(),usedTimes:0},a.memory.textures++,H=!0),G[te].usedTimes++;const oe=G[P.__cacheKey];oe!==void 0&&(G[P.__cacheKey].usedTimes--,oe.usedTimes===0&&I(y)),P.__cacheKey=te,P.__webglTexture=G[te].texture}return H}function se(P,y,H){return Math.floor(Math.floor(P/H)/y)}function Q(P,y,H,F){const te=P.updateRanges;if(te.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,y.width,y.height,H,F,y.data);else{te.sort((de,pe)=>de.start-pe.start);let oe=0;for(let de=1;de0){He&&qe&&t.texStorage2D(n.TEXTURE_2D,xe,pe,Me[0].width,Me[0].height);for(let le=0,be=Me.length;le0){const Ce=Qu(ge.width,ge.height,y.format,y.type);for(const ue of y.layerUpdates){const ke=ge.data.subarray(ue*Ce/ge.data.BYTES_PER_ELEMENT,(ue+1)*Ce/ge.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,le,0,0,ue,ge.width,ge.height,1,ie,ke)}y.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,le,0,0,0,ge.width,ge.height,K.depth,ie,ge.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,le,pe,ge.width,ge.height,K.depth,0,ge.data,0,0);else We("WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else He?z&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,le,0,0,0,ge.width,ge.height,K.depth,ie,de,ge.data):t.texImage3D(n.TEXTURE_2D_ARRAY,le,pe,ge.width,ge.height,K.depth,0,ie,de,ge.data)}else{He&&qe&&t.texStorage2D(n.TEXTURE_2D,xe,pe,Me[0].width,Me[0].height);for(let le=0,be=Me.length;le0){const le=Qu(K.width,K.height,y.format,y.type);for(const be of y.layerUpdates){const Ce=K.data.subarray(be*le/K.data.BYTES_PER_ELEMENT,(be+1)*le/K.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,be,K.width,K.height,1,ie,de,Ce)}y.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,K.width,K.height,K.depth,ie,de,K.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,pe,K.width,K.height,K.depth,0,ie,de,K.data);else if(y.isData3DTexture)He?(qe&&t.texStorage3D(n.TEXTURE_3D,xe,pe,K.width,K.height,K.depth),z&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,K.width,K.height,K.depth,ie,de,K.data)):t.texImage3D(n.TEXTURE_3D,0,pe,K.width,K.height,K.depth,0,ie,de,K.data);else if(y.isFramebufferTexture){if(qe)if(He)t.texStorage2D(n.TEXTURE_2D,xe,pe,K.width,K.height);else{let le=K.width,be=K.height;for(let Ce=0;Ce>=1,be>>=1}}else if(y.isHTMLTexture){if("texElementImage2D"in n){const le=n.canvas;if(le.hasAttribute("layoutsubtree")||le.setAttribute("layoutsubtree","true"),K.parentNode!==le){le.appendChild(K),f.add(y),le.onpaint=be=>{const Ce=be.changedElements;for(const ue of f)Ce.includes(ue.image)&&(ue.needsUpdate=!0)},le.requestPaint();return}if(n.texElementImage2D.length===3)n.texElementImage2D(n.TEXTURE_2D,n.RGBA8,K);else{const Ce=n.RGBA,ue=n.RGBA,ke=n.UNSIGNED_BYTE;n.texElementImage2D(n.TEXTURE_2D,0,Ce,ue,ke,K)}n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE)}}else if(Me.length>0){if(He&&qe){const le=W(Me[0]);t.texStorage2D(n.TEXTURE_2D,xe,pe,le.width,le.height)}for(let le=0,be=Me.length;le0&&be++;const ue=W(pe[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,be,qe,ue.width,ue.height)}for(let ue=0;ue<6;ue++)if(de){z?le&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,0,0,pe[ue].width,pe[ue].height,Me,He,pe[ue].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+ue,0,qe,pe[ue].width,pe[ue].height,0,Me,He,pe[ue].data);for(let ke=0;ke>te),ge=Math.max(1,y.height>>te);G===n.TEXTURE_3D||G===n.TEXTURE_2D_ARRAY?t.texImage3D(G,te,K,pe,ge,y.depth,0,oe,V,null):t.texImage2D(G,te,K,pe,ge,0,oe,V,null)}t.bindFramebuffer(n.FRAMEBUFFER,P),ut(y)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,F,G,de.__webglTexture,0,ct(y)):(G===n.TEXTURE_2D||G>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&G<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,F,G,de.__webglTexture,te),t.bindFramebuffer(n.FRAMEBUFFER,null)}function Ze(P,y,H){if(n.bindRenderbuffer(n.RENDERBUFFER,P),y.depthBuffer){const F=y.depthTexture,G=F&&F.isDepthTexture?F.type:null,te=T(y.stencilBuffer,G),oe=y.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT;ut(y)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,ct(y),te,y.width,y.height):H?n.renderbufferStorageMultisample(n.RENDERBUFFER,ct(y),te,y.width,y.height):n.renderbufferStorage(n.RENDERBUFFER,te,y.width,y.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,oe,n.RENDERBUFFER,P)}else{const F=y.textures;for(let G=0;G{delete y.__boundDepthTexture,delete y.__depthDisposeCallback,F.removeEventListener("dispose",G)};F.addEventListener("dispose",G),y.__depthDisposeCallback=G}y.__boundDepthTexture=F}if(P.depthTexture&&!y.__autoAllocateDepthBuffer)if(H)for(let F=0;F<6;F++)Ye(y.__webglFramebuffer[F],P,F);else{const F=P.texture.mipmaps;F&&F.length>0?Ye(y.__webglFramebuffer[0],P,0):Ye(y.__webglFramebuffer,P,0)}else if(H){y.__webglDepthbuffer=[];for(let F=0;F<6;F++)if(t.bindFramebuffer(n.FRAMEBUFFER,y.__webglFramebuffer[F]),y.__webglDepthbuffer[F]===void 0)y.__webglDepthbuffer[F]=n.createRenderbuffer(),Ze(y.__webglDepthbuffer[F],P,!1);else{const G=P.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,te=y.__webglDepthbuffer[F];n.bindRenderbuffer(n.RENDERBUFFER,te),n.framebufferRenderbuffer(n.FRAMEBUFFER,G,n.RENDERBUFFER,te)}}else{const F=P.texture.mipmaps;if(F&&F.length>0?t.bindFramebuffer(n.FRAMEBUFFER,y.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,y.__webglFramebuffer),y.__webglDepthbuffer===void 0)y.__webglDepthbuffer=n.createRenderbuffer(),Ze(y.__webglDepthbuffer,P,!1);else{const G=P.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,te=y.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,te),n.framebufferRenderbuffer(n.FRAMEBUFFER,G,n.RENDERBUFFER,te)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Fe(P,y,H){const F=i.get(P);y!==void 0&&_e(F.__webglFramebuffer,P,P.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),H!==void 0&&Oe(P)}function Ve(P){const y=P.texture,H=i.get(P),F=i.get(y);P.addEventListener("dispose",v);const G=P.textures,te=P.isWebGLCubeRenderTarget===!0,oe=G.length>1;if(oe||(F.__webglTexture===void 0&&(F.__webglTexture=n.createTexture()),F.__version=y.version,a.memory.textures++),te){H.__webglFramebuffer=[];for(let V=0;V<6;V++)if(y.mipmaps&&y.mipmaps.length>0){H.__webglFramebuffer[V]=[];for(let K=0;K0){H.__webglFramebuffer=[];for(let V=0;V0&&ut(P)===!1){H.__webglMultisampledFramebuffer=n.createFramebuffer(),H.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,H.__webglMultisampledFramebuffer);for(let V=0;V0)for(let K=0;K0)for(let K=0;K0){if(ut(P)===!1){const y=P.textures,H=P.width,F=P.height;let G=n.COLOR_BUFFER_BIT;const te=P.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,oe=i.get(P),V=y.length>1;if(V)for(let ie=0;ie0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,oe.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,oe.__webglFramebuffer);for(let ie=0;ie0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&y.__useRenderToTexture!==!1}function R(P){const y=a.render.frame;u.get(P)!==y&&(u.set(P,y),P.update())}function Ae(P,y){const H=P.colorSpace,F=P.format,G=P.type;return P.isCompressedTexture===!0||P.isVideoTexture===!0||H!==Ya&&H!==oi&&(nt.getTransfer(H)===ft?(F!==En||G!==Sn)&&We("WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):st("WebGLTextures: Unsupported texture color space:",H)),y}function W(P){return typeof HTMLImageElement<"u"&&P instanceof HTMLImageElement?(c.width=P.naturalWidth||P.width,c.height=P.naturalHeight||P.height):typeof VideoFrame<"u"&&P instanceof VideoFrame?(c.width=P.displayWidth,c.height=P.displayHeight):(c.width=P.width,c.height=P.height),c}this.allocateTextureUnit=Z,this.resetTextureUnits=O,this.getTextureUnits=N,this.setTextureUnits=U,this.setTexture2D=$,this.setTexture2DArray=D,this.setTexture3D=ae,this.setTextureCube=re,this.rebindTextures=Fe,this.setupRenderTarget=Ve,this.updateRenderTargetMipmap=at,this.updateMultisampleRenderTarget=vt,this.setupDepthRenderbuffer=Oe,this.setupFrameBufferTexture=_e,this.useMultisampledRTT=ut,this.isReversedDepthBuffer=function(){return t.buffers.depth.getReversed()}}function L_(n,e){function t(i,s=oi){let r;const a=nt.getTransfer(s);if(i===Sn)return n.UNSIGNED_BYTE;if(i===Pc)return n.UNSIGNED_SHORT_4_4_4_4;if(i===Lc)return n.UNSIGNED_SHORT_5_5_5_1;if(i===Vf)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===Wf)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===zf)return n.BYTE;if(i===Gf)return n.SHORT;if(i===Tr)return n.UNSIGNED_SHORT;if(i===Rc)return n.INT;if(i===Qn)return n.UNSIGNED_INT;if(i===Ln)return n.FLOAT;if(i===mi)return n.HALF_FLOAT;if(i===Xf)return n.ALPHA;if(i===Yf)return n.RGB;if(i===En)return n.RGBA;if(i===gi)return n.DEPTH_COMPONENT;if(i===ji)return n.DEPTH_STENCIL;if(i===qf)return n.RED;if(i===Dc)return n.RED_INTEGER;if(i===ts)return n.RG;if(i===Ic)return n.RG_INTEGER;if(i===Uc)return n.RGBA_INTEGER;if(i===Ua||i===Oa||i===Fa||i===Na)if(a===ft)if(r=e.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(i===Ua)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Oa)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Fa)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Na)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=e.get("WEBGL_compressed_texture_s3tc"),r!==null){if(i===Ua)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Oa)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Fa)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Na)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===Il||i===Ul||i===Ol||i===Fl)if(r=e.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(i===Il)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===Ul)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===Ol)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===Fl)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===Nl||i===kl||i===Bl||i===Hl||i===zl||i===Wa||i===Gl)if(r=e.get("WEBGL_compressed_texture_etc"),r!==null){if(i===Nl||i===kl)return a===ft?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(i===Bl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC;if(i===Hl)return r.COMPRESSED_R11_EAC;if(i===zl)return r.COMPRESSED_SIGNED_R11_EAC;if(i===Wa)return r.COMPRESSED_RG11_EAC;if(i===Gl)return r.COMPRESSED_SIGNED_RG11_EAC}else return null;if(i===Vl||i===Wl||i===Xl||i===Yl||i===ql||i===$l||i===Zl||i===Kl||i===Jl||i===jl||i===Ql||i===ec||i===tc||i===nc)if(r=e.get("WEBGL_compressed_texture_astc"),r!==null){if(i===Vl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===Wl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===Xl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===Yl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===ql)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===$l)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===Zl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===Kl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===Jl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===jl)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===Ql)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===ec)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===tc)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===nc)return a===ft?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===ic||i===sc||i===rc)if(r=e.get("EXT_texture_compression_bptc"),r!==null){if(i===ic)return a===ft?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===sc)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===rc)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===ac||i===oc||i===Xa||i===lc)if(r=e.get("EXT_texture_compression_rgtc"),r!==null){if(i===ac)return r.COMPRESSED_RED_RGTC1_EXT;if(i===oc)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===Xa)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===lc)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Ar?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}const D_=` +}`,Ry=[new H(1,0,0),new H(-1,0,0),new H(0,1,0),new H(0,-1,0),new H(0,0,1),new H(0,0,-1)],Dy=[new H(0,-1,0),new H(0,-1,0),new H(0,0,1),new H(0,0,-1),new H(0,-1,0),new H(0,-1,0)],Ah=new Et,fr=new H,al=new H;function Ly(n,e,t){let i=new sf;const s=new Me,r=new Me,a=new wt,o=new Gm,l=new Wm,c={},u=t.maxTextureSize,d={[Hi]:on,[on]:Hi,[Ht]:Ht},h=new Pn({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Me},radius:{value:4}},vertexShader:Cy,fragmentShader:wy}),f=h.clone();f.defines.HORIZONTAL_PASS=1;const m=new Ct;m.setAttribute("position",new In(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const _=new zt(m,h),p=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=Oa;let g=this.type;this.render=function(S,M,y){if(p.enabled===!1||p.autoUpdate===!1&&p.needsUpdate===!1||S.length===0)return;this.type===e0&&(Ke("WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead."),this.type=Oa);const T=n.getRenderTarget(),I=n.getActiveCubeFace(),L=n.getActiveMipmapLevel(),w=n.state;w.setBlending(fi),w.buffers.depth.getReversed()===!0?w.buffers.color.setClear(0,0,0,0):w.buffers.color.setClear(1,1,1,1),w.buffers.depth.setTest(!0),w.setScissorTest(!1);const U=g!==this.type;U&&M.traverse(function(k){k.material&&(Array.isArray(k.material)?k.material.forEach(O=>O.needsUpdate=!0):k.material.needsUpdate=!0)});for(let k=0,O=S.length;ku||s.y>u)&&(s.x>u&&(r.x=Math.floor(u/Z.x),s.x=r.x*Z.x,F.mapSize.x=r.x),s.y>u&&(r.y=Math.floor(u/Z.y),s.y=r.y*Z.y,F.mapSize.y=r.y));const R=n.state.buffers.depth.getReversed();if(F.camera._reversedDepth=R,F.map===null||U===!0){if(F.map!==null&&(F.map.depthTexture!==null&&(F.map.depthTexture.dispose(),F.map.depthTexture=null),F.map.dispose()),this.type===gr){if($.isPointLight){Ke("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}F.map=new ei(s.x,s.y,{format:rs,type:_i,minFilter:Wt,magFilter:Wt,generateMipmaps:!1}),F.map.texture.name=$.name+".shadowMap",F.map.depthTexture=new Xs(s.x,s.y,Ln),F.map.depthTexture.name=$.name+".shadowMapDepth",F.map.depthTexture.format=xi,F.map.depthTexture.compareFunction=null,F.map.depthTexture.minFilter=Ut,F.map.depthTexture.magFilter=Ut}else $.isPointLight?(F.map=new Sf(s.x),F.map.depthTexture=new rm(s.x,ni)):(F.map=new ei(s.x,s.y),F.map.depthTexture=new Xs(s.x,s.y,ni)),F.map.depthTexture.name=$.name+".shadowMap",F.map.depthTexture.format=xi,this.type===Oa?(F.map.depthTexture.compareFunction=R?Fc:kc,F.map.depthTexture.minFilter=Wt,F.map.depthTexture.magFilter=Wt):(F.map.depthTexture.compareFunction=null,F.map.depthTexture.minFilter=Ut,F.map.depthTexture.magFilter=Ut);F.camera.updateProjectionMatrix()}const re=F.map.isWebGLCubeRenderTarget?6:1;for(let se=0;se0||M.map&&M.alphaTest>0||M.alphaToCoverage===!0){const w=I.uuid,U=M.uuid;let k=c[w];k===void 0&&(k={},c[w]=k);let O=k[U];O===void 0&&(O=I.clone(),k[U]=O,M.addEventListener("dispose",E)),I=O}if(I.visible=M.visible,I.wireframe=M.wireframe,T===gr?I.side=M.shadowSide!==null?M.shadowSide:M.side:I.side=M.shadowSide!==null?M.shadowSide:d[M.side],I.alphaMap=M.alphaMap,I.alphaTest=M.alphaToCoverage===!0?.5:M.alphaTest,I.map=M.map,I.clipShadows=M.clipShadows,I.clippingPlanes=M.clippingPlanes,I.clipIntersection=M.clipIntersection,I.displacementMap=M.displacementMap,I.displacementScale=M.displacementScale,I.displacementBias=M.displacementBias,I.wireframeLinewidth=M.wireframeLinewidth,I.linewidth=M.linewidth,y.isPointLight===!0&&I.isMeshDistanceMaterial===!0){const w=n.properties.get(I);w.light=y}return I}function x(S,M,y,T,I){if(S.visible===!1)return;if(S.layers.test(M.layers)&&(S.isMesh||S.isLine||S.isPoints)&&(S.castShadow||S.receiveShadow&&I===gr)&&(!S.frustumCulled||i.intersectsObject(S))){S.modelViewMatrix.multiplyMatrices(y.matrixWorldInverse,S.matrixWorld);const U=e.update(S),k=S.material;if(Array.isArray(k)){const O=U.groups;for(let $=0,F=O.length;$=1):R.indexOf("OpenGL ES")!==-1&&(Z=parseFloat(/^OpenGL ES (\d)/.exec(R)[1]),F=Z>=2);let re=null,se={};const ae=n.getParameter(n.SCISSOR_BOX),ge=n.getParameter(n.VIEWPORT),he=new wt().fromArray(ae),oe=new wt().fromArray(ge);function G(V,_e,ue,ye){const Te=new Uint8Array(4),fe=n.createTexture();n.bindTexture(V,fe),n.texParameteri(V,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(V,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let He=0;He"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new Me,u=new WeakMap,d=new Set;let h;const f=new WeakMap;let m=!1;try{m=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function _(P,v){return m?new OffscreenCanvas(P,v):$a("canvas")}function p(P,v,B){let Y=1;const N=z(P);if((N.width>B||N.height>B)&&(Y=B/Math.max(N.width,N.height)),Y<1)if(typeof HTMLImageElement<"u"&&P instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&P instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&P instanceof ImageBitmap||typeof VideoFrame<"u"&&P instanceof VideoFrame){const J=Math.floor(Y*N.width),ie=Math.floor(Y*N.height);h===void 0&&(h=_(J,ie));const X=v?_(J,ie):h;return X.width=J,X.height=ie,X.getContext("2d").drawImage(P,0,0,J,ie),Ke("WebGLRenderer: Texture has been resized from ("+N.width+"x"+N.height+") to ("+J+"x"+ie+")."),X}else return"data"in P&&Ke("WebGLRenderer: Image in DataTexture is too big ("+N.width+"x"+N.height+")."),P;return P}function g(P){return P.generateMipmaps}function b(P){n.generateMipmap(P)}function A(P){return P.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:P.isWebGL3DRenderTarget?n.TEXTURE_3D:P.isWebGLArrayRenderTarget||P.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function x(P,v,B,Y,N,J=!1){if(P!==null){if(n[P]!==void 0)return n[P];Ke("WebGLRenderer: Attempt to use non-existing WebGL internal format '"+P+"'")}let ie;Y&&(ie=e.get("EXT_texture_norm16"),ie||Ke("WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension"));let X=v;if(v===n.RED&&(B===n.FLOAT&&(X=n.R32F),B===n.HALF_FLOAT&&(X=n.R16F),B===n.UNSIGNED_BYTE&&(X=n.R8),B===n.UNSIGNED_SHORT&&ie&&(X=ie.R16_EXT),B===n.SHORT&&ie&&(X=ie.R16_SNORM_EXT)),v===n.RED_INTEGER&&(B===n.UNSIGNED_BYTE&&(X=n.R8UI),B===n.UNSIGNED_SHORT&&(X=n.R16UI),B===n.UNSIGNED_INT&&(X=n.R32UI),B===n.BYTE&&(X=n.R8I),B===n.SHORT&&(X=n.R16I),B===n.INT&&(X=n.R32I)),v===n.RG&&(B===n.FLOAT&&(X=n.RG32F),B===n.HALF_FLOAT&&(X=n.RG16F),B===n.UNSIGNED_BYTE&&(X=n.RG8),B===n.UNSIGNED_SHORT&&ie&&(X=ie.RG16_EXT),B===n.SHORT&&ie&&(X=ie.RG16_SNORM_EXT)),v===n.RG_INTEGER&&(B===n.UNSIGNED_BYTE&&(X=n.RG8UI),B===n.UNSIGNED_SHORT&&(X=n.RG16UI),B===n.UNSIGNED_INT&&(X=n.RG32UI),B===n.BYTE&&(X=n.RG8I),B===n.SHORT&&(X=n.RG16I),B===n.INT&&(X=n.RG32I)),v===n.RGB_INTEGER&&(B===n.UNSIGNED_BYTE&&(X=n.RGB8UI),B===n.UNSIGNED_SHORT&&(X=n.RGB16UI),B===n.UNSIGNED_INT&&(X=n.RGB32UI),B===n.BYTE&&(X=n.RGB8I),B===n.SHORT&&(X=n.RGB16I),B===n.INT&&(X=n.RGB32I)),v===n.RGBA_INTEGER&&(B===n.UNSIGNED_BYTE&&(X=n.RGBA8UI),B===n.UNSIGNED_SHORT&&(X=n.RGBA16UI),B===n.UNSIGNED_INT&&(X=n.RGBA32UI),B===n.BYTE&&(X=n.RGBA8I),B===n.SHORT&&(X=n.RGBA16I),B===n.INT&&(X=n.RGBA32I)),v===n.RGB&&(B===n.UNSIGNED_SHORT&&ie&&(X=ie.RGB16_EXT),B===n.SHORT&&ie&&(X=ie.RGB16_SNORM_EXT),B===n.UNSIGNED_INT_5_9_9_9_REV&&(X=n.RGB9_E5),B===n.UNSIGNED_INT_10F_11F_11F_REV&&(X=n.R11F_G11F_B10F)),v===n.RGBA){const W=J?qa:it.getTransfer(N);B===n.FLOAT&&(X=n.RGBA32F),B===n.HALF_FLOAT&&(X=n.RGBA16F),B===n.UNSIGNED_BYTE&&(X=W===pt?n.SRGB8_ALPHA8:n.RGBA8),B===n.UNSIGNED_SHORT&&ie&&(X=ie.RGBA16_EXT),B===n.SHORT&&ie&&(X=ie.RGBA16_SNORM_EXT),B===n.UNSIGNED_SHORT_4_4_4_4&&(X=n.RGBA4),B===n.UNSIGNED_SHORT_5_5_5_1&&(X=n.RGB5_A1)}return(X===n.R16F||X===n.R32F||X===n.RG16F||X===n.RG32F||X===n.RGBA16F||X===n.RGBA32F)&&e.get("EXT_color_buffer_float"),X}function E(P,v){let B;return P?v===null||v===ni||v===Cr?B=n.DEPTH24_STENCIL8:v===Ln?B=n.DEPTH32F_STENCIL8:v===Tr&&(B=n.DEPTH24_STENCIL8,Ke("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):v===null||v===ni||v===Cr?B=n.DEPTH_COMPONENT24:v===Ln?B=n.DEPTH_COMPONENT32F:v===Tr&&(B=n.DEPTH_COMPONENT16),B}function S(P,v){return g(P)===!0||P.isFramebufferTexture&&P.minFilter!==Ut&&P.minFilter!==Wt?Math.log2(Math.max(v.width,v.height))+1:P.mipmaps!==void 0&&P.mipmaps.length>0?P.mipmaps.length:P.isCompressedTexture&&Array.isArray(P.image)?v.mipmaps.length:1}function M(P){const v=P.target;v.removeEventListener("dispose",M),T(v),v.isVideoTexture&&u.delete(v),v.isHTMLTexture&&d.delete(v)}function y(P){const v=P.target;v.removeEventListener("dispose",y),L(v)}function T(P){const v=i.get(P);if(v.__webglInit===void 0)return;const B=P.source,Y=f.get(B);if(Y){const N=Y[v.__cacheKey];N.usedTimes--,N.usedTimes===0&&I(P),Object.keys(Y).length===0&&f.delete(B)}i.remove(P)}function I(P){const v=i.get(P);n.deleteTexture(v.__webglTexture);const B=P.source,Y=f.get(B);delete Y[v.__cacheKey],a.memory.textures--}function L(P){const v=i.get(P);if(P.depthTexture&&(P.depthTexture.dispose(),i.remove(P.depthTexture)),P.isWebGLCubeRenderTarget)for(let Y=0;Y<6;Y++){if(Array.isArray(v.__webglFramebuffer[Y]))for(let N=0;N=s.maxTextures&&Ke("WebGLTextures: Trying to use "+P+" texture units while this GPU supports only "+s.maxTextures),w+=1,P}function F(P){const v=[];return v.push(P.wrapS),v.push(P.wrapT),v.push(P.wrapR||0),v.push(P.magFilter),v.push(P.minFilter),v.push(P.anisotropy),v.push(P.internalFormat),v.push(P.format),v.push(P.type),v.push(P.generateMipmaps),v.push(P.premultiplyAlpha),v.push(P.flipY),v.push(P.unpackAlignment),v.push(P.colorSpace),v.join()}function Z(P,v){const B=i.get(P);if(P.isVideoTexture&&D(P),P.isRenderTargetTexture===!1&&P.isExternalTexture!==!0&&P.version>0&&B.__version!==P.version){const Y=P.image;if(Y===null)Ke("WebGLRenderer: Texture marked for update but no image data found.");else if(Y.complete===!1)Ke("WebGLRenderer: Texture marked for update but image is incomplete");else{xe(B,P,v);return}}else P.isExternalTexture&&(B.__webglTexture=P.sourceTexture?P.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,B.__webglTexture,n.TEXTURE0+v)}function R(P,v){const B=i.get(P);if(P.isRenderTargetTexture===!1&&P.version>0&&B.__version!==P.version){xe(B,P,v);return}else P.isExternalTexture&&(B.__webglTexture=P.sourceTexture?P.sourceTexture:null);t.bindTexture(n.TEXTURE_2D_ARRAY,B.__webglTexture,n.TEXTURE0+v)}function re(P,v){const B=i.get(P);if(P.isRenderTargetTexture===!1&&P.version>0&&B.__version!==P.version){xe(B,P,v);return}t.bindTexture(n.TEXTURE_3D,B.__webglTexture,n.TEXTURE0+v)}function se(P,v){const B=i.get(P);if(P.isCubeDepthTexture!==!0&&P.version>0&&B.__version!==P.version){be(B,P,v);return}t.bindTexture(n.TEXTURE_CUBE_MAP,B.__webglTexture,n.TEXTURE0+v)}const ae={[Pl]:n.REPEAT,[ui]:n.CLAMP_TO_EDGE,[Ol]:n.MIRRORED_REPEAT},ge={[Ut]:n.NEAREST,[S0]:n.NEAREST_MIPMAP_NEAREST,[Xr]:n.NEAREST_MIPMAP_LINEAR,[Wt]:n.LINEAR,[To]:n.LINEAR_MIPMAP_NEAREST,[Ui]:n.LINEAR_MIPMAP_LINEAR},he={[A0]:n.NEVER,[R0]:n.ALWAYS,[E0]:n.LESS,[kc]:n.LEQUAL,[T0]:n.EQUAL,[Fc]:n.GEQUAL,[C0]:n.GREATER,[w0]:n.NOTEQUAL};function oe(P,v){if(v.type===Ln&&e.has("OES_texture_float_linear")===!1&&(v.magFilter===Wt||v.magFilter===To||v.magFilter===Xr||v.magFilter===Ui||v.minFilter===Wt||v.minFilter===To||v.minFilter===Xr||v.minFilter===Ui)&&Ke("WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(P,n.TEXTURE_WRAP_S,ae[v.wrapS]),n.texParameteri(P,n.TEXTURE_WRAP_T,ae[v.wrapT]),(P===n.TEXTURE_3D||P===n.TEXTURE_2D_ARRAY)&&n.texParameteri(P,n.TEXTURE_WRAP_R,ae[v.wrapR]),n.texParameteri(P,n.TEXTURE_MAG_FILTER,ge[v.magFilter]),n.texParameteri(P,n.TEXTURE_MIN_FILTER,ge[v.minFilter]),v.compareFunction&&(n.texParameteri(P,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(P,n.TEXTURE_COMPARE_FUNC,he[v.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(v.magFilter===Ut||v.minFilter!==Xr&&v.minFilter!==Ui||v.type===Ln&&e.has("OES_texture_float_linear")===!1)return;if(v.anisotropy>1||i.get(v).__currentAnisotropy){const B=e.get("EXT_texture_filter_anisotropic");n.texParameterf(P,B.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(v.anisotropy,s.getMaxAnisotropy())),i.get(v).__currentAnisotropy=v.anisotropy}}}function G(P,v){let B=!1;P.__webglInit===void 0&&(P.__webglInit=!0,v.addEventListener("dispose",M));const Y=v.source;let N=f.get(Y);N===void 0&&(N={},f.set(Y,N));const J=F(v);if(J!==P.__cacheKey){N[J]===void 0&&(N[J]={texture:n.createTexture(),usedTimes:0},a.memory.textures++,B=!0),N[J].usedTimes++;const ie=N[P.__cacheKey];ie!==void 0&&(N[P.__cacheKey].usedTimes--,ie.usedTimes===0&&I(v)),P.__cacheKey=J,P.__webglTexture=N[J].texture}return B}function ne(P,v,B){return Math.floor(Math.floor(P/B)/v)}function j(P,v,B,Y){const J=P.updateRanges;if(J.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,v.width,v.height,B,Y,v.data);else{J.sort((le,de)=>le.start-de.start);let ie=0;for(let le=1;le0){we&&Ye&&t.texStorage2D(n.TEXTURE_2D,_e,de,Le[0].width,Le[0].height);for(let ue=0,ye=Le.length;ue0){const Te=th(pe.width,pe.height,v.format,v.type);for(const fe of v.layerUpdates){const He=pe.data.subarray(fe*Te/pe.data.BYTES_PER_ELEMENT,(fe+1)*Te/pe.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,ue,0,0,fe,pe.width,pe.height,1,ce,He)}v.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,ue,0,0,0,pe.width,pe.height,W.depth,ce,pe.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,ue,de,pe.width,pe.height,W.depth,0,pe.data,0,0);else Ke("WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else we?V&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,ue,0,0,0,pe.width,pe.height,W.depth,ce,le,pe.data):t.texImage3D(n.TEXTURE_2D_ARRAY,ue,de,pe.width,pe.height,W.depth,0,ce,le,pe.data)}else{we&&Ye&&t.texStorage2D(n.TEXTURE_2D,_e,de,Le[0].width,Le[0].height);for(let ue=0,ye=Le.length;ue0){const ue=th(W.width,W.height,v.format,v.type);for(const ye of v.layerUpdates){const Te=W.data.subarray(ye*ue/W.data.BYTES_PER_ELEMENT,(ye+1)*ue/W.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,ye,W.width,W.height,1,ce,le,Te)}v.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,W.width,W.height,W.depth,ce,le,W.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,de,W.width,W.height,W.depth,0,ce,le,W.data);else if(v.isData3DTexture)we?(Ye&&t.texStorage3D(n.TEXTURE_3D,_e,de,W.width,W.height,W.depth),V&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,W.width,W.height,W.depth,ce,le,W.data)):t.texImage3D(n.TEXTURE_3D,0,de,W.width,W.height,W.depth,0,ce,le,W.data);else if(v.isFramebufferTexture){if(Ye)if(we)t.texStorage2D(n.TEXTURE_2D,_e,de,W.width,W.height);else{let ue=W.width,ye=W.height;for(let Te=0;Te<_e;Te++)t.texImage2D(n.TEXTURE_2D,Te,de,ue,ye,0,ce,le,null),ue>>=1,ye>>=1}}else if(v.isHTMLTexture){if("texElementImage2D"in n){const ue=n.canvas;if(ue.hasAttribute("layoutsubtree")||ue.setAttribute("layoutsubtree","true"),W.parentNode!==ue){ue.appendChild(W),d.add(v),ue.onpaint=ye=>{const Te=ye.changedElements;for(const fe of d)Te.includes(fe.image)&&(fe.needsUpdate=!0)},ue.requestPaint();return}if(n.texElementImage2D.length===3)n.texElementImage2D(n.TEXTURE_2D,n.RGBA8,W);else{const Te=n.RGBA,fe=n.RGBA,He=n.UNSIGNED_BYTE;n.texElementImage2D(n.TEXTURE_2D,0,Te,fe,He,W)}n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE)}}else if(Le.length>0){if(we&&Ye){const ue=z(Le[0]);t.texStorage2D(n.TEXTURE_2D,_e,de,ue.width,ue.height)}for(let ue=0,ye=Le.length;ue0&&ye++;const fe=z(de[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,ye,Ye,fe.width,fe.height)}for(let fe=0;fe<6;fe++)if(le){V?ue&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+fe,0,0,0,de[fe].width,de[fe].height,Le,we,de[fe].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+fe,0,Ye,de[fe].width,de[fe].height,0,Le,we,de[fe].data);for(let He=0;He>J),pe=Math.max(1,v.height>>J);N===n.TEXTURE_3D||N===n.TEXTURE_2D_ARRAY?t.texImage3D(N,J,W,de,pe,v.depth,0,ie,X,null):t.texImage2D(N,J,W,de,pe,0,ie,X,null)}t.bindFramebuffer(n.FRAMEBUFFER,P),dt(v)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,Y,N,le.__webglTexture,0,ht(v)):(N===n.TEXTURE_2D||N>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&N<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,Y,N,le.__webglTexture,J),t.bindFramebuffer(n.FRAMEBUFFER,null)}function Be(P,v,B){if(n.bindRenderbuffer(n.RENDERBUFFER,P),v.depthBuffer){const Y=v.depthTexture,N=Y&&Y.isDepthTexture?Y.type:null,J=E(v.stencilBuffer,N),ie=v.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT;dt(v)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,ht(v),J,v.width,v.height):B?n.renderbufferStorageMultisample(n.RENDERBUFFER,ht(v),J,v.width,v.height):n.renderbufferStorage(n.RENDERBUFFER,J,v.width,v.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,ie,n.RENDERBUFFER,P)}else{const Y=v.textures;for(let N=0;N{delete v.__boundDepthTexture,delete v.__depthDisposeCallback,Y.removeEventListener("dispose",N)};Y.addEventListener("dispose",N),v.__depthDisposeCallback=N}v.__boundDepthTexture=Y}if(P.depthTexture&&!v.__autoAllocateDepthBuffer)if(B)for(let Y=0;Y<6;Y++)Ve(v.__webglFramebuffer[Y],P,Y);else{const Y=P.texture.mipmaps;Y&&Y.length>0?Ve(v.__webglFramebuffer[0],P,0):Ve(v.__webglFramebuffer,P,0)}else if(B){v.__webglDepthbuffer=[];for(let Y=0;Y<6;Y++)if(t.bindFramebuffer(n.FRAMEBUFFER,v.__webglFramebuffer[Y]),v.__webglDepthbuffer[Y]===void 0)v.__webglDepthbuffer[Y]=n.createRenderbuffer(),Be(v.__webglDepthbuffer[Y],P,!1);else{const N=P.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,J=v.__webglDepthbuffer[Y];n.bindRenderbuffer(n.RENDERBUFFER,J),n.framebufferRenderbuffer(n.FRAMEBUFFER,N,n.RENDERBUFFER,J)}}else{const Y=P.texture.mipmaps;if(Y&&Y.length>0?t.bindFramebuffer(n.FRAMEBUFFER,v.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,v.__webglFramebuffer),v.__webglDepthbuffer===void 0)v.__webglDepthbuffer=n.createRenderbuffer(),Be(v.__webglDepthbuffer,P,!1);else{const N=P.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,J=v.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,J),n.framebufferRenderbuffer(n.FRAMEBUFFER,N,n.RENDERBUFFER,J)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function ke(P,v,B){const Y=i.get(P);v!==void 0&&ve(Y.__webglFramebuffer,P,P.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),B!==void 0&&Ne(P)}function Xe(P){const v=P.texture,B=i.get(P),Y=i.get(v);P.addEventListener("dispose",y);const N=P.textures,J=P.isWebGLCubeRenderTarget===!0,ie=N.length>1;if(ie||(Y.__webglTexture===void 0&&(Y.__webglTexture=n.createTexture()),Y.__version=v.version,a.memory.textures++),J){B.__webglFramebuffer=[];for(let X=0;X<6;X++)if(v.mipmaps&&v.mipmaps.length>0){B.__webglFramebuffer[X]=[];for(let W=0;W0){B.__webglFramebuffer=[];for(let X=0;X0&&dt(P)===!1){B.__webglMultisampledFramebuffer=n.createFramebuffer(),B.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,B.__webglMultisampledFramebuffer);for(let X=0;X0)for(let W=0;W0)for(let W=0;W0){if(dt(P)===!1){const v=P.textures,B=P.width,Y=P.height;let N=n.COLOR_BUFFER_BIT;const J=P.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ie=i.get(P),X=v.length>1;if(X)for(let ce=0;ce0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,ie.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,ie.__webglFramebuffer);for(let ce=0;ce0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&v.__useRenderToTexture!==!1}function D(P){const v=a.render.frame;u.get(P)!==v&&(u.set(P,v),P.update())}function Ee(P,v){const B=P.colorSpace,Y=P.format,N=P.type;return P.isCompressedTexture===!0||P.isVideoTexture===!0||B!==Ka&&B!==ci&&(it.getTransfer(B)===pt?(Y!==Sn||N!==yn)&&Ke("WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):at("WebGLTextures: Unsupported texture color space:",B)),v}function z(P){return typeof HTMLImageElement<"u"&&P instanceof HTMLImageElement?(c.width=P.naturalWidth||P.width,c.height=P.naturalHeight||P.height):typeof VideoFrame<"u"&&P instanceof VideoFrame?(c.width=P.displayWidth,c.height=P.displayHeight):(c.width=P.width,c.height=P.height),c}this.allocateTextureUnit=$,this.resetTextureUnits=U,this.getTextureUnits=k,this.setTextureUnits=O,this.setTexture2D=Z,this.setTexture2DArray=R,this.setTexture3D=re,this.setTextureCube=se,this.rebindTextures=ke,this.setupRenderTarget=Xe,this.updateRenderTargetMipmap=tt,this.updateMultisampleRenderTarget=vt,this.setupDepthRenderbuffer=Ne,this.setupFrameBufferTexture=ve,this.useMultisampledRTT=dt,this.isReversedDepthBuffer=function(){return t.buffers.depth.getReversed()}}function Oy(n,e){function t(i,s=ci){let r;const a=it.getTransfer(s);if(i===yn)return n.UNSIGNED_BYTE;if(i===Ic)return n.UNSIGNED_SHORT_4_4_4_4;if(i===Pc)return n.UNSIGNED_SHORT_5_5_5_1;if(i===Wd)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===Xd)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===Vd)return n.BYTE;if(i===Gd)return n.SHORT;if(i===Tr)return n.UNSIGNED_SHORT;if(i===Lc)return n.INT;if(i===ni)return n.UNSIGNED_INT;if(i===Ln)return n.FLOAT;if(i===_i)return n.HALF_FLOAT;if(i===Yd)return n.ALPHA;if(i===Kd)return n.RGB;if(i===Sn)return n.RGBA;if(i===xi)return n.DEPTH_COMPONENT;if(i===ns)return n.DEPTH_STENCIL;if(i===qd)return n.RED;if(i===Oc)return n.RED_INTEGER;if(i===rs)return n.RG;if(i===Uc)return n.RG_INTEGER;if(i===Nc)return n.RGBA_INTEGER;if(i===Ua||i===Na||i===ka||i===Fa)if(a===pt)if(r=e.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(i===Ua)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Na)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===ka)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Fa)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=e.get("WEBGL_compressed_texture_s3tc"),r!==null){if(i===Ua)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Na)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===ka)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Fa)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===Ul||i===Nl||i===kl||i===Fl)if(r=e.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(i===Ul)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===Nl)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===kl)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===Fl)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===Bl||i===Hl||i===zl||i===Vl||i===Gl||i===Xa||i===Wl)if(r=e.get("WEBGL_compressed_texture_etc"),r!==null){if(i===Bl||i===Hl)return a===pt?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(i===zl)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC;if(i===Vl)return r.COMPRESSED_R11_EAC;if(i===Gl)return r.COMPRESSED_SIGNED_R11_EAC;if(i===Xa)return r.COMPRESSED_RG11_EAC;if(i===Wl)return r.COMPRESSED_SIGNED_RG11_EAC}else return null;if(i===Xl||i===Yl||i===Kl||i===ql||i===Zl||i===$l||i===Jl||i===jl||i===Ql||i===ec||i===tc||i===nc||i===ic||i===sc)if(r=e.get("WEBGL_compressed_texture_astc"),r!==null){if(i===Xl)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===Yl)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===Kl)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===ql)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===Zl)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===$l)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===Jl)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===jl)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===Ql)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===ec)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===tc)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===nc)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===ic)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===sc)return a===pt?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===rc||i===ac||i===oc)if(r=e.get("EXT_texture_compression_bptc"),r!==null){if(i===rc)return a===pt?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===ac)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===oc)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===lc||i===cc||i===Ya||i===uc)if(r=e.get("EXT_texture_compression_rgtc"),r!==null){if(i===lc)return r.COMPRESSED_RED_RGTC1_EXT;if(i===cc)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===Ya)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===uc)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Cr?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}const Uy=` void main() { gl_Position = vec4( position, 1.0 ); -}`,I_=` +}`,Ny=` uniform sampler2DArray depthColor; uniform float depthWidth; uniform float depthHeight; @@ -4113,8 +4113,8 @@ void main() { } -}`;class U_{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){const i=new rd(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){const t=e.cameras[0].viewport,i=new In({vertexShader:D_,fragmentShader:I_,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Gt(new Qi(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class O_ extends zi{constructor(e,t){super();const i=this;let s=null,r=1,a=null,o="local-floor",l=1,c=null,u=null,f=null,h=null,d=null,p=null;const x=typeof XRWebGLBinding<"u",m=new U_,g={},M=t.getContextAttributes();let E=null,_=null;const T=[],b=[],S=new Ee;let v=null;const w=new Pn;w.viewport=new Ct;const I=new Pn;I.viewport=new Ct;const L=[w,I],C=new Wg;let O=null,N=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(X){let se=T[X];return se===void 0&&(se=new Do,T[X]=se),se.getTargetRaySpace()},this.getControllerGrip=function(X){let se=T[X];return se===void 0&&(se=new Do,T[X]=se),se.getGripSpace()},this.getHand=function(X){let se=T[X];return se===void 0&&(se=new Do,T[X]=se),se.getHandSpace()};function U(X){const se=b.indexOf(X.inputSource);if(se===-1)return;const Q=T[se];Q!==void 0&&(Q.update(X.inputSource,X.frame,c||a),Q.dispatchEvent({type:X.type,data:X.inputSource}))}function Z(){s.removeEventListener("select",U),s.removeEventListener("selectstart",U),s.removeEventListener("selectend",U),s.removeEventListener("squeeze",U),s.removeEventListener("squeezestart",U),s.removeEventListener("squeezeend",U),s.removeEventListener("end",Z),s.removeEventListener("inputsourceschange",k);for(let X=0;X=0&&(b[ye]=null,T[ye].disconnect(Q))}for(let se=0;se=b.length){b.push(Q),ye=_e;break}else if(b[_e]===null){b[_e]=Q,ye=_e;break}if(ye===-1)break}const ve=T[ye];ve&&ve.connect(Q)}}const $=new B,D=new B;function ae(X,se,Q){$.setFromMatrixPosition(se.matrixWorld),D.setFromMatrixPosition(Q.matrixWorld);const ye=$.distanceTo(D),ve=se.projectionMatrix.elements,_e=Q.projectionMatrix.elements,Ze=ve[14]/(ve[10]-1),Ye=ve[14]/(ve[10]+1),Oe=(ve[9]+1)/ve[5],Fe=(ve[9]-1)/ve[5],Ve=(ve[8]-1)/ve[0],at=(_e[8]+1)/_e[0],ot=Ze*Ve,pt=Ze*at,vt=ye/(-Ve+at),ct=vt*-Ve;if(se.matrixWorld.decompose(X.position,X.quaternion,X.scale),X.translateX(ct),X.translateZ(vt),X.matrixWorld.compose(X.position,X.quaternion,X.scale),X.matrixWorldInverse.copy(X.matrixWorld).invert(),ve[10]===-1)X.projectionMatrix.copy(se.projectionMatrix),X.projectionMatrixInverse.copy(se.projectionMatrixInverse);else{const ut=Ze+vt,R=Ye+vt,Ae=ot-ct,W=pt+(ye-ct),P=Oe*Ye/R*ut,y=Fe*Ye/R*ut;X.projectionMatrix.makePerspective(Ae,W,P,y,ut,R),X.projectionMatrixInverse.copy(X.projectionMatrix).invert()}}function re(X,se){se===null?X.matrixWorld.copy(X.matrix):X.matrixWorld.multiplyMatrices(se.matrixWorld,X.matrix),X.matrixWorldInverse.copy(X.matrixWorld).invert()}this.updateCamera=function(X){if(s===null)return;let se=X.near,Q=X.far;m.texture!==null&&(m.depthNear>0&&(se=m.depthNear),m.depthFar>0&&(Q=m.depthFar)),C.near=I.near=w.near=se,C.far=I.far=w.far=Q,(O!==C.near||N!==C.far)&&(s.updateRenderState({depthNear:C.near,depthFar:C.far}),O=C.near,N=C.far),C.layers.mask=X.layers.mask|6,w.layers.mask=C.layers.mask&-5,I.layers.mask=C.layers.mask&-3;const ye=X.parent,ve=C.cameras;re(C,ye);for(let _e=0;_e0&&(m.alphaTest.value=g.alphaTest);const M=e.get(g),E=M.envMap,_=M.envMapRotation;E&&(m.envMap.value=E,m.envMapRotation.value.setFromMatrix4(F_.makeRotationFromEuler(_)).transpose(),E.isCubeTexture&&E.isRenderTargetTexture===!1&&m.envMapRotation.value.premultiply(Ed),m.reflectivity.value=g.reflectivity,m.ior.value=g.ior,m.refractionRatio.value=g.refractionRatio),g.lightMap&&(m.lightMap.value=g.lightMap,m.lightMapIntensity.value=g.lightMapIntensity,t(g.lightMap,m.lightMapTransform)),g.aoMap&&(m.aoMap.value=g.aoMap,m.aoMapIntensity.value=g.aoMapIntensity,t(g.aoMap,m.aoMapTransform))}function a(m,g){m.diffuse.value.copy(g.color),m.opacity.value=g.opacity,g.map&&(m.map.value=g.map,t(g.map,m.mapTransform))}function o(m,g){m.dashSize.value=g.dashSize,m.totalSize.value=g.dashSize+g.gapSize,m.scale.value=g.scale}function l(m,g,M,E){m.diffuse.value.copy(g.color),m.opacity.value=g.opacity,m.size.value=g.size*M,m.scale.value=E*.5,g.map&&(m.map.value=g.map,t(g.map,m.uvTransform)),g.alphaMap&&(m.alphaMap.value=g.alphaMap,t(g.alphaMap,m.alphaMapTransform)),g.alphaTest>0&&(m.alphaTest.value=g.alphaTest)}function c(m,g){m.diffuse.value.copy(g.color),m.opacity.value=g.opacity,m.rotation.value=g.rotation,g.map&&(m.map.value=g.map,t(g.map,m.mapTransform)),g.alphaMap&&(m.alphaMap.value=g.alphaMap,t(g.alphaMap,m.alphaMapTransform)),g.alphaTest>0&&(m.alphaTest.value=g.alphaTest)}function u(m,g){m.specular.value.copy(g.specular),m.shininess.value=Math.max(g.shininess,1e-4)}function f(m,g){g.gradientMap&&(m.gradientMap.value=g.gradientMap)}function h(m,g){m.metalness.value=g.metalness,g.metalnessMap&&(m.metalnessMap.value=g.metalnessMap,t(g.metalnessMap,m.metalnessMapTransform)),m.roughness.value=g.roughness,g.roughnessMap&&(m.roughnessMap.value=g.roughnessMap,t(g.roughnessMap,m.roughnessMapTransform)),g.envMap&&(m.envMapIntensity.value=g.envMapIntensity)}function d(m,g,M){m.ior.value=g.ior,g.sheen>0&&(m.sheenColor.value.copy(g.sheenColor).multiplyScalar(g.sheen),m.sheenRoughness.value=g.sheenRoughness,g.sheenColorMap&&(m.sheenColorMap.value=g.sheenColorMap,t(g.sheenColorMap,m.sheenColorMapTransform)),g.sheenRoughnessMap&&(m.sheenRoughnessMap.value=g.sheenRoughnessMap,t(g.sheenRoughnessMap,m.sheenRoughnessMapTransform))),g.clearcoat>0&&(m.clearcoat.value=g.clearcoat,m.clearcoatRoughness.value=g.clearcoatRoughness,g.clearcoatMap&&(m.clearcoatMap.value=g.clearcoatMap,t(g.clearcoatMap,m.clearcoatMapTransform)),g.clearcoatRoughnessMap&&(m.clearcoatRoughnessMap.value=g.clearcoatRoughnessMap,t(g.clearcoatRoughnessMap,m.clearcoatRoughnessMapTransform)),g.clearcoatNormalMap&&(m.clearcoatNormalMap.value=g.clearcoatNormalMap,t(g.clearcoatNormalMap,m.clearcoatNormalMapTransform),m.clearcoatNormalScale.value.copy(g.clearcoatNormalScale),g.side===un&&m.clearcoatNormalScale.value.negate())),g.dispersion>0&&(m.dispersion.value=g.dispersion),g.iridescence>0&&(m.iridescence.value=g.iridescence,m.iridescenceIOR.value=g.iridescenceIOR,m.iridescenceThicknessMinimum.value=g.iridescenceThicknessRange[0],m.iridescenceThicknessMaximum.value=g.iridescenceThicknessRange[1],g.iridescenceMap&&(m.iridescenceMap.value=g.iridescenceMap,t(g.iridescenceMap,m.iridescenceMapTransform)),g.iridescenceThicknessMap&&(m.iridescenceThicknessMap.value=g.iridescenceThicknessMap,t(g.iridescenceThicknessMap,m.iridescenceThicknessMapTransform))),g.transmission>0&&(m.transmission.value=g.transmission,m.transmissionSamplerMap.value=M.texture,m.transmissionSamplerSize.value.set(M.width,M.height),g.transmissionMap&&(m.transmissionMap.value=g.transmissionMap,t(g.transmissionMap,m.transmissionMapTransform)),m.thickness.value=g.thickness,g.thicknessMap&&(m.thicknessMap.value=g.thicknessMap,t(g.thicknessMap,m.thicknessMapTransform)),m.attenuationDistance.value=g.attenuationDistance,m.attenuationColor.value.copy(g.attenuationColor)),g.anisotropy>0&&(m.anisotropyVector.value.set(g.anisotropy*Math.cos(g.anisotropyRotation),g.anisotropy*Math.sin(g.anisotropyRotation)),g.anisotropyMap&&(m.anisotropyMap.value=g.anisotropyMap,t(g.anisotropyMap,m.anisotropyMapTransform))),m.specularIntensity.value=g.specularIntensity,m.specularColor.value.copy(g.specularColor),g.specularColorMap&&(m.specularColorMap.value=g.specularColorMap,t(g.specularColorMap,m.specularColorMapTransform)),g.specularIntensityMap&&(m.specularIntensityMap.value=g.specularIntensityMap,t(g.specularIntensityMap,m.specularIntensityMapTransform))}function p(m,g){g.matcap&&(m.matcap.value=g.matcap)}function x(m,g){const M=e.get(g).light;m.referencePosition.value.setFromMatrixPosition(M.matrixWorld),m.nearDistance.value=M.shadow.camera.near,m.farDistance.value=M.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:s}}function k_(n,e,t,i){let s={},r={},a=[];const o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(_,T){const b=T.program;i.uniformBlockBinding(_,b)}function c(_,T){let b=s[_.id];b===void 0&&(m(_),b=u(_),s[_.id]=b,_.addEventListener("dispose",M));const S=T.program;i.updateUBOMapping(_,S);const v=e.render.frame;r[_.id]!==v&&(h(_),r[_.id]=v)}function u(_){const T=f();_.__bindingPointIndex=T;const b=n.createBuffer(),S=_.__size,v=_.usage;return n.bindBuffer(n.UNIFORM_BUFFER,b),n.bufferData(n.UNIFORM_BUFFER,S,v),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,T,b),b}function f(){for(let _=0;_0&&(b+=S-v),_.__size=b,_.__cache={},this}function g(_){const T={boundary:0,storage:0};return typeof _=="number"||typeof _=="boolean"?(T.boundary=4,T.storage=4):_.isVector2?(T.boundary=8,T.storage=8):_.isVector3||_.isColor?(T.boundary=16,T.storage=12):_.isVector4?(T.boundary=16,T.storage=16):_.isMatrix3?(T.boundary=48,T.storage=48):_.isMatrix4?(T.boundary=64,T.storage=64):_.isTexture?We("WebGLRenderer: Texture samplers can not be part of an uniforms group."):ArrayBuffer.isView(_)?(T.boundary=16,T.storage=_.byteLength):We("WebGLRenderer: Unsupported uniform value type.",_),T}function M(_){const T=_.target;T.removeEventListener("dispose",M);const b=a.indexOf(T.__bindingPointIndex);a.splice(b,1),n.deleteBuffer(s[T.id]),delete s[T.id],delete r[T.id]}function E(){for(const _ in s)n.deleteBuffer(s[_]);a=[],s={},r={}}return{bind:l,update:c,dispose:E}}const B_=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);let Hn=null;function H_(){return Hn===null&&(Hn=new td(B_,16,16,ts,mi),Hn.name="DFG_LUT",Hn.minFilter=Xt,Hn.magFilter=Xt,Hn.wrapS=li,Hn.wrapT=li,Hn.generateMipmaps=!1,Hn.needsUpdate=!0),Hn}class z_{constructor(e={}){const{canvas:t=Cm(),context:i=null,depth:s=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:u="default",failIfMajorPerformanceCaveat:f=!1,reversedDepthBuffer:h=!1,outputBufferType:d=Sn}=e;this.isWebGLRenderer=!0;let p;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");p=i.getContextAttributes().alpha}else p=a;const x=d,m=new Set([Uc,Ic,Dc]),g=new Set([Sn,Qn,Tr,Ar,Pc,Lc]),M=new Uint32Array(4),E=new Int32Array(4),_=new B;let T=null,b=null;const S=[],v=[];let w=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=Kn,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const I=this;let L=!1,C=null,O=null,N=null,U=null;this._outputColorSpace=mn;let Z=0,k=0,$=null,D=-1,ae=null;const re=new Ct,ee=new Ct;let ce=null;const he=new et(0);let fe=0,X=t.width,se=t.height,Q=1,ye=null,ve=null;const _e=new Ct(0,0,X,se),Ze=new Ct(0,0,X,se);let Ye=!1;const Oe=new nd;let Fe=!1,Ve=!1;const at=new Tt,ot=new B,pt=new Ct,vt={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let ct=!1;function ut(){return $===null?Q:1}let R=i;function Ae(A,Y){return t.getContext(A,Y)}try{const A={alpha:!0,depth:s,stencil:r,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:u,failIfMajorPerformanceCaveat:f};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${Cc}`),t.addEventListener("webglcontextlost",yt,!1),t.addEventListener("webglcontextrestored",_t,!1),t.addEventListener("webglcontextcreationerror",hn,!1),R===null){const Y="webgl2";if(R=Ae(Y,A),R===null)throw Ae(Y)?new Error("THREE.WebGLRenderer: Error creating WebGL context with your selected attributes."):new Error("THREE.WebGLRenderer: Error creating WebGL context.")}}catch(A){throw st("WebGLRenderer: "+A.message),A}let W,P,y,H,F,G,te,oe,V,K,ie,de,pe,ge,Me,He,qe,z,xe,le,be,Ce,ue;function ke(){W=new Hv(R),W.init(),be=new L_(R,W),P=new Dv(R,W,e,be),y=new R_(R,W),P.reversedDepthBuffer&&h&&y.buffers.depth.setReversed(!0),O=R.createFramebuffer(),N=R.createFramebuffer(),U=R.createFramebuffer(),H=new Vv(R),F=new m_,G=new P_(R,W,y,F,P,be,H),te=new Bv(I),oe=new qg(R),Ce=new Pv(R,oe),V=new zv(R,oe,H,Ce),K=new Xv(R,V,oe,Ce,H),z=new Wv(R,P,G),Me=new Iv(F),ie=new p_(I,te,W,P,Ce,Me),de=new N_(I,F),pe=new x_,ge=new M_(W),qe=new Rv(I,te,y,K,p,l),He=new C_(I,K,P),ue=new k_(R,H,P,y),xe=new Lv(R,W,H),le=new Gv(R,W,H),H.programs=ie.programs,I.capabilities=P,I.extensions=W,I.properties=F,I.renderLists=pe,I.shadowMap=He,I.state=y,I.info=H}ke(),x!==Sn&&(w=new qv(x,t.width,t.height,o,s,r));const Le=new O_(I,R);this.xr=Le,this.getContext=function(){return R},this.getContextAttributes=function(){return R.getContextAttributes()},this.forceContextLoss=function(){const A=W.get("WEBGL_lose_context");A&&A.loseContext()},this.forceContextRestore=function(){const A=W.get("WEBGL_lose_context");A&&A.restoreContext()},this.getPixelRatio=function(){return Q},this.setPixelRatio=function(A){A!==void 0&&(Q=A,this.setSize(X,se,!1))},this.getSize=function(A){return A.set(X,se)},this.setSize=function(A,Y,ne=!0){if(Le.isPresenting){We("WebGLRenderer: Can't change size while VR device is presenting.");return}X=A,se=Y,t.width=Math.floor(A*Q),t.height=Math.floor(Y*Q),ne===!0&&(t.style.width=A+"px",t.style.height=Y+"px"),w!==null&&w.setSize(t.width,t.height),this.setViewport(0,0,A,Y)},this.getDrawingBufferSize=function(A){return A.set(X*Q,se*Q).floor()},this.setDrawingBufferSize=function(A,Y,ne){X=A,se=Y,Q=ne,t.width=Math.floor(A*ne),t.height=Math.floor(Y*ne),this.setViewport(0,0,A,Y)},this.setEffects=function(A){if(x===Sn){st("WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.");return}if(A){for(let Y=0;Y{function Pe(){if(J.forEach(function(Ie){F.get(Ie).currentProgram.isReady()&&J.delete(Ie)}),J.size===0){j(A);return}setTimeout(Pe,10)}W.get("KHR_parallel_shader_compile")!==null?Pe():setTimeout(Pe,10)})};let cs=null;function us(A){cs&&cs(A)}function tr(){qt.stop()}function nr(){qt.start()}const qt=new xd;qt.setAnimationLoop(us),typeof self<"u"&&qt.setContext(self),this.setAnimationLoop=function(A){cs=A,Le.setAnimationLoop(A),A===null?qt.stop():qt.start()},Le.addEventListener("sessionstart",tr),Le.addEventListener("sessionend",nr),this.render=function(A,Y){if(Y!==void 0&&Y.isCamera!==!0){st("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(L===!0)return;C!==null&&C.renderStart(A,Y);const ne=Le.enabled===!0&&Le.isPresenting===!0,J=w!==null&&($===null||ne)&&w.begin(I,$);if(A.matrixWorldAutoUpdate===!0&&A.updateMatrixWorld(),Y.parent===null&&Y.matrixWorldAutoUpdate===!0&&Y.updateMatrixWorld(),Le.enabled===!0&&Le.isPresenting===!0&&(w===null||w.isCompositing()===!1)&&(Le.cameraAutoUpdate===!0&&Le.updateCamera(Y),Y=Le.getCamera()),A.isScene===!0&&A.onBeforeRender(I,A,Y,$),b=ge.get(A,v.length),b.init(Y),b.state.textureUnits=G.getTextureUnits(),v.push(b),at.multiplyMatrices(Y.projectionMatrix,Y.matrixWorldInverse),Oe.setFromProjectionMatrix(at,$n,Y.reversedDepth),Ve=this.localClippingEnabled,Fe=Me.init(this.clippingPlanes,Ve),T=pe.get(A,S.length),T.init(),S.push(T),Le.enabled===!0&&Le.isPresenting===!0){const Ie=I.xr.getDepthSensingMesh();Ie!==null&&vn(Ie,Y,-1/0,I.sortObjects)}vn(A,Y,0,I.sortObjects),T.finish(),I.sortObjects===!0&&T.sort(ye,ve,Y.reversedDepth),ct=Le.enabled===!1||Le.isPresenting===!1||Le.hasDepthSensing()===!1,ct&&qe.addToRenderList(T,A),this.info.render.frame++,this.info.autoReset===!0&&this.info.reset(),Fe===!0&&Me.beginShadows();const j=b.state.shadowsArray;if(He.render(j,A,Y),Fe===!0&&Me.endShadows(),(J&&w.hasRenderPass())===!1){const Ie=T.opaque,Re=T.transmissive;if(b.setupLights(),Y.isArrayCamera){const Be=Y.cameras;if(Re.length>0)for(let ze=0,Ke=Be.length;ze0&&hs(Ie,Re,A,Y),ct&&qe.render(A),an(T,A,Y)}$!==null&&k===0&&(G.updateMultisampleRenderTarget($),G.updateRenderTargetMipmap($)),J&&w.end(I),A.isScene===!0&&A.onAfterRender(I,A,Y),Ce.resetDefaultState(),D=-1,ae=null,v.pop(),v.length>0?(b=v[v.length-1],G.setTextureUnits(b.state.textureUnits),Fe===!0&&Me.setGlobalState(I.clippingPlanes,b.state.camera)):b=null,S.pop(),S.length>0?T=S[S.length-1]:T=null,C!==null&&C.renderEnd()};function vn(A,Y,ne,J){if(A.visible===!1)return;if(A.layers.test(Y.layers)){if(A.isGroup)ne=A.renderOrder;else if(A.isLOD)A.autoUpdate===!0&&A.update(Y);else if(A.isLightProbeGrid)b.pushLightProbeGrid(A);else if(A.isLight)b.pushLight(A),A.castShadow&&b.pushShadow(A);else if(A.isSprite){if(!A.frustumCulled||Oe.intersectsSprite(A)){J&&pt.setFromMatrixPosition(A.matrixWorld).applyMatrix4(at);const Ie=K.update(A),Re=A.material;Re.visible&&T.push(A,Ie,Re,ne,pt.z,null)}}else if((A.isMesh||A.isLine||A.isPoints)&&(!A.frustumCulled||Oe.intersectsObject(A))){const Ie=K.update(A),Re=A.material;if(J&&(A.boundingSphere!==void 0?(A.boundingSphere===null&&A.computeBoundingSphere(),pt.copy(A.boundingSphere.center)):(Ie.boundingSphere===null&&Ie.computeBoundingSphere(),pt.copy(Ie.boundingSphere.center)),pt.applyMatrix4(A.matrixWorld).applyMatrix4(at)),Array.isArray(Re)){const Be=Ie.groups;for(let ze=0,Ke=Be.length;ze0&&xi(j,Y,ne),Pe.length>0&&xi(Pe,Y,ne),Ie.length>0&&xi(Ie,Y,ne),y.buffers.depth.setTest(!0),y.buffers.depth.setMask(!0),y.buffers.color.setMask(!0),y.setPolygonOffset(!1)}function hs(A,Y,ne,J){if((ne.isScene===!0?ne.overrideMaterial:null)!==null)return;if(b.state.transmissionRenderTarget[J.id]===void 0){const Ge=W.has("EXT_color_buffer_half_float")||W.has("EXT_color_buffer_float");b.state.transmissionRenderTarget[J.id]=new Jn(1,1,{generateMipmaps:!0,type:Ge?mi:Sn,minFilter:Di,samples:Math.max(4,P.samples),stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:nt.workingColorSpace})}const Pe=b.state.transmissionRenderTarget[J.id],Ie=J.viewport||re;Pe.setSize(Ie.z*I.transmissionResolutionScale,Ie.w*I.transmissionResolutionScale);const Re=I.getRenderTarget(),Be=I.getActiveCubeFace(),ze=I.getActiveMipmapLevel();I.setRenderTarget(Pe),I.getClearColor(he),fe=I.getClearAlpha(),fe<1&&I.setClearColor(16777215,.5),I.clear(),ct&&qe.render(ne);const Ke=I.toneMapping;I.toneMapping=Kn;const je=J.viewport;if(J.viewport!==void 0&&(J.viewport=void 0),b.setupLightsView(J),Fe===!0&&Me.setGlobalState(I.clippingPlanes,J),xi(A,ne,J),G.updateMultisampleRenderTarget(Pe),G.updateRenderTargetMipmap(Pe),W.has("WEBGL_multisampled_render_to_texture")===!1){let Ge=!1;for(let mt=0,Pt=Y.length;mt0,J.currentProgram=je,J.uniformsList=null,je}function Nn(A){if(A.uniformsList===null){const Y=A.currentProgram.getUniforms();A.uniformsList=Ba.seqWithValue(Y.seq,A.uniforms)}return A.uniformsList}function yn(A,Y){const ne=F.get(A);ne.outputColorSpace=Y.outputColorSpace,ne.batching=Y.batching,ne.batchingColor=Y.batchingColor,ne.instancing=Y.instancing,ne.instancingColor=Y.instancingColor,ne.instancingMorph=Y.instancingMorph,ne.skinning=Y.skinning,ne.morphTargets=Y.morphTargets,ne.morphNormals=Y.morphNormals,ne.morphColors=Y.morphColors,ne.morphTargetsCount=Y.morphTargetsCount,ne.numClippingPlanes=Y.numClippingPlanes,ne.numIntersection=Y.numClipIntersection,ne.vertexAlphas=Y.vertexAlphas,ne.vertexTangents=Y.vertexTangents,ne.toneMapping=Y.toneMapping}function Vp(A,Y){if(A.length===0)return null;if(A.length===1)return A[0].texture!==null?A[0]:null;_.setFromMatrixPosition(Y.matrixWorld);for(let ne=0,J=A.length;ne0),Ge=!!ne.morphAttributes.position,mt=!!ne.morphAttributes.normal,Pt=!!ne.morphAttributes.color;let At=Kn;J.toneMapped&&($===null||$.isXRRenderTarget===!0)&&(At=I.toneMapping);const bt=ne.morphAttributes.position||ne.morphAttributes.normal||ne.morphAttributes.color,$t=bt!==void 0?bt.length:0,De=F.get(J),fn=b.state.lights;if(Fe===!0&&(Ve===!0||A!==ae)){const Mt=A===ae&&J.id===D;Me.setState(J,A,Mt)}let rt=!1;J.version===De.__version?(De.needsLights&&De.lightsStateVersion!==fn.state.version||De.outputColorSpace!==Re||j.isBatchedMesh&&De.batching===!1||!j.isBatchedMesh&&De.batching===!0||j.isBatchedMesh&&De.batchingColor===!0&&j.colorTexture===null||j.isBatchedMesh&&De.batchingColor===!1&&j.colorTexture!==null||j.isInstancedMesh&&De.instancing===!1||!j.isInstancedMesh&&De.instancing===!0||j.isSkinnedMesh&&De.skinning===!1||!j.isSkinnedMesh&&De.skinning===!0||j.isInstancedMesh&&De.instancingColor===!0&&j.instanceColor===null||j.isInstancedMesh&&De.instancingColor===!1&&j.instanceColor!==null||j.isInstancedMesh&&De.instancingMorph===!0&&j.morphTexture===null||j.isInstancedMesh&&De.instancingMorph===!1&&j.morphTexture!==null||De.envMap!==ze||J.fog===!0&&De.fog!==Pe||De.numClippingPlanes!==void 0&&(De.numClippingPlanes!==Me.numPlanes||De.numIntersection!==Me.numIntersection)||De.vertexAlphas!==Ke||De.vertexTangents!==je||De.morphTargets!==Ge||De.morphNormals!==mt||De.morphColors!==Pt||De.toneMapping!==At||De.morphTargetsCount!==$t||!!De.lightProbeGrid!=b.state.lightProbeGridArray.length>0)&&(rt=!0):(rt=!0,De.__version=J.version);let _n=De.currentProgram;rt===!0&&(_n=on(J,Y,j),C&&J.isNodeMaterial&&C.onUpdateProgram(J,_n,De));let kn=!1,vi=!1,ds=!1;const St=_n.getUniforms(),Lt=De.uniforms;if(y.useProgram(_n.program)&&(kn=!0,vi=!0,ds=!0),J.id!==D&&(D=J.id,vi=!0),De.needsLights){const Mt=Vp(b.state.lightProbeGridArray,j);De.lightProbeGrid!==Mt&&(De.lightProbeGrid=Mt,vi=!0)}if(kn||ae!==A){y.buffers.depth.getReversed()&&A.reversedDepth!==!0&&(A._reversedDepth=!0,A.updateProjectionMatrix()),St.setValue(R,"projectionMatrix",A.projectionMatrix),St.setValue(R,"viewMatrix",A.matrixWorldInverse);const _i=St.map.cameraPosition;_i!==void 0&&_i.setValue(R,ot.setFromMatrixPosition(A.matrixWorld)),P.logarithmicDepthBuffer&&St.setValue(R,"logDepthBufFC",2/(Math.log(A.far+1)/Math.LN2)),(J.isMeshPhongMaterial||J.isMeshToonMaterial||J.isMeshLambertMaterial||J.isMeshBasicMaterial||J.isMeshStandardMaterial||J.isShaderMaterial)&&St.setValue(R,"isOrthographic",A.isOrthographicCamera===!0),ae!==A&&(ae=A,vi=!0,ds=!0)}if(De.needsLights&&(fn.state.directionalShadowMap.length>0&&St.setValue(R,"directionalShadowMap",fn.state.directionalShadowMap,G),fn.state.spotShadowMap.length>0&&St.setValue(R,"spotShadowMap",fn.state.spotShadowMap,G),fn.state.pointShadowMap.length>0&&St.setValue(R,"pointShadowMap",fn.state.pointShadowMap,G)),j.isSkinnedMesh){St.setOptional(R,j,"bindMatrix"),St.setOptional(R,j,"bindMatrixInverse");const Mt=j.skeleton;Mt&&(Mt.boneTexture===null&&Mt.computeBoneTexture(),St.setValue(R,"boneTexture",Mt.boneTexture,G))}j.isBatchedMesh&&(St.setOptional(R,j,"batchingTexture"),St.setValue(R,"batchingTexture",j._matricesTexture,G),St.setOptional(R,j,"batchingIdTexture"),St.setValue(R,"batchingIdTexture",j._indirectTexture,G),St.setOptional(R,j,"batchingColorTexture"),j._colorsTexture!==null&&St.setValue(R,"batchingColorTexture",j._colorsTexture,G));const yi=ne.morphAttributes;if((yi.position!==void 0||yi.normal!==void 0||yi.color!==void 0)&&z.update(j,ne,_n),(vi||De.receiveShadow!==j.receiveShadow)&&(De.receiveShadow=j.receiveShadow,St.setValue(R,"receiveShadow",j.receiveShadow)),(J.isMeshStandardMaterial||J.isMeshLambertMaterial||J.isMeshPhongMaterial)&&J.envMap===null&&Y.environment!==null&&(Lt.envMapIntensity.value=Y.environmentIntensity),Lt.dfgLUT!==void 0&&(Lt.dfgLUT.value=H_()),vi){if(St.setValue(R,"toneMappingExposure",I.toneMappingExposure),De.needsLights&&Xp(Lt,ds),Pe&&J.fog===!0&&de.refreshFogUniforms(Lt,Pe),de.refreshMaterialUniforms(Lt,J,Q,se,b.state.transmissionRenderTarget[A.id]),De.needsLights&&De.lightProbeGrid){const Mt=De.lightProbeGrid;Lt.probesSH.value=Mt.texture,Lt.probesMin.value.copy(Mt.boundingBox.min),Lt.probesMax.value.copy(Mt.boundingBox.max),Lt.probesResolution.value.copy(Mt.resolution)}Ba.upload(R,Nn(De),Lt,G)}if(J.isShaderMaterial&&J.uniformsNeedUpdate===!0&&(Ba.upload(R,Nn(De),Lt,G),J.uniformsNeedUpdate=!1),J.isSpriteMaterial&&St.setValue(R,"center",j.center),St.setValue(R,"modelViewMatrix",j.modelViewMatrix),St.setValue(R,"normalMatrix",j.normalMatrix),St.setValue(R,"modelMatrix",j.matrixWorld),J.uniformsGroups!==void 0){const Mt=J.uniformsGroups;for(let _i=0,ps=Mt.length;_i0&&G.useMultisampledRTT(A)===!1?J=F.get(A).__webglMultisampledFramebuffer:Array.isArray(ze)?J=ze[ne]:J=ze,re.copy(A.viewport),ee.copy(A.scissor),ce=A.scissorTest}else re.copy(_e).multiplyScalar(Q).floor(),ee.copy(Ze).multiplyScalar(Q).floor(),ce=Ye;if(ne!==0&&(J=O),y.bindFramebuffer(R.FRAMEBUFFER,J)&&y.drawBuffers(A,J),y.viewport(re),y.scissor(ee),y.setScissorTest(ce),j){const Re=F.get(A.texture);R.framebufferTexture2D(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_CUBE_MAP_POSITIVE_X+Y,Re.__webglTexture,ne)}else if(Pe){const Re=Y;for(let Be=0;Be1&&R.readBuffer(R.COLOR_ATTACHMENT0+Re),!P.textureFormatReadable(Ke)){st("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!P.textureTypeReadable(je)){st("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}Y>=0&&Y<=A.width-J&&ne>=0&&ne<=A.height-j&&R.readPixels(Y,ne,J,j,be.convert(Ke),be.convert(je),Pe)}finally{const ze=$!==null?F.get($).__webglFramebuffer:null;y.bindFramebuffer(R.FRAMEBUFFER,ze)}}},this.readRenderTargetPixelsAsync=async function(A,Y,ne,J,j,Pe,Ie,Re=0){if(!(A&&A.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Be=F.get(A).__webglFramebuffer;if(A.isWebGLCubeRenderTarget&&Ie!==void 0&&(Be=Be[Ie]),Be)if(Y>=0&&Y<=A.width-J&&ne>=0&&ne<=A.height-j){y.bindFramebuffer(R.FRAMEBUFFER,Be);const ze=A.textures[Re],Ke=ze.format,je=ze.type;if(A.textures.length>1&&R.readBuffer(R.COLOR_ATTACHMENT0+Re),!P.textureFormatReadable(Ke))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!P.textureTypeReadable(je))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const Ge=R.createBuffer();R.bindBuffer(R.PIXEL_PACK_BUFFER,Ge),R.bufferData(R.PIXEL_PACK_BUFFER,Pe.byteLength,R.STREAM_READ),R.readPixels(Y,ne,J,j,be.convert(Ke),be.convert(je),0);const mt=$!==null?F.get($).__webglFramebuffer:null;y.bindFramebuffer(R.FRAMEBUFFER,mt);const Pt=R.fenceSync(R.SYNC_GPU_COMMANDS_COMPLETE,0);return R.flush(),await Rm(R,Pt,4),R.bindBuffer(R.PIXEL_PACK_BUFFER,Ge),R.getBufferSubData(R.PIXEL_PACK_BUFFER,0,Pe),R.deleteBuffer(Ge),R.deleteSync(Pt),Pe}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(A,Y=null,ne=0){const J=Math.pow(2,-ne),j=Math.floor(A.image.width*J),Pe=Math.floor(A.image.height*J),Ie=Y!==null?Y.x:0,Re=Y!==null?Y.y:0;G.setTexture2D(A,0),R.copyTexSubImage2D(R.TEXTURE_2D,ne,0,0,Ie,Re,j,Pe),y.unbindTexture()},this.copyTextureToTexture=function(A,Y,ne=null,J=null,j=0,Pe=0){let Ie,Re,Be,ze,Ke,je,Ge,mt,Pt;const At=A.isCompressedTexture?A.mipmaps[Pe]:A.image;if(ne!==null)Ie=ne.max.x-ne.min.x,Re=ne.max.y-ne.min.y,Be=ne.isBox3?ne.max.z-ne.min.z:1,ze=ne.min.x,Ke=ne.min.y,je=ne.isBox3?ne.min.z:0;else{const Lt=Math.pow(2,-j);Ie=Math.floor(At.width*Lt),Re=Math.floor(At.height*Lt),A.isDataArrayTexture?Be=At.depth:A.isData3DTexture?Be=Math.floor(At.depth*Lt):Be=1,ze=0,Ke=0,je=0}J!==null?(Ge=J.x,mt=J.y,Pt=J.z):(Ge=0,mt=0,Pt=0);const bt=be.convert(Y.format),$t=be.convert(Y.type);let De;Y.isData3DTexture?(G.setTexture3D(Y,0),De=R.TEXTURE_3D):Y.isDataArrayTexture||Y.isCompressedArrayTexture?(G.setTexture2DArray(Y,0),De=R.TEXTURE_2D_ARRAY):(G.setTexture2D(Y,0),De=R.TEXTURE_2D),y.activeTexture(R.TEXTURE0),y.pixelStorei(R.UNPACK_FLIP_Y_WEBGL,Y.flipY),y.pixelStorei(R.UNPACK_PREMULTIPLY_ALPHA_WEBGL,Y.premultiplyAlpha),y.pixelStorei(R.UNPACK_ALIGNMENT,Y.unpackAlignment);const fn=y.getParameter(R.UNPACK_ROW_LENGTH),rt=y.getParameter(R.UNPACK_IMAGE_HEIGHT),_n=y.getParameter(R.UNPACK_SKIP_PIXELS),kn=y.getParameter(R.UNPACK_SKIP_ROWS),vi=y.getParameter(R.UNPACK_SKIP_IMAGES);y.pixelStorei(R.UNPACK_ROW_LENGTH,At.width),y.pixelStorei(R.UNPACK_IMAGE_HEIGHT,At.height),y.pixelStorei(R.UNPACK_SKIP_PIXELS,ze),y.pixelStorei(R.UNPACK_SKIP_ROWS,Ke),y.pixelStorei(R.UNPACK_SKIP_IMAGES,je);const ds=A.isDataArrayTexture||A.isData3DTexture,St=Y.isDataArrayTexture||Y.isData3DTexture;if(A.isDepthTexture){const Lt=F.get(A),yi=F.get(Y),Mt=F.get(Lt.__renderTarget),_i=F.get(yi.__renderTarget);y.bindFramebuffer(R.READ_FRAMEBUFFER,Mt.__webglFramebuffer),y.bindFramebuffer(R.DRAW_FRAMEBUFFER,_i.__webglFramebuffer);for(let ps=0;psMath.PI&&(i-=ln),s<-Math.PI?s+=ln:s>Math.PI&&(s-=ln),i<=s?this._spherical.theta=Math.max(i,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+s)/2?Math.max(i,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=a!=this._spherical.radius}if(Ot.setFromSpherical(this._spherical),Ot.applyQuaternion(this._quatInverse),t.copy(this.target).add(Ot),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){const o=Ot.length();a=this._clampDistance(o*this._scale);const l=o-a;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),r=!!l}else if(this.object.isOrthographicCamera){const o=new B(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=l!==this.object.zoom;const c=new B(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),a=Ot.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(ba.origin.copy(this.object.position),ba.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(ba.direction))al||8*(1-this._lastQuaternion.dot(this.object.quaternion))>al||this._lastTargetPosition.distanceToSquared(this.target)>al?(this.dispatchEvent(Mh),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?ln/60*this.autoRotateSpeed*e:ln/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){Ot.setFromMatrixColumn(t,0),Ot.multiplyScalar(-e),this._panOffset.add(Ot)}_panUp(e,t){this.screenSpacePanning===!0?Ot.setFromMatrixColumn(t,1):(Ot.setFromMatrixColumn(t,0),Ot.crossVectors(this.object.up,Ot)),Ot.multiplyScalar(e),this._panOffset.add(Ot)}_pan(e,t){const i=this.domElement;if(this.object.isPerspectiveCamera){const s=this.object.position;Ot.copy(s).sub(this.target);let r=Ot.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*r/i.clientHeight,this.object.matrix),this._panUp(2*t*r/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),s=e-i.left,r=t-i.top,a=i.width,o=i.height;this._mouse.x=s/a*2-1,this._mouse.y=-(r/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(ln*this._rotateDelta.x/t.clientHeight),this._rotateUp(ln*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(ln*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-ln*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(ln*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-ln*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(i,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(i,s)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(i*i+s*s);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const i=this._getSecondPointerPosition(e),s=.5*(e.pageX+i.x),r=.5*(e.pageY+i.y);this._rotateEnd.set(s,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(ln*this._rotateDelta.x/t.clientHeight),this._rotateUp(ln*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(i,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(i*i+s*s);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t=250&&n<=255){const e=Math.round(40+(n-250)*43);return e*65536+e*256+e}if(n>=10&&n<=249){const e=n-10,[t,i]=sb[e%10];return nb(Math.floor(e/10)*15,t,i)}return 13226457}function Wc(n){if(n==null)return null;if(typeof n=="object"&&n!==null&&"value"in n){const e=n.value;if(typeof e=="number"&&Number.isFinite(e))return e.toString(16);if(typeof e=="string"&&e.length){const t=Number(e);return Number.isFinite(t)?t.toString(16):e.toLowerCase()}return null}if(typeof n=="number"&&Number.isFinite(n))return n.toString(16);if(typeof n=="string"&&n.length){const e=Number(n);return Number.isFinite(e)?e.toString(16):n.toLowerCase()}return null}function Ad(n){return Wc(n.ownerHandle)}function rb(n){const e=n.toLowerCase().replace(/\*/g,"").trim();return e?e==="model_space"||e==="ms"||e.startsWith("model")?"model":e==="paper_space"||e==="ps"||e.startsWith("paper")?"paper":null:null}function ab(n,e,t){return n==="model"?"Model":n==="paper"?t<=1?"Layout":`Layout (${e.replace(/^\*/,"")})`:e}function Sr(n){var a;const e=((a=n==null?void 0:n.tables)==null?void 0:a.blocks)??[],t=(n==null?void 0:n.entities)??[],i=new Map;for(const o of t){const l=Ad(o);l&&i.set(l,(i.get(l)||0)+1)}const s=[];let r=0;for(const o of e){const l=rb(o.name??"");if(!l)continue;const c=Wc(o.handle);if(!c)continue;l==="paper"&&(r+=1);const u=typeof o.handle=="number"?o.handle:typeof o.handle=="object"&&o.handle&&"value"in o.handle?Number(o.handle.value):null;s.push({id:c,label:ab(l,o.name??"",r),name:o.name??"",handle:Number.isFinite(u)?u:null,handleHex:c,kind:l,entityCount:i.get(c)||0})}return s.sort((o,l)=>{if(o.kind!==l.kind){if(o.kind==="model")return-1;if(l.kind==="model")return 1}return 0}),s}function ob(n){if(!n.length)return null;const e=n.find(i=>i.kind==="paper"&&i.entityCount>0);if(e)return e;const t=n.find(i=>i.kind==="model");return t||(n[0]??null)}function ol(n,e,t=3){const i=new Set([e]);for(let s=0;s>>=1,e}function Xn(n,e,t){if(!e)return t;for(;n.bitcount<24;)n.tag|=n.source[n.sourceIndex++]<>>16-e;return n.tag>>>=e,n.bitcount-=e,i+t}function xc(n,e){for(;n.bitcount<24;)n.tag|=n.source[n.sourceIndex++]<>>=1,++s,t+=e.table[s],i-=e.table[s];while(i>=0);return n.tag=r,n.bitcount-=s,e.trans[t+i]}function fb(n,e,t){var i,s,r,a,o,l;for(i=Xn(n,5,257),s=Xn(n,5,1),r=Xn(n,4,4),a=0;a<19;++a)zn[a]=0;for(a=0;a8;)n.sourceIndex--,n.bitcount-=8;if(e=n.source[n.sourceIndex+1],e=256*e+n.source[n.sourceIndex],t=n.source[n.sourceIndex+3],t=256*t+n.source[n.sourceIndex+2],e!==(~t&65535))return wd;for(n.sourceIndex+=4,i=e;i;--i)n.dest[n.destLen++]=n.source[n.sourceIndex++];return n.bitcount=0,Xc}function Id(n,e){var t=new lb(n,e),i,s,r;do{switch(i=hb(t),s=Xn(t,2,0),s){case 0:r=db(t);break;case 1:r=wh(t,Cd,Rd);break;case 2:fb(t,t.ltree,t.dtree),r=wh(t,t.ltree,t.dtree);break;default:r=wd}if(r!==Xc)throw new Error("Data error")}while(!i);return t.destLenthis.x2&&(this.x2=n)),typeof e=="number"&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))};as.prototype.addX=function(n){this.addPoint(n,null)};as.prototype.addY=function(n){this.addPoint(null,n)};as.prototype.addBezier=function(n,e,t,i,s,r,a,o){const l=[n,e],c=[t,i],u=[s,r],f=[a,o];this.addPoint(n,e),this.addPoint(a,o);for(let h=0;h<=1;h++){const d=6*l[h]-12*c[h]+6*u[h],p=-3*l[h]+9*c[h]-9*u[h]+3*f[h],x=3*c[h]-3*l[h];if(p===0){if(d===0)continue;const E=-x/d;01||Math.abs(a.y-i)>1||r.pop():a.type==="L"&&c&&c.x===a.x&&c.y===a.y?r.pop():a.type==="Z"&&(o&&l&&c&&o.type==="M"&&l.type==="L"&&c.type==="L"&&c.x===o.x&&c.y===o.y&&(r.shift(),r[0].type="M"),s+1x.length).map(x=>{let m=parseFloat(x);return(e.decimalPlaces||e.decimalPlaces===0)&&(m=Od(m,e.decimalPlaces)),m})}function u(p){if(!this.commands.length)return p;const x=this.commands[this.commands.length-1];for(let m=0;m-1)o[o.length-1]+=x;else if(r.indexOf(x)>-1)if(!a.type&&!this.commands.length&&(a.type="L"),x==="-")!a.type||m.indexOf("-")>0?l=!0:m.length?o.push("-"):o[o.length-1]=x;else if(!a.type||m.length>0)l=!0;else continue;else if(i.indexOf(x)>-1)a.type?(f.apply(this),a={type:x}):a.type=x;else{if(s.indexOf(x)>-1)throw new Error("Unsupported path command: "+x+". Currently supported commands are "+i.split("").join(", ")+".");` , -\r\f\v`.indexOf(x)>-1?o.push(""):x==="."?!a.type||m.indexOf(x)>-1?l=!0:o[o.length-1]+=x:l=!0}if(l)throw new Error("Unexpected character: "+x+" at offset "+p)}f.apply(this),e.optimize&&(this.commands=Fd(this.commands));const h=e.flipY;let d=e.flipYBase;if(h===!0&&e.flipYBase===void 0){const p=this.getBoundingBox();d=p.y1+p.y2}for(const p in this.commands){const x=this.commands[p];for(const m in x)["x","x1","x2"].includes(m)?this.commands[p][m]=e.x+x[m]*e.scale:["y","y1","y2"].includes(m)&&(this.commands[p][m]=e.y+(h?d-x[m]:x[m])*e.scale)}return this};Bt.fromSVG=function(n,e){return new Bt().fromSVG(n,e)};Bt.prototype.moveTo=function(n,e){this.commands.push({type:"M",x:n,y:e})};Bt.prototype.lineTo=function(n,e){this.commands.push({type:"L",x:n,y:e})};Bt.prototype.curveTo=Bt.prototype.bezierCurveTo=function(n,e,t,i,s,r){this.commands.push({type:"C",x1:n,y1:e,x2:t,y2:i,x:s,y:r})};Bt.prototype.quadTo=Bt.prototype.quadraticCurveTo=function(n,e,t,i){this.commands.push({type:"Q",x1:n,y1:e,x:t,y:i})};Bt.prototype.close=Bt.prototype.closePath=function(){this.commands.push({type:"Z"})};Bt.prototype.extend=function(n){if(n.commands)n=n.commands;else if(n instanceof Ud){const e=n;this.moveTo(e.x1,e.y1),this.lineTo(e.x2,e.y1),this.lineTo(e.x2,e.y2),this.lineTo(e.x1,e.y2),this.close();return}Array.prototype.push.apply(this.commands,n)};Bt.prototype.getBoundingBox=function(){const n=new Ud;let e=0,t=0,i=0,s=0;for(let r=0;r=0&&l>0&&(o+=" "),o+=e(c)}return o}let i=this.commands;n.optimize&&(i=JSON.parse(JSON.stringify(this.commands)),i=Fd(i));const s=n.flipY;let r=n.flipYBase;if(s===!0&&r===void 0){const o=new Bt;o.extend(i);const l=o.getBoundingBox();r=l.y1+l.y2}let a="";for(let o=0;o=0&&n<=255,"Byte value should be between 0 and 255."),[n]};Xe.BYTE=Fn(1);Se.CHAR=function(n){return[n.charCodeAt(0)]};Xe.CHAR=Fn(1);Se.CHARARRAY=function(n){(n===null||typeof n>"u")&&(n="",console.warn("CHARARRAY with undefined or null value encountered and treated as an empty string. This is probably caused by a missing glyph name."));const e=[];for(let t=0;t"u"?0:n.length};Se.USHORT=function(n){return[n>>8&255,n&255]};Xe.USHORT=Fn(2);Se.SHORT=function(n){return n>=Rh&&(n=-(2*Rh-n)),[n>>8&255,n&255]};Xe.SHORT=Fn(2);Se.UINT24=function(n){return[n>>16&255,n>>8&255,n&255]};Xe.UINT24=Fn(3);Se.ULONG=function(n){return[n>>24&255,n>>16&255,n>>8&255,n&255]};Xe.ULONG=Fn(4);Se.LONG=function(n){return n>=Ph&&(n=-(2*Ph-n)),[n>>24&255,n>>16&255,n>>8&255,n&255]};Xe.LONG=Fn(4);Se.FLOAT=function(n){if(n>xb||n>24&255,n>>16&255,n>>8&255,n&255]};Xe.LONGDATETIME=Fn(8);Se.TAG=function(n){return Ne.argument(n.length===4,"Tag should be exactly 4 ASCII characters."),[n.charCodeAt(0),n.charCodeAt(1),n.charCodeAt(2),n.charCodeAt(3)]};Xe.TAG=Fn(4);Se.Card8=Se.BYTE;Xe.Card8=Xe.BYTE;Se.Card16=Se.USHORT;Xe.Card16=Xe.USHORT;Se.OffSize=Se.BYTE;Xe.OffSize=Xe.BYTE;Se.SID=Se.USHORT;Xe.SID=Xe.USHORT;Se.NUMBER=function(n){return n>=-107&&n<=107?[n+139]:n>=108&&n<=1131?(n=n-108,[(n>>8)+247,n&255]):n>=-1131&&n<=-108?(n=-n-108,[(n>>8)+251,n&255]):n>=-32768&&n<=32767?Se.NUMBER16(n):Se.NUMBER32(n)};Xe.NUMBER=function(n){return Se.NUMBER(n).length};Se.NUMBER16=function(n){return[28,n>>8&255,n&255]};Xe.NUMBER16=Fn(3);Se.NUMBER32=function(n){return[29,n>>24&255,n>>16&255,n>>8&255,n&255]};Xe.NUMBER32=Fn(5);Se.REAL=function(n){let e=n.toString();const t=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(t){const r=parseFloat("1e"+((t[2]?+t[2]:0)+t[1].length));e=(Math.round(n*r)/r).toString()}let i="";for(let r=0,a=e.length;r>8&255,e[e.length]=i&255}return e};Xe.UTF16=function(n){return n.length*2};var eo={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};$s.MACSTRING=function(n,e,t,i){const s=eo[i];if(s===void 0)return;let r="";for(let a=0;a=128&&(r=t[r],r===void 0))return;i[s]=r}return i};Xe.MACSTRING=function(n,e){const t=Se.MACSTRING(n,e);return t!==void 0?t.length:0};function vc(n){return n>=-128&&n<=127}function yb(n,e,t){let i=0;const s=n.length;for(;e>8&255,o+256&255)}return r}Se.VARDELTAS=function(n){let e=0;const t=[];for(;e=-128&&i<=127?e=_b(n,e,t):e=bb(n,e,t)}return t};Se.INDEX=function(n){let e=1;const t=[e],i=[];for(let o=0;o>8,e[a+1]=o&255;for(let l=0;l0)return new q(this.data,this.offset+e).parseStruct(n)};q.prototype.parsePointer32=function(n){const e=this.parseOffset32();if(e>0)return new q(this.data,this.offset+e).parseStruct(n)};q.prototype.parseListOfLists=function(n){const e=this.parseOffset16List(),t=e.length,i=this.relativeOffset,s=new Array(t);for(let r=0;r>4)+1;for(let a=0;a>s,c=o&(1<[]),s=e&jt.LONG_WORDS,r=e&jt.WORD_DELTA_COUNT_MASK;if(r>t)throw Error("wordCount must be less than or equal to regionIndexCount");const a=(s?this.parseLong:this.parseShort).bind(this),o=(s?this.parseShort:this.parseChar).bind(this);for(let l=0;l{let _,T;const b=()=>{let S=0;if(t==="gvar"){if(S=x.privatePoints.length||f.length,!S){const v=i.get(s);v.path,S=v.points.length,S+=4}}else t==="cvar"&&(S=i.length);this.offset=m,this.relativeOffset=g,_=this.parsePackedDeltas(S),t==="gvar"&&(T=this.parsePackedDeltas(S))};return{configurable:!0,get:function(){return _===void 0&&b(),E==="deltasY"?T:_},set:function(S){_===void 0&&b(),E==="deltasY"?T=S:_=S}}};Object.defineProperty(x,"deltas",M.call(this,"deltas")),t==="gvar"&&Object.defineProperty(x,"deltasY",M.call(this,"deltasY")),h+=x.variationDataSize,delete x.variationDataSize}this.relativeOffset=r;const d={headers:u};return d.sharedPoints=f,d};q.prototype.parseTupleVariationHeader=function(n,e){const t=this.parseUShort(),i=this.parseUShort(),s=!!(i&jt.EMBEDDED_PEAK_TUPLE),r=!!(i&jt.INTERMEDIATE_REGION),a=!!(i&jt.PRIVATE_POINT_NUMBERS),o=s?void 0:i&jt.TUPLE_INDEX_MASK,l=s?this.parseTupleRecords(1,n)[0]:void 0,c=r?this.parseTupleRecords(1,n)[0]:void 0,u=r?this.parseTupleRecords(1,n)[0]:void 0,f={variationDataSize:t,peakTuple:l,intermediateStartTuple:c,intermediateEndTuple:u,flags:{embeddedPeakTuple:s,intermediateRegion:r,privatePointNumbers:a}};return e==="gvar"&&(f.sharedTupleRecordsIndex=o),f};q.prototype.parsePackedPointNumbers=function(){const n=this.parseByte(),e=[];let t=n;if(n>=128){const s=this.parseByte();t=(n&jt.POINT_RUN_COUNT_MASK)<<8|s}let i=0;for(;e.length>1,e.skip("uShort",3),n.glyphIndexMap={};const a=new Te.Parser(t,i+s+14),o=new Te.Parser(t,i+s+16+r*2),l=new Te.Parser(t,i+s+16+r*4),c=new Te.Parser(t,i+s+16+r*6);let u=i+s+16+r*8;for(let f=0;f=0;f-=1)if(a=Te.getUShort(n,e+4+f*8),o=Te.getUShort(n,e+4+f*8+2),a===3&&c.includes(o)||a===0&&l.includes(o)||a===1&&o===0){if(r>0)continue;if(r=Te.getULong(n,e+4+f*8+4),i)break}else if(a===0&&o===5){if(s=Te.getULong(n,e+4+f*8+4),i=new Te.Parser(n,e+s),i.parseUShort()!==14)s=-1,i=null;else if(r>0)break}if(r===-1)throw new Error("No valid cmap sub-tables found.");const u=new Te.Parser(n,e+r);if(t.format=u.parseUShort(),t.format===0)Nb(t,u,a,o);else if(t.format===12||t.format===13)kb(t,u,t.format);else if(t.format===4)Bb(t,u,n,e,r);else throw new Error("Only format 0 (platformId 1, encodingId 0), 4, 12 and 14 cmap tables are supported (found format "+t.format+", platformId "+a+", encodingId "+o+").");return i&&Hb(t,i),t}function Gb(n,e,t){n.segments.push({end:e,start:e,delta:-(e-t),offset:0,glyphIndex:t})}function Vb(n){n.segments.push({end:65535,start:65535,delta:1,offset:0})}function Wb(n){if(n.length===0)return n;const e=[n[0]];for(let t=1;t0;t-=1)if(n.get(t).unicode>65535){e=!1;break}let i=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:e?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:e?12:20}];e||i.push({name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}),i.push({name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0});const s=new me.Table("cmap",i);for(s.segments=[],t=0;t1&&Ne.argument(e,"Can't infer numPaletteEntries on multiple colorRecordIndices"),new me.Table("CPAL",[{name:"version",type:"USHORT",value:n},{name:"numPaletteEntries",type:"USHORT",value:e||t.length},{name:"numPalettes",type:"USHORT",value:i.length},{name:"numColorRecords",type:"USHORT",value:t.length},{name:"colorRecordsArrayOffset",type:"ULONG",value:12+2*i.length},...i.map((s,r)=>({name:"colorRecordIndices_"+r,type:"USHORT",value:s})),...t.map((s,r)=>({name:"colorRecords_"+r,type:"ULONG",value:s}))])}function $d(n){var e=(n&4278190080)>>24,t=(n&16711680)>>16,i=(n&65280)>>8,s=n&255;return e=e+256&255,t=t+256&255,i=i+256&255,s=(s+256&255)/255,{b:e,g:t,r:i,a:s}}function Jc(n,e,t=0,i="hexa"){if(e==65535)return"currentColor";const s=n&&n.tables&&n.tables.cpal;if(!s)return"currentColor";if(t>s.colorRecordIndices.length-1)throw new Error(`Palette index out of range (colorRecordIndices.length: ${s.colorRecordIndices.length}, index: ${e})`);if(e>s.numPaletteEntries)throw new Error(`Color index out of range (numPaletteEntries: ${s.numPaletteEntries}, index: ${e})`);const r=s.colorRecordIndices[t]+e;if(r>s.colorRecords)throw new Error(`Color index out of range (colorRecords.length: ${s.colorRecords.length}, lookupIndex: ${r})`);const a=$d(s.colorRecords[r]);return i==="bgra"?a:Js(a,i)}function Rn(n){return("0"+parseInt(n).toString(16)).slice(-2)}function n1(n){const e=n.r/255,t=n.g/255,i=n.b/255,s=Math.max(e,t,i),r=Math.min(e,t,i);let a,o,l=(s+r)/2;if(s===r)a=o=0;else{const c=s-r;switch(o=l>.5?c/(2-s-r):c/(s+r),s){case e:a=(t-i)/c+(ttypeof o<"u");n={r:Math.round(parseFloat(a[1])/(a[2]?100/255:1)),g:Math.round(parseFloat(a[3])/(a[4]?100/255:1)),b:Math.round(parseFloat(a[5])/(a[6]?100/255:1)),a:a[7]?parseFloat(a[7])/(a[8]?100:1):1}}else{const a=/hsla?\(\s*(?:(\d*\.\d+|\d+)(deg|turn|))\s*(?:,|\s*)\s*(?:(\d*\.\d+)%?|(\d+)%?)\s*(?:,|\s*)\s*(?:(\d*\.\d+)%?|(\d+)%?)\s*(?:(?:,|\s|\/)\s*(?:(0*(?:\.\d+)?()|0*1(?:\.0+)?())|(?:\.\d+)|(\d+)(%)|(\d*\.\d+)(%)))?\s*\)/;if(a.test(n)){const o=n.match(a).filter(l=>typeof l<"u");n=i1({h:parseFloat(o[1])*(o[2]==="turn"?360:1),s:parseFloat(o[3]),l:parseFloat(o[4]),a:o[5]?parseFloat(o[5])/(o[6]?100:1):1})}else s=!1}}if(!s)throw new Error(`Invalid color format: ${n}`);return Js(n,e)}function Js(n,e="hexa"){if(n==="currentColor")return n;if(Number.isInteger(n)){if(e=="raw"||e=="cpal")return n;n=$d(n)}else typeof n!="object"&&(n=co(n,"bgra"));let t=["hsl","hsla"].includes(e)?n1(n):null;switch(e){case"rgba":return`rgba(${n.r}, ${n.g}, ${n.b}, ${parseFloat(n.a.toFixed(3))})`;case"rgb":return`rgb(${n.r}, ${n.g}, ${n.b})`;case"hex":case"hex6":case"hex-6":return`#${Rn(n.r)}${Rn(n.g)}${Rn(n.b)}`;case"hexa":case"hex8":case"hex-8":return`#${Rn(n.r)}${Rn(n.g)}${Rn(n.b)}${Rn(n.a*255)}`;case"hsl":return`hsl(${t.h.toFixed(2)}, ${t.s.toFixed(2)}%, ${t.l.toFixed(2)}%)`;case"hsla":return`hsla(${t.h.toFixed(2)}, ${t.s.toFixed(2)}%, ${t.l.toFixed(2)}%, ${parseFloat(n.a.toFixed(3))})`;case"bgra":return n;case"raw":case"cpal":return Zd(n);default:throw new Error("Unknown color format: "+e)}}var Kd={parse:e1,make:t1,getPaletteColor:Jc,parseColor:co,formatColor:Js};function s1(n,e){let t=e||new qs;return{configurable:!0,get:function(){return typeof t=="function"&&(t=t()),t},set:function(i){t=i}}}function en(n){this.bindConstructorValues(n)}en.prototype.bindConstructorValues=function(n){if(this.index=n.index||0,n.name===".notdef"?n.unicode=void 0:n.name===".null"&&(n.unicode=0),n.unicode===0&&n.name!==".null")throw new Error('The unicode value "0" is reserved for the glyph name ".null" and cannot be used by any other glyph.');this.name=n.name||null,this.unicode=n.unicode,this.unicodes=n.unicodes||(n.unicode!==void 0?[n.unicode]:[]),"xMin"in n&&(this.xMin=n.xMin),"yMin"in n&&(this.yMin=n.yMin),"xMax"in n&&(this.xMax=n.xMax),"yMax"in n&&(this.yMax=n.yMax),"advanceWidth"in n&&(this.advanceWidth=n.advanceWidth),"leftSideBearing"in n&&(this.leftSideBearing=n.leftSideBearing),"points"in n&&(this.points=n.points),Object.defineProperty(this,"path",s1(this,n.path))};en.prototype.addUnicode=function(n){this.unicodes.length===0&&(this.unicode=n),this.unicodes.push(n)};en.prototype.getBoundingBox=function(){return this.path.getBoundingBox()};en.prototype.getPath=function(n,e,t,i,s){n=n!==void 0?n:0,e=e!==void 0?e:0,t=t!==void 0?t:72,i=Object.assign({},s&&s.defaultRenderOptions,i);let r,a,o=i.xScale,l=i.yScale;const c=1/(this.path.unitsPerEm||1e3)*t;let u=this;s&&s.variation&&(u=s.variation.getTransform(this,i.variation),r=u.path.commands),i.hinting&&s&&s.hinting&&(a=u.path&&s.hinting.exec(u,t,i)),a?(r=s.hinting.getCommands(a),n=Math.round(n),e=Math.round(e),o=l=1):(r=u.path.commands,o===void 0&&(o=c),l===void 0&&(l=c));const f=new qs;if(i.drawSVG){const h=this.getSvgImage(s);if(h){const d=new qs;return d._image={image:h.image,x:n+h.leftSideBearing*c,y:e-h.baseline*c,width:h.image.width*c,height:h.image.height*c},f._layers=[d],f}}if(i.drawLayers){const h=this.getLayers(s);if(h&&h.length){f._layers=[];for(let d=0;d"u"&&n.path,n[t]},set:function(i){n[t]=i},enumerable:!0,configurable:!0})}function yo(n,e){if(this.font=n,this.glyphs={},Array.isArray(e))for(let t=0;t=this.length-1;return{value:this.get(n),done:e}}).bind(this)}});yo.prototype.get=function(n){if(this.font._push&&this.glyphs[n]===void 0){this.font._push(n),typeof this.glyphs[n]=="function"&&(this.glyphs[n]=this.glyphs[n]());let e=this.glyphs[n],t=this.font._IndexToUnicodeMap[n];if(t)for(let i=0;i1?Te.getULong(n,e):Te.getCard16(n,e),o=i>1?4:2;let l,c;if(a!==0){const u=Te.getByte(n,e+o);l=e+(a+1)*u+o;let f=e+o+1;for(let h=0;h1?Te.getULong(n,e):Te.getCard16(n,e),r=t>1?4:2;let a,o;if(s!==0){const l=Te.getByte(n,e+r);a=e+(s+1)*l+r;let c=e+r+1;for(let u=0;u1?Te.getULong(t,i):Te.getCard16(t,i),o=r>1?4:2;let l=0;if(a!==0){const u=Te.getByte(t,i+o);l=i+(a+1)*u+o}return Te.getBytes(t,l+e[n],l+e[n+1])}function u1(n){let e="";const i=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"];for(;;){const s=n.parseByte(),r=s>>4,a=s&15;if(r===15||(e+=i[r],a===15))break;e+=i[a]}return parseFloat(e)}function h1(n,e){let t,i,s,r;if(e===28)return t=n.parseByte(),i=n.parseByte(),t<<8|i;if(e===29)return t=n.parseByte(),i=n.parseByte(),s=n.parseByte(),r=n.parseByte(),t<<24|i<<16|s<<8|r;if(e===30)return u1(n);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return t=n.parseByte(),(e-247)*256+t+108;if(e>=251&&e<=254)return t=n.parseByte(),-(e-251)*256-t-108;throw new Error("Invalid b0 "+e)}function f1(n){const e={};for(let t=0;t1&&l===23){S1(a);continue}r.push([l,a]),a=[]}else a.push(h1(s,l))}return f1(r)}function Mr(n,e){return e<=390?e=Ha[e]:n?e=n[e-391]:e=void 0,e}function Qc(n,e,t){const i={};let s;for(let r=0;r2)throw new Error(`Unsupported CFF table version ${t.formatMajor}.${t.formatMinor}`);return t.size=Te.getCard8(n,e+2),t.formatMajor<2?(t.offsetSize=Te.getCard8(n,e+3),t.startOffset=e,t.endOffset=e+4):(t.topDictLength=Te.getCard16(n,e+3),t.endOffset=e+8),t}var jd=[{name:"version",op:0,type:"SID"},{name:"notice",op:1,type:"SID"},{name:"copyright",op:1200,type:"SID"},{name:"fullName",op:2,type:"SID"},{name:"familyName",op:3,type:"SID"},{name:"weight",op:4,type:"SID"},{name:"isFixedPitch",op:1201,type:"number",value:0},{name:"italicAngle",op:1202,type:"number",value:0},{name:"underlinePosition",op:1203,type:"number",value:-100},{name:"underlineThickness",op:1204,type:"number",value:50},{name:"paintType",op:1205,type:"number",value:0},{name:"charstringType",op:1206,type:"number",value:2},{name:"fontMatrix",op:1207,type:["real","real","real","real","real","real"],value:[.001,0,0,.001,0,0]},{name:"uniqueId",op:13,type:"number"},{name:"fontBBox",op:5,type:["number","number","number","number"],value:[0,0,0,0]},{name:"strokeWidth",op:1208,type:"number",value:0},{name:"xuid",op:14,type:[],value:null},{name:"charset",op:15,type:"offset",value:0},{name:"encoding",op:16,type:"offset",value:0},{name:"charStrings",op:17,type:"offset",value:0},{name:"private",op:18,type:["number","offset"],value:[0,0]},{name:"ros",op:1230,type:["SID","SID","number"]},{name:"cidFontVersion",op:1231,type:"number",value:0},{name:"cidFontRevision",op:1232,type:"number",value:0},{name:"cidFontType",op:1233,type:"number",value:0},{name:"cidCount",op:1234,type:"number",value:8720},{name:"uidBase",op:1235,type:"number"},{name:"fdArray",op:1236,type:"offset"},{name:"fdSelect",op:1237,type:"offset"},{name:"fontName",op:1238,type:"SID"}],p1=[{name:"fontMatrix",op:1207,type:["real","real","real","real","real","real"],value:[.001,0,0,.001,0,0]},{name:"charStrings",op:17,type:"offset"},{name:"fdArray",op:1236,type:"offset"},{name:"fdSelect",op:1237,type:"offset"},{name:"vstore",op:24,type:"offset"}],Qd=[{name:"subrs",op:19,type:"offset",value:0},{name:"defaultWidthX",op:20,type:"number",value:0},{name:"nominalWidthX",op:21,type:"number",value:0}],m1=[{name:"blueValues",op:6,type:"delta"},{name:"otherBlues",op:7,type:"delta"},{name:"familyBlues",op:7,type:"delta"},{name:"familyBlues",op:8,type:"delta"},{name:"familyOtherBlues",op:9,type:"delta"},{name:"blueScale",op:1209,type:"number",value:.039625},{name:"blueShift",op:1210,type:"number",value:7},{name:"blueFuzz",op:1211,type:"number",value:1},{name:"stdHW",op:10,type:"number"},{name:"stdVW",op:11,type:"number"},{name:"stemSnapH",op:1212,type:"number"},{name:"stemSnapV",op:1213,type:"number"},{name:"languageGroup",op:1217,type:"number",value:0},{name:"expansionFactor",op:1218,type:"number",value:.06},{name:"vsindex",op:22,type:"number",value:0},{name:"subrs",op:19,type:"offset"}],g1=[{name:"private",op:18,type:["number","offset"],value:[0,0]}];function x1(n,e,t,i){const s=jc(n,e,n.byteLength,i);return Qc(s,i>1?p1:jd,t)}function eu(n,e,t,i,s){const r=jc(n,e,t,s);return Qc(r,s>1?m1:Qd,i)}function v1(n,e,t){const i=jc(n,e,void 0,t);return Qc(i,g1)}function y1(n,e,t){const i=[];for(let s=0;se;)n.pop()}function ep(n,e){const t=n.tables.cff&&n.tables.cff.topDict&&n.tables.cff.topDict.paintType||0;return t===2&&(e.fill=null,e.stroke="black",e.strokeWidth=n.tables.cff.topDict.strokeWidth||0),t}function Sc(n,e,t,i,s){let r,a,o,l;const c=new qs,u=[];let f=0,h=!1,d=!1,p=0,x=0,m,g,M,E,_=0,T=[],b,S=0;const v=n.tables.cff2||n.tables.cff;if(M=v.topDict._defaultWidthX,E=v.topDict._nominalWidthX,s=s||n.variation&&n.variation.get(),e.getBlendPath||(e.getBlendPath=function(N){return Sc(n,e,t,i,N)}),n.isCIDFont||i>1){const N=v.topDict._fdSelect?v.topDict._fdSelect[e.index]:0,U=v.topDict._fdArray[N];m=U._subrs,g=U._subrsBias,i>1?(T=v.topDict._vstore.itemVariationStore,_=U._privateDict.vsindex):(M=U._defaultWidthX,E=U._nominalWidthX)}else m=v.topDict._subrs,g=v.topDict._subrsBias;const w=ep(n,c);let I=M;function L(N,U){d&&w!==2&&c.closePath(),c.moveTo(N,U),d=!0}function C(){let N;N=(u.length&1)!==0,N&&!h&&(I=u.shift()+E),f+=u.length>>1,u.length=0,h=!0}function O(N){let U,Z,k,$,D,ae,re,ee,ce,he,fe,X,se=0;for(;se1&&!h&&(I=u.shift()+E,h=!0),x+=u.pop(),L(p,x);break;case 5:for(;u.length>0;)p+=u.shift(),x+=u.shift(),c.lineTo(p,x);break;case 6:for(;u.length>0&&(p+=u.shift(),c.lineTo(p,x),u.length!==0);)x+=u.shift(),c.lineTo(p,x);break;case 7:for(;u.length>0&&(x+=u.shift(),c.lineTo(p,x),u.length!==0);)p+=u.shift(),c.lineTo(p,x);break;case 8:for(;u.length>0;)r=p+u.shift(),a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),p=o+u.shift(),x=l+u.shift(),c.curveTo(r,a,o,l,p,x);break;case 10:if(D=u.pop()+g,ae=m[D],ae){if(S>=Oh){console.warn("CFF charstring subroutine call depth exceeded, skipping callsubr");break}S++,O(ae),S--}break;case 11:if(i>1){console.error("CFF CharString operator return (11) is not supported in CFF2");break}return;case 12:switch(Oe=N[se],se+=1,Oe){case 35:r=p+u.shift(),a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),re=o+u.shift(),ee=l+u.shift(),ce=re+u.shift(),he=ee+u.shift(),fe=ce+u.shift(),X=he+u.shift(),p=fe+u.shift(),x=X+u.shift(),u.shift(),c.curveTo(r,a,o,l,re,ee),c.curveTo(ce,he,fe,X,p,x);break;case 34:r=p+u.shift(),a=x,o=r+u.shift(),l=a+u.shift(),re=o+u.shift(),ee=l,ce=re+u.shift(),he=l,fe=ce+u.shift(),X=x,p=fe+u.shift(),c.curveTo(r,a,o,l,re,ee),c.curveTo(ce,he,fe,X,p,x);break;case 36:r=p+u.shift(),a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),re=o+u.shift(),ee=l,ce=re+u.shift(),he=l,fe=ce+u.shift(),X=he+u.shift(),p=fe+u.shift(),c.curveTo(r,a,o,l,re,ee),c.curveTo(ce,he,fe,X,p,x);break;case 37:r=p+u.shift(),a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),re=o+u.shift(),ee=l+u.shift(),ce=re+u.shift(),he=ee+u.shift(),fe=ce+u.shift(),X=he+u.shift(),Math.abs(fe-p)>Math.abs(X-x)?p=fe+u.shift():x=X+u.shift(),c.curveTo(r,a,o,l,re,ee),c.curveTo(ce,he,fe,X,p,x);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+Oe),u.length=0}break;case 14:if(i>1){console.error("CFF CharString operator endchar (14) is not supported in CFF2");break}if(u.length>=4){const Fe=bc[u.pop()],Ve=bc[u.pop()],at=u.pop(),ot=u.pop();if(Fe&&Ve){e.isComposite=!0,e.components=[];const pt=n.cffEncoding.charset.indexOf(Fe),vt=n.cffEncoding.charset.indexOf(Ve);e.components.push({glyphIndex:vt,dx:0,dy:0}),e.components.push({glyphIndex:pt,dx:ot,dy:at}),c.extend(n.glyphs.get(vt).path);const ct=n.glyphs.get(pt),ut=JSON.parse(JSON.stringify(ct.path.commands));for(let R=0;R0&&!h&&(I=u.shift()+E,h=!0);d&&w!==2&&(c.closePath(),d=!1);break;case 15:if(i<2){console.error("CFF2 CharString operator vsindex (15) is not supported in CFF");break}_=u.pop();break;case 16:if(i<2){console.error("CFF2 CharString operator blend (16) is not supported in CFF");break}b||(b=n.variation&&s&&n.variation.process.getBlendVector(T,_,s));var Q=u.pop(),ye=b?b.length:T.itemVariationSubtables[_].regionIndexes.length,ve=Q*ye,_e=u.length-ve,Ze=_e-Q;if(b)for(let Fe=0;Fe>3;break;case 21:u.length>2&&!h&&(I=u.shift()+E,h=!0),x+=u.pop(),p+=u.pop(),L(p,x);break;case 22:u.length>1&&!h&&(I=u.shift()+E,h=!0),p+=u.pop(),L(p,x);break;case 23:C();break;case 24:for(;u.length>2;)r=p+u.shift(),a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),p=o+u.shift(),x=l+u.shift(),c.curveTo(r,a,o,l,p,x);p+=u.shift(),x+=u.shift(),c.lineTo(p,x);break;case 25:for(;u.length>6;)p+=u.shift(),x+=u.shift(),c.lineTo(p,x);r=p+u.shift(),a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),p=o+u.shift(),x=l+u.shift(),c.curveTo(r,a,o,l,p,x);break;case 26:for(u.length&1&&(p+=u.shift());u.length>0;)r=p,a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),p=o,x=l+u.shift(),c.curveTo(r,a,o,l,p,x);break;case 27:for(u.length&1&&(x+=u.shift());u.length>0;)r=p+u.shift(),a=x,o=r+u.shift(),l=a+u.shift(),p=o+u.shift(),x=l,c.curveTo(r,a,o,l,p,x);break;case 28:U=N[se],Z=N[se+1],u.push((U<<24|Z<<16)>>16),se+=2;break;case 29:if(D=u.pop()+n.gsubrsBias,ae=n.gsubrs[D],ae){if(S>=Oh){console.warn("CFF charstring subroutine call depth exceeded, skipping callgsubr");break}S++,O(ae),S--}break;case 30:for(;u.length>0&&(r=p,a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),p=o+u.shift(),x=l+(u.length===1?u.shift():0),c.curveTo(r,a,o,l,p,x),u.length!==0);)r=p+u.shift(),a=x,o=r+u.shift(),l=a+u.shift(),x=l+u.shift(),p=o+(u.length===1?u.shift():0),c.curveTo(r,a,o,l,p,x);break;case 31:for(;u.length>0&&(r=p+u.shift(),a=x,o=r+u.shift(),l=a+u.shift(),x=l+u.shift(),p=o+(u.length===1?u.shift():0),c.curveTo(r,a,o,l,p,x),u.length!==0);)r=p,a=x+u.shift(),o=r+u.shift(),l=a+u.shift(),p=o+u.shift(),x=l+(u.length===1?u.shift():0),c.curveTo(r,a,o,l,p,x);break;default:Oe<32?console.log("Glyph "+e.index+": unknown operator "+Oe):Oe<247?u.push(Oe-139):Oe<251?(U=N[se],se+=1,u.push((Oe-247)*256+U+108)):Oe<255?(U=N[se],se+=1,u.push(-(Oe-251)*256-U-108)):(U=N[se],Z=N[se+1],k=N[se+2],$=N[se+3],se+=4,u.push((U<<24|Z<<16|k<<8|$)/65536))}}}return O(t),n.variation&&s&&(c.commands=c.commands.map(N=>{const U=Object.keys(N);for(let Z=0;Z=i)throw new Error("CFF table CID Font FDSelect has bad FD index value "+a+" (FD count "+i+")");r.push(a)}else if(l===3||s>1&&l===4){const c=l===4?o.parseULong():o.parseCard16();let u=l===4?o.parseULong():o.parseCard16();if(u!==0)throw new Error(`CFF Table CID Font FDSelect format ${l} range has bad initial GID ${u}`);let f;for(let h=0;h=i)throw new Error("CFF table CID Font FDSelect has bad FD index value "+a+" (FD count "+i+")");if(f>t)throw new Error(`CFF Table CID Font FDSelect format ${s} range has bad GID ${f}`);for(;u1?null:Wn(n,r.endOffset,Te.bytesToString),o=r.formatMajor>1?null:Wn(n,a.endOffset),l=r.formatMajor>1?null:Wn(n,o.endOffset,Te.bytesToString),c=Wn(n,r.formatMajor>1?e+r.size+r.topDictLength:l.endOffset,void 0,r.formatMajor);t.gsubrs=c.objects,t.gsubrsBias=uo(t.gsubrs);let u;if(r.formatMajor>1){const h=e+r.size,d=Te.getBytes(n,h,h+r.topDictLength);u=cl(n,0,[d],void 0,r.formatMajor)[0]}else{const h=cl(n,e,o.objects,l.objects,r.formatMajor);if(h.length!==1)throw new Error("CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = "+h.length);u=h[0]}if(s.topDict=u,u._privateDict&&(t.defaultWidthX=u._privateDict.defaultWidthX,t.nominalWidthX=u._privateDict.nominalWidthX),r.formatMajor<2&&u.ros[0]!==void 0&&u.ros[1]!==void 0&&(t.isCIDFont=!0),r.formatMajor>1){let h=u.fdArray,d=u.fdSelect;if(!h)throw new Error("This is a CFF2 font, but FDArray information is missing");const p=Wn(n,e+h,null,r.formatMajor),x=y1(n,e,p.objects);u._fdArray=x,d&&(u._fdSelect=Fh(n,e+d,t.numGlyphs,x.length,r.formatMajor))}else if(t.isCIDFont){let h=u.fdArray,d=u.fdSelect;if(h===0||d===0)throw new Error("Font is marked as a CID font, but FDArray and/or FDSelect information is missing");h+=e;const p=Wn(n,h),x=cl(n,e,p.objects,l.objects,r.formatMajor);u._fdArray=x,d+=e,u._fdSelect=Fh(n,d,t.numGlyphs,x.length,r.formatMajor)}if(r.formatMajor<2){const h=e+u.private[1],d=eu(n,h,u.private[0],l.objects,r.formatMajor);if(t.defaultWidthX=d.defaultWidthX,t.nominalWidthX=d.nominalWidthX,d.subrs!==0){const p=h+d.subrs,x=Wn(n,p);t.subrs=x.objects,t.subrsBias=uo(t.subrs)}else t.subrs=[],t.subrsBias=0}let f;if(i.lowMemory?(f=l1(n,e+u.charStrings,r.formatMajor),t.nGlyphs=f.offsets.length-(r.formatMajor>1?1:0)):(f=Wn(n,e+u.charStrings,null,r.formatMajor),t.nGlyphs=f.objects.length),r.formatMajor>1&&t.tables.maxp&&t.nGlyphs!==t.tables.maxp.numGlyphs&&console.error(`Glyph count in the CFF2 table (${t.nGlyphs}) must correspond to the glyph count in the maxp table (${t.tables.maxp.numGlyphs})`),r.formatMajor<2){let h=[],d=[];u.charset===0?h=Yb:u.charset===1?h=qb:u.charset===2?h=$b:h=_1(n,e+u.charset,t.nGlyphs,l.objects,t.isCIDFont),u.encoding===0?d=bc:u.encoding===1?d=Zb:d=b1(n,e+u.encoding),t.cffEncoding=new qd(d,h),t.encoding=t.encoding||t.cffEncoding}if(t.glyphs=new jn.GlyphSet(t),i.lowMemory)t._push=function(h){const d=c1(h,f.offsets,n,e+u.charStrings,void 0,r.formatMajor);t.glyphs.push(h,jn.cffGlyphLoader(t,h,Sc,d,r.formatMajor))};else for(let h=0;h=0&&(t=i),i=e.indexOf(n),i>=0?t=i+Ha.length:(t=Ha.length+e.length,e.push(n)),t}function E1(){return new me.Record("Header",[{name:"major",type:"Card8",value:1},{name:"minor",type:"Card8",value:0},{name:"hdrSize",type:"Card8",value:4},{name:"major",type:"Card8",value:1}])}function T1(n){const e=new me.Record("Name INDEX",[{name:"names",type:"INDEX",value:[]}]);e.names=[];for(let t=0;t=t.begin&&n=1&&(t.ulCodePageRange1=i.parseULong(),t.ulCodePageRange2=i.parseULong()),t.version>=2&&(t.sxHeight=i.parseShort(),t.sCapHeight=i.parseShort(),t.usDefaultChar=i.parseUShort(),t.usBreakChar=i.parseUShort(),t.usMaxContent=i.parseUShort()),t}function q1(n){return new me.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],n)}var Tc={parse:Y1,make:q1,unicodeRanges:Ec,getUnicodeRange:X1};function $1(n,e){const t={},i=new Te.Parser(n,e);switch(t.version=i.parseVersion(),t.italicAngle=i.parseFixed(),t.underlinePosition=i.parseShort(),t.underlineThickness=i.parseShort(),t.isFixedPitch=i.parseULong(),t.minMemType42=i.parseULong(),t.maxMemType42=i.parseULong(),t.minMemType1=i.parseULong(),t.maxMemType1=i.parseULong(),t.version){case 1:t.names=Ki.slice();break;case 2:t.numberOfGlyphs=i.parseUShort(),t.glyphNameIndex=new Array(t.numberOfGlyphs);for(let s=0;s=Ki.length){const r=i.parseChar();t.names.push(i.parseString(r))}break;case 2.5:t.numberOfGlyphs=i.parseUShort(),t.offset=new Array(t.numberOfGlyphs);for(let s=0;s[{name:"glyphID_"+a,type:"USHORT",value:r.glyphID},{name:"firstLayerIndex_"+a,type:"USHORT",value:r.firstLayerIndex},{name:"numLayers_"+a,type:"USHORT",value:r.numLayers}]).flat(),...t.map((r,a)=>[{name:"LayerGlyphID_"+a,type:"USHORT",value:r.glyphID},{name:"paletteIndex_"+a,type:"USHORT",value:r.paletteIndex}]).flat()])}var hp={parse:eS,make:tS};function nS(n,e){return[{name:"tag_"+n,type:"TAG",value:e.tag},{name:"minValue_"+n,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+n,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+n,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+n,type:"USHORT",value:0},{name:"nameID_"+n,type:"USHORT",value:e.axisNameID}]}function iS(n,e,t){const i={},s=new Te.Parser(n,e);i.tag=s.parseTag(),i.minValue=s.parseFixed(),i.defaultValue=s.parseFixed(),i.maxValue=s.parseFixed(),s.skip("uShort",1);const r=s.parseUShort();return i.axisNameID=r,i.name=lo(t,r),i}function sS(n,e,t,i={}){const s=[{name:"nameID_"+n,type:"USHORT",value:e.subfamilyNameID},{name:"flags_"+n,type:"USHORT",value:0}];for(let r=0;r1||r>0?i.parseUShort():void 0;t!==void 0&&Ne.argument(l>=t.axes.length,"STAT axis count must be greater than or equal to fvar axis count"),u>0&&Ne.argument(l>=0,"STAT axis count must be greater than 0 if STAT axis value count is greater than 0");const d=[];for(let m=0;mo.value.tag?1:-1}),e.fields=e.fields.concat(i),e.fields=e.fields.concat(s),e}function zh(n,e,t){for(let i=0;i0)return n.glyphs.get(s).getMetrics()}return t}function AS(n){let e=0;for(let t=0;tve||l===void 0)&&ve>0&&(l=ve),c 123 are reserved for internal usage");if(ye.name===".notdef")continue;const Ze=ye.getMetrics();e.push(Ze.xMin),t.push(Ze.yMin),i.push(Ze.xMax),s.push(Ze.yMax),a.push(Ze.leftSideBearing),o.push(Ze.rightSideBearing),r.push(ye.advanceWidth)}const p={xMin:Math.min.apply(null,e),yMin:Math.min.apply(null,t),xMax:Math.max.apply(null,i),yMax:Math.max.apply(null,s),advanceWidthMax:Math.max.apply(null,r),advanceWidthAvg:AS(r),minLeftSideBearing:Math.min.apply(null,a),maxLeftSideBearing:Math.max.apply(null,a),minRightSideBearing:Math.min.apply(null,o)};p.ascender=n.ascender,p.descender=n.descender;let x=0;n.weightClass>=600&&(x|=n.macStyleValues.BOLD),n.italicAngle<0&&(x|=n.macStyleValues.ITALIC);const m=ip.make({flags:3,unitsPerEm:n.unitsPerEm,xMin:p.xMin,yMin:p.yMin,xMax:p.xMax,yMax:p.yMax,lowestRecPPEM:3,macStyle:x,createdTimestamp:n.createdTimestamp}),g=sp.make({ascender:p.ascender,descender:p.descender,advanceWidthMax:p.advanceWidthMax,minLeftSideBearing:p.minLeftSideBearing,minRightSideBearing:p.minRightSideBearing,xMaxExtent:p.maxLeftSideBearing+(p.xMax-p.xMin),numberOfHMetrics:n.glyphs.length}),M=op.make(n.glyphs.length),E=Tc.make(Object.assign({xAvgCharWidth:Math.round(p.advanceWidthAvg),usFirstCharIndex:l,usLastCharIndex:c,ulUnicodeRange1:u,ulUnicodeRange2:f,ulUnicodeRange3:h,ulUnicodeRange4:d,sTypoAscender:p.ascender,sTypoDescender:p.descender,sTypoLineGap:0,usWinAscent:p.yMax,usWinDescent:Math.abs(p.yMin),ulCodePageRange1:1,sxHeight:zh(n,"xyvw",{yMax:Math.round(p.ascender/2)}).yMax,sCapHeight:zh(n,"HIKLEFJMNTZBDPRAGOQSUVWXY",p).yMax,usDefaultChar:n.hasChar(" ")?32:0,usBreakChar:n.hasChar(" ")?32:0},n.tables.os2)),_=rp.make(n.glyphs),T=Wd.make(n.glyphs),b=n.getEnglishName("fontFamily"),S=n.getEnglishName("fontSubfamily"),v=b+" "+S;let w=n.getEnglishName("postScriptName");w||(w=b.replace(/\s/g,"")+"-"+S);const I={};for(let Q in n.names)I[Q]=n.names[Q];I.unicode=I.unicode||{},I.macintosh=I.macintosh||{},I.windows=I.windows||{};const L=n.names.unicode||{},C=n.names.macintosh||{},O=n.names.windows||{};for(const Q in I){if(I[Q]=I[Q]||{},!I[Q].uniqueID){const ye=n.getEnglishName("manufacturer")||"";I[Q].uniqueID={en:`${ye}: ${v}`}}I[Q].postScriptName||(I[Q].postScriptName={en:w})}I.unicode.preferredFamily||(I.unicode.preferredFamily=L.fontFamily||C.fontFamily||O.fontFamily),I.macintosh.preferredFamily||(I.macintosh.preferredFamily=C.fontFamily||L.fontFamily||O.fontFamily),I.windows.preferredFamily||(I.windows.preferredFamily=O.fontFamily||L.fontFamily||C.fontFamily),I.unicode.preferredSubfamily||(I.unicode.preferredSubfamily=L.fontSubfamily||C.fontSubfamily||O.fontSubfamily),I.macintosh.preferredSubfamily||(I.macintosh.preferredSubfamily=C.fontSubfamily||L.fontSubfamily||O.fontSubfamily),I.windows.preferredSubfamily||(I.windows.preferredSubfamily=O.fontSubfamily||L.fontSubfamily||C.fontSubfamily);const N=[],U=Vd.make(I,N),Z=N.length>0?ap.make(N):void 0,k=lp.make(n),$=Mc.make(n.glyphs,{version:n.getEnglishName("version"),fullName:v,familyName:b,weightName:S,postScriptName:w,unitsPerEm:n.unitsPerEm,fontBBox:[0,p.yMin,p.ascender,p.advanceWidthMax],topDict:n.tables.cff&&n.tables.cff.topDict||{}}),D=n.metas&&Object.keys(n.metas).length>0?up.make(n.metas):void 0,ae=[m,g,M,E,U,T,k,$,_];Z&&ae.push(Z);const re={gsub:cp,cpal:Kd,colr:hp,stat:dp,avar:pp,cvar:mp,fvar:fp,gvar:gp,gasp:xp,svg:vp},ee={avar:[n.tables.fvar],fvar:[n.names]};for(let Q in re){const ye=n.tables[Q];if(ye){const ve=re[Q].make.call(n,ye,...ee[Q]||[]);ve&&ae.push(ve)}}D&&ae.push(D);const ce=yp(ae),he=ce.encode(),fe=tu(he),X=ce.fields;let se=!1;for(let Q=0;Q>>1,r=n[s].tag;if(r===e)return s;r>>1,r=n[s];if(r===e)return s;r>>1;t=n[r];const a=t.start;if(a===e)return t;a0)return t=n[i-1],e>t.end?0:t}function _p(n,e){this.font=n,this.tableName=e}_p.prototype={searchTag:ul,binSearch:Gh,getTable:function(n){let e=this.font.tables[this.tableName];return!e&&n&&(e=this.font.tables[this.tableName]=this.createDefaultTable()),e},getScriptNames:function(){let n=this.getTable();return n?n.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){let n=this.getTable();if(!n)return;let e=!1;for(let t=0;t=0)return i[s].script;if(e){const r={tag:n,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return i.splice(-1-s,0,r),r.script}}},getLangSysTable:function(n,e,t){const i=this.getScriptTable(n,t);if(i){if(!e||e==="dflt"||e==="DFLT")return i.defaultLangSys;const s=ul(i.langSysRecords,e);if(s>=0)return i.langSysRecords[s].langSys;if(t){const r={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return i.langSysRecords.splice(-1-s,0,r),r.langSys}}},getFeatureTable:function(n,e,t,i){const s=this.getLangSysTable(n,e,i);if(s){let r;const a=s.featureIndexes,o=this.font.tables[this.tableName].features;for(let l=0;l=o[l-1].tag,"Features must be added in alphabetical order."),r={tag:t,feature:{params:0,lookupListIndexes:[]}},o.push(r),a.push(l),r.feature}}},getLookupTables:function(n,e,t,i,s){const r=this.getFeatureTable(n,e,t,s),a=[];if(r){let o;const l=r.lookupListIndexes,c=this.font.tables[this.tableName].lookups;for(let u=0;u=0?t:-1}case 2:{const t=Vh(n.ranges,e);return t?t.index+e-t.start:-1}}},expandCoverage:function(n){if(n.format===1)return n.glyphs;{const e=[],t=n.ranges;for(let i=0;it)s=a-1;else{r=o;break}}return r}function DS(n,e,t){let i=0,s=n.length-1;for(;i<=s;){const r=Math.floor((i+s)/2),a=n[r];if(a[e]t)s=r-1;else return r}return-1}function IS(n,e,t){let i=0,s=n.length;const r=(a,o)=>a[e]-o[e];for(;i>>1;r(n[a],t)<0?i=a+1:s=a}return n.splice(i,0,t),i}function bp(n){return n[0]===31&&n[1]===139&&n[2]===8}function US(n){const e=new DataView(n.buffer,n.byteOffset,n.byteLength);let t=10;const i=n.byteLength-8,s=e.getInt8(3);if(s&4&&(t+=2+e.getUint16(t,!0)),s&8)for(;t=i)throw new Error("Can't find compressed blocks");const r=e.getUint32(e.byteLength-4,!0);return Id(n.subarray(t,i),new Uint8Array(r))}function Wh(n){return{x:n.x,y:n.y,onCurve:n.onCurve,lastPointOfContour:n.lastPointOfContour}}function OS(n){return{glyphIndex:n.glyphIndex,xScale:n.xScale,scale01:n.scale01,scale10:n.scale10,yScale:n.yScale,dx:n.dx,dy:n.dy}}function gn(n){_o.call(this,n,"gsub")}function nu(n,e,t){const i=n.subtables;for(let s=0;s1,'Multiple: "by" must be an array of two or more ids');const s=this.getLookupTables(t,i,n,2,!0)[0],r=nu(s,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});Ne.assert(r.coverage.format===1,"Multiple: unable to modify coverage table format "+r.coverage.format);const a=e.sub;let o=this.binSearch(r.coverage.glyphs,a);o<0&&(o=-1-o,r.coverage.glyphs.splice(o,0,a),r.sequences.splice(o,0,0)),r.sequences[o]=e.by};gn.prototype.addAlternate=function(n,e,t,i){const s=this.getLookupTables(t,i,n,3,!0)[0],r=nu(s,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});Ne.assert(r.coverage.format===1,"Alternate: unable to modify coverage table format "+r.coverage.format);const a=e.sub;let o=this.binSearch(r.coverage.glyphs,a);o<0&&(o=-1-o,r.coverage.glyphs.splice(o,0,a),r.alternateSets.splice(o,0,0)),r.alternateSets[o]=e.by};gn.prototype.addLigature=function(n,e,t,i){const s=this.getLookupTables(t,i,n,4,!0)[0];let r=s.subtables[0];r||(r={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},s.subtables[0]=r),Ne.assert(r.coverage.format===1,"Ligature: unable to modify coverage table format "+r.coverage.format);const a=e.sub[0],o=e.sub.slice(1),l={ligGlyph:e.by,components:o};let c=this.binSearch(r.coverage.glyphs,a);if(c>=0){const u=r.ligatureSets[c];for(let f=0;fco(e,"raw")):co(n,"raw")}fillPalette(n,e=[],t=this.cpal().numPaletteEntries){return n=Number.isInteger(n)?this.get(n,"raw"):n,Object.assign(Array(t).fill(this.defaultValue),this.toCPALcolor(n).concat(this.toCPALcolor(e)))}extend(n){if(this.ensureCPAL(Array(n).fill(this.defaultValue)))return;const e=this.cpal(),t=e.numPaletteEntries+n,i=this.getAll().map(s=>this.fillPalette(s,[],t));e.numPaletteEntries=t,e.colorRecords=this.toCPALcolor(i.flat()),this.updateIndices()}get(n,e="hexa"){return this.getAll(e)[n]||null}getColor(n,e=0,t="hexa"){return Jc(this.font,n,e,t)}setColor(n,e,t=0){n=parseInt(n),t=parseInt(t);let i=this.getAll("raw"),s=i[t];if(!s)throw Error(`paletteIndex ${t} out of range`);const r=this.cpal(),a=r.numPaletteEntries;Array.isArray(e)||(e=[e]),e.length+n>a&&(this.extend(e.length+n-a),i=this.getAll("raw"),s=i[t]);for(let o=0;ot?this.extend(n.length-t):n.lengtht.numPaletteEntries-1)throw Error(`Replacement index out of range: numPaletteEntries after deletion: ${t.numPaletteEntries-1}, replacementIndex: ${e})`);for(let o=0;of!==n);s.push(c)}const r=this.font.tables.colr;if(r){const o=r.layerRecords;for(let l=0;ln)o[l].paletteIndex-=1;else if(c===n){let u=0;for(let f=0;fn&&e<=n+i[f].length){u++;break}o[l].paletteIndex=e-u}}this.font.tables.colr={...r,layerRecords:o}}const a=s.flat();for(let o=0;oi.length?t=i.length:t<0&&(t=i.length+1+t%(i.length+1),t>=i.length+1&&(t-=i.length+1));const s=[];for(let r=0;r({glyphID:s.glyph.index,paletteIndex:r===e?t:s.paletteIndex})),this.updateColrTable(n,i)):console.error("Invalid layer index")}remove(n,e,t=e){let i=this.get(n);i=i.map(s=>({glyphID:s.glyph.index,paletteIndex:s.paletteIndex})),i.splice(e,t-e+1),this.updateColrTable(n,i)}updateColrTable(n,e){this.ensureCOLR();const i=this.font.tables.colr;let s=DS(i.baseGlyphRecords,"glyphID",n);if(s===-1){const u={glyphID:n,firstLayerIndex:i.layerRecords.length,numLayers:0};s=IS(i.baseGlyphRecords,"glyphID",u)}const a=i.baseGlyphRecords[s],o=a.numLayers,l=e.length,c=l-o;if(c>0){const u=e.slice(o).map(f=>({glyphID:f.glyphID,paletteIndex:f.paletteIndex}));i.layerRecords.splice(a.firstLayerIndex+o,0,...u)}else c<0&&i.layerRecords.splice(a.firstLayerIndex+l,-c);for(let u=0;u{if(s.image=r,typeof this.font.onGlyphUpdated=="function")try{this.font.onGlyphUpdated(n)}catch(a){console.error("font.onGlyphUpdated",n,a)}}),i.images.set(n,s)),s}};function BS(n){return{template:zS(n).then(WS),images:new Map}}function HS(n,e,t){return{promise:e.then(i=>{let s;typeof i=="string"?s=i:(i[4]=t,s=i.join(""));const r=XS(s,n.unitsPerEm);return r.image.decode().then(()=>r)}),image:void 0}}var zS=typeof DecompressionStream=="function"?VS:GS;function GS(n){try{return Promise.resolve(new TextDecoder().decode(bp(n)?US(n):n))}catch(e){return Promise.reject(e)}}function VS(n){if(bp(n))return new Response(new Response(n).body.pipeThrough(new DecompressionStream("gzip"))).text();try{return Promise.resolve(new TextDecoder().decode(n))}catch(e){return Promise.reject(e)}}function WS(n){const e=n.indexOf("",e+4)+1;if(/ id=['"]glyph\d+['"]/.test(n.substring(e,t)))return n;const i=n.lastIndexOf("");return[n.substring(0,t),"",n.substring(t,i),'',n.substring(i)]}function XS(n,e){const i=new DOMParser().parseFromString(n,"image/svg+xml").documentElement,s=i.viewBox.baseVal,r=i.width.baseVal,a=i.height.baseVal;let o=1,l=1;s.width>0&&s.height>0&&(r.unitType===1?(o=r.valueInSpecifiedUnits/s.width,l=a.unitType===1?a.valueInSpecifiedUnits/s.height:o):a.unitType===1?(l=a.valueInSpecifiedUnits/s.height,o=l):e&&(o=e/s.width,l=e/s.height));const c=document.createElement("div");c.style.position="fixed",c.style.visibility="hidden",c.appendChild(i),document.body.appendChild(c);const u=i.getBBox();document.body.removeChild(c);const f=(u.x-s.x)*o,h=(s.y-u.y)*l,d=u.width*o,p=u.height*l;i.setAttribute("viewBox",[u.x,u.y,u.width,u.height].join(" ")),o!==1&&i.setAttribute("width",d),l!==1&&i.setAttribute("height",p);const x=new Image(d,p);return x.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(i.outerHTML),{leftSideBearing:f,baseline:h,image:x}}var hl=new WeakMap;function Xh(n,e,t,i,s){let r;return(e&i)>0?(r=n.parseByte(),e&s||(r=-r),r=t+r):(e&s)>0?r=t:r=t+n.parseShort(),r}function Mp(n,e,t){const i=new Te.Parser(e,t);n._numberOfContours=i.parseShort(),n._xMin=i.parseShort(),n._yMin=i.parseShort(),n._xMax=i.parseShort(),n._yMax=i.parseShort();let s,r;if(n._numberOfContours>0){const a=n.endPointIndices=[];for(let l=0;l0){const c=i.parseByte();for(let u=0;u0){const l=[];let c;if(o>0){for(let h=0;h=0,l.push(c);let u=0;for(let h=0;h0?(s&2)>0?(o.dx=i.parseShort(),o.dy=i.parseShort()):o.matchedPoints=[i.parseUShort(),i.parseUShort()]:(s&2)>0?(o.dx=i.parseChar(),o.dy=i.parseChar()):o.matchedPoints=[i.parseByte(),i.parseByte()],(s&8)>0?o.xScale=o.yScale=i.parseF2Dot14():(s&64)>0?(o.xScale=i.parseF2Dot14(),o.yScale=i.parseF2Dot14()):(s&128)>0&&(o.xScale=i.parseF2Dot14(),o.scale01=i.parseF2Dot14(),o.scale10=i.parseF2Dot14(),o.yScale=i.parseF2Dot14()),n.components.push(o),a=!!(s&32)}if(s&256){n.instructionLength=i.parseUShort(),n.instructions=[];for(let o=0;oe.points.length-1||s.matchedPoints[1]>r.points.length-1)throw Error("Matched points out of range in "+e.name);const o=e.points[s.matchedPoints[0]];let l=r.points[s.matchedPoints[1]];const c={xScale:s.xScale,scale01:s.scale01,scale10:s.scale10,yScale:s.yScale,dx:0,dy:0};l=za([l],c)[0],c.dx=o.x-l.x,c.dy=o.y-l.y,a=za(r.points,c)}e.points=e.points.concat(a)}}}finally{t.delete(e.index)}}return iu(e.points)}function qS(n,e,t,i){const s=new jn.GlyphSet(i);for(let r=0;r=1&&e[t]r)continue;let o=i,l=i;for(i++;i<=r;)t[i]&&(this.deltaInterpolate(l+1,i-1,l,i,e,n),l=i),i++;l===o?this.deltaShift(s,r,l,e,n):(this.deltaInterpolate(l+1,r,l,o,e,n),o>0&&this.deltaInterpolate(s,o-1,l,o,e,n)),i=r+1}}deltaInterpolate(n,e,t,i,s,r){if(n>e)return;let a=["x","y"];for(let l=0;ls[i][c]){var o=t;t=i,i=o}let u=s[t][c],f=s[i][c],h=r[t][c],d=r[i][c];if(u!==f||h===d){let p=u===f?0:(d-h)/(f-u);for(let x=n;x<=e;x++){let m=s[x][c];m<=u?m+=h-u:m>=f?m+=d-f:m=h+(m-u)*p,r[x][c]=m}}}}deltaShift(n,e,t,i,s){let r=s[t].x-i[t].x,a=s[t].y-i[t].y;if(!(r===0&&a===0))for(let o=n;o<=e;o++)o!==t&&(s[o].x+=r,s[o].y+=a)}transformComponents(n,e,t,i,s,r){let a=0;for(let o=0;o-1&&(u.dx+=Math.round(s.deltas[f]*r),u.dy+=Math.round(s.deltasY[f]*r));const h=za(this.getTransform(c,t).points,u);e.splice(a,h.length,...h),a+=c.points.length}}applyTupleVariationStore(n,e,t,i="gvar",s={}){t||(t=this.font.variation.get());const r=this.getNormalizedCoords(t),{headers:a,sharedPoints:o}=n,l=this.fvar().axes.length;let c;i==="gvar"?c=e.map(Wh):i==="cvar"&&(c=[...e]);for(let u=0;uf.intermediateEndTuple[p]){h=0;break}else r[p]Math.max(0,x[p])){h=0;break}h=(h*r[p]+Number.EPSILON)/(x[p]+Number.EPSILON)}}}if(h===0)continue;const d=f.privatePoints.length?f.privatePoints:o;if(i==="gvar"&&s.glyph&&s.glyph.isComposite)this.transformComponents(s.glyph,c,t,d,f,h);else if(d.length===0)for(let p=0;p=o&&(l=o-1),{outerIndex:s,innerIndex:r}=a[t].map[l]}else s=0,r=n;return this.getDelta(a.itemVariationStore,s,r,i)}getDelta(n,e,t,i){if(e>=n.itemVariationSubtables.length)return 0;let s=n.itemVariationSubtables[e];if(t>=s.deltaSets.length)return 0;let r=s.deltaSets[t],a=this.getBlendVector(n,e,i),o=0;for(let l=0;lf.peakCoord||f.peakCoord>f.endCoord||f.startCoord<0&&f.endCoord>0&&f.peakCoord!==0||f.peakCoord===0?h=1:s[u]f.endCoord?h=0:s[u]===f.peakCoord?h=1:s[u]-1?this.set(n):this.set(this.getDefaultCoordinates())}getDefaultCoordinates(){return this.fvar().axes.reduce((n,e)=>(n[e.tag]=e.defaultValue,n),{})}getDefaultInstanceIndex(){const n=this.getDefaultCoordinates();let e=this.getInstanceIndex(n);return e<0&&(e=this.fvar().instances.findIndex(t=>t.name&&t.name.en==="Regular")),e}getInstanceIndex(n){return this.fvar().instances.findIndex(e=>Object.keys(n).every(t=>e.coordinates[t]===n[t]))}getInstance(n){return this.fvar().instances&&this.fvar().instances[n]}set(n){let e;if(Number.isInteger(n)){const t=this.getInstance(n);if(!t)throw Error(`Invalid instance index ${n}`);e={...t.coordinates}}else e=n,this.process.normalizeCoordTags(e);e=Object.assign({},this.font.defaultRenderOptions.variation,e),this.font.defaultRenderOptions=Object.assign({},this.font.defaultRenderOptions,{variation:e})}get(){return Object.assign({},this.font.defaultRenderOptions.variation)}avar(){return this.font.tables.avar}cvar(){return this.font.tables.cvar}fvar(){return this.font.tables.fvar}gvar(){return this.font.tables.gvar}hvar(){return this.font.tables.hvar}},Yh=1e6,ho=64,fo=1e4,Ap,ss,wp,Ac;function Cp(n){this.font=n,this.getCommands=function(e){return Tp.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function jS(n){return n}function Rp(n){return Math.sign(n)*Math.round(Math.abs(n))}function QS(n){return Math.sign(n)*Math.round(Math.abs(n*2))/2}function eM(n){return Math.sign(n)*(Math.round(Math.abs(n)+.5)-.5)}function tM(n){return Math.sign(n)*Math.ceil(Math.abs(n))}function nM(n){return Math.sign(n)*Math.floor(Math.abs(n))}var Pp=function(n){const e=this.srPeriod;let t=this.srPhase;const i=this.srThreshold;let s=1;return n<0&&(n=-n,s=-1),n+=i-t,n=Math.trunc(n/e)*e,n+=t,n<0?t*s:n*s},Zn={x:1,y:0,axis:"x",distance:function(n,e,t,i){return(t?n.xo:n.x)-(i?e.xo:e.x)},interpolate:function(n,e,t,i){let s,r,a,o,l,c,u;if(!i||i===this){if(s=n.xo-e.xo,r=n.xo-t.xo,l=e.x-e.xo,c=t.x-t.xo,a=Math.abs(s),o=Math.abs(r),u=a+o,u===0){n.x=n.xo+(l+c)/2;return}n.x=n.xo+(l*o+c*a)/u;return}if(s=i.distance(n,e,!0,!0),r=i.distance(n,t,!0,!0),l=i.distance(e,e,!1,!0),c=i.distance(t,t,!1,!0),a=Math.abs(s),o=Math.abs(r),u=a+o,u===0){Zn.setRelative(n,n,(l+c)/2,i,!0);return}Zn.setRelative(n,n,(l*o+c*a)/u,i,!0)},normalSlope:Number.NEGATIVE_INFINITY,setRelative:function(n,e,t,i,s){if(!i||i===this){n.x=(s?e.xo:e.x)+t;return}const r=s?e.xo:e.x,a=s?e.yo:e.y,o=r+t*i.x,l=a+t*i.y;n.x=o+(n.y-l)/i.normalSlope},slope:0,touch:function(n){n.xTouched=!0},touched:function(n){return n.xTouched},untouch:function(n){n.xTouched=!1}},ci={x:0,y:1,axis:"y",distance:function(n,e,t,i){return(t?n.yo:n.y)-(i?e.yo:e.y)},interpolate:function(n,e,t,i){let s,r,a,o,l,c,u;if(!i||i===this){if(s=n.yo-e.yo,r=n.yo-t.yo,l=e.y-e.yo,c=t.y-t.yo,a=Math.abs(s),o=Math.abs(r),u=a+o,u===0){n.y=n.yo+(l+c)/2;return}n.y=n.yo+(l*o+c*a)/u;return}if(s=i.distance(n,e,!0,!0),r=i.distance(n,t,!0,!0),l=i.distance(e,e,!1,!0),c=i.distance(t,t,!1,!0),a=Math.abs(s),o=Math.abs(r),u=a+o,u===0){ci.setRelative(n,n,(l+c)/2,i,!0);return}ci.setRelative(n,n,(l*o+c*a)/u,i,!0)},normalSlope:0,setRelative:function(n,e,t,i,s){if(!i||i===this){n.y=(s?e.yo:e.y)+t;return}const r=s?e.xo:e.x,a=s?e.yo:e.y,o=r+t*i.x,l=a+t*i.y;n.y=l+i.normalSlope*(n.x-o)},slope:Number.POSITIVE_INFINITY,touch:function(n){n.yTouched=!0},touched:function(n){return n.yTouched},untouch:function(n){n.yTouched=!1}};Object.freeze(Zn);Object.freeze(ci);function kr(n,e){this.x=n,this.y=e,this.axis=void 0,this.slope=e/n,this.normalSlope=-n/e,Object.freeze(this)}kr.prototype.distance=function(n,e,t,i){return this.x*Zn.distance(n,e,t,i)+this.y*ci.distance(n,e,t,i)};kr.prototype.interpolate=function(n,e,t,i){let s,r,a,o,l,c,u;if(a=i.distance(n,e,!0,!0),o=i.distance(n,t,!0,!0),s=i.distance(e,e,!1,!0),r=i.distance(t,t,!1,!0),l=Math.abs(a),c=Math.abs(o),u=l+c,u===0){this.setRelative(n,n,(s+r)/2,i,!0);return}this.setRelative(n,n,(s*c+r*l)/u,i,!0)};kr.prototype.setRelative=function(n,e,t,i,s){i=i||this;const r=s?e.xo:e.x,a=s?e.yo:e.y,o=r+t*i.x,l=a+t*i.y,c=i.normalSlope,u=this.slope,f=n.x,h=n.y;n.x=(u*f-c*o+l-h)/(u-c),n.y=u*(n.x-f)+h};kr.prototype.touch=function(n){n.xTouched=!0,n.yTouched=!0};function Br(n,e){const t=Math.sqrt(n*n+e*e);return n/=t,e/=t,n===1&&e===0?Zn:n===0&&e===1?ci:new kr(n,e)}function pi(n,e,t,i){this.x=this.xo=Math.round(n*64)/64,this.y=this.yo=Math.round(e*64)/64,this.lastPointOfContour=t,this.onCurve=i,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}pi.prototype.nextTouched=function(n){let e=this.nextPointOnContour;for(;!n.touched(e)&&e!==this;)e=e.nextPointOnContour;return e};pi.prototype.prevTouched=function(n){let e=this.prevPointOnContour;for(;!n.touched(e)&&e!==this;)e=e.prevPointOnContour;return e};var Dr=Object.freeze(new pi(0,0)),iM={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function Ui(n,e){switch(this.env=n,this.stack=[],this.prog=e,n){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Zn,this.round=Rp}}Cp.prototype.exec=function(n,e){if(typeof e!="number")throw new Error("Point size is not a number!");if(this._errorState>2)return;const t=this.font;let i=this._prepState;if(!i||i.ppem!==e){let s=this._fpgmState;if(!s){Ui.prototype=iM,s=this._fpgmState=new Ui("fpgm",t.tables.fpgm),s.funcs=[],s.font=t,s.instructionCount=0,s.callDepth=0;try{ss(s)}catch(a){console.log("Hinting error in FPGM:"+a),this._errorState=3;return}}Ui.prototype=s,i=this._prepState=new Ui("prep",t.tables.prep),i.ppem=e,i.instructionCount=0,i.callDepth=0;const r=t.variation&&t.variation.process.getCvarTransform()||t.tables.cvt;if(r){const a=i.cvt=new Array(r.length),o=e/t.unitsPerEm;for(let l=0;l1))try{return wp(n,i)}catch(s){this._errorState<1&&(console.log("Hinting error:"+s),console.log("Note: further hinting errors are silenced")),this._errorState=1;return}};wp=function(n,e){const t=e.ppem/e.font.unitsPerEm,i=t;let s=n.components,r,a,o;if(Ui.prototype=e,!s)o=new Ui("glyf",n.instructions),o.instructionCount=0,o.callDepth=0,Ac(n,o,t,i),a=o.gZone;else{const l=e.font;a=[],r=[];for(let c=0;cYh)throw new Error("Hinting instructions exceeded maximum of "+Yh);if(i=Ap[e[n.ip]],!i)throw new Error("unknown instruction: 0x"+Number(e[n.ip]).toString(16));i(n)}};function bo(n){const e=n.tZone=new Array(n.gZone.length);for(let t=0;t=176&&r<=183)i+=r-176+1;else if(r>=184&&r<=191)i+=(r-184+1)*2;else if(e&&s===1&&r===27)break;while(s>0);n.ip=i}function qh(n,e){e.fv=e.pv=e.dpv=n}function $h(n,e){e.pv=e.dpv=n}function Zh(n,e){e.fv=n}function Kh(n,e){const t=e.stack,i=t.pop(),s=t.pop(),r=e.z2[i],a=e.z1[s];let o,l;n?(o=r.y-a.y,l=a.x-r.x):(o=a.x-r.x,l=a.y-r.y),e.pv=e.dpv=Br(o,l)}function Jh(n,e){const t=e.stack,i=t.pop(),s=t.pop(),r=e.z2[i],a=e.z1[s];let o,l;n?(o=r.y-a.y,l=a.x-r.x):(o=a.x-r.x,l=a.y-r.y),e.fv=Br(o,l)}function sM(n){const e=n.stack,t=e.pop(),i=e.pop();n.pv=n.dpv=Br(i,t)}function rM(n){const e=n.stack,t=e.pop(),i=e.pop();n.fv=Br(i,t)}function aM(n){const e=n.stack,t=n.pv;e.push(t.x*16384),e.push(t.y*16384)}function oM(n){const e=n.stack,t=n.fv;e.push(t.x*16384),e.push(t.y*16384)}function lM(n){n.fv=n.pv}function cM(n){const e=n.stack,t=e.pop(),i=e.pop(),s=e.pop(),r=e.pop(),a=e.pop(),o=n.z0,l=n.z1,c=o[t],u=o[i],f=l[s],h=l[r],d=n.z2[a],p=c.x,x=c.y,m=u.x,g=u.y,M=f.x,E=f.y,_=h.x,T=h.y,b=(p-m)*(E-T)-(x-g)*(M-_),S=p*g-x*m,v=M*T-E*_;d.x=(S*(M-_)-v*(p-m))/b,d.y=(S*(E-T)-v*(x-g))/b}function uM(n){n.rp0=n.stack.pop()}function hM(n){n.rp1=n.stack.pop()}function fM(n){n.rp2=n.stack.pop()}function dM(n){const e=n.stack.pop();switch(n.zp0=e,e){case 0:n.tZone||bo(n),n.z0=n.tZone;break;case 1:n.z0=n.gZone;break;default:throw new Error("Invalid zone pointer")}}function pM(n){const e=n.stack.pop();switch(n.zp1=e,e){case 0:n.tZone||bo(n),n.z1=n.tZone;break;case 1:n.z1=n.gZone;break;default:throw new Error("Invalid zone pointer")}}function mM(n){const e=n.stack.pop();switch(n.zp2=e,e){case 0:n.tZone||bo(n),n.z2=n.tZone;break;case 1:n.z2=n.gZone;break;default:throw new Error("Invalid zone pointer")}}function gM(n){const e=n.stack.pop();switch(n.zp0=n.zp1=n.zp2=e,e){case 0:n.tZone||bo(n),n.z0=n.z1=n.z2=n.tZone;break;case 1:n.z0=n.z1=n.z2=n.gZone;break;default:throw new Error("Invalid zone pointer")}}function xM(n){n.loop=n.stack.pop(),n.loop>fo&&(n.loop=fo)}function vM(n){n.round=Rp}function yM(n){n.round=eM}function _M(n){const e=n.stack.pop();n.minDis=e/64}function bM(n){Lp(n,!1)}function SM(n){const e=n.stack.pop();n.ip+=e-1}function MM(n){const e=n.stack.pop();n.cvCutIn=e/64}function EM(n){const e=n.stack;e.push(e[e.length-1])}function fl(n){n.stack.pop()}function TM(n){n.stack.length=0}function AM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t),e.push(i)}function wM(n){const e=n.stack;e.push(e.length)}function CM(n){const e=n.stack,t=e.pop();let i=e.pop();if(i>fo&&(i=fo),++n.callDepth>ho)throw new Error("Hinting call depth exceeded maximum of "+ho);const s=n.ip,r=n.prog;n.prog=n.funcs[t];for(let a=0;aho)throw new Error("Hinting call depth exceeded maximum of "+ho);const t=n.ip,i=n.prog;n.prog=n.funcs[e],ss(n),n.ip=t,n.prog=i,n.callDepth--}function PM(n){const e=n.stack,t=e.pop();e.push(e[e.length-t])}function LM(n){const e=n.stack,t=e.pop();e.push(e.splice(e.length-t,1)[0])}function DM(n){if(n.env!=="fpgm")throw new Error("FDEF not allowed here");const e=n.stack,t=n.prog;let i=n.ip;const s=e.pop(),r=i;for(;t[++i]!==45;);n.ip=i,n.funcs[s]=t.slice(r+1,i)}function jh(n,e){const t=e.stack.pop(),i=e.z0[t],s=e.fv,r=e.pv;let a=r.distance(i,Dr);n&&(a=e.round(a)),s.setRelative(i,Dr,a,r),s.touch(i),e.rp0=e.rp1=t}function Qh(n,e){const t=e.z2,i=t.length-2;let s,r,a;for(let o=0;ot?1:0)}function $M(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i>=t?1:0)}function ZM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t===i?1:0)}function KM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t!==i?1:0)}function JM(n){const e=n.stack,t=e.pop();e.push(Math.trunc(t)&1?1:0)}function jM(n){const e=n.stack,t=e.pop();e.push(Math.trunc(t)&1?0:1)}function QM(n){n.stack.pop()||Lp(n,!0)}function eE(n){}function tE(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t&&i?1:0)}function nE(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t||i?1:0)}function iE(n){const e=n.stack,t=e.pop();e.push(t?0:1)}function dl(n,e){const t=e.stack,i=t.pop(),s=e.fv,r=e.pv,a=e.ppem,o=e.deltaBase+(n-1)*16,l=e.deltaShift,c=e.z0;for(let u=0;u>4)!==a)continue;let p=(h&15)-8;p>=0&&p++;const x=c[f];s.setRelative(x,x,p*l,r)}}function sE(n){const t=n.stack.pop();n.deltaBase=t}function rE(n){const t=n.stack.pop();n.deltaShift=Math.pow(.5,t)}function aE(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i+t)}function oE(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i-t)}function lE(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i*64/t)}function cE(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i*t/64)}function uE(n){const e=n.stack,t=e.pop();e.push(Math.abs(t))}function hE(n){const e=n.stack;let t=e.pop();e.push(-t)}function fE(n){const e=n.stack,t=e.pop();e.push(Math.floor(t/64)*64)}function dE(n){const e=n.stack,t=e.pop();e.push(Math.ceil(t/64)*64)}function wa(n,e){const t=e.stack,i=t.pop();t.push(e.round(i/64)*64)}function pE(n){const e=n.stack,t=e.pop(),i=e.pop();n.cvt[i]=t*n.ppem/n.font.unitsPerEm}function pl(n,e){const t=e.stack,i=t.pop(),s=e.ppem,r=e.deltaBase+(n-1)*16,a=e.deltaShift;for(let o=0;o>4)!==s)continue;let f=(c&15)-8;f>=0&&f++;const h=f*a;e.cvt[l]+=h}}function mE(n){let e=n.stack.pop();n.round=Pp;let t;switch(e&192){case 0:t=.5;break;case 64:t=1;break;case 128:t=2;break;default:throw new Error("invalid SROUND value")}switch(n.srPeriod=t,e&48){case 0:n.srPhase=0;break;case 16:n.srPhase=.25*t;break;case 32:n.srPhase=.5*t;break;case 48:n.srPhase=.75*t;break;default:throw new Error("invalid SROUND value")}e&=15,e===0?n.srThreshold=0:n.srThreshold=(e/8-.5)*t}function gE(n){let e=n.stack.pop();n.round=Pp;let t;switch(e&192){case 0:t=Math.sqrt(2)/2;break;case 64:t=Math.sqrt(2);break;case 128:t=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(n.srPeriod=t,e&48){case 0:n.srPhase=0;break;case 16:n.srPhase=.25*t;break;case 32:n.srPhase=.5*t;break;case 48:n.srPhase=.75*t;break;default:throw new Error("invalid S45ROUND value")}e&=15,e===0?n.srThreshold=0:n.srThreshold=(e/8-.5)*t}function xE(n){n.round=jS}function vE(n){n.round=tM}function yE(n){n.round=nM}function _E(n){n.stack.pop()}function lf(n,e){const t=e.stack,i=t.pop(),s=t.pop(),r=e.z2[i],a=e.z1[s];let o,l;n?(o=r.y-a.y,l=a.x-r.x):(o=a.x-r.x,l=a.y-r.y),e.dpv=Br(o,l)}function bE(n){const e=n.stack,t=e.pop();let i=0;t&1&&(i=35),t&32&&(i|=4096),e.push(i)}function SE(n){const e=n.stack,t=e.pop(),i=e.pop(),s=e.pop();e.push(i),e.push(t),e.push(s)}function ME(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(Math.max(i,t))}function EE(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(Math.min(i,t))}function TE(n){n.stack.pop()}function AE(n){const e=n.stack.pop();let t=n.stack.pop();switch(e){case 1:n.inhibitGridFit=!!t;return;case 2:n.ignoreCvt=!!t;return;default:throw new Error("invalid INSTCTRL[] selector")}}function wi(n,e){const t=e.stack,i=e.prog;let s=e.ip;for(let r=0;r=0?1:-1,x=Math.abs(x),n&&(g=r.cvt[o],i&&Math.abs(x-g)=0&&nthis[s[0]].apply(this,s.slice(1).concat(!0))),i=s=>typeof s=="object"&&Object.prototype.hasOwnProperty.call(s,"FAIL");if(t.every(i))return{FAIL:"composeRUD: one or more operations hasn't completed successfully",report:t.filter(i)};this.dispatch("composeRUD",[t.filter(s=>!i(s))])};Rt.prototype.replaceRange=function(n,e,t,i){e=e!==null?e:this.tokens.length;const s=t.every(r=>r instanceof er);if(!isNaN(n)&&this.inboundIndex(n)&&s){const r=this.tokens.splice.apply(this.tokens,[n,e].concat(t));return i||this.dispatch("replaceToken",[n,e,t]),[r,t]}else return{FAIL:"replaceRange: invalid tokens or startIndex."}};Rt.prototype.replaceToken=function(n,e,t){if(!isNaN(n)&&this.inboundIndex(n)&&e instanceof er){const i=this.tokens.splice(n,1,e);return t||this.dispatch("replaceToken",[n,e]),[i[0],e]}else return{FAIL:"replaceToken: invalid token or index."}};Rt.prototype.removeRange=function(n,e,t){e=isNaN(e)?this.tokens.length:e;const i=this.tokens.splice(n,e);return t||this.dispatch("removeRange",[i,n,e]),i};Rt.prototype.removeToken=function(n,e){if(!isNaN(n)&&this.inboundIndex(n)){const t=this.tokens.splice(n,1);return e||this.dispatch("removeToken",[t,n]),t}else return{FAIL:"removeToken: invalid token index."}};Rt.prototype.insertToken=function(n,e,t){return n.every(s=>s instanceof er)?(this.tokens.splice.apply(this.tokens,[e,0].concat(n)),t||this.dispatch("insertToken",[n,e]),n):{FAIL:"insertToken: invalid token(s)."}};Rt.prototype.registerModifier=function(n,e,t){this.events.newToken.subscribe(function(i,s){const r=[i,s],a=e===null||e.apply(this,r)===!0,o=[i,s];if(a){let l=t.apply(this,o);i.setState(n,l)}}),this.registeredModifiers.push(n)};So.prototype.subscribe=function(n){return typeof n=="function"?this.subscribers.push(n)-1:{FAIL:`invalid '${this.eventId}' event handler`}};So.prototype.unsubscribe=function(n){this.subscribers.splice(n,1)};rn.prototype.setCurrentIndex=function(n){this.index=n,this.current=this.context[n],this.backtrack=this.context.slice(0,n),this.lookahead=this.context.slice(n+1)};rn.prototype.get=function(n){switch(!0){case n===0:return this.current;case(n<0&&Math.abs(n)<=this.backtrack.length):return this.backtrack.slice(n)[0];case(n>0&&n<=this.lookahead.length):return this.lookahead[n-1];default:return null}};Rt.prototype.rangeToText=function(n){if(n instanceof su)return this.getRangeTokens(n).map(e=>e.char).join("")};Rt.prototype.getText=function(){return this.tokens.map(n=>n.char).join("")};Rt.prototype.getContext=function(n){let e=this.registeredContexts[n];return e||null};Rt.prototype.on=function(n,e){const t=this.events[n];return t?t.subscribe(e):null};Rt.prototype.dispatch=function(n,e){const t=this.events[n];if(t instanceof So)for(let i=0;ie.char);for(let e=0;e=s.start&&n<=s.end){let r=n-s.start;return s.index+r}}break}default:return-1}return-1}function DE(n,e){return Hi(n,e.coverage)===-1?null:n+e.deltaGlyphId}function IE(n,e){let t=Hi(n,e.coverage);return t===-1?null:e.substitute[t]}function ml(n,e){let t=[];for(let i=0;i{const{lookupListIndex:f,sequenceIndex:h}=u,{subtables:d}=this.getLookupByIndex(f);for(const p of d)Hi(c[h],p.coverage)!==-1&&(c[h]=p.deltaGlyphId)};for(let c=0;ci.features[s]),this.features[n]=e,this.mapTagsToFeatures(e,n),e};xn.prototype.getSubstitutionType=function(n,e){const t=n.lookupType.toString(),i=e.substFormat.toString();return t+i};xn.prototype.getLookupMethod=function(n,e){let t=this.getSubstitutionType(n,e);switch(t){case"11":return i=>DE.apply(this,[i,e]);case"12":return i=>IE.apply(this,[i,e]);case"63":return i=>UE.apply(this,[i,e]);case"41":return i=>OE.apply(this,[i,e]);case"21":return i=>kE.apply(this,[i,e]);case"51":return i=>FE.apply(this,[i,e]);case"53":return i=>NE.apply(this,[i,e]);default:throw new Error(`substitutionType : ${t} lookupType: ${n.lookupType} - substFormat: ${e.substFormat} is not yet supported`)}};xn.prototype.lookupFeature=function(n){let e=n.contextParams,t=e.index;const i=this.getFeature({tag:n.tag,script:n.script});if(!i)return new Error(`font '${(this.font.names.unicode||this.font.names.windows||this.font.names.macintosh).fullName.en}' doesn't support feature '${n.tag}' for script '${n.script}'.`);const s=this.getFeatureLookups(i),r=[].concat(e.context);for(let a=0;ai.tag===n.tag);return e&&t};xn.prototype.getLookupSubtables=function(n){return n.subtables||null};xn.prototype.getLookupByIndex=function(n){return this.font.tables.gsub.lookups[n]||null};xn.prototype.getFeatureLookups=function(n){return n.lookupListIndexes.map(this.getLookupByIndex.bind(this))};xn.prototype.getFeature=function(e){if(!this.font)return{FAIL:"No font was found"};Object.prototype.hasOwnProperty.call(this.features,e.script)||this.getScriptFeatures(e.script);const t=this.features[e.script];return t?t.tags[e.tag]?this.features[e.script].tags[e.tag]:null:{FAIL:`No feature for script ${e.script}`}};var BE=xn;function HE(n){const e=n.current,t=n.get(-1);return t===null&&Fi(e)||!Fi(t)&&Fi(e)}function zE(n){const e=n.get(1);return e===null||!Fi(e)}var GE={startCheck:HE,endCheck:zE};function VE(n){const e=n.current,t=n.get(-1);return(Fi(e)||Bi(e))&&!Fi(t)}function WE(n){const e=n.get(1);switch(!0){case e===null:return!0;case(!Fi(e)&&!Bi(e)):{const t=LE(e);if(!t)return!0;if(t){let i=!1;if(i=n.lookahead.some(s=>Fi(s)||Bi(s)),!i)return!0}break}default:return!1}}var XE={startCheck:VE,endCheck:WE};function YE(n,e,t){e[t].setState(n.tag,n.substitution)}function qE(n,e,t){e[t].setState(n.tag,n.substitution)}function gl(n,e,t){for(let i=0;i=0;t--){const i=e[t],s=Dp(i),r=Bi(i);if(!s&&!r)return!0;if(s)return!1}return!1}function JE(n){if(Dp(n.current))return!1;for(let e=0;ea.getState("glyphIndex")),0);const r=new rn(i.map(a=>a.char),0);for(let a=0;ai.activeState.value);return new rn(t,0)}function eT(n){const e="arab";let t=this.tokenizer.getRangeTokens(n),i=uf(t);for(let s=0;s1}function iT(n){return n.index===n.context.length-1}var sT={startCheck:nT,endCheck:iT};function hf(n,e){const t=n.map(i=>i.activeState.value);return new rn(t,0)}function rT(n){const e="delf",t="ccmp";let i=this.tokenizer.getRangeTokens(n),s=hf(i);for(let r=0;ri.activeState.value);return new rn(t,0)}function uT(n){const e="latn";let t=this.tokenizer.getRangeTokens(n),i=ff(t);for(let s=0;si.activeState.value);return new rn(t,e||0)}function mT(n){const e="thai";let t=this.tokenizer.getRangeTokens(n),i=df(t,0);for(let s=0;si.activeState.value);return new rn(t,e||0)}function xT(n){const e="thai";let t=this.tokenizer.getRangeTokens(n),i=pf(t,0);for(let s=0;si.activeState.value);return new rn(t,e||0)}function yT(n){const e="thai";let t=this.tokenizer.getRangeTokens(n),i=mf(t,0);for(let s=0;s=6155&&e<=6157||e>=65024&&e<=65039||e>=917760&&e<=917999}function bT(n){const e=n.current,t=n.get(1);return t===null&&wc(e)||wc(t)}function ST(n){const e=n.get(1);return e===null||!wc(e)}var MT={startCheck:bT,endCheck:ST};function ET(n){const e=this.query.font,t=this.tokenizer.getRangeTokens(n);if(t[1].setState("deleted",!0),e.tables.cmap&&e.tables.cmap.varSelectorList){const i=t[0].char.codePointAt(0),s=t[1].char.codePointAt(0),r=e.tables.cmap.varSelectorList[s];if(r!==void 0&&r.nonDefaultUVS){const a=r.nonDefaultUVS.uvsMappings;if(a[i]){const o=a[i].glyphID;e.glyphs.glyphs[o]!==void 0&&t[0].setState("glyphIndex",o)}}}}var TT=ET;function Tn(n){this.baseDir=n||"ltr",this.tokenizer=new PE,this.featuresTags={}}Tn.prototype.setText=function(n){this.text=n};Tn.prototype.contextChecks={ccmpReplacementCheck:sT,latinWordCheck:cT,arabicWordCheck:GE,arabicSentenceCheck:XE,thaiWordCheck:pT,unicodeVariationSequenceCheck:MT};function Os(n){const e=this.contextChecks[`${n}Check`];return this.tokenizer.registerContextChecker(n,e.startCheck,e.endCheck)}function AT(){return Os.call(this,"ccmpReplacement"),Os.call(this,"latinWord"),Os.call(this,"arabicWord"),Os.call(this,"arabicSentence"),Os.call(this,"thaiWord"),Os.call(this,"unicodeVariationSequence"),this.tokenizer.tokenize(this.text)}function wT(){const n=this.tokenizer.getContextRanges("arabicSentence");for(let e=0;ethis.query.supports({script:n,tag:i}));Object.prototype.hasOwnProperty.call(this.featuresTags,n)?this.featuresTags[n]=this.featuresTags[n].concat(t):this.featuresTags[n]=t};Tn.prototype.applyFeatures=function(n,e){if(!n)throw new Error("No valid font was provided to apply features");this.query||(this.query=new BE(n));for(let t=0;t0)throw new Error("When creating a new Font object, negative descender value is required.");this.names={},this.names.unicode=xl(n),this.names.macintosh=xl(n),this.names.windows=xl(n),this.unitsPerEm=n.unitsPerEm||1e3,this.ascender=n.ascender,this.descender=n.descender,this.createdTimestamp=n.createdTimestamp,this.italicAngle=n.italicAngle||0,this.weightClass=n.weightClass||0;let e=0;n.fsSelection?e=n.fsSelection:(this.italicAngle<0?e|=this.fsSelectionValues.ITALIC:this.italicAngle>0&&(e|=this.fsSelectionValues.OBLIQUE),this.weightClass>=600&&(e|=this.fsSelectionValues.BOLD),e===0&&(e=this.fsSelectionValues.REGULAR)),(!n.panose||!Array.isArray(n.panose))&&(n.panose=[0,0,0,0,0,0,0,0,0]),this.tables=Object.assign(n.tables,{os2:Object.assign({usWeightClass:n.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:n.widthClass||this.usWidthClasses.MEDIUM,bFamilyType:n.panose[0]||0,bSerifStyle:n.panose[1]||0,bWeight:n.panose[2]||0,bProportion:n.panose[3]||0,bContrast:n.panose[4]||0,bStrokeVariation:n.panose[5]||0,bArmStyle:n.panose[6]||0,bLetterform:n.panose[7]||0,bMidline:n.panose[8]||0,bXHeight:n.panose[9]||0,fsSelection:e},n.tables.os2)})}this.supported=!0,this.glyphs=new jn.GlyphSet(this,n.glyphs||[]),this.encoding=new Xd(this),this.position=new RS(this),this.substitution=new FS(this),this.tables=this.tables||{},this.tables=new Proxy(this.tables,{set:(e,t,i)=>(e[t]=i,e.fvar&&(e.gvar||e.cff2)&&!this.variation&&(this.variation=new JS(this)),!0)}),this.palettes=new Sp(this),this.layers=new NS(this),this.svgImages=new kS(this),this._push=null,this._hmtxTableData={},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:this.outlinesFormat==="truetype"?this._hinting=new wE(this):null}})}dt.prototype.hasChar=function(n){return this.encoding.charToGlyphIndex(n)>0};dt.prototype.charToGlyphIndex=function(n){return this.encoding.charToGlyphIndex(n)};dt.prototype.charToGlyph=function(n){const e=this.charToGlyphIndex(n);let t=this.glyphs.get(e);return t||(t=this.glyphs.get(0)),t};dt.prototype.updateFeatures=function(n){return this.defaultRenderOptions.features.map(e=>e.script==="latn"?{script:"latn",tags:e.tags.filter(t=>n[t])}:e)};dt.prototype.stringToGlyphIndexes=function(n,e){const t=new UT,i=r=>this.charToGlyphIndex(r.char);t.registerModifier("glyphIndex",null,i);let s=e?this.updateFeatures(e.features):this.defaultRenderOptions.features;return t.applyFeatures(this,s),t.getTextGlyphs(n)};dt.prototype.stringToGlyphs=function(n,e){const t=this.stringToGlyphIndexes(n,e);let i=t.length;const s=new Array(i),r=this.glyphs.get(0);for(let a=0;a{const u=a.getPath(o,l,c,s,this);if(s.drawSVG||s.drawLayers){const f=u._layers;if(f&&f.length){for(let h=0;h0,"No English "+s+" specified.")}if(i("fontFamily"),i("weightName"),i("manufacturer"),i("copyright"),i("version"),t(this.unitsPerEm>0,"No unitsPerEm specified."),this.tables.colr){const s=this.tables.colr.baseGlyphRecords;let r=-1;for(let a=0;as[a].glyphID)break;r=o}}return n};dt.prototype.toTables=function(){return CS.fontToTable(this)};dt.prototype.toBuffer=function(){return console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead."),this.toArrayBuffer()};dt.prototype.toArrayBuffer=function(){const e=this.toTables().encode(),t=new ArrayBuffer(e.length),i=new Uint8Array(t);for(let s=0;s=1.2&&(s.markGlyphSets=t.parsePointer(VT)),s}var XT={parse:WT},On=new Array(10);On[1]=function(){const e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{posFormat:1,coverage:this.parsePointer(q.coverage),value:this.parseValueRecord()};if(t===2)return{posFormat:2,coverage:this.parsePointer(q.coverage),values:this.parseValueRecordList()};Ne.assert(!1,"0x"+e.toString(16)+": GPOS lookup type 1 format must be 1 or 2.")};On[2]=function(){const e=this.offset+this.relativeOffset,t=this.parseUShort();Ne.assert(t===1||t===2,"0x"+e.toString(16)+": GPOS lookup type 2 format must be 1 or 2.");const i=this.parsePointer(q.coverage),s=this.parseUShort(),r=this.parseUShort();if(t===1)return{posFormat:t,coverage:i,valueFormat1:s,valueFormat2:r,pairSets:this.parseList(q.pointer(q.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(s),value2:this.parseValueRecord(r)}})))};if(t===2){const a=this.parsePointer(q.classDef),o=this.parsePointer(q.classDef),l=this.parseUShort(),c=this.parseUShort();return{posFormat:t,coverage:i,valueFormat1:s,valueFormat2:r,classDef1:a,classDef2:o,class1Count:l,class2Count:c,classRecords:this.parseList(l,q.list(c,function(){return{value1:this.parseValueRecord(s),value2:this.parseValueRecord(r)}}))}}};On[3]=function(){return{error:"GPOS Lookup 3 not supported"}};On[4]=function(){return{error:"GPOS Lookup 4 not supported"}};On[5]=function(){return{error:"GPOS Lookup 5 not supported"}};On[6]=function(){return{error:"GPOS Lookup 6 not supported"}};On[7]=function(){return{error:"GPOS Lookup 7 not supported"}};On[8]=function(){return{error:"GPOS Lookup 8 not supported"}};On[9]=function(){return{error:"GPOS Lookup 9 not supported"}};function YT(n,e){e=e||0;const t=new q(n,e),i=t.parseVersion(1);return Ne.argument(i===1||i===1.1,"Unsupported GPOS table version "+i),i===1?{version:i,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(On)}:{version:i,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(On),variations:t.parseFeatureVariationsList()}}var qT=new Array(10);function $T(n){return new me.Table("GPOS",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new me.ScriptList(n.scripts)},{name:"features",type:"TABLE",value:new me.FeatureList(n.features)},{name:"lookups",type:"TABLE",value:new me.LookupList(n.lookups,qT)}])}var ZT={parse:YT,make:$T};function KT(n){const e={};n.skip("uShort");const t=n.parseUShort();Ne.argument(t===0,"Unsupported kern sub-table version."),n.skip("uShort",2);const i=n.parseUShort();n.skip("uShort",3);for(let s=0;s1&&console.warn("Only the first kern subtable is supported."),n.skip("uLong");const s=n.parseUShort()&255;if(n.skip("uShort"),s===0){const r=n.parseUShort();n.skip("uShort",3);for(let a=0;a{const t=await(await fetch(e)).arrayBuffer();return new Er(i2(t))})(),this._shared.catch(()=>{Er._shared=null})),this._shared}measureEm(e){let t=0;for(const i of e)t+=this.ensureGlyph(i.codePointAt(0)).advance;return t}ensureGlyph(e){let t=this.glyphs.get(e);if(t)return t;const i=this.font.charToGlyph(String.fromCodePoint(e)),s=(i.advanceWidth??this.upem*.5)/this.upem,r=i.getPath(0,0,1),a=[];let o=0,l=0,c=0,u=0;for(const C of r.commands)switch(C.type){case"M":c=o=C.x,u=l=-C.y;break;case"L":a.push(xf(c,u,C.x,-C.y)),c=C.x,u=-C.y;break;case"Q":a.push({x0:c,y0:u,cx:C.x1,cy:-C.y1,x1:C.x,y1:-C.y}),c=C.x,u=-C.y;break;case"C":{const O=(C.x1+C.x2)/2,N=(-C.y1+-C.y2)/2;a.push({x0:c,y0:u,cx:O,cy:N,x1:C.x,y1:-C.y}),c=C.x,u=-C.y;break}case"Z":(c!==o||u!==l)&&a.push(xf(c,u,o,l)),c=o,u=l;break}if(!a.length)return t={base:-1,advance:s},this.glyphs.set(e,t),t;let f=1/0,h=1/0,d=-1/0,p=-1/0;for(const C of a)f=Math.min(f,C.x0,C.cx,C.x1),d=Math.max(d,C.x0,C.cx,C.x1),h=Math.min(h,C.y0,C.cy,C.y1),p=Math.max(p,C.y0,C.cy,C.y1);const x=Math.max(d-f,1e-6),m=Math.max(p-h,1e-6),g=Array.from({length:cn},()=>[]),M=Array.from({length:cn},()=>[]);a.forEach((C,O)=>{const N=Math.min(C.y0,C.cy,C.y1),U=Math.max(C.y0,C.cy,C.y1),Z=Math.min(C.x0,C.cx,C.x1),k=Math.max(C.x0,C.cx,C.x1),$=Ra((N-h)/m),D=Ra((U-h)/m);for(let ee=$;ee<=D;ee++)g[ee].push(O);const ae=Ra((Z-f)/x),re=Ra((k-f)/x);for(let ee=ae;ee<=re;ee++)M[ee].push(O)});const E=C=>Math.ceil(C.length/4),_=g.reduce((C,O)=>C+E(O),0)+M.reduce((C,O)=>C+E(O),0),T=2+cn*2+_+a.length*2,b=this.alloc(T),S=this.data,v=(C,O,N,U,Z)=>{S[C*4]=O,S[C*4+1]=N,S[C*4+2]=U,S[C*4+3]=Z},w=b+2+cn*2+_;v(b,f,h,d,p),v(b+1,b+2,b+2+cn,0,0);let I=b+2+cn*2;const L=(C,O)=>{for(let N=0;N{v(w+O*2,C.x0,C.y0,C.cx,C.cy),v(w+O*2+1,C.x1,C.y1,0,0)}),t={base:b,advance:s},this.glyphs.set(e,t),t}bboxOf(e){const t=e.base*4;return[this.data[t],this.data[t+1],this.data[t+2],this.data[t+3]]}alloc(e){const t=(this.used+e)*4;if(t>this.data.length){let s=this.data.length;for(;s=0&&(S[xe]=null,E[xe].disconnect(j))}for(let ne=0;ne=S.length){S.push(j),xe=ve;break}else if(S[ve]===null){S[ve]=j,xe=ve;break}if(xe===-1)break}const be=E[xe];be&&be.connect(j)}}const Z=new H,R=new H;function re(G,ne,j){Z.setFromMatrixPosition(ne.matrixWorld),R.setFromMatrixPosition(j.matrixWorld);const xe=Z.distanceTo(R),be=ne.projectionMatrix.elements,ve=j.projectionMatrix.elements,Be=be[14]/(be[10]-1),Ve=be[14]/(be[10]+1),Ne=(be[9]+1)/be[5],ke=(be[9]-1)/be[5],Xe=(be[8]-1)/be[0],tt=(ve[8]+1)/ve[0],rt=Be*Xe,gt=Be*tt,vt=xe/(-Xe+tt),ht=vt*-Xe;if(ne.matrixWorld.decompose(G.position,G.quaternion,G.scale),G.translateX(ht),G.translateZ(vt),G.matrixWorld.compose(G.position,G.quaternion,G.scale),G.matrixWorldInverse.copy(G.matrixWorld).invert(),be[10]===-1)G.projectionMatrix.copy(ne.projectionMatrix),G.projectionMatrixInverse.copy(ne.projectionMatrixInverse);else{const dt=Be+vt,D=Ve+vt,Ee=rt-ht,z=gt+(xe-ht),P=Ne*Ve/D*dt,v=ke*Ve/D*dt;G.projectionMatrix.makePerspective(Ee,z,P,v,dt,D),G.projectionMatrixInverse.copy(G.projectionMatrix).invert()}}function se(G,ne){ne===null?G.matrixWorld.copy(G.matrix):G.matrixWorld.multiplyMatrices(ne.matrixWorld,G.matrix),G.matrixWorldInverse.copy(G.matrixWorld).invert()}this.updateCamera=function(G){if(s===null)return;let ne=G.near,j=G.far;p.texture!==null&&(p.depthNear>0&&(ne=p.depthNear),p.depthFar>0&&(j=p.depthFar)),w.near=I.near=T.near=ne,w.far=I.far=T.far=j,(U!==w.near||k!==w.far)&&(s.updateRenderState({depthNear:w.near,depthFar:w.far}),U=w.near,k=w.far),w.layers.mask=G.layers.mask|6,T.layers.mask=w.layers.mask&-5,I.layers.mask=w.layers.mask&-3;const xe=G.parent,be=w.cameras;se(w,xe);for(let ve=0;ve0&&(p.alphaTest.value=g.alphaTest);const b=e.get(g),A=b.envMap,x=b.envMapRotation;A&&(p.envMap.value=A,p.envMapRotation.value.setFromMatrix4(By.makeRotationFromEuler(x)).transpose(),A.isCubeTexture&&A.isRenderTargetTexture===!1&&p.envMapRotation.value.premultiply(Tf),p.reflectivity.value=g.reflectivity,p.ior.value=g.ior,p.refractionRatio.value=g.refractionRatio),g.lightMap&&(p.lightMap.value=g.lightMap,p.lightMapIntensity.value=g.lightMapIntensity,t(g.lightMap,p.lightMapTransform)),g.aoMap&&(p.aoMap.value=g.aoMap,p.aoMapIntensity.value=g.aoMapIntensity,t(g.aoMap,p.aoMapTransform))}function a(p,g){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,g.map&&(p.map.value=g.map,t(g.map,p.mapTransform))}function o(p,g){p.dashSize.value=g.dashSize,p.totalSize.value=g.dashSize+g.gapSize,p.scale.value=g.scale}function l(p,g,b,A){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,p.size.value=g.size*b,p.scale.value=A*.5,g.map&&(p.map.value=g.map,t(g.map,p.uvTransform)),g.alphaMap&&(p.alphaMap.value=g.alphaMap,t(g.alphaMap,p.alphaMapTransform)),g.alphaTest>0&&(p.alphaTest.value=g.alphaTest)}function c(p,g){p.diffuse.value.copy(g.color),p.opacity.value=g.opacity,p.rotation.value=g.rotation,g.map&&(p.map.value=g.map,t(g.map,p.mapTransform)),g.alphaMap&&(p.alphaMap.value=g.alphaMap,t(g.alphaMap,p.alphaMapTransform)),g.alphaTest>0&&(p.alphaTest.value=g.alphaTest)}function u(p,g){p.specular.value.copy(g.specular),p.shininess.value=Math.max(g.shininess,1e-4)}function d(p,g){g.gradientMap&&(p.gradientMap.value=g.gradientMap)}function h(p,g){p.metalness.value=g.metalness,g.metalnessMap&&(p.metalnessMap.value=g.metalnessMap,t(g.metalnessMap,p.metalnessMapTransform)),p.roughness.value=g.roughness,g.roughnessMap&&(p.roughnessMap.value=g.roughnessMap,t(g.roughnessMap,p.roughnessMapTransform)),g.envMap&&(p.envMapIntensity.value=g.envMapIntensity)}function f(p,g,b){p.ior.value=g.ior,g.sheen>0&&(p.sheenColor.value.copy(g.sheenColor).multiplyScalar(g.sheen),p.sheenRoughness.value=g.sheenRoughness,g.sheenColorMap&&(p.sheenColorMap.value=g.sheenColorMap,t(g.sheenColorMap,p.sheenColorMapTransform)),g.sheenRoughnessMap&&(p.sheenRoughnessMap.value=g.sheenRoughnessMap,t(g.sheenRoughnessMap,p.sheenRoughnessMapTransform))),g.clearcoat>0&&(p.clearcoat.value=g.clearcoat,p.clearcoatRoughness.value=g.clearcoatRoughness,g.clearcoatMap&&(p.clearcoatMap.value=g.clearcoatMap,t(g.clearcoatMap,p.clearcoatMapTransform)),g.clearcoatRoughnessMap&&(p.clearcoatRoughnessMap.value=g.clearcoatRoughnessMap,t(g.clearcoatRoughnessMap,p.clearcoatRoughnessMapTransform)),g.clearcoatNormalMap&&(p.clearcoatNormalMap.value=g.clearcoatNormalMap,t(g.clearcoatNormalMap,p.clearcoatNormalMapTransform),p.clearcoatNormalScale.value.copy(g.clearcoatNormalScale),g.side===on&&p.clearcoatNormalScale.value.negate())),g.dispersion>0&&(p.dispersion.value=g.dispersion),g.iridescence>0&&(p.iridescence.value=g.iridescence,p.iridescenceIOR.value=g.iridescenceIOR,p.iridescenceThicknessMinimum.value=g.iridescenceThicknessRange[0],p.iridescenceThicknessMaximum.value=g.iridescenceThicknessRange[1],g.iridescenceMap&&(p.iridescenceMap.value=g.iridescenceMap,t(g.iridescenceMap,p.iridescenceMapTransform)),g.iridescenceThicknessMap&&(p.iridescenceThicknessMap.value=g.iridescenceThicknessMap,t(g.iridescenceThicknessMap,p.iridescenceThicknessMapTransform))),g.transmission>0&&(p.transmission.value=g.transmission,p.transmissionSamplerMap.value=b.texture,p.transmissionSamplerSize.value.set(b.width,b.height),g.transmissionMap&&(p.transmissionMap.value=g.transmissionMap,t(g.transmissionMap,p.transmissionMapTransform)),p.thickness.value=g.thickness,g.thicknessMap&&(p.thicknessMap.value=g.thicknessMap,t(g.thicknessMap,p.thicknessMapTransform)),p.attenuationDistance.value=g.attenuationDistance,p.attenuationColor.value.copy(g.attenuationColor)),g.anisotropy>0&&(p.anisotropyVector.value.set(g.anisotropy*Math.cos(g.anisotropyRotation),g.anisotropy*Math.sin(g.anisotropyRotation)),g.anisotropyMap&&(p.anisotropyMap.value=g.anisotropyMap,t(g.anisotropyMap,p.anisotropyMapTransform))),p.specularIntensity.value=g.specularIntensity,p.specularColor.value.copy(g.specularColor),g.specularColorMap&&(p.specularColorMap.value=g.specularColorMap,t(g.specularColorMap,p.specularColorMapTransform)),g.specularIntensityMap&&(p.specularIntensityMap.value=g.specularIntensityMap,t(g.specularIntensityMap,p.specularIntensityMapTransform))}function m(p,g){g.matcap&&(p.matcap.value=g.matcap)}function _(p,g){const b=e.get(g).light;p.referencePosition.value.setFromMatrixPosition(b.matrixWorld),p.nearDistance.value=b.shadow.camera.near,p.farDistance.value=b.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:s}}function zy(n,e,t,i){let s={},r={},a=[];const o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(x,E){const S=E.program;i.uniformBlockBinding(x,S)}function c(x,E){let S=s[x.id];S===void 0&&(p(x),S=u(x),s[x.id]=S,x.addEventListener("dispose",b));const M=E.program;i.updateUBOMapping(x,M);const y=e.render.frame;r[x.id]!==y&&(h(x),r[x.id]=y)}function u(x){const E=d();x.__bindingPointIndex=E;const S=n.createBuffer(),M=x.__size,y=x.usage;return n.bindBuffer(n.UNIFORM_BUFFER,S),n.bufferData(n.UNIFORM_BUFFER,M,y),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,E,S),S}function d(){for(let x=0;x0&&(S+=M-y),x.__size=S,x.__cache={},this}function g(x){const E={boundary:0,storage:0};return typeof x=="number"||typeof x=="boolean"?(E.boundary=4,E.storage=4):x.isVector2?(E.boundary=8,E.storage=8):x.isVector3||x.isColor?(E.boundary=16,E.storage=12):x.isVector4?(E.boundary=16,E.storage=16):x.isMatrix3?(E.boundary=48,E.storage=48):x.isMatrix4?(E.boundary=64,E.storage=64):x.isTexture?Ke("WebGLRenderer: Texture samplers can not be part of an uniforms group."):ArrayBuffer.isView(x)?(E.boundary=16,E.storage=x.byteLength):Ke("WebGLRenderer: Unsupported uniform value type.",x),E}function b(x){const E=x.target;E.removeEventListener("dispose",b);const S=a.indexOf(E.__bindingPointIndex);a.splice(S,1),n.deleteBuffer(s[E.id]),delete s[E.id],delete r[E.id]}function A(){for(const x in s)n.deleteBuffer(s[x]);a=[],s={},r={}}return{bind:l,update:c,dispose:A}}const Vy=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);let Gn=null;function Gy(){return Gn===null&&(Gn=new nf(Vy,16,16,rs,_i),Gn.name="DFG_LUT",Gn.minFilter=Wt,Gn.magFilter=Wt,Gn.wrapS=ui,Gn.wrapT=ui,Gn.generateMipmaps=!1,Gn.needsUpdate=!0),Gn}class Wy{constructor(e={}){const{canvas:t=L0(),context:i=null,depth:s=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:u="default",failIfMajorPerformanceCaveat:d=!1,reversedDepthBuffer:h=!1,outputBufferType:f=yn}=e;this.isWebGLRenderer=!0;let m;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");m=i.getContextAttributes().alpha}else m=a;const _=f,p=new Set([Nc,Uc,Oc]),g=new Set([yn,ni,Tr,Cr,Ic,Pc]),b=new Uint32Array(4),A=new Int32Array(4),x=new H;let E=null,S=null;const M=[],y=[];let T=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=Qn,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const I=this;let L=!1,w=null,U=null,k=null,O=null;this._outputColorSpace=dn;let $=0,F=0,Z=null,R=-1,re=null;const se=new wt,ae=new wt;let ge=null;const he=new et(0);let oe=0,G=t.width,ne=t.height,j=1,xe=null,be=null;const ve=new wt(0,0,G,ne),Be=new wt(0,0,G,ne);let Ve=!1;const Ne=new sf;let ke=!1,Xe=!1;const tt=new Et,rt=new H,gt=new wt,vt={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let ht=!1;function dt(){return Z===null?j:1}let D=i;function Ee(C,K){return t.getContext(C,K)}try{const C={alpha:!0,depth:s,stencil:r,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:u,failIfMajorPerformanceCaveat:d};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${Dc}`),t.addEventListener("webglcontextlost",ot,!1),t.addEventListener("webglcontextrestored",ct,!1),t.addEventListener("webglcontextcreationerror",Mn,!1),D===null){const K="webgl2";if(D=Ee(K,C),D===null)throw Ee(K)?new Error("THREE.WebGLRenderer: Error creating WebGL context with your selected attributes."):new Error("THREE.WebGLRenderer: Error creating WebGL context.")}}catch(C){throw at("WebGLRenderer: "+C.message),C}let z,P,v,B,Y,N,J,ie,X,W,ce,le,de,pe,Le,we,Ye,V,_e,ue,ye,Te,fe;function He(){z=new Gx(D),z.init(),ye=new Oy(D,z),P=new Ux(D,z,e,ye),v=new Iy(D,z),P.reversedDepthBuffer&&h&&v.buffers.depth.setReversed(!0),U=D.createFramebuffer(),k=D.createFramebuffer(),O=D.createFramebuffer(),B=new Yx(D),Y=new xy,N=new Py(D,z,v,Y,P,ye,B),J=new Vx(I),ie=new $m(D),Te=new Px(D,ie),X=new Wx(D,ie,B,Te),W=new qx(D,X,ie,Te,B),V=new Kx(D,P,N),Le=new Nx(Y),ce=new _y(I,J,z,P,Te,Le),le=new Hy(I,Y),de=new vy,pe=new Ty(z),Ye=new Ix(I,J,v,W,m,l),we=new Ly(I,W,P),fe=new zy(D,B,P,v),_e=new Ox(D,z,B),ue=new Xx(D,z,B),B.programs=ce.programs,I.capabilities=P,I.extensions=z,I.properties=Y,I.renderLists=de,I.shadowMap=we,I.state=v,I.info=B}He(),_!==yn&&(T=new $x(_,t.width,t.height,o,s,r));const Oe=new Fy(I,D);this.xr=Oe,this.getContext=function(){return D},this.getContextAttributes=function(){return D.getContextAttributes()},this.forceContextLoss=function(){const C=z.get("WEBGL_lose_context");C&&C.loseContext()},this.forceContextRestore=function(){const C=z.get("WEBGL_lose_context");C&&C.restoreContext()},this.getPixelRatio=function(){return j},this.setPixelRatio=function(C){C!==void 0&&(j=C,this.setSize(G,ne,!1))},this.getSize=function(C){return C.set(G,ne)},this.setSize=function(C,K,te=!0){if(Oe.isPresenting){Ke("WebGLRenderer: Can't change size while VR device is presenting.");return}G=C,ne=K,t.width=Math.floor(C*j),t.height=Math.floor(K*j),te===!0&&(t.style.width=C+"px",t.style.height=K+"px"),T!==null&&T.setSize(t.width,t.height),this.setViewport(0,0,C,K)},this.getDrawingBufferSize=function(C){return C.set(G*j,ne*j).floor()},this.setDrawingBufferSize=function(C,K,te){G=C,ne=K,j=te,t.width=Math.floor(C*te),t.height=Math.floor(K*te),this.setViewport(0,0,C,K)},this.setEffects=function(C){if(_===yn){at("WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.");return}if(C){for(let K=0;K{function De(){if(Q.forEach(function(Pe){Y.get(Pe).currentProgram.isReady()&&Q.delete(Pe)}),Q.size===0){ee(C);return}setTimeout(De,10)}z.get("KHR_parallel_shader_compile")!==null?De():setTimeout(De,10)})};let Fn=null;function Wr(C){Fn&&Fn(C)}function Xi(){Bn.stop()}function ir(){Bn.start()}const Bn=new yf;Bn.setAnimationLoop(Wr),typeof self<"u"&&Bn.setContext(self),this.setAnimationLoop=function(C){Fn=C,Oe.setAnimationLoop(C),C===null?Bn.stop():Bn.start()},Oe.addEventListener("sessionstart",Xi),Oe.addEventListener("sessionend",ir),this.render=function(C,K){if(K!==void 0&&K.isCamera!==!0){at("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(L===!0)return;w!==null&&w.renderStart(C,K);const te=Oe.enabled===!0&&Oe.isPresenting===!0,Q=T!==null&&(Z===null||te)&&T.begin(I,Z);if(C.matrixWorldAutoUpdate===!0&&C.updateMatrixWorld(),K.parent===null&&K.matrixWorldAutoUpdate===!0&&K.updateMatrixWorld(),Oe.enabled===!0&&Oe.isPresenting===!0&&(T===null||T.isCompositing()===!1)&&(Oe.cameraAutoUpdate===!0&&Oe.updateCamera(K),K=Oe.getCamera()),C.isScene===!0&&C.onBeforeRender(I,C,K,Z),S=pe.get(C,y.length),S.init(K),S.state.textureUnits=N.getTextureUnits(),y.push(S),tt.multiplyMatrices(K.projectionMatrix,K.matrixWorldInverse),Ne.setFromProjectionMatrix(tt,Jn,K.reversedDepth),Xe=this.localClippingEnabled,ke=Le.init(this.clippingPlanes,Xe),E=de.get(C,M.length),E.init(),M.push(E),Oe.enabled===!0&&Oe.isPresenting===!0){const Pe=I.xr.getDepthSensingMesh();Pe!==null&&mn(Pe,K,-1/0,I.sortObjects)}mn(C,K,0,I.sortObjects),E.finish(),I.sortObjects===!0&&E.sort(xe,be,K.reversedDepth),ht=Oe.enabled===!1||Oe.isPresenting===!1||Oe.hasDepthSensing()===!1,ht&&Ye.addToRenderList(E,C),this.info.render.frame++,this.info.autoReset===!0&&this.info.reset(),ke===!0&&Le.beginShadows();const ee=S.state.shadowsArray;if(we.render(ee,C,K),ke===!0&&Le.endShadows(),(Q&&T.hasRenderPass())===!1){const Pe=E.opaque,Re=E.transmissive;if(S.setupLights(),K.isArrayCamera){const ze=K.cameras;if(Re.length>0)for(let Ge=0,$e=ze.length;Ge<$e;Ge++){const je=ze[Ge];sn(Pe,Re,C,je)}ht&&Ye.render(C);for(let Ge=0,$e=ze.length;Ge<$e;Ge++){const je=ze[Ge];An(E,C,je,je.viewport)}}else Re.length>0&&sn(Pe,Re,C,K),ht&&Ye.render(C),An(E,C,K)}Z!==null&&F===0&&(N.updateMultisampleRenderTarget(Z),N.updateRenderTargetMipmap(Z)),Q&&T.end(I),C.isScene===!0&&C.onAfterRender(I,C,K),Te.resetDefaultState(),R=-1,re=null,y.pop(),y.length>0?(S=y[y.length-1],N.setTextureUnits(S.state.textureUnits),ke===!0&&Le.setGlobalState(I.clippingPlanes,S.state.camera)):S=null,M.pop(),M.length>0?E=M[M.length-1]:E=null,w!==null&&w.renderEnd()};function mn(C,K,te,Q){if(C.visible===!1)return;if(C.layers.test(K.layers)){if(C.isGroup)te=C.renderOrder;else if(C.isLOD)C.autoUpdate===!0&&C.update(K);else if(C.isLightProbeGrid)S.pushLightProbeGrid(C);else if(C.isLight)S.pushLight(C),C.castShadow&&S.pushShadow(C);else if(C.isSprite){if(!C.frustumCulled||Ne.intersectsSprite(C)){Q&>.setFromMatrixPosition(C.matrixWorld).applyMatrix4(tt);const Pe=W.update(C),Re=C.material;Re.visible&&E.push(C,Pe,Re,te,gt.z,null)}}else if((C.isMesh||C.isLine||C.isPoints)&&(!C.frustumCulled||Ne.intersectsObject(C))){const Pe=W.update(C),Re=C.material;if(Q&&(C.boundingSphere!==void 0?(C.boundingSphere===null&&C.computeBoundingSphere(),gt.copy(C.boundingSphere.center)):(Pe.boundingSphere===null&&Pe.computeBoundingSphere(),gt.copy(Pe.boundingSphere.center)),gt.applyMatrix4(C.matrixWorld).applyMatrix4(tt)),Array.isArray(Re)){const ze=Pe.groups;for(let Ge=0,$e=ze.length;Ge<$e;Ge++){const je=ze[Ge],We=Re[je.materialIndex];We&&We.visible&&E.push(C,Pe,We,te,gt.z,je)}}else Re.visible&&E.push(C,Pe,Re,te,gt.z,null)}}const De=C.children;for(let Pe=0,Re=De.length;Pe0&&yi(ee,K,te),De.length>0&&yi(De,K,te),Pe.length>0&&yi(Pe,K,te),v.buffers.depth.setTest(!0),v.buffers.depth.setMask(!0),v.buffers.color.setMask(!0),v.setPolygonOffset(!1)}function sn(C,K,te,Q){if((te.isScene===!0?te.overrideMaterial:null)!==null)return;if(S.state.transmissionRenderTarget[Q.id]===void 0){const We=z.has("EXT_color_buffer_half_float")||z.has("EXT_color_buffer_float");S.state.transmissionRenderTarget[Q.id]=new ei(1,1,{generateMipmaps:!0,type:We?_i:yn,minFilter:Ui,samples:Math.max(4,P.samples),stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:it.workingColorSpace})}const De=S.state.transmissionRenderTarget[Q.id],Pe=Q.viewport||se;De.setSize(Pe.z*I.transmissionResolutionScale,Pe.w*I.transmissionResolutionScale);const Re=I.getRenderTarget(),ze=I.getActiveCubeFace(),Ge=I.getActiveMipmapLevel();I.setRenderTarget(De),I.getClearColor(he),oe=I.getClearAlpha(),oe<1&&I.setClearColor(16777215,.5),I.clear(),ht&&Ye.render(te);const $e=I.toneMapping;I.toneMapping=Qn;const je=Q.viewport;if(Q.viewport!==void 0&&(Q.viewport=void 0),S.setupLightsView(Q),ke===!0&&Le.setGlobalState(I.clippingPlanes,Q),yi(C,te,Q),N.updateMultisampleRenderTarget(De),N.updateRenderTargetMipmap(De),z.has("WEBGL_multisampled_render_to_texture")===!1){let We=!1;for(let _t=0,Dt=K.length;_t0,Q.currentProgram=je,Q.uniformsList=null,je}function gn(C){if(C.uniformsList===null){const K=C.currentProgram.getUniforms();C.uniformsList=Ha.seqWithValue(K.seq,C.uniforms)}return C.uniformsList}function Hn(C,K){const te=Y.get(C);te.outputColorSpace=K.outputColorSpace,te.batching=K.batching,te.batchingColor=K.batchingColor,te.instancing=K.instancing,te.instancingColor=K.instancingColor,te.instancingMorph=K.instancingMorph,te.skinning=K.skinning,te.morphTargets=K.morphTargets,te.morphNormals=K.morphNormals,te.morphColors=K.morphColors,te.morphTargetsCount=K.morphTargetsCount,te.numClippingPlanes=K.numClippingPlanes,te.numIntersection=K.numClipIntersection,te.vertexAlphas=K.vertexAlphas,te.vertexTangents=K.vertexTangents,te.toneMapping=K.toneMapping}function En(C,K){if(C.length===0)return null;if(C.length===1)return C[0].texture!==null?C[0]:null;x.setFromMatrixPosition(K.matrixWorld);for(let te=0,Q=C.length;te0),We=!!te.morphAttributes.position,_t=!!te.morphAttributes.normal,Dt=!!te.morphAttributes.color;let Tt=Qn;Q.toneMapped&&(Z===null||Z.isXRRenderTarget===!0)&&(Tt=I.toneMapping);const St=te.morphAttributes.position||te.morphAttributes.normal||te.morphAttributes.color,Yt=St!==void 0?St.length:0,Ie=Y.get(Q),cn=S.state.lights;if(ke===!0&&(Xe===!0||C!==re)){const Mt=C===re&&Q.id===R;Le.setState(Q,C,Mt)}let lt=!1;Q.version===Ie.__version?(Ie.needsLights&&Ie.lightsStateVersion!==cn.state.version||Ie.outputColorSpace!==Re||ee.isBatchedMesh&&Ie.batching===!1||!ee.isBatchedMesh&&Ie.batching===!0||ee.isBatchedMesh&&Ie.batchingColor===!0&&ee.colorTexture===null||ee.isBatchedMesh&&Ie.batchingColor===!1&&ee.colorTexture!==null||ee.isInstancedMesh&&Ie.instancing===!1||!ee.isInstancedMesh&&Ie.instancing===!0||ee.isSkinnedMesh&&Ie.skinning===!1||!ee.isSkinnedMesh&&Ie.skinning===!0||ee.isInstancedMesh&&Ie.instancingColor===!0&&ee.instanceColor===null||ee.isInstancedMesh&&Ie.instancingColor===!1&&ee.instanceColor!==null||ee.isInstancedMesh&&Ie.instancingMorph===!0&&ee.morphTexture===null||ee.isInstancedMesh&&Ie.instancingMorph===!1&&ee.morphTexture!==null||Ie.envMap!==Ge||Q.fog===!0&&Ie.fog!==De||Ie.numClippingPlanes!==void 0&&(Ie.numClippingPlanes!==Le.numPlanes||Ie.numIntersection!==Le.numIntersection)||Ie.vertexAlphas!==$e||Ie.vertexTangents!==je||Ie.morphTargets!==We||Ie.morphNormals!==_t||Ie.morphColors!==Dt||Ie.toneMapping!==Tt||Ie.morphTargetsCount!==Yt||!!Ie.lightProbeGrid!=S.state.lightProbeGridArray.length>0)&&(lt=!0):(lt=!0,Ie.__version=Q.version);let _n=Ie.currentProgram;lt===!0&&(_n=vi(Q,K,ee),w&&Q.isNodeMaterial&&w.onUpdateProgram(Q,_n,Ie));let zn=!1,Si=!1,ps=!1;const bt=_n.getUniforms(),Lt=Ie.uniforms;if(v.useProgram(_n.program)&&(zn=!0,Si=!0,ps=!0),Q.id!==R&&(R=Q.id,Si=!0),Ie.needsLights){const Mt=En(S.state.lightProbeGridArray,ee);Ie.lightProbeGrid!==Mt&&(Ie.lightProbeGrid=Mt,Si=!0)}if(zn||re!==C){v.buffers.depth.getReversed()&&C.reversedDepth!==!0&&(C._reversedDepth=!0,C.updateProjectionMatrix()),bt.setValue(D,"projectionMatrix",C.projectionMatrix),bt.setValue(D,"viewMatrix",C.matrixWorldInverse);const Mi=bt.map.cameraPosition;Mi!==void 0&&Mi.setValue(D,rt.setFromMatrixPosition(C.matrixWorld)),P.logarithmicDepthBuffer&&bt.setValue(D,"logDepthBufFC",2/(Math.log(C.far+1)/Math.LN2)),(Q.isMeshPhongMaterial||Q.isMeshToonMaterial||Q.isMeshLambertMaterial||Q.isMeshBasicMaterial||Q.isMeshStandardMaterial||Q.isShaderMaterial)&&bt.setValue(D,"isOrthographic",C.isOrthographicCamera===!0),re!==C&&(re=C,Si=!0,ps=!0)}if(Ie.needsLights&&(cn.state.directionalShadowMap.length>0&&bt.setValue(D,"directionalShadowMap",cn.state.directionalShadowMap,N),cn.state.spotShadowMap.length>0&&bt.setValue(D,"spotShadowMap",cn.state.spotShadowMap,N),cn.state.pointShadowMap.length>0&&bt.setValue(D,"pointShadowMap",cn.state.pointShadowMap,N)),ee.isSkinnedMesh){bt.setOptional(D,ee,"bindMatrix"),bt.setOptional(D,ee,"bindMatrixInverse");const Mt=ee.skeleton;Mt&&(Mt.boneTexture===null&&Mt.computeBoneTexture(),bt.setValue(D,"boneTexture",Mt.boneTexture,N))}ee.isBatchedMesh&&(bt.setOptional(D,ee,"batchingTexture"),bt.setValue(D,"batchingTexture",ee._matricesTexture,N),bt.setOptional(D,ee,"batchingIdTexture"),bt.setValue(D,"batchingIdTexture",ee._indirectTexture,N),bt.setOptional(D,ee,"batchingColorTexture"),ee._colorsTexture!==null&&bt.setValue(D,"batchingColorTexture",ee._colorsTexture,N));const bi=te.morphAttributes;if((bi.position!==void 0||bi.normal!==void 0||bi.color!==void 0)&&V.update(ee,te,_n),(Si||Ie.receiveShadow!==ee.receiveShadow)&&(Ie.receiveShadow=ee.receiveShadow,bt.setValue(D,"receiveShadow",ee.receiveShadow)),(Q.isMeshStandardMaterial||Q.isMeshLambertMaterial||Q.isMeshPhongMaterial)&&Q.envMap===null&&K.environment!==null&&(Lt.envMapIntensity.value=K.environmentIntensity),Lt.dfgLUT!==void 0&&(Lt.dfgLUT.value=Gy()),Si){if(bt.setValue(D,"toneMappingExposure",I.toneMappingExposure),Ie.needsLights&&qp(Lt,ps),De&&Q.fog===!0&&le.refreshFogUniforms(Lt,De),le.refreshMaterialUniforms(Lt,Q,j,ne,S.state.transmissionRenderTarget[C.id]),Ie.needsLights&&Ie.lightProbeGrid){const Mt=Ie.lightProbeGrid;Lt.probesSH.value=Mt.texture,Lt.probesMin.value.copy(Mt.boundingBox.min),Lt.probesMax.value.copy(Mt.boundingBox.max),Lt.probesResolution.value.copy(Mt.resolution)}Ha.upload(D,gn(Ie),Lt,N)}if(Q.isShaderMaterial&&Q.uniformsNeedUpdate===!0&&(Ha.upload(D,gn(Ie),Lt,N),Q.uniformsNeedUpdate=!1),Q.isSpriteMaterial&&bt.setValue(D,"center",ee.center),bt.setValue(D,"modelViewMatrix",ee.modelViewMatrix),bt.setValue(D,"normalMatrix",ee.normalMatrix),bt.setValue(D,"modelMatrix",ee.matrixWorld),Q.uniformsGroups!==void 0){const Mt=Q.uniformsGroups;for(let Mi=0,ms=Mt.length;Mi0&&N.useMultisampledRTT(C)===!1?Q=Y.get(C).__webglMultisampledFramebuffer:Array.isArray(Ge)?Q=Ge[te]:Q=Ge,se.copy(C.viewport),ae.copy(C.scissor),ge=C.scissorTest}else se.copy(ve).multiplyScalar(j).floor(),ae.copy(Be).multiplyScalar(j).floor(),ge=Ve;if(te!==0&&(Q=U),v.bindFramebuffer(D.FRAMEBUFFER,Q)&&v.drawBuffers(C,Q),v.viewport(se),v.scissor(ae),v.setScissorTest(ge),ee){const Re=Y.get(C.texture);D.framebufferTexture2D(D.FRAMEBUFFER,D.COLOR_ATTACHMENT0,D.TEXTURE_CUBE_MAP_POSITIVE_X+K,Re.__webglTexture,te)}else if(De){const Re=K;for(let ze=0;ze1&&D.readBuffer(D.COLOR_ATTACHMENT0+Re),!P.textureFormatReadable($e)){at("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!P.textureTypeReadable(je)){at("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}K>=0&&K<=C.width-Q&&te>=0&&te<=C.height-ee&&D.readPixels(K,te,Q,ee,ye.convert($e),ye.convert(je),De)}finally{const Ge=Z!==null?Y.get(Z).__webglFramebuffer:null;v.bindFramebuffer(D.FRAMEBUFFER,Ge)}}},this.readRenderTargetPixelsAsync=async function(C,K,te,Q,ee,De,Pe,Re=0){if(!(C&&C.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let ze=Y.get(C).__webglFramebuffer;if(C.isWebGLCubeRenderTarget&&Pe!==void 0&&(ze=ze[Pe]),ze)if(K>=0&&K<=C.width-Q&&te>=0&&te<=C.height-ee){v.bindFramebuffer(D.FRAMEBUFFER,ze);const Ge=C.textures[Re],$e=Ge.format,je=Ge.type;if(C.textures.length>1&&D.readBuffer(D.COLOR_ATTACHMENT0+Re),!P.textureFormatReadable($e))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!P.textureTypeReadable(je))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const We=D.createBuffer();D.bindBuffer(D.PIXEL_PACK_BUFFER,We),D.bufferData(D.PIXEL_PACK_BUFFER,De.byteLength,D.STREAM_READ),D.readPixels(K,te,Q,ee,ye.convert($e),ye.convert(je),0);const _t=Z!==null?Y.get(Z).__webglFramebuffer:null;v.bindFramebuffer(D.FRAMEBUFFER,_t);const Dt=D.fenceSync(D.SYNC_GPU_COMMANDS_COMPLETE,0);return D.flush(),await I0(D,Dt,4),D.bindBuffer(D.PIXEL_PACK_BUFFER,We),D.getBufferSubData(D.PIXEL_PACK_BUFFER,0,De),D.deleteBuffer(We),D.deleteSync(Dt),De}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(C,K=null,te=0){const Q=Math.pow(2,-te),ee=Math.floor(C.image.width*Q),De=Math.floor(C.image.height*Q),Pe=K!==null?K.x:0,Re=K!==null?K.y:0;N.setTexture2D(C,0),D.copyTexSubImage2D(D.TEXTURE_2D,te,0,0,Pe,Re,ee,De),v.unbindTexture()},this.copyTextureToTexture=function(C,K,te=null,Q=null,ee=0,De=0){let Pe,Re,ze,Ge,$e,je,We,_t,Dt;const Tt=C.isCompressedTexture?C.mipmaps[De]:C.image;if(te!==null)Pe=te.max.x-te.min.x,Re=te.max.y-te.min.y,ze=te.isBox3?te.max.z-te.min.z:1,Ge=te.min.x,$e=te.min.y,je=te.isBox3?te.min.z:0;else{const Lt=Math.pow(2,-ee);Pe=Math.floor(Tt.width*Lt),Re=Math.floor(Tt.height*Lt),C.isDataArrayTexture?ze=Tt.depth:C.isData3DTexture?ze=Math.floor(Tt.depth*Lt):ze=1,Ge=0,$e=0,je=0}Q!==null?(We=Q.x,_t=Q.y,Dt=Q.z):(We=0,_t=0,Dt=0);const St=ye.convert(K.format),Yt=ye.convert(K.type);let Ie;K.isData3DTexture?(N.setTexture3D(K,0),Ie=D.TEXTURE_3D):K.isDataArrayTexture||K.isCompressedArrayTexture?(N.setTexture2DArray(K,0),Ie=D.TEXTURE_2D_ARRAY):(N.setTexture2D(K,0),Ie=D.TEXTURE_2D),v.activeTexture(D.TEXTURE0),v.pixelStorei(D.UNPACK_FLIP_Y_WEBGL,K.flipY),v.pixelStorei(D.UNPACK_PREMULTIPLY_ALPHA_WEBGL,K.premultiplyAlpha),v.pixelStorei(D.UNPACK_ALIGNMENT,K.unpackAlignment);const cn=v.getParameter(D.UNPACK_ROW_LENGTH),lt=v.getParameter(D.UNPACK_IMAGE_HEIGHT),_n=v.getParameter(D.UNPACK_SKIP_PIXELS),zn=v.getParameter(D.UNPACK_SKIP_ROWS),Si=v.getParameter(D.UNPACK_SKIP_IMAGES);v.pixelStorei(D.UNPACK_ROW_LENGTH,Tt.width),v.pixelStorei(D.UNPACK_IMAGE_HEIGHT,Tt.height),v.pixelStorei(D.UNPACK_SKIP_PIXELS,Ge),v.pixelStorei(D.UNPACK_SKIP_ROWS,$e),v.pixelStorei(D.UNPACK_SKIP_IMAGES,je);const ps=C.isDataArrayTexture||C.isData3DTexture,bt=K.isDataArrayTexture||K.isData3DTexture;if(C.isDepthTexture){const Lt=Y.get(C),bi=Y.get(K),Mt=Y.get(Lt.__renderTarget),Mi=Y.get(bi.__renderTarget);v.bindFramebuffer(D.READ_FRAMEBUFFER,Mt.__webglFramebuffer),v.bindFramebuffer(D.DRAW_FRAMEBUFFER,Mi.__webglFramebuffer);for(let ms=0;msMath.PI&&(i-=rn),s<-Math.PI?s+=rn:s>Math.PI&&(s-=rn),i<=s?this._spherical.theta=Math.max(i,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+s)/2?Math.max(i,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=a!=this._spherical.radius}if(Ot.setFromSpherical(this._spherical),Ot.applyQuaternion(this._quatInverse),t.copy(this.target).add(Ot),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){const o=Ot.length();a=this._clampDistance(o*this._scale);const l=o-a;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),r=!!l}else if(this.object.isOrthographicCamera){const o=new H(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=l!==this.object.zoom;const c=new H(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),a=Ot.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(ba.origin.copy(this.object.position),ba.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(ba.direction))ol||8*(1-this._lastQuaternion.dot(this.object.quaternion))>ol||this._lastTargetPosition.distanceToSquared(this.target)>ol?(this.dispatchEvent(Eh),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?rn/60*this.autoRotateSpeed*e:rn/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){Ot.setFromMatrixColumn(t,0),Ot.multiplyScalar(-e),this._panOffset.add(Ot)}_panUp(e,t){this.screenSpacePanning===!0?Ot.setFromMatrixColumn(t,1):(Ot.setFromMatrixColumn(t,0),Ot.crossVectors(this.object.up,Ot)),Ot.multiplyScalar(e),this._panOffset.add(Ot)}_pan(e,t){const i=this.domElement;if(this.object.isPerspectiveCamera){const s=this.object.position;Ot.copy(s).sub(this.target);let r=Ot.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*r/i.clientHeight,this.object.matrix),this._panUp(2*t*r/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),s=e-i.left,r=t-i.top,a=i.width,o=i.height;this._mouse.x=s/a*2-1,this._mouse.y=-(r/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(rn*this._rotateDelta.x/t.clientHeight),this._rotateUp(rn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(rn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-rn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(rn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-rn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(i,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(i,s)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(i*i+s*s);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const i=this._getSecondPointerPosition(e),s=.5*(e.pageX+i.x),r=.5*(e.pageY+i.y);this._rotateEnd.set(s,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(rn*this._rotateDelta.x/t.clientHeight),this._rotateUp(rn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(i,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(i*i+s*s);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t=250&&n<=255){const e=Math.round(40+(n-250)*43);return e*65536+e*256+e}if(n>=10&&n<=249){const e=n-10,[t,i]=ov[e%10];return rv(Math.floor(e/10)*15,t,i)}return 13226457}function Yc(n){if(n==null)return null;if(typeof n=="object"&&n!==null&&"value"in n){const e=n.value;if(typeof e=="number"&&Number.isFinite(e))return e.toString(16);if(typeof e=="string"&&e.length){const t=Number(e);return Number.isFinite(t)?t.toString(16):e.toLowerCase()}return null}if(typeof n=="number"&&Number.isFinite(n))return n.toString(16);if(typeof n=="string"&&n.length){const e=Number(n);return Number.isFinite(e)?e.toString(16):n.toLowerCase()}return null}function wf(n){return Yc(n.ownerHandle)}function lv(n){const e=n.toLowerCase().replace(/\*/g,"").trim();return e?e==="model_space"||e==="ms"||e.startsWith("model")?"model":e==="paper_space"||e==="ps"||e.startsWith("paper")?"paper":null:null}function cv(n,e,t){return n==="model"?"Model":n==="paper"?t<=1?"Layout":`Layout (${e.replace(/^\*/,"")})`:e}function Mr(n){var a;const e=((a=n==null?void 0:n.tables)==null?void 0:a.blocks)??[],t=(n==null?void 0:n.entities)??[],i=new Map;for(const o of t){const l=wf(o);l&&i.set(l,(i.get(l)||0)+1)}const s=[];let r=0;for(const o of e){const l=lv(o.name??"");if(!l)continue;const c=Yc(o.handle);if(!c)continue;l==="paper"&&(r+=1);const u=typeof o.handle=="number"?o.handle:typeof o.handle=="object"&&o.handle&&"value"in o.handle?Number(o.handle.value):null;s.push({id:c,label:cv(l,o.name??"",r),name:o.name??"",handle:Number.isFinite(u)?u:null,handleHex:c,kind:l,entityCount:i.get(c)||0})}return s.sort((o,l)=>{if(o.kind!==l.kind){if(o.kind==="model")return-1;if(l.kind==="model")return 1}return 0}),s}function uv(n){if(!n.length)return null;const e=n.find(i=>i.kind==="paper"&&i.entityCount>0);if(e)return e;const t=n.find(i=>i.kind==="model");return t||(n[0]??null)}function ll(n,e,t=3){const i=new Set([e]);for(let s=0;s>>=1,e}function qn(n,e,t){if(!e)return t;for(;n.bitcount<24;)n.tag|=n.source[n.sourceIndex++]<>>16-e;return n.tag>>>=e,n.bitcount-=e,i+t}function yc(n,e){for(;n.bitcount<24;)n.tag|=n.source[n.sourceIndex++]<>>=1,++s,t+=e.table[s],i-=e.table[s];while(i>=0);return n.tag=r,n.bitcount-=s,e.trans[t+i]}function mv(n,e,t){var i,s,r,a,o,l;for(i=qn(n,5,257),s=qn(n,5,1),r=qn(n,4,4),a=0;a<19;++a)Wn[a]=0;for(a=0;a8;)n.sourceIndex--,n.bitcount-=8;if(e=n.source[n.sourceIndex+1],e=256*e+n.source[n.sourceIndex],t=n.source[n.sourceIndex+3],t=256*t+n.source[n.sourceIndex+2],e!==(~t&65535))return Rf;for(n.sourceIndex+=4,i=e;i;--i)n.dest[n.destLen++]=n.source[n.sourceIndex++];return n.bitcount=0,Kc}function Uf(n,e){var t=new hv(n,e),i,s,r;do{switch(i=pv(t),s=qn(t,2,0),s){case 0:r=gv(t);break;case 1:r=Rh(t,Df,Lf);break;case 2:mv(t,t.ltree,t.dtree),r=Rh(t,t.ltree,t.dtree);break;default:r=Rf}if(r!==Kc)throw new Error("Data error")}while(!i);return t.destLenthis.x2&&(this.x2=n)),typeof e=="number"&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))};us.prototype.addX=function(n){this.addPoint(n,null)};us.prototype.addY=function(n){this.addPoint(null,n)};us.prototype.addBezier=function(n,e,t,i,s,r,a,o){const l=[n,e],c=[t,i],u=[s,r],d=[a,o];this.addPoint(n,e),this.addPoint(a,o);for(let h=0;h<=1;h++){const f=6*l[h]-12*c[h]+6*u[h],m=-3*l[h]+9*c[h]-9*u[h]+3*d[h],_=3*c[h]-3*l[h];if(m===0){if(f===0)continue;const A=-_/f;01||Math.abs(a.y-i)>1||r.pop():a.type==="L"&&c&&c.x===a.x&&c.y===a.y?r.pop():a.type==="Z"&&(o&&l&&c&&o.type==="M"&&l.type==="L"&&c.type==="L"&&c.x===o.x&&c.y===o.y&&(r.shift(),r[0].type="M"),s+1_.length).map(_=>{let p=parseFloat(_);return(e.decimalPlaces||e.decimalPlaces===0)&&(p=kf(p,e.decimalPlaces)),p})}function u(m){if(!this.commands.length)return m;const _=this.commands[this.commands.length-1];for(let p=0;p-1)o[o.length-1]+=_;else if(r.indexOf(_)>-1)if(!a.type&&!this.commands.length&&(a.type="L"),_==="-")!a.type||p.indexOf("-")>0?l=!0:p.length?o.push("-"):o[o.length-1]=_;else if(!a.type||p.length>0)l=!0;else continue;else if(i.indexOf(_)>-1)a.type?(d.apply(this),a={type:_}):a.type=_;else{if(s.indexOf(_)>-1)throw new Error("Unsupported path command: "+_+". Currently supported commands are "+i.split("").join(", ")+".");` , +\r\f\v`.indexOf(_)>-1?o.push(""):_==="."?!a.type||p.indexOf(_)>-1?l=!0:o[o.length-1]+=_:l=!0}if(l)throw new Error("Unexpected character: "+_+" at offset "+m)}d.apply(this),e.optimize&&(this.commands=Ff(this.commands));const h=e.flipY;let f=e.flipYBase;if(h===!0&&e.flipYBase===void 0){const m=this.getBoundingBox();f=m.y1+m.y2}for(const m in this.commands){const _=this.commands[m];for(const p in _)["x","x1","x2"].includes(p)?this.commands[m][p]=e.x+_[p]*e.scale:["y","y1","y2"].includes(p)&&(this.commands[m][p]=e.y+(h?f-_[p]:_[p])*e.scale)}return this};Ft.fromSVG=function(n,e){return new Ft().fromSVG(n,e)};Ft.prototype.moveTo=function(n,e){this.commands.push({type:"M",x:n,y:e})};Ft.prototype.lineTo=function(n,e){this.commands.push({type:"L",x:n,y:e})};Ft.prototype.curveTo=Ft.prototype.bezierCurveTo=function(n,e,t,i,s,r){this.commands.push({type:"C",x1:n,y1:e,x2:t,y2:i,x:s,y:r})};Ft.prototype.quadTo=Ft.prototype.quadraticCurveTo=function(n,e,t,i){this.commands.push({type:"Q",x1:n,y1:e,x:t,y:i})};Ft.prototype.close=Ft.prototype.closePath=function(){this.commands.push({type:"Z"})};Ft.prototype.extend=function(n){if(n.commands)n=n.commands;else if(n instanceof Nf){const e=n;this.moveTo(e.x1,e.y1),this.lineTo(e.x2,e.y1),this.lineTo(e.x2,e.y2),this.lineTo(e.x1,e.y2),this.close();return}Array.prototype.push.apply(this.commands,n)};Ft.prototype.getBoundingBox=function(){const n=new Nf;let e=0,t=0,i=0,s=0;for(let r=0;r=0&&l>0&&(o+=" "),o+=e(c)}return o}let i=this.commands;n.optimize&&(i=JSON.parse(JSON.stringify(this.commands)),i=Ff(i));const s=n.flipY;let r=n.flipYBase;if(s===!0&&r===void 0){const o=new Ft;o.extend(i);const l=o.getBoundingBox();r=l.y1+l.y2}let a="";for(let o=0;o=0&&n<=255,"Byte value should be between 0 and 255."),[n]};qe.BYTE=Nn(1);Se.CHAR=function(n){return[n.charCodeAt(0)]};qe.CHAR=Nn(1);Se.CHARARRAY=function(n){(n===null||typeof n>"u")&&(n="",console.warn("CHARARRAY with undefined or null value encountered and treated as an empty string. This is probably caused by a missing glyph name."));const e=[];for(let t=0;t"u"?0:n.length};Se.USHORT=function(n){return[n>>8&255,n&255]};qe.USHORT=Nn(2);Se.SHORT=function(n){return n>=Lh&&(n=-(2*Lh-n)),[n>>8&255,n&255]};qe.SHORT=Nn(2);Se.UINT24=function(n){return[n>>16&255,n>>8&255,n&255]};qe.UINT24=Nn(3);Se.ULONG=function(n){return[n>>24&255,n>>16&255,n>>8&255,n&255]};qe.ULONG=Nn(4);Se.LONG=function(n){return n>=Ih&&(n=-(2*Ih-n)),[n>>24&255,n>>16&255,n>>8&255,n&255]};qe.LONG=Nn(4);Se.FLOAT=function(n){if(n>vv||n>24&255,n>>16&255,n>>8&255,n&255]};qe.LONGDATETIME=Nn(8);Se.TAG=function(n){return Fe.argument(n.length===4,"Tag should be exactly 4 ASCII characters."),[n.charCodeAt(0),n.charCodeAt(1),n.charCodeAt(2),n.charCodeAt(3)]};qe.TAG=Nn(4);Se.Card8=Se.BYTE;qe.Card8=qe.BYTE;Se.Card16=Se.USHORT;qe.Card16=qe.USHORT;Se.OffSize=Se.BYTE;qe.OffSize=qe.BYTE;Se.SID=Se.USHORT;qe.SID=qe.USHORT;Se.NUMBER=function(n){return n>=-107&&n<=107?[n+139]:n>=108&&n<=1131?(n=n-108,[(n>>8)+247,n&255]):n>=-1131&&n<=-108?(n=-n-108,[(n>>8)+251,n&255]):n>=-32768&&n<=32767?Se.NUMBER16(n):Se.NUMBER32(n)};qe.NUMBER=function(n){return Se.NUMBER(n).length};Se.NUMBER16=function(n){return[28,n>>8&255,n&255]};qe.NUMBER16=Nn(3);Se.NUMBER32=function(n){return[29,n>>24&255,n>>16&255,n>>8&255,n&255]};qe.NUMBER32=Nn(5);Se.REAL=function(n){let e=n.toString();const t=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(t){const r=parseFloat("1e"+((t[2]?+t[2]:0)+t[1].length));e=(Math.round(n*r)/r).toString()}let i="";for(let r=0,a=e.length;r>8&255,e[e.length]=i&255}return e};qe.UTF16=function(n){return n.length*2};var to={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Zs.MACSTRING=function(n,e,t,i){const s=to[i];if(s===void 0)return;let r="";for(let a=0;a=128&&(r=t[r],r===void 0))return;i[s]=r}return i};qe.MACSTRING=function(n,e){const t=Se.MACSTRING(n,e);return t!==void 0?t.length:0};function vc(n){return n>=-128&&n<=127}function bv(n,e,t){let i=0;const s=n.length;for(;e>8&255,o+256&255)}return r}Se.VARDELTAS=function(n){let e=0;const t=[];for(;e=-128&&i<=127?e=Mv(n,e,t):e=Av(n,e,t)}return t};Se.INDEX=function(n){let e=1;const t=[e],i=[];for(let o=0;o>8,e[a+1]=o&255;for(let l=0;l0)return new q(this.data,this.offset+e).parseStruct(n)};q.prototype.parsePointer32=function(n){const e=this.parseOffset32();if(e>0)return new q(this.data,this.offset+e).parseStruct(n)};q.prototype.parseListOfLists=function(n){const e=this.parseOffset16List(),t=e.length,i=this.relativeOffset,s=new Array(t);for(let r=0;r>4)+1;for(let a=0;a>s,c=o&(1<[]),s=e&$t.LONG_WORDS,r=e&$t.WORD_DELTA_COUNT_MASK;if(r>t)throw Error("wordCount must be less than or equal to regionIndexCount");const a=(s?this.parseLong:this.parseShort).bind(this),o=(s?this.parseShort:this.parseChar).bind(this);for(let l=0;l{let x,E;const S=()=>{let M=0;if(t==="gvar"){if(M=_.privatePoints.length||d.length,!M){const y=i.get(s);y.path,M=y.points.length,M+=4}}else t==="cvar"&&(M=i.length);this.offset=p,this.relativeOffset=g,x=this.parsePackedDeltas(M),t==="gvar"&&(E=this.parsePackedDeltas(M))};return{configurable:!0,get:function(){return x===void 0&&S(),A==="deltasY"?E:x},set:function(M){x===void 0&&S(),A==="deltasY"?E=M:x=M}}};Object.defineProperty(_,"deltas",b.call(this,"deltas")),t==="gvar"&&Object.defineProperty(_,"deltasY",b.call(this,"deltasY")),h+=_.variationDataSize,delete _.variationDataSize}this.relativeOffset=r;const f={headers:u};return f.sharedPoints=d,f};q.prototype.parseTupleVariationHeader=function(n,e){const t=this.parseUShort(),i=this.parseUShort(),s=!!(i&$t.EMBEDDED_PEAK_TUPLE),r=!!(i&$t.INTERMEDIATE_REGION),a=!!(i&$t.PRIVATE_POINT_NUMBERS),o=s?void 0:i&$t.TUPLE_INDEX_MASK,l=s?this.parseTupleRecords(1,n)[0]:void 0,c=r?this.parseTupleRecords(1,n)[0]:void 0,u=r?this.parseTupleRecords(1,n)[0]:void 0,d={variationDataSize:t,peakTuple:l,intermediateStartTuple:c,intermediateEndTuple:u,flags:{embeddedPeakTuple:s,intermediateRegion:r,privatePointNumbers:a}};return e==="gvar"&&(d.sharedTupleRecordsIndex=o),d};q.prototype.parsePackedPointNumbers=function(){const n=this.parseByte(),e=[];let t=n;if(n>=128){const s=this.parseByte();t=(n&$t.POINT_RUN_COUNT_MASK)<<8|s}let i=0;for(;e.length>1,e.skip("uShort",3),n.glyphIndexMap={};const a=new Ae.Parser(t,i+s+14),o=new Ae.Parser(t,i+s+16+r*2),l=new Ae.Parser(t,i+s+16+r*4),c=new Ae.Parser(t,i+s+16+r*6);let u=i+s+16+r*8;for(let d=0;d=0;d-=1)if(a=Ae.getUShort(n,e+4+d*8),o=Ae.getUShort(n,e+4+d*8+2),a===3&&c.includes(o)||a===0&&l.includes(o)||a===1&&o===0){if(r>0)continue;if(r=Ae.getULong(n,e+4+d*8+4),i)break}else if(a===0&&o===5){if(s=Ae.getULong(n,e+4+d*8+4),i=new Ae.Parser(n,e+s),i.parseUShort()!==14)s=-1,i=null;else if(r>0)break}if(r===-1)throw new Error("No valid cmap sub-tables found.");const u=new Ae.Parser(n,e+r);if(t.format=u.parseUShort(),t.format===0)Hv(t,u,a,o);else if(t.format===12||t.format===13)zv(t,u,t.format);else if(t.format===4)Vv(t,u,n,e,r);else throw new Error("Only format 0 (platformId 1, encodingId 0), 4, 12 and 14 cmap tables are supported (found format "+t.format+", platformId "+a+", encodingId "+o+").");return i&&Gv(t,i),t}function Xv(n,e,t){n.segments.push({end:e,start:e,delta:-(e-t),offset:0,glyphIndex:t})}function Yv(n){n.segments.push({end:65535,start:65535,delta:1,offset:0})}function Kv(n){if(n.length===0)return n;const e=[n[0]];for(let t=1;t0;t-=1)if(n.get(t).unicode>65535){e=!1;break}let i=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:e?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:e?12:20}];e||i.push({name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}),i.push({name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0});const s=new me.Table("cmap",i);for(s.segments=[],t=0;t1&&Fe.argument(e,"Can't infer numPaletteEntries on multiple colorRecordIndices"),new me.Table("CPAL",[{name:"version",type:"USHORT",value:n},{name:"numPaletteEntries",type:"USHORT",value:e||t.length},{name:"numPalettes",type:"USHORT",value:i.length},{name:"numColorRecords",type:"USHORT",value:t.length},{name:"colorRecordsArrayOffset",type:"ULONG",value:12+2*i.length},...i.map((s,r)=>({name:"colorRecordIndices_"+r,type:"USHORT",value:s})),...t.map((s,r)=>({name:"colorRecords_"+r,type:"ULONG",value:s}))])}function $f(n){var e=(n&4278190080)>>24,t=(n&16711680)>>16,i=(n&65280)>>8,s=n&255;return e=e+256&255,t=t+256&255,i=i+256&255,s=(s+256&255)/255,{b:e,g:t,r:i,a:s}}function Qc(n,e,t=0,i="hexa"){if(e==65535)return"currentColor";const s=n&&n.tables&&n.tables.cpal;if(!s)return"currentColor";if(t>s.colorRecordIndices.length-1)throw new Error(`Palette index out of range (colorRecordIndices.length: ${s.colorRecordIndices.length}, index: ${e})`);if(e>s.numPaletteEntries)throw new Error(`Color index out of range (numPaletteEntries: ${s.numPaletteEntries}, index: ${e})`);const r=s.colorRecordIndices[t]+e;if(r>s.colorRecords)throw new Error(`Color index out of range (colorRecords.length: ${s.colorRecords.length}, lookupIndex: ${r})`);const a=$f(s.colorRecords[r]);return i==="bgra"?a:js(a,i)}function Rn(n){return("0"+parseInt(n).toString(16)).slice(-2)}function rS(n){const e=n.r/255,t=n.g/255,i=n.b/255,s=Math.max(e,t,i),r=Math.min(e,t,i);let a,o,l=(s+r)/2;if(s===r)a=o=0;else{const c=s-r;switch(o=l>.5?c/(2-s-r):c/(s+r),s){case e:a=(t-i)/c+(ttypeof o<"u");n={r:Math.round(parseFloat(a[1])/(a[2]?100/255:1)),g:Math.round(parseFloat(a[3])/(a[4]?100/255:1)),b:Math.round(parseFloat(a[5])/(a[6]?100/255:1)),a:a[7]?parseFloat(a[7])/(a[8]?100:1):1}}else{const a=/hsla?\(\s*(?:(\d*\.\d+|\d+)(deg|turn|))\s*(?:,|\s*)\s*(?:(\d*\.\d+)%?|(\d+)%?)\s*(?:,|\s*)\s*(?:(\d*\.\d+)%?|(\d+)%?)\s*(?:(?:,|\s|\/)\s*(?:(0*(?:\.\d+)?()|0*1(?:\.0+)?())|(?:\.\d+)|(\d+)(%)|(\d*\.\d+)(%)))?\s*\)/;if(a.test(n)){const o=n.match(a).filter(l=>typeof l<"u");n=aS({h:parseFloat(o[1])*(o[2]==="turn"?360:1),s:parseFloat(o[3]),l:parseFloat(o[4]),a:o[5]?parseFloat(o[5])/(o[6]?100:1):1})}else s=!1}}if(!s)throw new Error(`Invalid color format: ${n}`);return js(n,e)}function js(n,e="hexa"){if(n==="currentColor")return n;if(Number.isInteger(n)){if(e=="raw"||e=="cpal")return n;n=$f(n)}else typeof n!="object"&&(n=uo(n,"bgra"));let t=["hsl","hsla"].includes(e)?rS(n):null;switch(e){case"rgba":return`rgba(${n.r}, ${n.g}, ${n.b}, ${parseFloat(n.a.toFixed(3))})`;case"rgb":return`rgb(${n.r}, ${n.g}, ${n.b})`;case"hex":case"hex6":case"hex-6":return`#${Rn(n.r)}${Rn(n.g)}${Rn(n.b)}`;case"hexa":case"hex8":case"hex-8":return`#${Rn(n.r)}${Rn(n.g)}${Rn(n.b)}${Rn(n.a*255)}`;case"hsl":return`hsl(${t.h.toFixed(2)}, ${t.s.toFixed(2)}%, ${t.l.toFixed(2)}%)`;case"hsla":return`hsla(${t.h.toFixed(2)}, ${t.s.toFixed(2)}%, ${t.l.toFixed(2)}%, ${parseFloat(n.a.toFixed(3))})`;case"bgra":return n;case"raw":case"cpal":return Jf(n);default:throw new Error("Unknown color format: "+e)}}var jf={parse:iS,make:sS,getPaletteColor:Qc,parseColor:uo,formatColor:js};function oS(n,e){let t=e||new qs;return{configurable:!0,get:function(){return typeof t=="function"&&(t=t()),t},set:function(i){t=i}}}function jt(n){this.bindConstructorValues(n)}jt.prototype.bindConstructorValues=function(n){if(this.index=n.index||0,n.name===".notdef"?n.unicode=void 0:n.name===".null"&&(n.unicode=0),n.unicode===0&&n.name!==".null")throw new Error('The unicode value "0" is reserved for the glyph name ".null" and cannot be used by any other glyph.');this.name=n.name||null,this.unicode=n.unicode,this.unicodes=n.unicodes||(n.unicode!==void 0?[n.unicode]:[]),"xMin"in n&&(this.xMin=n.xMin),"yMin"in n&&(this.yMin=n.yMin),"xMax"in n&&(this.xMax=n.xMax),"yMax"in n&&(this.yMax=n.yMax),"advanceWidth"in n&&(this.advanceWidth=n.advanceWidth),"leftSideBearing"in n&&(this.leftSideBearing=n.leftSideBearing),"points"in n&&(this.points=n.points),Object.defineProperty(this,"path",oS(this,n.path))};jt.prototype.addUnicode=function(n){this.unicodes.length===0&&(this.unicode=n),this.unicodes.push(n)};jt.prototype.getBoundingBox=function(){return this.path.getBoundingBox()};jt.prototype.getPath=function(n,e,t,i,s){n=n!==void 0?n:0,e=e!==void 0?e:0,t=t!==void 0?t:72,i=Object.assign({},s&&s.defaultRenderOptions,i);let r,a,o=i.xScale,l=i.yScale;const c=1/(this.path.unitsPerEm||1e3)*t;let u=this;s&&s.variation&&(u=s.variation.getTransform(this,i.variation),r=u.path.commands),i.hinting&&s&&s.hinting&&(a=u.path&&s.hinting.exec(u,t,i)),a?(r=s.hinting.getCommands(a),n=Math.round(n),e=Math.round(e),o=l=1):(r=u.path.commands,o===void 0&&(o=c),l===void 0&&(l=c));const d=new qs;if(i.drawSVG){const h=this.getSvgImage(s);if(h){const f=new qs;return f._image={image:h.image,x:n+h.leftSideBearing*c,y:e-h.baseline*c,width:h.image.width*c,height:h.image.height*c},d._layers=[f],d}}if(i.drawLayers){const h=this.getLayers(s);if(h&&h.length){d._layers=[];for(let f=0;f"u"&&n.path,n[t]},set:function(i){n[t]=i},enumerable:!0,configurable:!0})}function vo(n,e){if(this.font=n,this.glyphs={},Array.isArray(e))for(let t=0;t=this.length-1;return{value:this.get(n),done:e}}).bind(this)}});vo.prototype.get=function(n){if(this.font._push&&this.glyphs[n]===void 0){this.font._push(n),typeof this.glyphs[n]=="function"&&(this.glyphs[n]=this.glyphs[n]());let e=this.glyphs[n],t=this.font._IndexToUnicodeMap[n];if(t)for(let i=0;i1?Ae.getULong(n,e):Ae.getCard16(n,e),o=i>1?4:2;let l,c;if(a!==0){const u=Ae.getByte(n,e+o);l=e+(a+1)*u+o;let d=e+o+1;for(let h=0;h1?Ae.getULong(n,e):Ae.getCard16(n,e),r=t>1?4:2;let a,o;if(s!==0){const l=Ae.getByte(n,e+r);a=e+(s+1)*l+r;let c=e+r+1;for(let u=0;u1?Ae.getULong(t,i):Ae.getCard16(t,i),o=r>1?4:2;let l=0;if(a!==0){const u=Ae.getByte(t,i+o);l=i+(a+1)*u+o}return Ae.getBytes(t,l+e[n],l+e[n+1])}function fS(n){let e="";const i=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"];for(;;){const s=n.parseByte(),r=s>>4,a=s&15;if(r===15||(e+=i[r],a===15))break;e+=i[a]}return parseFloat(e)}function pS(n,e){let t,i,s,r;if(e===28)return t=n.parseByte(),i=n.parseByte(),t<<8|i;if(e===29)return t=n.parseByte(),i=n.parseByte(),s=n.parseByte(),r=n.parseByte(),t<<24|i<<16|s<<8|r;if(e===30)return fS(n);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return t=n.parseByte(),(e-247)*256+t+108;if(e>=251&&e<=254)return t=n.parseByte(),-(e-251)*256-t-108;throw new Error("Invalid b0 "+e)}function mS(n){const e={};for(let t=0;t1&&l===23){ES(a);continue}r.push([l,a]),a=[]}else a.push(pS(s,l))}return mS(r)}function Ar(n,e){return e<=390?e=za[e]:n?e=n[e-391]:e=void 0,e}function tu(n,e,t){const i={};let s;for(let r=0;r2)throw new Error(`Unsupported CFF table version ${t.formatMajor}.${t.formatMinor}`);return t.size=Ae.getCard8(n,e+2),t.formatMajor<2?(t.offsetSize=Ae.getCard8(n,e+3),t.startOffset=e,t.endOffset=e+4):(t.topDictLength=Ae.getCard16(n,e+3),t.endOffset=e+8),t}var ep=[{name:"version",op:0,type:"SID"},{name:"notice",op:1,type:"SID"},{name:"copyright",op:1200,type:"SID"},{name:"fullName",op:2,type:"SID"},{name:"familyName",op:3,type:"SID"},{name:"weight",op:4,type:"SID"},{name:"isFixedPitch",op:1201,type:"number",value:0},{name:"italicAngle",op:1202,type:"number",value:0},{name:"underlinePosition",op:1203,type:"number",value:-100},{name:"underlineThickness",op:1204,type:"number",value:50},{name:"paintType",op:1205,type:"number",value:0},{name:"charstringType",op:1206,type:"number",value:2},{name:"fontMatrix",op:1207,type:["real","real","real","real","real","real"],value:[.001,0,0,.001,0,0]},{name:"uniqueId",op:13,type:"number"},{name:"fontBBox",op:5,type:["number","number","number","number"],value:[0,0,0,0]},{name:"strokeWidth",op:1208,type:"number",value:0},{name:"xuid",op:14,type:[],value:null},{name:"charset",op:15,type:"offset",value:0},{name:"encoding",op:16,type:"offset",value:0},{name:"charStrings",op:17,type:"offset",value:0},{name:"private",op:18,type:["number","offset"],value:[0,0]},{name:"ros",op:1230,type:["SID","SID","number"]},{name:"cidFontVersion",op:1231,type:"number",value:0},{name:"cidFontRevision",op:1232,type:"number",value:0},{name:"cidFontType",op:1233,type:"number",value:0},{name:"cidCount",op:1234,type:"number",value:8720},{name:"uidBase",op:1235,type:"number"},{name:"fdArray",op:1236,type:"offset"},{name:"fdSelect",op:1237,type:"offset"},{name:"fontName",op:1238,type:"SID"}],_S=[{name:"fontMatrix",op:1207,type:["real","real","real","real","real","real"],value:[.001,0,0,.001,0,0]},{name:"charStrings",op:17,type:"offset"},{name:"fdArray",op:1236,type:"offset"},{name:"fdSelect",op:1237,type:"offset"},{name:"vstore",op:24,type:"offset"}],tp=[{name:"subrs",op:19,type:"offset",value:0},{name:"defaultWidthX",op:20,type:"number",value:0},{name:"nominalWidthX",op:21,type:"number",value:0}],xS=[{name:"blueValues",op:6,type:"delta"},{name:"otherBlues",op:7,type:"delta"},{name:"familyBlues",op:7,type:"delta"},{name:"familyBlues",op:8,type:"delta"},{name:"familyOtherBlues",op:9,type:"delta"},{name:"blueScale",op:1209,type:"number",value:.039625},{name:"blueShift",op:1210,type:"number",value:7},{name:"blueFuzz",op:1211,type:"number",value:1},{name:"stdHW",op:10,type:"number"},{name:"stdVW",op:11,type:"number"},{name:"stemSnapH",op:1212,type:"number"},{name:"stemSnapV",op:1213,type:"number"},{name:"languageGroup",op:1217,type:"number",value:0},{name:"expansionFactor",op:1218,type:"number",value:.06},{name:"vsindex",op:22,type:"number",value:0},{name:"subrs",op:19,type:"offset"}],yS=[{name:"private",op:18,type:["number","offset"],value:[0,0]}];function vS(n,e,t,i){const s=eu(n,e,n.byteLength,i);return tu(s,i>1?_S:ep,t)}function nu(n,e,t,i,s){const r=eu(n,e,t,s);return tu(r,s>1?xS:tp,i)}function SS(n,e,t){const i=eu(n,e,void 0,t);return tu(i,yS)}function bS(n,e,t){const i=[];for(let s=0;se;)n.pop()}function np(n,e){const t=n.tables.cff&&n.tables.cff.topDict&&n.tables.cff.topDict.paintType||0;return t===2&&(e.fill=null,e.stroke="black",e.strokeWidth=n.tables.cff.topDict.strokeWidth||0),t}function Ac(n,e,t,i,s){let r,a,o,l;const c=new qs,u=[];let d=0,h=!1,f=!1,m=0,_=0,p,g,b,A,x=0,E=[],S,M=0;const y=n.tables.cff2||n.tables.cff;if(b=y.topDict._defaultWidthX,A=y.topDict._nominalWidthX,s=s||n.variation&&n.variation.get(),e.getBlendPath||(e.getBlendPath=function(k){return Ac(n,e,t,i,k)}),n.isCIDFont||i>1){const k=y.topDict._fdSelect?y.topDict._fdSelect[e.index]:0,O=y.topDict._fdArray[k];p=O._subrs,g=O._subrsBias,i>1?(E=y.topDict._vstore.itemVariationStore,x=O._privateDict.vsindex):(b=O._defaultWidthX,A=O._nominalWidthX)}else p=y.topDict._subrs,g=y.topDict._subrsBias;const T=np(n,c);let I=b;function L(k,O){f&&T!==2&&c.closePath(),c.moveTo(k,O),f=!0}function w(){let k;k=(u.length&1)!==0,k&&!h&&(I=u.shift()+A),d+=u.length>>1,u.length=0,h=!0}function U(k){let O,$,F,Z,R,re,se,ae,ge,he,oe,G,ne=0;for(;ne1&&!h&&(I=u.shift()+A,h=!0),_+=u.pop(),L(m,_);break;case 5:for(;u.length>0;)m+=u.shift(),_+=u.shift(),c.lineTo(m,_);break;case 6:for(;u.length>0&&(m+=u.shift(),c.lineTo(m,_),u.length!==0);)_+=u.shift(),c.lineTo(m,_);break;case 7:for(;u.length>0&&(_+=u.shift(),c.lineTo(m,_),u.length!==0);)m+=u.shift(),c.lineTo(m,_);break;case 8:for(;u.length>0;)r=m+u.shift(),a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),m=o+u.shift(),_=l+u.shift(),c.curveTo(r,a,o,l,m,_);break;case 10:if(R=u.pop()+g,re=p[R],re){if(M>=kh){console.warn("CFF charstring subroutine call depth exceeded, skipping callsubr");break}M++,U(re),M--}break;case 11:if(i>1){console.error("CFF CharString operator return (11) is not supported in CFF2");break}return;case 12:switch(Ne=k[ne],ne+=1,Ne){case 35:r=m+u.shift(),a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),se=o+u.shift(),ae=l+u.shift(),ge=se+u.shift(),he=ae+u.shift(),oe=ge+u.shift(),G=he+u.shift(),m=oe+u.shift(),_=G+u.shift(),u.shift(),c.curveTo(r,a,o,l,se,ae),c.curveTo(ge,he,oe,G,m,_);break;case 34:r=m+u.shift(),a=_,o=r+u.shift(),l=a+u.shift(),se=o+u.shift(),ae=l,ge=se+u.shift(),he=l,oe=ge+u.shift(),G=_,m=oe+u.shift(),c.curveTo(r,a,o,l,se,ae),c.curveTo(ge,he,oe,G,m,_);break;case 36:r=m+u.shift(),a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),se=o+u.shift(),ae=l,ge=se+u.shift(),he=l,oe=ge+u.shift(),G=he+u.shift(),m=oe+u.shift(),c.curveTo(r,a,o,l,se,ae),c.curveTo(ge,he,oe,G,m,_);break;case 37:r=m+u.shift(),a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),se=o+u.shift(),ae=l+u.shift(),ge=se+u.shift(),he=ae+u.shift(),oe=ge+u.shift(),G=he+u.shift(),Math.abs(oe-m)>Math.abs(G-_)?m=oe+u.shift():_=G+u.shift(),c.curveTo(r,a,o,l,se,ae),c.curveTo(ge,he,oe,G,m,_);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+Ne),u.length=0}break;case 14:if(i>1){console.error("CFF CharString operator endchar (14) is not supported in CFF2");break}if(u.length>=4){const ke=Mc[u.pop()],Xe=Mc[u.pop()],tt=u.pop(),rt=u.pop();if(ke&&Xe){e.isComposite=!0,e.components=[];const gt=n.cffEncoding.charset.indexOf(ke),vt=n.cffEncoding.charset.indexOf(Xe);e.components.push({glyphIndex:vt,dx:0,dy:0}),e.components.push({glyphIndex:gt,dx:rt,dy:tt}),c.extend(n.glyphs.get(vt).path);const ht=n.glyphs.get(gt),dt=JSON.parse(JSON.stringify(ht.path.commands));for(let D=0;D0&&!h&&(I=u.shift()+A,h=!0);f&&T!==2&&(c.closePath(),f=!1);break;case 15:if(i<2){console.error("CFF2 CharString operator vsindex (15) is not supported in CFF");break}x=u.pop();break;case 16:if(i<2){console.error("CFF2 CharString operator blend (16) is not supported in CFF");break}S||(S=n.variation&&s&&n.variation.process.getBlendVector(E,x,s));var j=u.pop(),xe=S?S.length:E.itemVariationSubtables[x].regionIndexes.length,be=j*xe,ve=u.length-be,Be=ve-j;if(S)for(let ke=0;ke>3;break;case 21:u.length>2&&!h&&(I=u.shift()+A,h=!0),_+=u.pop(),m+=u.pop(),L(m,_);break;case 22:u.length>1&&!h&&(I=u.shift()+A,h=!0),m+=u.pop(),L(m,_);break;case 23:w();break;case 24:for(;u.length>2;)r=m+u.shift(),a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),m=o+u.shift(),_=l+u.shift(),c.curveTo(r,a,o,l,m,_);m+=u.shift(),_+=u.shift(),c.lineTo(m,_);break;case 25:for(;u.length>6;)m+=u.shift(),_+=u.shift(),c.lineTo(m,_);r=m+u.shift(),a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),m=o+u.shift(),_=l+u.shift(),c.curveTo(r,a,o,l,m,_);break;case 26:for(u.length&1&&(m+=u.shift());u.length>0;)r=m,a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),m=o,_=l+u.shift(),c.curveTo(r,a,o,l,m,_);break;case 27:for(u.length&1&&(_+=u.shift());u.length>0;)r=m+u.shift(),a=_,o=r+u.shift(),l=a+u.shift(),m=o+u.shift(),_=l,c.curveTo(r,a,o,l,m,_);break;case 28:O=k[ne],$=k[ne+1],u.push((O<<24|$<<16)>>16),ne+=2;break;case 29:if(R=u.pop()+n.gsubrsBias,re=n.gsubrs[R],re){if(M>=kh){console.warn("CFF charstring subroutine call depth exceeded, skipping callgsubr");break}M++,U(re),M--}break;case 30:for(;u.length>0&&(r=m,a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),m=o+u.shift(),_=l+(u.length===1?u.shift():0),c.curveTo(r,a,o,l,m,_),u.length!==0);)r=m+u.shift(),a=_,o=r+u.shift(),l=a+u.shift(),_=l+u.shift(),m=o+(u.length===1?u.shift():0),c.curveTo(r,a,o,l,m,_);break;case 31:for(;u.length>0&&(r=m+u.shift(),a=_,o=r+u.shift(),l=a+u.shift(),_=l+u.shift(),m=o+(u.length===1?u.shift():0),c.curveTo(r,a,o,l,m,_),u.length!==0);)r=m,a=_+u.shift(),o=r+u.shift(),l=a+u.shift(),m=o+u.shift(),_=l+(u.length===1?u.shift():0),c.curveTo(r,a,o,l,m,_);break;default:Ne<32?console.log("Glyph "+e.index+": unknown operator "+Ne):Ne<247?u.push(Ne-139):Ne<251?(O=k[ne],ne+=1,u.push((Ne-247)*256+O+108)):Ne<255?(O=k[ne],ne+=1,u.push(-(Ne-251)*256-O-108)):(O=k[ne],$=k[ne+1],F=k[ne+2],Z=k[ne+3],ne+=4,u.push((O<<24|$<<16|F<<8|Z)/65536))}}}return U(t),n.variation&&s&&(c.commands=c.commands.map(k=>{const O=Object.keys(k);for(let $=0;$=i)throw new Error("CFF table CID Font FDSelect has bad FD index value "+a+" (FD count "+i+")");r.push(a)}else if(l===3||s>1&&l===4){const c=l===4?o.parseULong():o.parseCard16();let u=l===4?o.parseULong():o.parseCard16();if(u!==0)throw new Error(`CFF Table CID Font FDSelect format ${l} range has bad initial GID ${u}`);let d;for(let h=0;h=i)throw new Error("CFF table CID Font FDSelect has bad FD index value "+a+" (FD count "+i+")");if(d>t)throw new Error(`CFF Table CID Font FDSelect format ${s} range has bad GID ${d}`);for(;u1?null:Kn(n,r.endOffset,Ae.bytesToString),o=r.formatMajor>1?null:Kn(n,a.endOffset),l=r.formatMajor>1?null:Kn(n,o.endOffset,Ae.bytesToString),c=Kn(n,r.formatMajor>1?e+r.size+r.topDictLength:l.endOffset,void 0,r.formatMajor);t.gsubrs=c.objects,t.gsubrsBias=ho(t.gsubrs);let u;if(r.formatMajor>1){const h=e+r.size,f=Ae.getBytes(n,h,h+r.topDictLength);u=ul(n,0,[f],void 0,r.formatMajor)[0]}else{const h=ul(n,e,o.objects,l.objects,r.formatMajor);if(h.length!==1)throw new Error("CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = "+h.length);u=h[0]}if(s.topDict=u,u._privateDict&&(t.defaultWidthX=u._privateDict.defaultWidthX,t.nominalWidthX=u._privateDict.nominalWidthX),r.formatMajor<2&&u.ros[0]!==void 0&&u.ros[1]!==void 0&&(t.isCIDFont=!0),r.formatMajor>1){let h=u.fdArray,f=u.fdSelect;if(!h)throw new Error("This is a CFF2 font, but FDArray information is missing");const m=Kn(n,e+h,null,r.formatMajor),_=bS(n,e,m.objects);u._fdArray=_,f&&(u._fdSelect=Fh(n,e+f,t.numGlyphs,_.length,r.formatMajor))}else if(t.isCIDFont){let h=u.fdArray,f=u.fdSelect;if(h===0||f===0)throw new Error("Font is marked as a CID font, but FDArray and/or FDSelect information is missing");h+=e;const m=Kn(n,h),_=ul(n,e,m.objects,l.objects,r.formatMajor);u._fdArray=_,f+=e,u._fdSelect=Fh(n,f,t.numGlyphs,_.length,r.formatMajor)}if(r.formatMajor<2){const h=e+u.private[1],f=nu(n,h,u.private[0],l.objects,r.formatMajor);if(t.defaultWidthX=f.defaultWidthX,t.nominalWidthX=f.nominalWidthX,f.subrs!==0){const m=h+f.subrs,_=Kn(n,m);t.subrs=_.objects,t.subrsBias=ho(t.subrs)}else t.subrs=[],t.subrsBias=0}let d;if(i.lowMemory?(d=hS(n,e+u.charStrings,r.formatMajor),t.nGlyphs=d.offsets.length-(r.formatMajor>1?1:0)):(d=Kn(n,e+u.charStrings,null,r.formatMajor),t.nGlyphs=d.objects.length),r.formatMajor>1&&t.tables.maxp&&t.nGlyphs!==t.tables.maxp.numGlyphs&&console.error(`Glyph count in the CFF2 table (${t.nGlyphs}) must correspond to the glyph count in the maxp table (${t.tables.maxp.numGlyphs})`),r.formatMajor<2){let h=[],f=[];u.charset===0?h=Zv:u.charset===1?h=$v:u.charset===2?h=Jv:h=MS(n,e+u.charset,t.nGlyphs,l.objects,t.isCIDFont),u.encoding===0?f=Mc:u.encoding===1?f=jv:f=AS(n,e+u.encoding),t.cffEncoding=new Zf(f,h),t.encoding=t.encoding||t.cffEncoding}if(t.glyphs=new ti.GlyphSet(t),i.lowMemory)t._push=function(h){const f=dS(h,d.offsets,n,e+u.charStrings,void 0,r.formatMajor);t.glyphs.push(h,ti.cffGlyphLoader(t,h,Ac,f,r.formatMajor))};else for(let h=0;h=0&&(t=i),i=e.indexOf(n),i>=0?t=i+za.length:(t=za.length+e.length,e.push(n)),t}function CS(){return new me.Record("Header",[{name:"major",type:"Card8",value:1},{name:"minor",type:"Card8",value:0},{name:"hdrSize",type:"Card8",value:4},{name:"major",type:"Card8",value:1}])}function wS(n){const e=new me.Record("Name INDEX",[{name:"names",type:"INDEX",value:[]}]);e.names=[];for(let t=0;t=t.begin&&n=1&&(t.ulCodePageRange1=i.parseULong(),t.ulCodePageRange2=i.parseULong()),t.version>=2&&(t.sxHeight=i.parseShort(),t.sCapHeight=i.parseShort(),t.usDefaultChar=i.parseUShort(),t.usBreakChar=i.parseUShort(),t.usMaxContent=i.parseUShort()),t}function $S(n){return new me.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],n)}var Cc={parse:ZS,make:$S,unicodeRanges:Tc,getUnicodeRange:qS};function JS(n,e){const t={},i=new Ae.Parser(n,e);switch(t.version=i.parseVersion(),t.italicAngle=i.parseFixed(),t.underlinePosition=i.parseShort(),t.underlineThickness=i.parseShort(),t.isFixedPitch=i.parseULong(),t.minMemType42=i.parseULong(),t.maxMemType42=i.parseULong(),t.minMemType1=i.parseULong(),t.maxMemType1=i.parseULong(),t.version){case 1:t.names=es.slice();break;case 2:t.numberOfGlyphs=i.parseUShort(),t.glyphNameIndex=new Array(t.numberOfGlyphs);for(let s=0;s=es.length){const r=i.parseChar();t.names.push(i.parseString(r))}break;case 2.5:t.numberOfGlyphs=i.parseUShort(),t.offset=new Array(t.numberOfGlyphs);for(let s=0;s[{name:"glyphID_"+a,type:"USHORT",value:r.glyphID},{name:"firstLayerIndex_"+a,type:"USHORT",value:r.firstLayerIndex},{name:"numLayers_"+a,type:"USHORT",value:r.numLayers}]).flat(),...t.map((r,a)=>[{name:"LayerGlyphID_"+a,type:"USHORT",value:r.glyphID},{name:"paletteIndex_"+a,type:"USHORT",value:r.paletteIndex}]).flat()])}var fp={parse:ib,make:sb};function rb(n,e){return[{name:"tag_"+n,type:"TAG",value:e.tag},{name:"minValue_"+n,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+n,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+n,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+n,type:"USHORT",value:0},{name:"nameID_"+n,type:"USHORT",value:e.axisNameID}]}function ab(n,e,t){const i={},s=new Ae.Parser(n,e);i.tag=s.parseTag(),i.minValue=s.parseFixed(),i.defaultValue=s.parseFixed(),i.maxValue=s.parseFixed(),s.skip("uShort",1);const r=s.parseUShort();return i.axisNameID=r,i.name=co(t,r),i}function ob(n,e,t,i={}){const s=[{name:"nameID_"+n,type:"USHORT",value:e.subfamilyNameID},{name:"flags_"+n,type:"USHORT",value:0}];for(let r=0;r1||r>0?i.parseUShort():void 0;t!==void 0&&Fe.argument(l>=t.axes.length,"STAT axis count must be greater than or equal to fvar axis count"),u>0&&Fe.argument(l>=0,"STAT axis count must be greater than 0 if STAT axis value count is greater than 0");const f=[];for(let p=0;po.value.tag?1:-1}),e.fields=e.fields.concat(i),e.fields=e.fields.concat(s),e}function Gh(n,e,t){for(let i=0;i0)return n.glyphs.get(s).getMetrics()}return t}function Rb(n){let e=0;for(let t=0;tbe||l===void 0)&&be>0&&(l=be),c 123 are reserved for internal usage");if(xe.name===".notdef")continue;const Be=xe.getMetrics();e.push(Be.xMin),t.push(Be.yMin),i.push(Be.xMax),s.push(Be.yMax),a.push(Be.leftSideBearing),o.push(Be.rightSideBearing),r.push(xe.advanceWidth)}const m={xMin:Math.min.apply(null,e),yMin:Math.min.apply(null,t),xMax:Math.max.apply(null,i),yMax:Math.max.apply(null,s),advanceWidthMax:Math.max.apply(null,r),advanceWidthAvg:Rb(r),minLeftSideBearing:Math.min.apply(null,a),maxLeftSideBearing:Math.max.apply(null,a),minRightSideBearing:Math.min.apply(null,o)};m.ascender=n.ascender,m.descender=n.descender;let _=0;n.weightClass>=600&&(_|=n.macStyleValues.BOLD),n.italicAngle<0&&(_|=n.macStyleValues.ITALIC);const p=rp.make({flags:3,unitsPerEm:n.unitsPerEm,xMin:m.xMin,yMin:m.yMin,xMax:m.xMax,yMax:m.yMax,lowestRecPPEM:3,macStyle:_,createdTimestamp:n.createdTimestamp}),g=ap.make({ascender:m.ascender,descender:m.descender,advanceWidthMax:m.advanceWidthMax,minLeftSideBearing:m.minLeftSideBearing,minRightSideBearing:m.minRightSideBearing,xMaxExtent:m.maxLeftSideBearing+(m.xMax-m.xMin),numberOfHMetrics:n.glyphs.length}),b=cp.make(n.glyphs.length),A=Cc.make(Object.assign({xAvgCharWidth:Math.round(m.advanceWidthAvg),usFirstCharIndex:l,usLastCharIndex:c,ulUnicodeRange1:u,ulUnicodeRange2:d,ulUnicodeRange3:h,ulUnicodeRange4:f,sTypoAscender:m.ascender,sTypoDescender:m.descender,sTypoLineGap:0,usWinAscent:m.yMax,usWinDescent:Math.abs(m.yMin),ulCodePageRange1:1,sxHeight:Gh(n,"xyvw",{yMax:Math.round(m.ascender/2)}).yMax,sCapHeight:Gh(n,"HIKLEFJMNTZBDPRAGOQSUVWXY",m).yMax,usDefaultChar:n.hasChar(" ")?32:0,usBreakChar:n.hasChar(" ")?32:0},n.tables.os2)),x=op.make(n.glyphs),E=Yf.make(n.glyphs),S=n.getEnglishName("fontFamily"),M=n.getEnglishName("fontSubfamily"),y=S+" "+M;let T=n.getEnglishName("postScriptName");T||(T=S.replace(/\s/g,"")+"-"+M);const I={};for(let j in n.names)I[j]=n.names[j];I.unicode=I.unicode||{},I.macintosh=I.macintosh||{},I.windows=I.windows||{};const L=n.names.unicode||{},w=n.names.macintosh||{},U=n.names.windows||{};for(const j in I){if(I[j]=I[j]||{},!I[j].uniqueID){const xe=n.getEnglishName("manufacturer")||"";I[j].uniqueID={en:`${xe}: ${y}`}}I[j].postScriptName||(I[j].postScriptName={en:T})}I.unicode.preferredFamily||(I.unicode.preferredFamily=L.fontFamily||w.fontFamily||U.fontFamily),I.macintosh.preferredFamily||(I.macintosh.preferredFamily=w.fontFamily||L.fontFamily||U.fontFamily),I.windows.preferredFamily||(I.windows.preferredFamily=U.fontFamily||L.fontFamily||w.fontFamily),I.unicode.preferredSubfamily||(I.unicode.preferredSubfamily=L.fontSubfamily||w.fontSubfamily||U.fontSubfamily),I.macintosh.preferredSubfamily||(I.macintosh.preferredSubfamily=w.fontSubfamily||L.fontSubfamily||U.fontSubfamily),I.windows.preferredSubfamily||(I.windows.preferredSubfamily=U.fontSubfamily||L.fontSubfamily||w.fontSubfamily);const k=[],O=Xf.make(I,k),$=k.length>0?lp.make(k):void 0,F=up.make(n),Z=Ec.make(n.glyphs,{version:n.getEnglishName("version"),fullName:y,familyName:S,weightName:M,postScriptName:T,unitsPerEm:n.unitsPerEm,fontBBox:[0,m.yMin,m.ascender,m.advanceWidthMax],topDict:n.tables.cff&&n.tables.cff.topDict||{}}),R=n.metas&&Object.keys(n.metas).length>0?dp.make(n.metas):void 0,re=[p,g,b,A,O,E,F,Z,x];$&&re.push($);const se={gsub:hp,cpal:jf,colr:fp,stat:mp,avar:gp,cvar:_p,fvar:pp,gvar:xp,gasp:yp,svg:vp},ae={avar:[n.tables.fvar],fvar:[n.names]};for(let j in se){const xe=n.tables[j];if(xe){const be=se[j].make.call(n,xe,...ae[j]||[]);be&&re.push(be)}}R&&re.push(R);const ge=Sp(re),he=ge.encode(),oe=iu(he),G=ge.fields;let ne=!1;for(let j=0;j>>1,r=n[s].tag;if(r===e)return s;r>>1,r=n[s];if(r===e)return s;r>>1;t=n[r];const a=t.start;if(a===e)return t;a0)return t=n[i-1],e>t.end?0:t}function bp(n,e){this.font=n,this.tableName=e}bp.prototype={searchTag:hl,binSearch:Wh,getTable:function(n){let e=this.font.tables[this.tableName];return!e&&n&&(e=this.font.tables[this.tableName]=this.createDefaultTable()),e},getScriptNames:function(){let n=this.getTable();return n?n.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){let n=this.getTable();if(!n)return;let e=!1;for(let t=0;t=0)return i[s].script;if(e){const r={tag:n,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return i.splice(-1-s,0,r),r.script}}},getLangSysTable:function(n,e,t){const i=this.getScriptTable(n,t);if(i){if(!e||e==="dflt"||e==="DFLT")return i.defaultLangSys;const s=hl(i.langSysRecords,e);if(s>=0)return i.langSysRecords[s].langSys;if(t){const r={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return i.langSysRecords.splice(-1-s,0,r),r.langSys}}},getFeatureTable:function(n,e,t,i){const s=this.getLangSysTable(n,e,i);if(s){let r;const a=s.featureIndexes,o=this.font.tables[this.tableName].features;for(let l=0;l=o[l-1].tag,"Features must be added in alphabetical order."),r={tag:t,feature:{params:0,lookupListIndexes:[]}},o.push(r),a.push(l),r.feature}}},getLookupTables:function(n,e,t,i,s){const r=this.getFeatureTable(n,e,t,s),a=[];if(r){let o;const l=r.lookupListIndexes,c=this.font.tables[this.tableName].lookups;for(let u=0;u=0?t:-1}case 2:{const t=Xh(n.ranges,e);return t?t.index+e-t.start:-1}}},expandCoverage:function(n){if(n.format===1)return n.glyphs;{const e=[],t=n.ranges;for(let i=0;it)s=a-1;else{r=o;break}}return r}function Ub(n,e,t){let i=0,s=n.length-1;for(;i<=s;){const r=Math.floor((i+s)/2),a=n[r];if(a[e]t)s=r-1;else return r}return-1}function Nb(n,e,t){let i=0,s=n.length;const r=(a,o)=>a[e]-o[e];for(;i>>1;r(n[a],t)<0?i=a+1:s=a}return n.splice(i,0,t),i}function Mp(n){return n[0]===31&&n[1]===139&&n[2]===8}function kb(n){const e=new DataView(n.buffer,n.byteOffset,n.byteLength);let t=10;const i=n.byteLength-8,s=e.getInt8(3);if(s&4&&(t+=2+e.getUint16(t,!0)),s&8)for(;t=i)throw new Error("Can't find compressed blocks");const r=e.getUint32(e.byteLength-4,!0);return Uf(n.subarray(t,i),new Uint8Array(r))}function Yh(n){return{x:n.x,y:n.y,onCurve:n.onCurve,lastPointOfContour:n.lastPointOfContour}}function Fb(n){return{glyphIndex:n.glyphIndex,xScale:n.xScale,scale01:n.scale01,scale10:n.scale10,yScale:n.yScale,dx:n.dx,dy:n.dy}}function fn(n){So.call(this,n,"gsub")}function su(n,e,t){const i=n.subtables;for(let s=0;s1,'Multiple: "by" must be an array of two or more ids');const s=this.getLookupTables(t,i,n,2,!0)[0],r=su(s,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});Fe.assert(r.coverage.format===1,"Multiple: unable to modify coverage table format "+r.coverage.format);const a=e.sub;let o=this.binSearch(r.coverage.glyphs,a);o<0&&(o=-1-o,r.coverage.glyphs.splice(o,0,a),r.sequences.splice(o,0,0)),r.sequences[o]=e.by};fn.prototype.addAlternate=function(n,e,t,i){const s=this.getLookupTables(t,i,n,3,!0)[0],r=su(s,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});Fe.assert(r.coverage.format===1,"Alternate: unable to modify coverage table format "+r.coverage.format);const a=e.sub;let o=this.binSearch(r.coverage.glyphs,a);o<0&&(o=-1-o,r.coverage.glyphs.splice(o,0,a),r.alternateSets.splice(o,0,0)),r.alternateSets[o]=e.by};fn.prototype.addLigature=function(n,e,t,i){const s=this.getLookupTables(t,i,n,4,!0)[0];let r=s.subtables[0];r||(r={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},s.subtables[0]=r),Fe.assert(r.coverage.format===1,"Ligature: unable to modify coverage table format "+r.coverage.format);const a=e.sub[0],o=e.sub.slice(1),l={ligGlyph:e.by,components:o};let c=this.binSearch(r.coverage.glyphs,a);if(c>=0){const u=r.ligatureSets[c];for(let d=0;duo(e,"raw")):uo(n,"raw")}fillPalette(n,e=[],t=this.cpal().numPaletteEntries){return n=Number.isInteger(n)?this.get(n,"raw"):n,Object.assign(Array(t).fill(this.defaultValue),this.toCPALcolor(n).concat(this.toCPALcolor(e)))}extend(n){if(this.ensureCPAL(Array(n).fill(this.defaultValue)))return;const e=this.cpal(),t=e.numPaletteEntries+n,i=this.getAll().map(s=>this.fillPalette(s,[],t));e.numPaletteEntries=t,e.colorRecords=this.toCPALcolor(i.flat()),this.updateIndices()}get(n,e="hexa"){return this.getAll(e)[n]||null}getColor(n,e=0,t="hexa"){return Qc(this.font,n,e,t)}setColor(n,e,t=0){n=parseInt(n),t=parseInt(t);let i=this.getAll("raw"),s=i[t];if(!s)throw Error(`paletteIndex ${t} out of range`);const r=this.cpal(),a=r.numPaletteEntries;Array.isArray(e)||(e=[e]),e.length+n>a&&(this.extend(e.length+n-a),i=this.getAll("raw"),s=i[t]);for(let o=0;ot?this.extend(n.length-t):n.lengtht.numPaletteEntries-1)throw Error(`Replacement index out of range: numPaletteEntries after deletion: ${t.numPaletteEntries-1}, replacementIndex: ${e})`);for(let o=0;od!==n);s.push(c)}const r=this.font.tables.colr;if(r){const o=r.layerRecords;for(let l=0;ln)o[l].paletteIndex-=1;else if(c===n){let u=0;for(let d=0;dn&&e<=n+i[d].length){u++;break}o[l].paletteIndex=e-u}}this.font.tables.colr={...r,layerRecords:o}}const a=s.flat();for(let o=0;oi.length?t=i.length:t<0&&(t=i.length+1+t%(i.length+1),t>=i.length+1&&(t-=i.length+1));const s=[];for(let r=0;r({glyphID:s.glyph.index,paletteIndex:r===e?t:s.paletteIndex})),this.updateColrTable(n,i)):console.error("Invalid layer index")}remove(n,e,t=e){let i=this.get(n);i=i.map(s=>({glyphID:s.glyph.index,paletteIndex:s.paletteIndex})),i.splice(e,t-e+1),this.updateColrTable(n,i)}updateColrTable(n,e){this.ensureCOLR();const i=this.font.tables.colr;let s=Ub(i.baseGlyphRecords,"glyphID",n);if(s===-1){const u={glyphID:n,firstLayerIndex:i.layerRecords.length,numLayers:0};s=Nb(i.baseGlyphRecords,"glyphID",u)}const a=i.baseGlyphRecords[s],o=a.numLayers,l=e.length,c=l-o;if(c>0){const u=e.slice(o).map(d=>({glyphID:d.glyphID,paletteIndex:d.paletteIndex}));i.layerRecords.splice(a.firstLayerIndex+o,0,...u)}else c<0&&i.layerRecords.splice(a.firstLayerIndex+l,-c);for(let u=0;u{if(s.image=r,typeof this.font.onGlyphUpdated=="function")try{this.font.onGlyphUpdated(n)}catch(a){console.error("font.onGlyphUpdated",n,a)}}),i.images.set(n,s)),s}};function Vb(n){return{template:Wb(n).then(Kb),images:new Map}}function Gb(n,e,t){return{promise:e.then(i=>{let s;typeof i=="string"?s=i:(i[4]=t,s=i.join(""));const r=qb(s,n.unitsPerEm);return r.image.decode().then(()=>r)}),image:void 0}}var Wb=typeof DecompressionStream=="function"?Yb:Xb;function Xb(n){try{return Promise.resolve(new TextDecoder().decode(Mp(n)?kb(n):n))}catch(e){return Promise.reject(e)}}function Yb(n){if(Mp(n))return new Response(new Response(n).body.pipeThrough(new DecompressionStream("gzip"))).text();try{return Promise.resolve(new TextDecoder().decode(n))}catch(e){return Promise.reject(e)}}function Kb(n){const e=n.indexOf("",e+4)+1;if(/ id=['"]glyph\d+['"]/.test(n.substring(e,t)))return n;const i=n.lastIndexOf("");return[n.substring(0,t),"",n.substring(t,i),'',n.substring(i)]}function qb(n,e){const i=new DOMParser().parseFromString(n,"image/svg+xml").documentElement,s=i.viewBox.baseVal,r=i.width.baseVal,a=i.height.baseVal;let o=1,l=1;s.width>0&&s.height>0&&(r.unitType===1?(o=r.valueInSpecifiedUnits/s.width,l=a.unitType===1?a.valueInSpecifiedUnits/s.height:o):a.unitType===1?(l=a.valueInSpecifiedUnits/s.height,o=l):e&&(o=e/s.width,l=e/s.height));const c=document.createElement("div");c.style.position="fixed",c.style.visibility="hidden",c.appendChild(i),document.body.appendChild(c);const u=i.getBBox();document.body.removeChild(c);const d=(u.x-s.x)*o,h=(s.y-u.y)*l,f=u.width*o,m=u.height*l;i.setAttribute("viewBox",[u.x,u.y,u.width,u.height].join(" ")),o!==1&&i.setAttribute("width",f),l!==1&&i.setAttribute("height",m);const _=new Image(f,m);return _.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(i.outerHTML),{leftSideBearing:d,baseline:h,image:_}}var dl=new WeakMap;function Kh(n,e,t,i,s){let r;return(e&i)>0?(r=n.parseByte(),e&s||(r=-r),r=t+r):(e&s)>0?r=t:r=t+n.parseShort(),r}function Ep(n,e,t){const i=new Ae.Parser(e,t);n._numberOfContours=i.parseShort(),n._xMin=i.parseShort(),n._yMin=i.parseShort(),n._xMax=i.parseShort(),n._yMax=i.parseShort();let s,r;if(n._numberOfContours>0){const a=n.endPointIndices=[];for(let l=0;l0){const c=i.parseByte();for(let u=0;u0){const l=[];let c;if(o>0){for(let h=0;h=0,l.push(c);let u=0;for(let h=0;h0?(s&2)>0?(o.dx=i.parseShort(),o.dy=i.parseShort()):o.matchedPoints=[i.parseUShort(),i.parseUShort()]:(s&2)>0?(o.dx=i.parseChar(),o.dy=i.parseChar()):o.matchedPoints=[i.parseByte(),i.parseByte()],(s&8)>0?o.xScale=o.yScale=i.parseF2Dot14():(s&64)>0?(o.xScale=i.parseF2Dot14(),o.yScale=i.parseF2Dot14()):(s&128)>0&&(o.xScale=i.parseF2Dot14(),o.scale01=i.parseF2Dot14(),o.scale10=i.parseF2Dot14(),o.yScale=i.parseF2Dot14()),n.components.push(o),a=!!(s&32)}if(s&256){n.instructionLength=i.parseUShort(),n.instructions=[];for(let o=0;oe.points.length-1||s.matchedPoints[1]>r.points.length-1)throw Error("Matched points out of range in "+e.name);const o=e.points[s.matchedPoints[0]];let l=r.points[s.matchedPoints[1]];const c={xScale:s.xScale,scale01:s.scale01,scale10:s.scale10,yScale:s.yScale,dx:0,dy:0};l=Va([l],c)[0],c.dx=o.x-l.x,c.dy=o.y-l.y,a=Va(r.points,c)}e.points=e.points.concat(a)}}}finally{t.delete(e.index)}}return ru(e.points)}function $b(n,e,t,i){const s=new ti.GlyphSet(i);for(let r=0;r=1&&e[t]r)continue;let o=i,l=i;for(i++;i<=r;)t[i]&&(this.deltaInterpolate(l+1,i-1,l,i,e,n),l=i),i++;l===o?this.deltaShift(s,r,l,e,n):(this.deltaInterpolate(l+1,r,l,o,e,n),o>0&&this.deltaInterpolate(s,o-1,l,o,e,n)),i=r+1}}deltaInterpolate(n,e,t,i,s,r){if(n>e)return;let a=["x","y"];for(let l=0;ls[i][c]){var o=t;t=i,i=o}let u=s[t][c],d=s[i][c],h=r[t][c],f=r[i][c];if(u!==d||h===f){let m=u===d?0:(f-h)/(d-u);for(let _=n;_<=e;_++){let p=s[_][c];p<=u?p+=h-u:p>=d?p+=f-d:p=h+(p-u)*m,r[_][c]=p}}}}deltaShift(n,e,t,i,s){let r=s[t].x-i[t].x,a=s[t].y-i[t].y;if(!(r===0&&a===0))for(let o=n;o<=e;o++)o!==t&&(s[o].x+=r,s[o].y+=a)}transformComponents(n,e,t,i,s,r){let a=0;for(let o=0;o-1&&(u.dx+=Math.round(s.deltas[d]*r),u.dy+=Math.round(s.deltasY[d]*r));const h=Va(this.getTransform(c,t).points,u);e.splice(a,h.length,...h),a+=c.points.length}}applyTupleVariationStore(n,e,t,i="gvar",s={}){t||(t=this.font.variation.get());const r=this.getNormalizedCoords(t),{headers:a,sharedPoints:o}=n,l=this.fvar().axes.length;let c;i==="gvar"?c=e.map(Yh):i==="cvar"&&(c=[...e]);for(let u=0;ud.intermediateEndTuple[m]){h=0;break}else r[m]<_[m]?h=h*(r[m]-d.intermediateStartTuple[m]+Number.EPSILON)/(_[m]-d.intermediateStartTuple[m]+Number.EPSILON):h=h*(d.intermediateEndTuple[m]-r[m]+Number.EPSILON)/(d.intermediateEndTuple[m]-_[m]+Number.EPSILON);else{if(r[m]Math.max(0,_[m])){h=0;break}h=(h*r[m]+Number.EPSILON)/(_[m]+Number.EPSILON)}}}if(h===0)continue;const f=d.privatePoints.length?d.privatePoints:o;if(i==="gvar"&&s.glyph&&s.glyph.isComposite)this.transformComponents(s.glyph,c,t,f,d,h);else if(f.length===0)for(let m=0;m=o&&(l=o-1),{outerIndex:s,innerIndex:r}=a[t].map[l]}else s=0,r=n;return this.getDelta(a.itemVariationStore,s,r,i)}getDelta(n,e,t,i){if(e>=n.itemVariationSubtables.length)return 0;let s=n.itemVariationSubtables[e];if(t>=s.deltaSets.length)return 0;let r=s.deltaSets[t],a=this.getBlendVector(n,e,i),o=0;for(let l=0;ld.peakCoord||d.peakCoord>d.endCoord||d.startCoord<0&&d.endCoord>0&&d.peakCoord!==0||d.peakCoord===0?h=1:s[u]d.endCoord?h=0:s[u]===d.peakCoord?h=1:s[u]-1?this.set(n):this.set(this.getDefaultCoordinates())}getDefaultCoordinates(){return this.fvar().axes.reduce((n,e)=>(n[e.tag]=e.defaultValue,n),{})}getDefaultInstanceIndex(){const n=this.getDefaultCoordinates();let e=this.getInstanceIndex(n);return e<0&&(e=this.fvar().instances.findIndex(t=>t.name&&t.name.en==="Regular")),e}getInstanceIndex(n){return this.fvar().instances.findIndex(e=>Object.keys(n).every(t=>e.coordinates[t]===n[t]))}getInstance(n){return this.fvar().instances&&this.fvar().instances[n]}set(n){let e;if(Number.isInteger(n)){const t=this.getInstance(n);if(!t)throw Error(`Invalid instance index ${n}`);e={...t.coordinates}}else e=n,this.process.normalizeCoordTags(e);e=Object.assign({},this.font.defaultRenderOptions.variation,e),this.font.defaultRenderOptions=Object.assign({},this.font.defaultRenderOptions,{variation:e})}get(){return Object.assign({},this.font.defaultRenderOptions.variation)}avar(){return this.font.tables.avar}cvar(){return this.font.tables.cvar}fvar(){return this.font.tables.fvar}gvar(){return this.font.tables.gvar}hvar(){return this.font.tables.hvar}},qh=1e6,fo=64,po=1e4,wp,ls,Rp,wc;function Dp(n){this.font=n,this.getCommands=function(e){return Cp.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function t2(n){return n}function Lp(n){return Math.sign(n)*Math.round(Math.abs(n))}function n2(n){return Math.sign(n)*Math.round(Math.abs(n*2))/2}function i2(n){return Math.sign(n)*(Math.round(Math.abs(n)+.5)-.5)}function s2(n){return Math.sign(n)*Math.ceil(Math.abs(n))}function r2(n){return Math.sign(n)*Math.floor(Math.abs(n))}var Ip=function(n){const e=this.srPeriod;let t=this.srPhase;const i=this.srThreshold;let s=1;return n<0&&(n=-n,s=-1),n+=i-t,n=Math.trunc(n/e)*e,n+=t,n<0?t*s:n*s},jn={x:1,y:0,axis:"x",distance:function(n,e,t,i){return(t?n.xo:n.x)-(i?e.xo:e.x)},interpolate:function(n,e,t,i){let s,r,a,o,l,c,u;if(!i||i===this){if(s=n.xo-e.xo,r=n.xo-t.xo,l=e.x-e.xo,c=t.x-t.xo,a=Math.abs(s),o=Math.abs(r),u=a+o,u===0){n.x=n.xo+(l+c)/2;return}n.x=n.xo+(l*o+c*a)/u;return}if(s=i.distance(n,e,!0,!0),r=i.distance(n,t,!0,!0),l=i.distance(e,e,!1,!0),c=i.distance(t,t,!1,!0),a=Math.abs(s),o=Math.abs(r),u=a+o,u===0){jn.setRelative(n,n,(l+c)/2,i,!0);return}jn.setRelative(n,n,(l*o+c*a)/u,i,!0)},normalSlope:Number.NEGATIVE_INFINITY,setRelative:function(n,e,t,i,s){if(!i||i===this){n.x=(s?e.xo:e.x)+t;return}const r=s?e.xo:e.x,a=s?e.yo:e.y,o=r+t*i.x,l=a+t*i.y;n.x=o+(n.y-l)/i.normalSlope},slope:0,touch:function(n){n.xTouched=!0},touched:function(n){return n.xTouched},untouch:function(n){n.xTouched=!1}},hi={x:0,y:1,axis:"y",distance:function(n,e,t,i){return(t?n.yo:n.y)-(i?e.yo:e.y)},interpolate:function(n,e,t,i){let s,r,a,o,l,c,u;if(!i||i===this){if(s=n.yo-e.yo,r=n.yo-t.yo,l=e.y-e.yo,c=t.y-t.yo,a=Math.abs(s),o=Math.abs(r),u=a+o,u===0){n.y=n.yo+(l+c)/2;return}n.y=n.yo+(l*o+c*a)/u;return}if(s=i.distance(n,e,!0,!0),r=i.distance(n,t,!0,!0),l=i.distance(e,e,!1,!0),c=i.distance(t,t,!1,!0),a=Math.abs(s),o=Math.abs(r),u=a+o,u===0){hi.setRelative(n,n,(l+c)/2,i,!0);return}hi.setRelative(n,n,(l*o+c*a)/u,i,!0)},normalSlope:0,setRelative:function(n,e,t,i,s){if(!i||i===this){n.y=(s?e.yo:e.y)+t;return}const r=s?e.xo:e.x,a=s?e.yo:e.y,o=r+t*i.x,l=a+t*i.y;n.y=l+i.normalSlope*(n.x-o)},slope:Number.POSITIVE_INFINITY,touch:function(n){n.yTouched=!0},touched:function(n){return n.yTouched},untouch:function(n){n.yTouched=!1}};Object.freeze(jn);Object.freeze(hi);function Br(n,e){this.x=n,this.y=e,this.axis=void 0,this.slope=e/n,this.normalSlope=-n/e,Object.freeze(this)}Br.prototype.distance=function(n,e,t,i){return this.x*jn.distance(n,e,t,i)+this.y*hi.distance(n,e,t,i)};Br.prototype.interpolate=function(n,e,t,i){let s,r,a,o,l,c,u;if(a=i.distance(n,e,!0,!0),o=i.distance(n,t,!0,!0),s=i.distance(e,e,!1,!0),r=i.distance(t,t,!1,!0),l=Math.abs(a),c=Math.abs(o),u=l+c,u===0){this.setRelative(n,n,(s+r)/2,i,!0);return}this.setRelative(n,n,(s*c+r*l)/u,i,!0)};Br.prototype.setRelative=function(n,e,t,i,s){i=i||this;const r=s?e.xo:e.x,a=s?e.yo:e.y,o=r+t*i.x,l=a+t*i.y,c=i.normalSlope,u=this.slope,d=n.x,h=n.y;n.x=(u*d-c*o+l-h)/(u-c),n.y=u*(n.x-d)+h};Br.prototype.touch=function(n){n.xTouched=!0,n.yTouched=!0};function Hr(n,e){const t=Math.sqrt(n*n+e*e);return n/=t,e/=t,n===1&&e===0?jn:n===0&&e===1?hi:new Br(n,e)}function gi(n,e,t,i){this.x=this.xo=Math.round(n*64)/64,this.y=this.yo=Math.round(e*64)/64,this.lastPointOfContour=t,this.onCurve=i,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}gi.prototype.nextTouched=function(n){let e=this.nextPointOnContour;for(;!n.touched(e)&&e!==this;)e=e.nextPointOnContour;return e};gi.prototype.prevTouched=function(n){let e=this.prevPointOnContour;for(;!n.touched(e)&&e!==this;)e=e.prevPointOnContour;return e};var Pr=Object.freeze(new gi(0,0)),a2={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function ki(n,e){switch(this.env=n,this.stack=[],this.prog=e,n){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=jn,this.round=Lp}}Dp.prototype.exec=function(n,e){if(typeof e!="number")throw new Error("Point size is not a number!");if(this._errorState>2)return;const t=this.font;let i=this._prepState;if(!i||i.ppem!==e){let s=this._fpgmState;if(!s){ki.prototype=a2,s=this._fpgmState=new ki("fpgm",t.tables.fpgm),s.funcs=[],s.font=t,s.instructionCount=0,s.callDepth=0;try{ls(s)}catch(a){console.log("Hinting error in FPGM:"+a),this._errorState=3;return}}ki.prototype=s,i=this._prepState=new ki("prep",t.tables.prep),i.ppem=e,i.instructionCount=0,i.callDepth=0;const r=t.variation&&t.variation.process.getCvarTransform()||t.tables.cvt;if(r){const a=i.cvt=new Array(r.length),o=e/t.unitsPerEm;for(let l=0;l1))try{return Rp(n,i)}catch(s){this._errorState<1&&(console.log("Hinting error:"+s),console.log("Note: further hinting errors are silenced")),this._errorState=1;return}};Rp=function(n,e){const t=e.ppem/e.font.unitsPerEm,i=t;let s=n.components,r,a,o;if(ki.prototype=e,!s)o=new ki("glyf",n.instructions),o.instructionCount=0,o.callDepth=0,wc(n,o,t,i),a=o.gZone;else{const l=e.font;a=[],r=[];for(let c=0;cqh)throw new Error("Hinting instructions exceeded maximum of "+qh);if(i=wp[e[n.ip]],!i)throw new Error("unknown instruction: 0x"+Number(e[n.ip]).toString(16));i(n)}};function bo(n){const e=n.tZone=new Array(n.gZone.length);for(let t=0;t=176&&r<=183)i+=r-176+1;else if(r>=184&&r<=191)i+=(r-184+1)*2;else if(e&&s===1&&r===27)break;while(s>0);n.ip=i}function Zh(n,e){e.fv=e.pv=e.dpv=n}function $h(n,e){e.pv=e.dpv=n}function Jh(n,e){e.fv=n}function jh(n,e){const t=e.stack,i=t.pop(),s=t.pop(),r=e.z2[i],a=e.z1[s];let o,l;n?(o=r.y-a.y,l=a.x-r.x):(o=a.x-r.x,l=a.y-r.y),e.pv=e.dpv=Hr(o,l)}function Qh(n,e){const t=e.stack,i=t.pop(),s=t.pop(),r=e.z2[i],a=e.z1[s];let o,l;n?(o=r.y-a.y,l=a.x-r.x):(o=a.x-r.x,l=a.y-r.y),e.fv=Hr(o,l)}function o2(n){const e=n.stack,t=e.pop(),i=e.pop();n.pv=n.dpv=Hr(i,t)}function l2(n){const e=n.stack,t=e.pop(),i=e.pop();n.fv=Hr(i,t)}function c2(n){const e=n.stack,t=n.pv;e.push(t.x*16384),e.push(t.y*16384)}function u2(n){const e=n.stack,t=n.fv;e.push(t.x*16384),e.push(t.y*16384)}function h2(n){n.fv=n.pv}function d2(n){const e=n.stack,t=e.pop(),i=e.pop(),s=e.pop(),r=e.pop(),a=e.pop(),o=n.z0,l=n.z1,c=o[t],u=o[i],d=l[s],h=l[r],f=n.z2[a],m=c.x,_=c.y,p=u.x,g=u.y,b=d.x,A=d.y,x=h.x,E=h.y,S=(m-p)*(A-E)-(_-g)*(b-x),M=m*g-_*p,y=b*E-A*x;f.x=(M*(b-x)-y*(m-p))/S,f.y=(M*(A-E)-y*(_-g))/S}function f2(n){n.rp0=n.stack.pop()}function p2(n){n.rp1=n.stack.pop()}function m2(n){n.rp2=n.stack.pop()}function g2(n){const e=n.stack.pop();switch(n.zp0=e,e){case 0:n.tZone||bo(n),n.z0=n.tZone;break;case 1:n.z0=n.gZone;break;default:throw new Error("Invalid zone pointer")}}function _2(n){const e=n.stack.pop();switch(n.zp1=e,e){case 0:n.tZone||bo(n),n.z1=n.tZone;break;case 1:n.z1=n.gZone;break;default:throw new Error("Invalid zone pointer")}}function x2(n){const e=n.stack.pop();switch(n.zp2=e,e){case 0:n.tZone||bo(n),n.z2=n.tZone;break;case 1:n.z2=n.gZone;break;default:throw new Error("Invalid zone pointer")}}function y2(n){const e=n.stack.pop();switch(n.zp0=n.zp1=n.zp2=e,e){case 0:n.tZone||bo(n),n.z0=n.z1=n.z2=n.tZone;break;case 1:n.z0=n.z1=n.z2=n.gZone;break;default:throw new Error("Invalid zone pointer")}}function v2(n){n.loop=n.stack.pop(),n.loop>po&&(n.loop=po)}function S2(n){n.round=Lp}function b2(n){n.round=i2}function M2(n){const e=n.stack.pop();n.minDis=e/64}function A2(n){Pp(n,!1)}function E2(n){const e=n.stack.pop();n.ip+=e-1}function T2(n){const e=n.stack.pop();n.cvCutIn=e/64}function C2(n){const e=n.stack;e.push(e[e.length-1])}function fl(n){n.stack.pop()}function w2(n){n.stack.length=0}function R2(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t),e.push(i)}function D2(n){const e=n.stack;e.push(e.length)}function L2(n){const e=n.stack,t=e.pop();let i=e.pop();if(i>po&&(i=po),++n.callDepth>fo)throw new Error("Hinting call depth exceeded maximum of "+fo);const s=n.ip,r=n.prog;n.prog=n.funcs[t];for(let a=0;afo)throw new Error("Hinting call depth exceeded maximum of "+fo);const t=n.ip,i=n.prog;n.prog=n.funcs[e],ls(n),n.ip=t,n.prog=i,n.callDepth--}function P2(n){const e=n.stack,t=e.pop();e.push(e[e.length-t])}function O2(n){const e=n.stack,t=e.pop();e.push(e.splice(e.length-t,1)[0])}function U2(n){if(n.env!=="fpgm")throw new Error("FDEF not allowed here");const e=n.stack,t=n.prog;let i=n.ip;const s=e.pop(),r=i;for(;t[++i]!==45;);n.ip=i,n.funcs[s]=t.slice(r+1,i)}function ed(n,e){const t=e.stack.pop(),i=e.z0[t],s=e.fv,r=e.pv;let a=r.distance(i,Pr);n&&(a=e.round(a)),s.setRelative(i,Pr,a,r),s.touch(i),e.rp0=e.rp1=t}function td(n,e){const t=e.z2,i=t.length-2;let s,r,a;for(let o=0;ot?1:0)}function J2(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i>=t?1:0)}function j2(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t===i?1:0)}function Q2(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t!==i?1:0)}function eM(n){const e=n.stack,t=e.pop();e.push(Math.trunc(t)&1?1:0)}function tM(n){const e=n.stack,t=e.pop();e.push(Math.trunc(t)&1?0:1)}function nM(n){n.stack.pop()||Pp(n,!0)}function iM(n){}function sM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t&&i?1:0)}function rM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(t||i?1:0)}function aM(n){const e=n.stack,t=e.pop();e.push(t?0:1)}function pl(n,e){const t=e.stack,i=t.pop(),s=e.fv,r=e.pv,a=e.ppem,o=e.deltaBase+(n-1)*16,l=e.deltaShift,c=e.z0;for(let u=0;u>4)!==a)continue;let m=(h&15)-8;m>=0&&m++;const _=c[d];s.setRelative(_,_,m*l,r)}}function oM(n){const t=n.stack.pop();n.deltaBase=t}function lM(n){const t=n.stack.pop();n.deltaShift=Math.pow(.5,t)}function cM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i+t)}function uM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i-t)}function hM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i*64/t)}function dM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(i*t/64)}function fM(n){const e=n.stack,t=e.pop();e.push(Math.abs(t))}function pM(n){const e=n.stack;let t=e.pop();e.push(-t)}function mM(n){const e=n.stack,t=e.pop();e.push(Math.floor(t/64)*64)}function gM(n){const e=n.stack,t=e.pop();e.push(Math.ceil(t/64)*64)}function wa(n,e){const t=e.stack,i=t.pop();t.push(e.round(i/64)*64)}function _M(n){const e=n.stack,t=e.pop(),i=e.pop();n.cvt[i]=t*n.ppem/n.font.unitsPerEm}function ml(n,e){const t=e.stack,i=t.pop(),s=e.ppem,r=e.deltaBase+(n-1)*16,a=e.deltaShift;for(let o=0;o>4)!==s)continue;let d=(c&15)-8;d>=0&&d++;const h=d*a;e.cvt[l]+=h}}function xM(n){let e=n.stack.pop();n.round=Ip;let t;switch(e&192){case 0:t=.5;break;case 64:t=1;break;case 128:t=2;break;default:throw new Error("invalid SROUND value")}switch(n.srPeriod=t,e&48){case 0:n.srPhase=0;break;case 16:n.srPhase=.25*t;break;case 32:n.srPhase=.5*t;break;case 48:n.srPhase=.75*t;break;default:throw new Error("invalid SROUND value")}e&=15,e===0?n.srThreshold=0:n.srThreshold=(e/8-.5)*t}function yM(n){let e=n.stack.pop();n.round=Ip;let t;switch(e&192){case 0:t=Math.sqrt(2)/2;break;case 64:t=Math.sqrt(2);break;case 128:t=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(n.srPeriod=t,e&48){case 0:n.srPhase=0;break;case 16:n.srPhase=.25*t;break;case 32:n.srPhase=.5*t;break;case 48:n.srPhase=.75*t;break;default:throw new Error("invalid S45ROUND value")}e&=15,e===0?n.srThreshold=0:n.srThreshold=(e/8-.5)*t}function vM(n){n.round=t2}function SM(n){n.round=s2}function bM(n){n.round=r2}function MM(n){n.stack.pop()}function cd(n,e){const t=e.stack,i=t.pop(),s=t.pop(),r=e.z2[i],a=e.z1[s];let o,l;n?(o=r.y-a.y,l=a.x-r.x):(o=a.x-r.x,l=a.y-r.y),e.dpv=Hr(o,l)}function AM(n){const e=n.stack,t=e.pop();let i=0;t&1&&(i=35),t&32&&(i|=4096),e.push(i)}function EM(n){const e=n.stack,t=e.pop(),i=e.pop(),s=e.pop();e.push(i),e.push(t),e.push(s)}function TM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(Math.max(i,t))}function CM(n){const e=n.stack,t=e.pop(),i=e.pop();e.push(Math.min(i,t))}function wM(n){n.stack.pop()}function RM(n){const e=n.stack.pop();let t=n.stack.pop();switch(e){case 1:n.inhibitGridFit=!!t;return;case 2:n.ignoreCvt=!!t;return;default:throw new Error("invalid INSTCTRL[] selector")}}function Di(n,e){const t=e.stack,i=e.prog;let s=e.ip;for(let r=0;r=0?1:-1,_=Math.abs(_),n&&(g=r.cvt[o],i&&Math.abs(_-g)=0&&nthis[s[0]].apply(this,s.slice(1).concat(!0))),i=s=>typeof s=="object"&&Object.prototype.hasOwnProperty.call(s,"FAIL");if(t.every(i))return{FAIL:"composeRUD: one or more operations hasn't completed successfully",report:t.filter(i)};this.dispatch("composeRUD",[t.filter(s=>!i(s))])};Rt.prototype.replaceRange=function(n,e,t,i){e=e!==null?e:this.tokens.length;const s=t.every(r=>r instanceof tr);if(!isNaN(n)&&this.inboundIndex(n)&&s){const r=this.tokens.splice.apply(this.tokens,[n,e].concat(t));return i||this.dispatch("replaceToken",[n,e,t]),[r,t]}else return{FAIL:"replaceRange: invalid tokens or startIndex."}};Rt.prototype.replaceToken=function(n,e,t){if(!isNaN(n)&&this.inboundIndex(n)&&e instanceof tr){const i=this.tokens.splice(n,1,e);return t||this.dispatch("replaceToken",[n,e]),[i[0],e]}else return{FAIL:"replaceToken: invalid token or index."}};Rt.prototype.removeRange=function(n,e,t){e=isNaN(e)?this.tokens.length:e;const i=this.tokens.splice(n,e);return t||this.dispatch("removeRange",[i,n,e]),i};Rt.prototype.removeToken=function(n,e){if(!isNaN(n)&&this.inboundIndex(n)){const t=this.tokens.splice(n,1);return e||this.dispatch("removeToken",[t,n]),t}else return{FAIL:"removeToken: invalid token index."}};Rt.prototype.insertToken=function(n,e,t){return n.every(s=>s instanceof tr)?(this.tokens.splice.apply(this.tokens,[e,0].concat(n)),t||this.dispatch("insertToken",[n,e]),n):{FAIL:"insertToken: invalid token(s)."}};Rt.prototype.registerModifier=function(n,e,t){this.events.newToken.subscribe(function(i,s){const r=[i,s],a=e===null||e.apply(this,r)===!0,o=[i,s];if(a){let l=t.apply(this,o);i.setState(n,l)}}),this.registeredModifiers.push(n)};Mo.prototype.subscribe=function(n){return typeof n=="function"?this.subscribers.push(n)-1:{FAIL:`invalid '${this.eventId}' event handler`}};Mo.prototype.unsubscribe=function(n){this.subscribers.splice(n,1)};nn.prototype.setCurrentIndex=function(n){this.index=n,this.current=this.context[n],this.backtrack=this.context.slice(0,n),this.lookahead=this.context.slice(n+1)};nn.prototype.get=function(n){switch(!0){case n===0:return this.current;case(n<0&&Math.abs(n)<=this.backtrack.length):return this.backtrack.slice(n)[0];case(n>0&&n<=this.lookahead.length):return this.lookahead[n-1];default:return null}};Rt.prototype.rangeToText=function(n){if(n instanceof au)return this.getRangeTokens(n).map(e=>e.char).join("")};Rt.prototype.getText=function(){return this.tokens.map(n=>n.char).join("")};Rt.prototype.getContext=function(n){let e=this.registeredContexts[n];return e||null};Rt.prototype.on=function(n,e){const t=this.events[n];return t?t.subscribe(e):null};Rt.prototype.dispatch=function(n,e){const t=this.events[n];if(t instanceof Mo)for(let i=0;ie.char);for(let e=0;e=s.start&&n<=s.end){let r=n-s.start;return s.index+r}}break}default:return-1}return-1}function UM(n,e){return Gi(n,e.coverage)===-1?null:n+e.deltaGlyphId}function NM(n,e){let t=Gi(n,e.coverage);return t===-1?null:e.substitute[t]}function gl(n,e){let t=[];for(let i=0;i{const{lookupListIndex:d,sequenceIndex:h}=u,{subtables:f}=this.getLookupByIndex(d);for(const m of f)Gi(c[h],m.coverage)!==-1&&(c[h]=m.deltaGlyphId)};for(let c=0;ci.features[s]),this.features[n]=e,this.mapTagsToFeatures(e,n),e};pn.prototype.getSubstitutionType=function(n,e){const t=n.lookupType.toString(),i=e.substFormat.toString();return t+i};pn.prototype.getLookupMethod=function(n,e){let t=this.getSubstitutionType(n,e);switch(t){case"11":return i=>UM.apply(this,[i,e]);case"12":return i=>NM.apply(this,[i,e]);case"63":return i=>kM.apply(this,[i,e]);case"41":return i=>FM.apply(this,[i,e]);case"21":return i=>zM.apply(this,[i,e]);case"51":return i=>BM.apply(this,[i,e]);case"53":return i=>HM.apply(this,[i,e]);default:throw new Error(`substitutionType : ${t} lookupType: ${n.lookupType} - substFormat: ${e.substFormat} is not yet supported`)}};pn.prototype.lookupFeature=function(n){let e=n.contextParams,t=e.index;const i=this.getFeature({tag:n.tag,script:n.script});if(!i)return new Error(`font '${(this.font.names.unicode||this.font.names.windows||this.font.names.macintosh).fullName.en}' doesn't support feature '${n.tag}' for script '${n.script}'.`);const s=this.getFeatureLookups(i),r=[].concat(e.context);for(let a=0;ai.tag===n.tag);return e&&t};pn.prototype.getLookupSubtables=function(n){return n.subtables||null};pn.prototype.getLookupByIndex=function(n){return this.font.tables.gsub.lookups[n]||null};pn.prototype.getFeatureLookups=function(n){return n.lookupListIndexes.map(this.getLookupByIndex.bind(this))};pn.prototype.getFeature=function(e){if(!this.font)return{FAIL:"No font was found"};Object.prototype.hasOwnProperty.call(this.features,e.script)||this.getScriptFeatures(e.script);const t=this.features[e.script];return t?t.tags[e.tag]?this.features[e.script].tags[e.tag]:null:{FAIL:`No feature for script ${e.script}`}};var VM=pn;function GM(n){const e=n.current,t=n.get(-1);return t===null&&Bi(e)||!Bi(t)&&Bi(e)}function WM(n){const e=n.get(1);return e===null||!Bi(e)}var XM={startCheck:GM,endCheck:WM};function YM(n){const e=n.current,t=n.get(-1);return(Bi(e)||Vi(e))&&!Bi(t)}function KM(n){const e=n.get(1);switch(!0){case e===null:return!0;case(!Bi(e)&&!Vi(e)):{const t=OM(e);if(!t)return!0;if(t){let i=!1;if(i=n.lookahead.some(s=>Bi(s)||Vi(s)),!i)return!0}break}default:return!1}}var qM={startCheck:YM,endCheck:KM};function ZM(n,e,t){e[t].setState(n.tag,n.substitution)}function $M(n,e,t){e[t].setState(n.tag,n.substitution)}function _l(n,e,t){for(let i=0;i=0;t--){const i=e[t],s=Op(i),r=Vi(i);if(!s&&!r)return!0;if(s)return!1}return!1}function e3(n){if(Op(n.current))return!1;for(let e=0;ea.getState("glyphIndex")),0);const r=new nn(i.map(a=>a.char),0);for(let a=0;ai.activeState.value);return new nn(t,0)}function i3(n){const e="arab";let t=this.tokenizer.getRangeTokens(n),i=hd(t);for(let s=0;s1}function a3(n){return n.index===n.context.length-1}var o3={startCheck:r3,endCheck:a3};function dd(n,e){const t=n.map(i=>i.activeState.value);return new nn(t,0)}function l3(n){const e="delf",t="ccmp";let i=this.tokenizer.getRangeTokens(n),s=dd(i);for(let r=0;ri.activeState.value);return new nn(t,0)}function f3(n){const e="latn";let t=this.tokenizer.getRangeTokens(n),i=fd(t);for(let s=0;si.activeState.value);return new nn(t,e||0)}function x3(n){const e="thai";let t=this.tokenizer.getRangeTokens(n),i=pd(t,0);for(let s=0;si.activeState.value);return new nn(t,e||0)}function v3(n){const e="thai";let t=this.tokenizer.getRangeTokens(n),i=md(t,0);for(let s=0;si.activeState.value);return new nn(t,e||0)}function b3(n){const e="thai";let t=this.tokenizer.getRangeTokens(n),i=gd(t,0);for(let s=0;s=6155&&e<=6157||e>=65024&&e<=65039||e>=917760&&e<=917999}function A3(n){const e=n.current,t=n.get(1);return t===null&&Rc(e)||Rc(t)}function E3(n){const e=n.get(1);return e===null||!Rc(e)}var T3={startCheck:A3,endCheck:E3};function C3(n){const e=this.query.font,t=this.tokenizer.getRangeTokens(n);if(t[1].setState("deleted",!0),e.tables.cmap&&e.tables.cmap.varSelectorList){const i=t[0].char.codePointAt(0),s=t[1].char.codePointAt(0),r=e.tables.cmap.varSelectorList[s];if(r!==void 0&&r.nonDefaultUVS){const a=r.nonDefaultUVS.uvsMappings;if(a[i]){const o=a[i].glyphID;e.glyphs.glyphs[o]!==void 0&&t[0].setState("glyphIndex",o)}}}}var w3=C3;function bn(n){this.baseDir=n||"ltr",this.tokenizer=new PM,this.featuresTags={}}bn.prototype.setText=function(n){this.text=n};bn.prototype.contextChecks={ccmpReplacementCheck:o3,latinWordCheck:d3,arabicWordCheck:XM,arabicSentenceCheck:qM,thaiWordCheck:_3,unicodeVariationSequenceCheck:T3};function Ns(n){const e=this.contextChecks[`${n}Check`];return this.tokenizer.registerContextChecker(n,e.startCheck,e.endCheck)}function R3(){return Ns.call(this,"ccmpReplacement"),Ns.call(this,"latinWord"),Ns.call(this,"arabicWord"),Ns.call(this,"arabicSentence"),Ns.call(this,"thaiWord"),Ns.call(this,"unicodeVariationSequence"),this.tokenizer.tokenize(this.text)}function D3(){const n=this.tokenizer.getContextRanges("arabicSentence");for(let e=0;ethis.query.supports({script:n,tag:i}));Object.prototype.hasOwnProperty.call(this.featuresTags,n)?this.featuresTags[n]=this.featuresTags[n].concat(t):this.featuresTags[n]=t};bn.prototype.applyFeatures=function(n,e){if(!n)throw new Error("No valid font was provided to apply features");this.query||(this.query=new VM(n));for(let t=0;t0)throw new Error("When creating a new Font object, negative descender value is required.");this.names={},this.names.unicode=xl(n),this.names.macintosh=xl(n),this.names.windows=xl(n),this.unitsPerEm=n.unitsPerEm||1e3,this.ascender=n.ascender,this.descender=n.descender,this.createdTimestamp=n.createdTimestamp,this.italicAngle=n.italicAngle||0,this.weightClass=n.weightClass||0;let e=0;n.fsSelection?e=n.fsSelection:(this.italicAngle<0?e|=this.fsSelectionValues.ITALIC:this.italicAngle>0&&(e|=this.fsSelectionValues.OBLIQUE),this.weightClass>=600&&(e|=this.fsSelectionValues.BOLD),e===0&&(e=this.fsSelectionValues.REGULAR)),(!n.panose||!Array.isArray(n.panose))&&(n.panose=[0,0,0,0,0,0,0,0,0]),this.tables=Object.assign(n.tables,{os2:Object.assign({usWeightClass:n.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:n.widthClass||this.usWidthClasses.MEDIUM,bFamilyType:n.panose[0]||0,bSerifStyle:n.panose[1]||0,bWeight:n.panose[2]||0,bProportion:n.panose[3]||0,bContrast:n.panose[4]||0,bStrokeVariation:n.panose[5]||0,bArmStyle:n.panose[6]||0,bLetterform:n.panose[7]||0,bMidline:n.panose[8]||0,bXHeight:n.panose[9]||0,fsSelection:e},n.tables.os2)})}this.supported=!0,this.glyphs=new ti.GlyphSet(this,n.glyphs||[]),this.encoding=new Kf(this),this.position=new Ib(this),this.substitution=new Bb(this),this.tables=this.tables||{},this.tables=new Proxy(this.tables,{set:(e,t,i)=>(e[t]=i,e.fvar&&(e.gvar||e.cff2)&&!this.variation&&(this.variation=new e2(this)),!0)}),this.palettes=new Ap(this),this.layers=new Hb(this),this.svgImages=new zb(this),this._push=null,this._hmtxTableData={},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:this.outlinesFormat==="truetype"?this._hinting=new DM(this):null}})}mt.prototype.hasChar=function(n){return this.encoding.charToGlyphIndex(n)>0};mt.prototype.charToGlyphIndex=function(n){return this.encoding.charToGlyphIndex(n)};mt.prototype.charToGlyph=function(n){const e=this.charToGlyphIndex(n);let t=this.glyphs.get(e);return t||(t=this.glyphs.get(0)),t};mt.prototype.updateFeatures=function(n){return this.defaultRenderOptions.features.map(e=>e.script==="latn"?{script:"latn",tags:e.tags.filter(t=>n[t])}:e)};mt.prototype.stringToGlyphIndexes=function(n,e){const t=new k3,i=r=>this.charToGlyphIndex(r.char);t.registerModifier("glyphIndex",null,i);let s=e?this.updateFeatures(e.features):this.defaultRenderOptions.features;return t.applyFeatures(this,s),t.getTextGlyphs(n)};mt.prototype.stringToGlyphs=function(n,e){const t=this.stringToGlyphIndexes(n,e);let i=t.length;const s=new Array(i),r=this.glyphs.get(0);for(let a=0;a{const u=a.getPath(o,l,c,s,this);if(s.drawSVG||s.drawLayers){const d=u._layers;if(d&&d.length){for(let h=0;h0,"No English "+s+" specified.")}if(i("fontFamily"),i("weightName"),i("manufacturer"),i("copyright"),i("version"),t(this.unitsPerEm>0,"No unitsPerEm specified."),this.tables.colr){const s=this.tables.colr.baseGlyphRecords;let r=-1;for(let a=0;as[a].glyphID)break;r=o}}return n};mt.prototype.toTables=function(){return Lb.fontToTable(this)};mt.prototype.toBuffer=function(){return console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead."),this.toArrayBuffer()};mt.prototype.toArrayBuffer=function(){const e=this.toTables().encode(),t=new ArrayBuffer(e.length),i=new Uint8Array(t);for(let s=0;s=1.2&&(s.markGlyphSets=t.parsePointer(Y3)),s}var q3={parse:K3},Un=new Array(10);Un[1]=function(){const e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{posFormat:1,coverage:this.parsePointer(q.coverage),value:this.parseValueRecord()};if(t===2)return{posFormat:2,coverage:this.parsePointer(q.coverage),values:this.parseValueRecordList()};Fe.assert(!1,"0x"+e.toString(16)+": GPOS lookup type 1 format must be 1 or 2.")};Un[2]=function(){const e=this.offset+this.relativeOffset,t=this.parseUShort();Fe.assert(t===1||t===2,"0x"+e.toString(16)+": GPOS lookup type 2 format must be 1 or 2.");const i=this.parsePointer(q.coverage),s=this.parseUShort(),r=this.parseUShort();if(t===1)return{posFormat:t,coverage:i,valueFormat1:s,valueFormat2:r,pairSets:this.parseList(q.pointer(q.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(s),value2:this.parseValueRecord(r)}})))};if(t===2){const a=this.parsePointer(q.classDef),o=this.parsePointer(q.classDef),l=this.parseUShort(),c=this.parseUShort();return{posFormat:t,coverage:i,valueFormat1:s,valueFormat2:r,classDef1:a,classDef2:o,class1Count:l,class2Count:c,classRecords:this.parseList(l,q.list(c,function(){return{value1:this.parseValueRecord(s),value2:this.parseValueRecord(r)}}))}}};Un[3]=function(){return{error:"GPOS Lookup 3 not supported"}};Un[4]=function(){return{error:"GPOS Lookup 4 not supported"}};Un[5]=function(){return{error:"GPOS Lookup 5 not supported"}};Un[6]=function(){return{error:"GPOS Lookup 6 not supported"}};Un[7]=function(){return{error:"GPOS Lookup 7 not supported"}};Un[8]=function(){return{error:"GPOS Lookup 8 not supported"}};Un[9]=function(){return{error:"GPOS Lookup 9 not supported"}};function Z3(n,e){e=e||0;const t=new q(n,e),i=t.parseVersion(1);return Fe.argument(i===1||i===1.1,"Unsupported GPOS table version "+i),i===1?{version:i,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(Un)}:{version:i,scripts:t.parseScriptList(),features:t.parseFeatureList(),lookups:t.parseLookupList(Un),variations:t.parseFeatureVariationsList()}}var $3=new Array(10);function J3(n){return new me.Table("GPOS",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new me.ScriptList(n.scripts)},{name:"features",type:"TABLE",value:new me.FeatureList(n.features)},{name:"lookups",type:"TABLE",value:new me.LookupList(n.lookups,$3)}])}var j3={parse:Z3,make:J3};function Q3(n){const e={};n.skip("uShort");const t=n.parseUShort();Fe.argument(t===0,"Unsupported kern sub-table version."),n.skip("uShort",2);const i=n.parseUShort();n.skip("uShort",3);for(let s=0;s1&&console.warn("Only the first kern subtable is supported."),n.skip("uLong");const s=n.parseUShort()&255;if(n.skip("uShort"),s===0){const r=n.parseUShort();n.skip("uShort",3);for(let a=0;a{const t=await(await fetch(e)).arrayBuffer();return new Er(aA(t))})(),this._shared.catch(()=>{Er._shared=null})),this._shared}measureEm(e){let t=0;for(const i of e)t+=this.ensureGlyph(i.codePointAt(0)).advance;return t}ensureGlyph(e){let t=this.glyphs.get(e);if(t)return t;const i=this.font.charToGlyph(String.fromCodePoint(e)),s=(i.advanceWidth??this.upem*.5)/this.upem,r=i.getPath(0,0,1),a=[];let o=0,l=0,c=0,u=0;for(const w of r.commands)switch(w.type){case"M":c=o=w.x,u=l=-w.y;break;case"L":a.push(xd(c,u,w.x,-w.y)),c=w.x,u=-w.y;break;case"Q":a.push({x0:c,y0:u,cx:w.x1,cy:-w.y1,x1:w.x,y1:-w.y}),c=w.x,u=-w.y;break;case"C":{const U=(w.x1+w.x2)/2,k=(-w.y1+-w.y2)/2;a.push({x0:c,y0:u,cx:U,cy:k,x1:w.x,y1:-w.y}),c=w.x,u=-w.y;break}case"Z":(c!==o||u!==l)&&a.push(xd(c,u,o,l)),c=o,u=l;break}if(!a.length)return t={base:-1,advance:s},this.glyphs.set(e,t),t;let d=1/0,h=1/0,f=-1/0,m=-1/0;for(const w of a)d=Math.min(d,w.x0,w.cx,w.x1),f=Math.max(f,w.x0,w.cx,w.x1),h=Math.min(h,w.y0,w.cy,w.y1),m=Math.max(m,w.y0,w.cy,w.y1);const _=Math.max(f-d,1e-6),p=Math.max(m-h,1e-6),g=Array.from({length:an},()=>[]),b=Array.from({length:an},()=>[]);a.forEach((w,U)=>{const k=Math.min(w.y0,w.cy,w.y1),O=Math.max(w.y0,w.cy,w.y1),$=Math.min(w.x0,w.cx,w.x1),F=Math.max(w.x0,w.cx,w.x1),Z=Da((k-h)/p),R=Da((O-h)/p);for(let ae=Z;ae<=R;ae++)g[ae].push(U);const re=Da(($-d)/_),se=Da((F-d)/_);for(let ae=re;ae<=se;ae++)b[ae].push(U)});const A=w=>Math.ceil(w.length/4),x=g.reduce((w,U)=>w+A(U),0)+b.reduce((w,U)=>w+A(U),0),E=2+an*2+x+a.length*2,S=this.alloc(E),M=this.data,y=(w,U,k,O,$)=>{M[w*4]=U,M[w*4+1]=k,M[w*4+2]=O,M[w*4+3]=$},T=S+2+an*2+x;y(S,d,h,f,m),y(S+1,S+2,S+2+an,0,0);let I=S+2+an*2;const L=(w,U)=>{for(let k=0;k{y(T+U*2,w.x0,w.y0,w.cx,w.cy),y(T+U*2+1,w.x1,w.y1,0,0)}),t={base:S,advance:s},this.glyphs.set(e,t),t}bboxOf(e){const t=e.base*4;return[this.data[t],this.data[t+1],this.data[t+2],this.data[t+3]]}alloc(e){const t=(this.used+e)*4;if(t>this.data.length){let s=this.data.length;for(;s>16&255)/255,g=(r>>8&255)/255,M=(r&255)/255;for(let E=0;E=0){const[L,C,O,N]=this.engine.bboxOf(I),U=L-Ca,Z=C-Ca,k=O+Ca,$=N+Ca,D=this.pos.length/3;for(const[ae,re]of[[U,Z],[k,Z],[k,$],[U,$]]){const ee=b+(v+ae)*u,ce=S+re*u;this.pos.push(t.x+ee*p-ce*x,t.y+ee*x+ce*p,1),this.emuv.push(ae,re),this.gbase.push(I.base),this.color.push(m,g,M)}this.index.push(D,D+1,D+2,D,D+2,D+3)}v+=I.advance}}}build(){if(!this.index.length)return null;const e=new wt;e.setAttribute("position",new ht(this.pos,3)),e.setAttribute("emuv",new ht(this.emuv,2)),e.setAttribute("gbase",new ht(this.gbase,1)),e.setAttribute("tcolor",new ht(this.color,3)),e.setIndex(this.index);const t=new In({glslVersion:uc,vertexShader:r2,fragmentShader:a2,uniforms:{dataTex:{value:this.engine.texture()}},transparent:!0,depthTest:!1,depthWrite:!1,side:zt}),i=new Gt(e,t);return i.frustumCulled=!0,i}}const vl=13226457,l2=64,vf=72,c2=14;function Fs(n){return n?n.replace(/\\A\d+;/g,"").replace(/\\p[^;]*;/g,"").replace(/\\P/g,` -`).replace(/\\[a-zA-Z][^;]*;/g,"").replace(/\{[^{}]*\}/g,e=>Fs(e.slice(1,-1))).replace(/%%d/gi,"°").replace(/%%p/gi,"±").replace(/%%c/gi,"Ø").replace(/[{}]/g,"").replace(/[ \t]{2,}/g," ").replace(/^[ \t]+|[ \t]+$/gm,"").replace(/\n{3,}/g,` +`;class uA{constructor(e){Vt(this,"pos",[]);Vt(this,"emuv",[]);Vt(this,"gbase",[]);Vt(this,"color",[]);Vt(this,"index",[]);this.engine=e}add(e,t,i,s,r,a,o){const l=this.engine,c=String(e).split(` +`),u=i/l.capHeightEm,d=i*5/3,h=(c.length-1)*d+i;a===4&&(o=2);let f;o===3?f=-i:o===2?f=h/2-i:f=(c.length-1)*d;const m=Math.cos(s),_=Math.sin(s),p=(r>>16&255)/255,g=(r>>8&255)/255,b=(r&255)/255;for(let A=0;A=0){const[L,w,U,k]=this.engine.bboxOf(I),O=L-Ra,$=w-Ra,F=U+Ra,Z=k+Ra,R=this.pos.length/3;for(const[re,se]of[[O,$],[F,$],[F,Z],[O,Z]]){const ae=S+(y+re)*u,ge=M+se*u;this.pos.push(t.x+ae*m-ge*_,t.y+ae*_+ge*m,1),this.emuv.push(re,se),this.gbase.push(I.base),this.color.push(p,g,b)}this.index.push(R,R+1,R+2,R,R+2,R+3)}y+=I.advance}}}build(){if(!this.index.length)return null;const e=new Ct;e.setAttribute("position",new ft(this.pos,3)),e.setAttribute("emuv",new ft(this.emuv,2)),e.setAttribute("gbase",new ft(this.gbase,1)),e.setAttribute("tcolor",new ft(this.color,3)),e.setIndex(this.index);const t=new Pn({glslVersion:dc,vertexShader:lA,fragmentShader:cA,uniforms:{dataTex:{value:this.engine.texture()}},transparent:!0,depthTest:!1,depthWrite:!1,side:Ht}),i=new zt(e,t);return i.frustumCulled=!0,i}}const hA=`; IntelliCAD Linetypes\r +;\r +; icad.lin\r +; Release 1.0 \r +; \r +; .............................................................................\r +;\r +; Copyright (c) 1998 by Visio Corporation. All rights reserved.\r +;\r +; The Software is subject to the license agreement that accompanies \r +; or is included with the Software, which specifies the permitted \r +; and prohibited uses of the Software. Any unauthorized duplication \r +; or use of Visio Corporation Software, in whole or in part, in print, \r +; or in any other storage and retrieval system is prohibited.\r +; \r +; To the maximum extent permitted by applicable law, Visio Corporation\r +; and its suppliers disclaim any and all warranties and conditions,\r +; either express or implied, including, without limitation, implied\r +; warranties of merchantability, fitness for a particular purpose,\r +; title, and non-infringement, and those arising out of usage of trade\r +; or course of dealing, concerning these materials. These materials\r +; are provided "as is" without warranty of any kind.\r +; .............................................................................\r +\r +\r +\r +*BORDER,__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . __ __ . __ __ . \r +A,0.50,-0.250,0.50,-0.250,0,-0.250\r +*BORDER2,__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ \r +A,0.25,-0.125,0.25,-0.125,0,-0.125\r +*BORDERX2,____ ____ . ____ ____ . ____ ____ . ____ ____ . \r +A,1.0,-0.5,1.0,-0.5,0,-0.5\r +\r +*CENTER,____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ _\r +A,1.250,-0.25,0.25,-0.25\r +*CENTER2,___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ _\r +A,0.75,-0.1250,0.1250,-0.125\r +*CENTERX2,________ __ ________ __ ________ __ ________ __ ____\r +A,2.5,-0.50,0.50,-0.50\r +\r +*DASHDOT,__ . __ . __ . __ . __ . __ . __ . __ . __ . __ . __ . __ . _\r +A,0.50,-0.250,0,-0.250\r +*DASHDOT2,_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.\r +A,0.25,-0.125,0,-0.125\r +*DASHDOTX2,____ . ____ . ____ . ____ . ____ . ____ . ____ \r +A,1.0,-0.5,0,-0.5\r +\r +*DASHED,__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __\r +A,0.50,-0.250\r +*DASHED2,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.250,-0.1250\r +*DASHEDX2,____ ____ ____ ____ ____ ____ ____ ____ ____ ____ \r +A,1.0,-0.5\r +\r +*DIVIDE,____ . . ____ . . ____ . . ____ . . ____ . . ____ . . ____ . .\r +A,0.50,-0.25,0,-0.25,0,-0.25\r +*DIVIDE2,__..__..__..__..__..__..__..__..__..__..__..__..__..__..__..__..\r +A,0.25,-0.125,0,-0.125,0,-0.125\r +*DIVIDEX2,________ . . ________ . . ________ . . ________ . .\r +A,1.0,-0.5,0,-0.5,0,-0.50\r +\r +*DOT,. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\r +A,0,-0.25\r +*DOT2,................................................................\r +A,0,-0.125\r +*DOTX2,. . . . . . . . . . . . . . . . . . . . . \r +A,0,-0.5\r +\r +*HIDDEN,__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ \r +A,0.250,-0.1250\r +*HIDDEN2,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.125,-0.06250\r +*HIDDENX2,____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ \r +A,0.5,-0.25\r +\r +*PHANTOM,______ __ __ ______ __ __ ______ __ __ ______ __ __\r +A,1.25,-0.25,0.250,-0.25,0.25,-0.25\r +*PHANTOM2,___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _\r +A,0.625,-0.125,0.1250,-0.125,0.125,-0.1250\r +*PHANTOMX2,____________ ____ ____ ____________ ____ ____ \r +A,2.5,-0.5,0.5,-0.5,0.50,-0.5\r +\r +*PHANTOM4,___ _ _ ___ _ _ (1/2 of Phantom2)__ _ _ ___ _ _ ___ _ _ ___ _ _\r +A,0.3125,-0.0625,0.0625,-0.0625,0.0625,-0.0625\r +\r +*PHANTOM8,___ _ _ ___ _ _ (1/2 of Phantom4)__ _ _ ___ _ _ ___ _ _ ___ _ _\r +A,0.15625,-0.03125,0.03125,-0.03125,0.03125,-0.03125\r +\r +*BORDER4,__.__.__.__.__.__._ (1/2 of Border2) _.__.__.__.__.__.__.__.__ \r +A,0.125,-0.0625,0.125,-0.0625,0,-0.0625\r +\r +*CENTER4,___ _ ___ _ ___ _ __ (1/2 of Center2)__ _ ___ _ ___ _ ___ _ _\r +A,0.375,-0.0625,0.0625,-0.0625\r +*CENTER8,___ _ ___ _ ___ _ __ (1/2 of Center4)__ _ ___ _ ___ _ ___ _ _\r +A,0.1875,-0.03125,0.03125,-0.03125\r +\r +*CENTERF,_____ _ _____ (Finer short dashes than Center) _____\r +A,1.25,-0.125,0.125,-0.125\r +*CENTERF2,___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ _\r +A,0.75,-0.0625,0.0625,-0.0625\r +;; Auto-Arch additions for finer linetypes.\r +*CENTERF4,___ _ ___ _ ___ _ __ (1/2 of CenterF2)__ _ ___ _ ___ _ ___ _ _\r +A,0.375,-0.03125,0.03125,-0.03125\r +*CENTERF8,___ _ ___ _ ___ _ __ (1/2 of CenterF4)__ _ ___ _ ___ _ ___ _ _\r +A,0.1875,-0.0015625,0.0015625,-0.0015625\r +\r +*DASHED4,_ _ _ _ _ _ _ _ (1/2 of Dashed2)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.125,-0.0625\r +*DASHED8,_ _ _ _ _ _ _ _ (1/2 of Dashed4)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.0625,-0.03125\r +\r +*DEMOx2,____ ____ ____ ____ ____\r +A,0.250,-0.5\r +*DEMO,__ __ __ __ __ __ __ __ __ __ __\r +A,0.125,-0.25\r +*DEMO2,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.0625,-0.125\r +*DEMO4,_ _ _ _ _ _ (1/2 of Demo2) _ _ _ _ _ _ _ _ _ _ _\r +A,0.0625,-0.125\r +*DEMO8,_ _ _ _ _ _ (1/2 of Demo4) _ _ _ _ _ _ _ _ _ _ _\r +A,0.03125,-0.0625\r +\r +*INVISIBLE,. (Dot at endpoints only) .\r +A,0,-1000\r +\r +*DOT4,...................(1/2 of Dot2)................................\r +A,0,-0.06125\r +*DOT8,...................(1/2 of Dot4)................................\r +A,0,-0.03125\r +*DOT16,..................(1/2 of Dot8)................................\r +A,0,-0.0015625\r +\r +*HIDDEN4,_ _ _ _ _ _ _ _ (1/2 of Hidden2)_ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.0625,-0.03125\r +*HIDDEN8,_ _ _ _ _ _ _ _ (1/2 of Hidden4)_ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.03125,-0.015\r +\r +*JIS_02_0.7, Hot Water Supply __ __ __ __ __ __ __\r +A,0.8,-0.5\r +*JIS_02_1.0, HIDDEN 0.8 - - - - - - - - - -\r +A,0.8,-0.8\r +*JIS_02_1.2, HIDDEN01.25 - - - - - - - - - -\r +A,1.26,-1.26\r +*JIS_02_2.0, HIDDEN02 __ __ __ __ __ __ __ __ __ __ __ \r +A,1.99,-0.99\r +*JIS_02_4.0, HIDDEN04 ____ ____ ____ ____ ____ ____ ____ \r +A,3.999,-0.999\r +*JIS_08_11, ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___\r +A,10.9999,-0.499,0.499,-0.499\r +*JIS_08_15, ____ _ ____ _ ____ _ ____ _ ____ _ ____\r +A,14.999,-0.499,0.499,-0.499\r +*JIS_08_25, ________ __ ________ __ ________ __\r +A,24.999,-1,0.8,-1\r +*JIS_08_37, _____________ __ _____________ __ _____________ __ \r +A,36.999,-1.0,0.8,-1\r +*JIS_08_50, , ___________________ __ ___________________ __ \r +A,49.999,-1.0,0.8,-1\r +*JIS_09_08, _____ _ _ _____ _ _ _____ _ _ _____ _ _ _____ _ _ \r +A,7.999,-0.5,0.5,-0.5,0.5,-0.5\r +*JIS_09_15, _________ _ _ _________ _ _ _________ _ _ _________ _ _ \r +A,14.999,-0.999,0.499,-0.999,0.499,-0.999\r +*JIS_09_29, _____________ _ _ _____________ _ _ _____________ _ _ \r +A,28.999,-1.499,0.999,-1.499,0.999,-1.499\r +*JIS_09_50, _______________________ __ __ _______________________\r +A,49.999,-1.499,0.999,-1.499,0.999,-1.499\r +\r +\r +\r +*CONTOUR,______ ______ ______ ______ ______ ______ ______ ______\r +A,0.375,-0.09375\r +*CONTOUR2,____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ \r +A,0.25,-0.0625\r +*COLDWR,___ _ ____ _ _____ _ _____ _ _____ _ ____\r +A,0.25,-0.075,0.075,-0.075\r +*HOTWR,___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___\r +A,0.25,-0.075,0.075,-0.075,0.075,-0.075\r +*HCW,_____ _ _ _ _____ _ _ _ _____ _ _ _ _____\r +A,1,-0.125,0.125,-0.125,0.125,-0.125,0.125,-0.125\r +*BOUNDARY,___________ __ __ ___________ __ __ ______ \r +A,1.75,-0.125,0.125,-0.125,0.125,-0.125\r +*BOUNDARY2,______ _ _ ______ _ _ ______ _ _ ______ _ _ ______\r +A,1,-0.0625,0.0625,-0.0625,0.0625,-0.0625\r +*STREAM,_________ . . ___________ . . ___________\r +A,1,-0.125,0,-0.125,0,-0.125 \r +*PNEUM,__ ___ ___ ___ ___ ___ ___ ___ ___ ___ __\r +A,0.2,-0.1,0.2,-0.1\r +*WASTE,__ __ __ __ __ __ __ __ __ __ __ __ __ __\r +A,0.25,-0.125\r +*2DASHES,____ _ _ _____ _ _ ____ _ _ ____ _ _ ____\r +A,0.75,-0.25,0.1,-0.25,0.1,-0.25\r +*EWIREUP,__ . __ . __ . __ . __ . __ . __ . __ .__\r +A,0.25,-.075,0,-.075\r +*EWCELL,___ ___ . ___ ___ . __ __ . __ __ . __ __\r +A,0.25,-0.075,0.25,-.075,0,-.075\r +\r +*EVENDASH,-- -- -- -- -- -- -- -- -- -- --\r +A,0.125,-0.125\r +\r +;; Additional Plumbing linetypes\r +*DCW,Domestic Cold Water ___ _ ______________ _ ____\r +A,1.25,-0.06,0.08,-0.06\r +*DCW2,Domestic Cold Water __ _ ______ _ _____ _ ____\r +A,0.625,-0.03,0.04,-0.03\r +*DCWX2,Domestic Cold Water ________ ___ __________\r +A,2.5,-0.12,0.16,-0.12\r +*DHW,Domestic Hot Water ___ _ _ ___________ _ _ ____\r +A,1.25,-0.06,0.08,-0.06,0.08,-0.06\r +*DHW2,Domestic Hot Water __ _ _ _____ _ _ ____ _ _ __\r +A,0.625,-0.03,0.04,-0.03,0.04,-0.03\r +*DHWX2,Domestic Hot Water _____ ___ ___ ___ _____\r +A,2.5,-0.12,0.16,-0.12,0.16,-0.12\r +*DHWR,Domestic Hot Wtr Return _____ __ __ __ ________\r +A,1.25,-0.06,0.08,-0.06,0.08,-0.06,0.08,-0.06\r +*DHWR2,Domestic Hot Wtr Return ___ _ _ _ ____________\r +A,0.625,-0.03,0.04,-0.03,0.04,-0.03,0.04,-0.03\r +*DHWRX2,Domestic Hot Wtr Return ____ ___ ____ ____ ____\r +A,2.5,-0.12,0.16,-0.12,0.16,-0.12,0.16,-0.12\r +*VENT,Sanitary Vent Pipe __ __ __ __ __ __ __ __ __ __\r +A,0.16,-0.08\r +*VENT2,Sanitary Vent Pipe _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.08,-0.04\r +*VENTX2,Sanitary Vent Pipe ____ ____ ____ ___\r +A,0.32,-0.16\r +*COND,Steam Condensate __ __ __ __ __ __ __ __ __ __ __\r +A,0.16,-0.08\r +*COND2,Steam Condensate _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r +A,0.08,-0.04\r +*CONDX2,Steam Condensate ____ ____ ____ ____\r +A,0.32,-0.16\r +\r +;;; ISO LINTYPES\r +*DaL013,02b013 Dashed line 0.13mm\r +A,1.56,-0.39\r +*DaSpL013,03b013 Dashed space line 0.13mm\r +A,1.56,-2.34\r +*LDaDoL013,04b013 Long dashed dotted line 0.13mm \r +A,3.12,-0.39,0.065,-0.39\r +*LDaDbDoL,05b013 Long dash double dotted line 0.13mm \r +A,3.12,-0.39,0.065,-0.39,0.065,-0.39\r +*LDaTrDoL,06b013 Long dashed triplicate dotted line 0.13mm \r +A,3.12,-0.39,0.065,-0.39,0.065,-0.39,0.065,-0.39\r +*DoL013,07b013 Dotted line\r +A,0.065,-0.39\r +*LDaShDaL013,08b013 Long dashed short dashed line 0.13mm \r +A,3.12,-0.39,0.78,-0.39\r +*09b013,Long dashed double-short-dashed line 0.13mm \r +A,3.12,-0.39,0.78,-0.39,0.78,-0.39\r +*10b013,Dashed dotted line 0.13mm \r +A,1.56,-0.39,0.065,-0.39\r +*11b013,Double-dashed dotted line 0.13mm \r +A,1.56,-0.39,1.56,-0.39,0.065,-0.39\r +*12b013,Dashed double-dotted line 0.13mm \r +A,1.56,-0.39,0.065,-0.39,0.065,-0.39\r +*13b013,Double-dashed double-dotted line 0.13mm \r +A,1.56,-0.39,1.56,-0.39,0.065,-0.39,0.065,-0.39\r +*14b013,Dashed triplicate-dotted line 0.13mm \r +A,1.56,-0.39,0.065,-0.39,0.065,-0.39,0.065,-0.39\r +*15b013,Double-dashed triplicate-dotted line 0.13mm \r +A,1.56,-0.39,1.56,-0.39,0.065,-0.39,0.065,-0.39,0.065,-0.39\r +*02b018,Dashed line 0.18mm \r +A,2.16,-0.54\r +*03b018,Dashed space line 0.18mm \r +A,2.16,-3.24\r +*04b018,Long dashed dotted line 0.18mm \r +A,4.32,-0.54,0.09,-0.54\r +*05b018,Long dash double dotted line 0.18mm \r +A,4.32,-0.54,0.09,-0.54,0.09,-0.54\r +*06b018,Long dashed triplicate dotted line 0.18mm \r +A,4.32,-0.54,0.09,-0.54,0.09,-0.54,0.09,-0.54\r +*07b018,Lotted line\r +A,0.09,-0.54\r +*08b018,Long dashed short dashed line 0.18mm \r +A,4.32,-0.54,1.08,-0.54\r +*09b018,Long dashed double-short-dashed line 0.18mm \r +A,4.32,-0.54,1.08,-0.54,1.08,-0.54\r +*10b018,Dashed dotted line 0.18mm \r +A,2.16,-0.54,0.09,-0.54\r +*11b018,Double-dashed dotted line 0.18mm \r +A,2.16,-0.54,2.16,-0.54,.09,-0.54\r +*12b018,Dashed double-dotted line 0.18mm \r +A,2.16,-0.54,0.09,-0.54,0.09,-0.54\r +*13b018,Double-dashed double-dotted line 0.18mm \r +A,2.16,-0.54,2.16,-0.54,0.09,-0.54,0.09,-0.54\r +*14b018,Dashed triplicate-dotted line 0.18mm \r +A,2.16,-0.54,0.09,-0.54,0.09,-0.54,0.09,-0.54\r +*15b018,Double-dashed triplicate-dotted line 0.18mm \r +A,2.16,-0.54,2.16,-0.54,0.09,-0.54,0.09,-0.54,0.09,-0.54\r +*02b025,Dashed Line 0.25mm \r +A,3,-0.75\r +*03b025,Dashed space line 0.25mm \r +A,3,-4.5\r +*04b025,Long dashed dotted line 0.25mm \r +A,6,-0.75,0.125,-0.75\r +*05b025,Long dash double dotted line 0.25mm \r +A,6,-0.75,0.125,-0.75,0.125,-0.75\r +*06b025,Long dashed triplicate dotted line 0.25mm \r +A,6,-0.75,0.125,-0.75,0.125,-0.75,0.125,-0.75\r +*07b025,Dotted line 0.25 mm \r +A,0.125,-0.75\r +*08b025,Long dashed short dashed line 0.25mm \r +A,6,-0.75,1.5,-0.75\r +*09b025,Long dashed double-short-dashed line 0.25mm \r +A,6,-0.75,1.5,-0.75,1.5,-0.75\r +*10b025,Dashed dotted line 0.25mm \r +A,3,-0.75,0.125,-0.75\r +*11b025,Double-dashed dotted line 0.25mm \r +A,3,-0.75,3,-0.75,0.125,-0.75\r +*12b025,Dashed double-dotted line 0.25mm \r +A,3,-0.75,0.125,-0.75,0.125,-0.75\r +*13b025,Double-dashed double-dotted line 0.25mm \r +A,3,-0.75,3,-0.75,0.125,-0.75,0.125,-0.75\r +*14b025,Dashed triplicate-dotted line 0.25mm \r +A,3,-0.75,0.125,-0.75,0.125,-0.75,0.125,-0.75\r +*15b025,Double-dashed triplicate-dotted line 0.25mm \r +A,3,-0.75,3,-0.75,0.125,-0.75,0.125,-0.75,0.125,-0.75\r +*02b035,Dashed line 0.35mm \r +A,4.2,-1.05\r +*03b035,Dashed space line 0.35mm \r +A,4.2,-6.3\r +*04b035,Long dashed dotted line 0.35mm \r +A,8.4,-1.05,0.175,-1.05\r +*05b035,Long dash double dotted line 0.35mm \r +A,8.4,-1.05,0.175,-1.05,0.175,-1.05\r +*06b035,Long dashed triplicate dotted line 0.35mm \r +A,8.4,-1.05,.175,-1.05,.175,-1.05,0.175,-1.05\r +*07b035,Dotted line 0.35mm \r +A,.175,-1.05\r +*08b035,Long dashed short dashed line 0.35mm \r +A,8.4,-1.05,2.1,-1.05\r +*09b035,Long dashed double-short-dashed line 0.35mm \r +A,8.4,-1.05,2.1,-1.05,2.1,-1.05\r +*10b035,Lashed dotted line 0.35mm \r +A,4.2,-1.05,0.175,-1.05\r +*11b035,Double-dashed dotted line 0.35mm \r +A,4.2,-1.05,4.2,-1.05,.175,-1.05\r +*12b035,Dashed double-dotted line 0.35mm \r +A,4.2,-1.05,.175,-1.05,.175,-1.05\r +*13b035,Double-dashed double-dotted line 0.35mm \r +A,4.2,-1.05,4.2,-1.05,.175,-1.05,.175,-1.05\r +*14b035,Dashed triplicate-dotted line 0.35mm \r +A,4.2,-1.05,.175,-1.05,.175,-1.05,.175,-1.05\r +*15b035,Double-dashed triplicate-dotted line 0.35mm \r +A,4.2,-1.05,4.2,-1.05,.175,-1.05,.175,-1.05,.175,-1.05\r +*02b05,Dashed line 0.5mm \r +A,6,-1.5\r +*03b05,Dashed space line 0.5mm \r +A,6,-9\r +*04b05,Long dashed dotted line 0.5mm \r +A,12,-1.5,0.25,-1.5\r +*05b05,Long dash double dotted line 0.5mm \r +A,12,-1.5,0.25,-1.5,0.25,-1.5\r +*06b05,Long dashed triplicate dotted line 0.5mm \r +A,12,-1.5,0.25,-1.5,.25,-1.5,0.25,-1.5\r +*07b05,Dotted line 0.5mm \r +A,0.25,-1.5\r +*08b05,Long dashed short dashed line 0.5mm \r +A,12,-1.5,3,-1.5\r +*09b05,Long dashed double-short-dashed line 0.5mm \r +A,12,-1.5,3,-1.5,3,-1.5\r +*10b05,Dashed dotted line 0.5mm \r +A,6,-1.5,0.25,-1.5\r +*11b05,Double-dashed dotted line 0.5mm \r +A,6,-1.5,6,-1.5,0.25,-1.5\r +*12b05,Dashed double-dotted line 0.5mm \r +A,6,-1.5,.25,-1.5,0.25,-1.5\r +*13b05,Double-dashed double-dotted line 0.5mm \r +A,6,-1.5,6,-1.5,0.25,-1.5,0.25,-1.5\r +*14b05,Dashed triplicate-dotted line 0.5mm \r +A,6,-1.5,0.25,-1.5,0.25,-1.5,0.25,-1.5\r +*15b05,Double-dashed triplicate-dotted line 0.5mm \r +A,6,-1.5,6,-1.5,0.25,-1.5,0.25,-1.5,0.25,-1.5\r +*02b07,Dashed Line 0.7mm \r +A,8.4,-2.1\r +*03b07,Dashed space line 0.7mm \r +A,8.4,-12.6\r +*04b07,Long dashed dotted line 0.7mm \r +A,16.8,-2.1,0.35,-2.1\r +*05b07,Long dash double dotted line 0.7mm \r +A,16.8,-2.1,0.35,-2.1,0.35,-2.1\r +*06b07,Long dashed triplicate dotted line 0.7mm \r +A,16.8,-2.1,0.35,-2.1,0.35,-2.1,0.35,-2.1\r +*07b07,Dotted line 0.7mm \r +A,0.35,-2.1\r +*08b07,Long dashed short dashed line 0.7mm \r +A,16.8,-2.1,4.2,-2.1\r +*09b07,Long dashed double-short-dashed line 0.7mm \r +A,16.8,-2.1,4.2,-2.1,4.2,-2.1\r +*10b07,Dashed dotted line 0.7mm \r +A,8.4,-2.1,0.35,-2.1\r +*11b07,Double-dashed dotted line 0.7mm \r +A,8.4,-2.1,8.4,-2.1,0.35,-2.1\r +*12b07,Dashed double-dotted line 0.7mm \r +A,8.4,-2.1,0.35,-2.1,0.35,-2.1\r +*13b07,Double-dashed double-dotted line 0.7mm \r +A,8.4,-2.1,8.4,-2.1,0.35,-2.1,0.35,-2.1\r +*14b07,Dashed triplicate-dotted line 0.7mm \r +A,8.4,-2.1,0.35,-2.1,0.35,-2.1,0.35,-2.1\r +*15b07,Double-dashed triplicate-dotted line 0.7mm \r +A,8.4,-2.1,8.4,-2.1,0.35,-2.1,0.35,-2.1,0.35,-2.1\r +*02b1,Dashed Line 1mm \r +A,12,-3\r +*03b1,Dashed space line 1mm \r +A,12,-18\r +*04b1,Long dashed dotted line 1mm \r +A,24,-3,.5,-3\r +*05b1,Long dash double dotted line 1mm \r +A,24,-3,.5,-3,.5,-3\r +*06b1,Long dashed triplicate dotted line 1mm \r +A,24,-3,.5,-3,.5,-3,.5,-3\r +*07b1,Dotted line\r +A,.5,-3\r +*08b1,Long dashed short dashed line 1mm \r +A,24,-3,6,-3\r +*09b1,Long dashed double-short-dashed line 1mm \r +A,24,-3,6,-3,6,-3\r +*10b1,Dashed dotted line 1mm \r +A,12,-3,.5,-3\r +*11b1,Double-dashed dotted line 1mm \r +A,12,-3,12,-3,0.5,-3\r +*12b1,Dashed double-dotted line 1mm \r +A,12,-3,0.5,-3,0.5,-3\r +*13b1,Double-dashed double-dotted line 1mm \r +A,12,-3,12,-3,0.5,-3,0.5,-3\r +*14b1,Dashed triplicate-dotted line 1mm \r +A,12,-3,0.5,-3,0.5,-3,0.5,-3\r +*15b1,Double-dashed triplicate-dotted line 1mm \r +A,12,-3,12,-3,0.5,-3,.5,-3,0.5,-3\r +*02b14,Dashed Line 1.4mm \r +A,16.8,-4.2\r +*03b14,Dashed space line 1.4mm \r +A,16.8,25.2\r +*04b14,Long dashed dotted line 1.4mm \r +A,33.6,-4.2,.7,-4.2\r +*05b14,Long dash double dotted line 1.4mm \r +A,33.6,-4.2,.7,-4.2,.7,-4.2\r +*06b14,Long dashed triplicate dotted line 1.4mm \r +A,33.6,-4.2,.7,-4.2,.7,-4.2,.7,-4.2\r +*07b14,Dotted line 1.4mm \r +A,.7,-4.2\r +*08b14,Long dashed short dashed line 1.4mm \r +A,33.6,-4.2,8.4,-4.2\r +*09b14,Long dashed double-short-dashed line 1.4mm \r +A,33.6,-4.2,8.4,-4.2,8.4,-4.2\r +*10b14,Dashed dotted line 1.4mm \r +A,16.8,-4.2,.7,-4.2\r +*11b14,Double-dashed dotted line 1.4mm \r +A,16.8,-4.2,16.8,-4.2,.7,-4.2\r +*12b14,Dashed double-dotted line 1.4mm \r +A,16.8,-4.2,.7,-4.2,.7,-4.2\r +*13b14,Double-dashed double-dotted line 1.4mm \r +A,16.8,-4.2,16.8,-4.2,.7,-4.2,.7,-4.2\r +*14b14,Dashed triplicate-dotted line 1.4mm \r +A,16.8,-4.2,.7,-4.2,.7,-4.2,.7,-4.2\r +*15b14,Double-dashed triplicate-dotted line 1.4mm \r +A,16.8,-4.2,16.8,-4.2,.7,-4.2,.7,-4.2,.7,-4.2\r +*02b2,Dashed Line 2mm \r +A,24,-6\r +*03b2,Dashed space line 2mm \r +A,24,-36\r +*04b2,Long dashed dotted line 2mm \r +A,48,-6,1,-6\r +*05b2,Long dash double dotted line 2mm \r +A,48,-6,1,-6,1,-6\r +*06b2,Long dashed triplicate dotted line 2mm \r +A,48,-6,1,-6,1,-6,1,-6\r +*07b2,Dotted line 2mm \r +A,1,-6\r +*08b2,Long dashed short dashed line 2mm \r +A,48,-6,12,-6\r +*09b2,Long dashed double-short-dashed line 2mm \r +A,48,-6,12,-6,12,-6\r +*10b2,Dashed dotted line 2mm \r +A,24,-6,1,-6\r +*11b2,Double-dashed dotted line 2mm \r +A,24,-6,24,-6,1,-6\r +*12b2,Dashed double-dotted line 2mm \r +A,24,-6,1,-6,1,-6\r +*13b2,Double-dashed double-dotted line 2mm \r +A,24,-6,24,-6,1,-6,1,-6\r +*14b2,Dashed triplicate-dotted line 2mm \r +A,24,-6,1,-6,1,-6,1,-6\r +*15b2,Double-dashed triplicate-dotted line 2mm \r +A,24,-6,24,-6,1,-6,1,-6,1,-6\r +;; Complex linetypes using standard style\r +*FENCELINE1,Fenceline_circle ----0-----0----0-----0----0-----0--\r +A,.25,-.1,[CIRC1,ltypeshp.shx,x=-.1,s=.1],-.1,.1\r +*FENCELINE2,Fenceline square ----[]-----[]----[]-----[]----[]---\r +A,.25,-.1,[BOX,ltypeshp.shx,x=-.1,s=.1],-.1,1\r +*TRACKS,Tracks -|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-\r +A,.15,[TRACK1,ltypeshp.shx,s=.25],.15\r +*MAP,Map line ----MAP----MAP----MAP----MAP----MAP---- \r +A,.5,-.2,["MAP",STANDARD,S=.1,R=0.0,X=-0.1,Y=-.05],-.25\r +*BATTING,Batting SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\r +A,.0001,-.1,[BAT,ltypeshp.shx,x=-.1,s=.1],-.2,[BAT,ltypeshp.shx,r=180,x=.1,s=.1],-.1\r +*ZIGZAG,Zig zag /\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\r +A,.0001,-.2,[ZIG,ltypeshp.shx,x=-.2,s=.2],-.4,[ZIG,ltypeshp.shx,r=180,x=.2,s=.2],-.2\r +*HOT_WATER_SUPPLY,Hot water supply ---- HW ---- HW ---- HW ----\r +A,12.7,-5.08,["HW",STANDARD,S=2.54,R=0.0,X=-2.54,Y=-1.27],-5.08\r +*GAS_LINE,Gas line ----GAS----GAS----GAS----GAS----GAS----GAS--\r +A,.5,-.2,["GAS",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05],-.25\r +*SMILEYS,Smiley line ---- :^) ---- 8) ---- :^) ----\r +A,12.7,-5.08,[":^)",STANDARD,S=2.54,R=0.0,X=-2.54,Y=-1.27],-5.08,12.7,-5.08,["8)",STANDARD,S=2.54,R=0.0,X=-2.54,Y=-1.27],-5.08\r +\r +;------------Slope--------------\r +*SLOPE,1B 1S |-|-|-|-|-|-|-|-|-|-|-|-\r +A,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE-D, 1B 1S Double |-|-|-|-|-|-|-|-|-|-|-|-\r +A,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE2, 1B 2S ||-||-||-||-||-||-||-||-||-||-||-||-\r +A,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE2-D, 1B 2S Double ||-||-||-||-||-||-||-||-||-||-||-||-\r +A,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE3, 1B 3S |||-|||-|||-|||-|||-|||-|||-|||-|||-|||-|||-|||-\r +A,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE3-D, 1B 3S Double |||-|||-|||-|||-|||-|||-|||-|||-|||-|||-|||-|||-\r +A,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE4, 1B 4S ||||-||||-||||-||||-||||-||||-||||-||||-||||-||||-\r +A,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE4-D, 1B 4S Double ||||-||||-||||-||||-||||-||||-||||-||||-||||-||||-\r +A,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE5, 1B 5S |||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-\r +A,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +*SLOPE5-D, 1B 5S Double |||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-\r +A,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r +\r +;------------Alphabets--------------\r +*Letter A, ---- A ---- A ---- A ---- A ---- A ----\r +A,1.0,-0.5,["A",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter B, ---- B ---- B ---- B ---- B ---- B ----\r +A,1.0,-0.5,["B",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter C,---- C ---- C ---- C ---- C ---- C ----\r +A,1.0,-0.5,["C",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter D, ---- D ---- D ---- D ---- D ---- D ----\r +A,1.0,-0.5,["D",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter E, ---- E ---- E ---- E ---- E ---- E ----\r +A,1.0,-0.5,["E",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter F, ---- F ---- F ---- F ---- F ---- F ----\r +A,1.0,-0.5,["F",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter G, ---- G ---- G ---- G ---- G ---- G ----\r +A,1.0,-0.5,["G",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter H, ---- H ---- H ---- H ---- H ---- H ----\r +A,1.0,-0.5,["H",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter I, ---- I ---- I ---- I ---- I ---- I ----\r +A,1.0,-0.5,["I",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter J, ---- J ---- J ---- J ---- J ---- J ----\r +A,1.0,-0.5,["J",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter K, ---- K ---- K ---- K ---- K ---- K ----\r +A,1.0,-0.5,["K",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter L, ---- L ---- L ---- L ---- L ---- L ----\r +A,1.0,-0.5,["L",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter M, ---- M ---- M ---- M ---- M ---- M ----\r +A,1.0,-0.5,["M",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter N, ---- N ---- N ---- N ---- N ---- N ----\r +A,1.0,-0.5,["N",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter O, ---- O ---- O ---- O ---- O ---- O ----\r +A,1.0,-0.5,["O",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter P, ---- P ---- P ---- P ---- P ---- P ----\r +A,1.0,-0.5,["P",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter Q, ---- Q ---- Q ---- Q ---- Q ---- Q ----\r +A,1.0,-0.5,["Q",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter R, ---- R ---- R ---- R ---- R ---- R ----\r +A,1.0,-0.5,["R",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter S, ---- S ---- S ---- S ---- S ---- S ----\r +A,1.0,-0.5,["S",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter T, ---- T ---- T ---- T ---- T ---- T ----\r +A,1.0,-0.5,["T",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter U, ---- U ---- U ---- U ---- U ---- U ----\r +A,1.0,-0.5,["U",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter V, ---- V ---- V ---- V ---- V ---- V ----\r +A,1.0,-0.5,["V",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter W, ---- W ---- W ---- W ---- W ---- W ----\r +A,1.0,-0.5,["W",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter X, ---- X ---- X ---- X ---- X ---- X ----\r +A,1.0,-0.5,["X",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter Y, ---- Y ---- Y ---- Y ---- Y ---- Y ----\r +A,1.0,-0.5,["Y",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Letter Z, ---- Z ---- Z ---- Z ---- Z ---- Z ----\r +A,1.0,-0.5,["Z",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +\r +;------------Numericals--------------\r +*Numbers 0, ---- 0 ---- 0 ---- 0 ---- 0 ---- 0 ----\r +A,1.0,-0.5,["0",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 1, ---- 1 ---- 1 ---- 1 ---- 1 ---- 1 ----\r +A,1.0,-0.5,["1",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 2, ---- 2 ---- 2 ---- 2 ---- 2 ---- 2 ----\r +A,1.0,-0.5,["2",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 3, ---- 3 ---- 3 ---- 3 ---- 3 ---- 3 ----\r +A,1.0,-0.5,["3",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 4, ---- 4 ---- 4 ---- 4 ---- 4 ---- 4 ----\r +A,1.0,-0.5,["4",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 5, ---- 5 ---- 5 ---- 5 ---- 5 ---- 5 ----\r +A,1.0,-0.5,["5",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 6, ---- 6 ---- 6 ---- 6 ---- 6 ---- 6 ----\r +A,1.0,-0.5,["6",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 7, ---- 7 ---- 7 ---- 7 ---- 7 ---- 7 ----\r +A,1.0,-0.5,["7",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 8, ---- 8 ---- 8 ---- 8 ---- 8 ---- 8 ----\r +A,1.0,-0.5,["8",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +*Numbers 9, ---- 9 ---- 9 ---- 9 ---- 9 ---- 9 ----\r +A,1.0,-0.5,["9",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r +\r +\r +`,dA=`;; ------------------------------------�� �� �� ��------------------------------------\r +;; �� �� ���� ���� ����(KOSDIC.lin)�� �Ǽ�CALS/EC ���ڵ��� �ۼ�ǥ���� �� ��Ͽ� ���ǵ� �� ������\r +;; AutoCAD ����ڿ��� �����ϱ� ���� ���۵Ǿ����ϴ�.\r +;; \r +;; ǥ�ع��� : �Ǽ�CALS/EC ���ڵ��� �ۼ�ǥ�� V1.1(2006.12)\r +;; ������� : �Ǽ�CALS/EC ������ �ѱ��Ǽ����������\r +;;\r +;; �����Ģ : 1/1 ��ô�� ����ũ�� 2.0mm�� ��� ������ ũ�⸦ ������\r +;; LIB ��Ģ : AutoCAD�� ANSI����(���� ��������� ����)�� ����Ű ���� 1/10�� ������\r +;; (��) ���� �� ���� ������ 2mm�̸� 0.2unit�� ����\r +;; ����Ģ : �ǹ����鿡 ����� ��� �������� ��Ģ�� ���յǷ��� ��������ô�� 10�踦 ������\r +;; (��) LTSCALE=10 (���� 8~10��), ������ô�� 1/5 �̸� LTSCALE=5x10��=50\r +;;\r +;; ISO���� �԰� 15��\r +// ���� AutoCAD ISO�� 25.4����� ������ �� ����\r +*A-ISONS01,ISO �����԰� 01 Continuous ________________________________\r +A,1,1\r +*A-ISONS02,ISO �����԰� 02 dash __ __ __ __ __ __ __ __ __ __ __ __ __\r +A,.47244,-.118111\r +*A-ISONS03,ISO �����԰� 03 dash space __ __ __ __ __ __\r +A,.47244,-.7086614\r +*A-ISONS04,ISO �����԰� 04 long-dash dot ____ . ____ . ____ . ____ . _\r +A,.94488,-.11811,0,-.11811\r +*A-ISONS05,ISO �����԰� 05 long-dash double-dot ____ .. ____ .. ____ . \r +A,.94488,-.11811,0,-.11811,0,-.11811\r +*A-ISONS06,ISO �����԰� 06 long-dash triple-dot ____ ... ____ ... ____\r +A,.94488,-.11811,0,-.11811,0,-.11811,0,-.11811\r +*A-ISONS07,ISO �����԰� 07 dot . . . . . . . . . . . . . . . . . . . . \r +A,0,-.11811\r +*A-ISONS08,ISO �����԰� 08 long-dash short-dash ____ __ ____ __ ____ _\r +A,.94488,-.11811,.94488,-.11811\r +*A-ISONS09,ISO �����԰� 09 long-dash double-short-dash ____ __ __ ____\r +A,.94488,-.11811,.94488,-.11811,.94488,-.11811\r +*A-ISONS10,ISO �����԰� 10 dash dot __ . __ . __ . __ . __ . __ . __ . \r +A,.47244,-.11811,0,-.11811\r +*A-ISONS11,ISO �����԰� 11 double-dash dot __ __ . __ __ . __ __ . __ _\r +A,.47244,-.11811,.47244,-.11811,0,-.11811\r +*A-ISONS12,ISO �����԰� 12 dash double-dot __ . . __ . . __ . . __ . . \r +A,.47244,-.11811,0,-.11811,0,-.11811\r +*A-ISONS13,ISO �����԰� 13 double-dash double-dot __ __ . . __ __ . . _\r +A,.47244,-.11811,.47244,-.11811,0,-.11811,0,-.11811\r +*A-ISONS14,ISO �����԰� 14 dash triple-dot __ . . . __ . . . __ . . . _\r +A,.47244,-.11811,0,-.11811,0,-.11811,0,-.11811\r +*A-ISONS15,ISO �����԰� 15 double-dash triple-dot __ __ . . . __ __ . .\r +A,.47244,-.11811,.47244,-.11811,0,-.11811,0,-.11811,0,-.11811\r +\r +;; ���CAD ����\r +*A-BORDR01,�ܰ���(�Ϲ�) Border __ __ . __ __ . __ __ . __ __ . __ __ .\r +A,.5,-.25,.5,-.25,0,-.25\r +*A-BORDR01H,�ܰ���(�ݹ��) Border (.5x) __.__.__.__.__.__.__.__.__.__.__.\r +A,.25,-.125,.25,-.125,0,-.125\r +*A-BORDR01X,�ܰ���(���) Border (2x) ____ ____ . ____ ____ . ___\r +A,1.0,-.5,1.0,-.5,0,-.5\r +*A-CENTR01,�߽ɼ�(�Ϲ�) Center ____ _ ____ _ ____ _ ____ _ ____ _ ____\r +A,1.25,-.25,.25,-.25\r +*A-CENTR01H,�߽ɼ�(�ݹ��) Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___\r +A,.75,-.125,.125,-.125\r +*A-CENTR01X,�߽ɼ�(���) Center (2x) ________ __ ________ __ _____\r +A,2.5,-.5,.5,-.5\r +*A-DASDT01,�Ĵ�����(�Ϲ�) Dash dot __ . __ . __ . __ . __ . __ . __ . __\r +A,.5,-.25,0,-.25\r +*A-DASDT01H,�Ĵ�����(�ݹ��) Dash dot (.5x) _._._._._._._._._._._._._._._.\r +A,.25,-.125,0,-.125\r +*A-DASDT01X,�Ĵ�����(���) Dash dot (2x) ____ . ____ . ____ . ___\r +A,1.0,-.5,0,-.5\r +*A-DASHD01,�ļ�(�Ϲ�) Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _\r +A,.5,-.25\r +*A-DASHD01H,�ļ�(�ݹ��) Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r +A,.25,-.125\r +*A-DASHD01X,�ļ�(���) Dashed (2x) ____ ____ ____ ____ ____ ___\r +A,1.0,-.5\r +*A-DIVID01,���Ҽ�(�Ϲ�) Divide ____ . . ____ . . ____ . . ____ . . ____\r +A,.5,-.25,0,-.25,0,-.25\r +*A-DIVID01H,���Ҽ�(�ݹ��) Divide (.5x) __..__..__..__..__..__..__..__.._\r +A,.25,-.125,0,-.125,0,-.125\r +*A-DIVID01X,���Ҽ�(���) Divide (2x) ________ . . ________ . . _\r +A,1.0,-.5,0,-.5,0,-.5\r +*A-DOTLN01,����(�Ϲ�) Dot . . . . . . . . . . . . . . . . . . . . . . . .\r +A,0,-.25\r +*A-DOTLN01H,����(�ݹ��) Dot (.5x) ........................................\r +A,0,-.125\r +*A-DOTLN01X,����(���) Dot (2x) . . . . . . . . . . . . . .\r +A,0,-.5\r +*A-HIDDN01,������(�Ϲ�) Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ __\r +A,.25,-.125\r +*A-HIDDN01H,������(�ݹ��) Hidden (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r +A,.125,-.0625\r +*A-HIDDN01X,������(���) Hidden (2x) ____ ____ ____ ____ ____ ____ ____ \r +A,.5,-.25\r +*A-PHATM01,����(�Ϲ�) Phantom ______ __ __ ______ __ __ ______ \r +A,1.25,-.25,.25,-.25,.25,-.25\r +*A-PHATM01H,����(�ݹ��) Phantom (.5x) ___ _ _ ___ _ _ ___ _ _ ___ _ _\r +A,.625,-.125,.125,-.125,.125,-.125\r +*A-PHATM01X,����(���) Phantom (2x) ____________ ____ ____ _\r +A,2.5,-.5,.5,-.5,.5,-.5\r +\r +;; �潺�ü�\r +*E-FENCE01,�潺(X �ļ�)\r +A,.85,-.15,[KSC11,kosdic.shx,s=.1],-.15,.85\r +*E-FENCE02,�潺(X �Ǽ�)\r +A,1.0,[KSC11,kosdic.shx,s=.1],1.0\r +*E-FENCE03,�潺(/\\ �ļ�)\r +A,.875,-.05,[KSC12,kosdic.shx,s=.1],-.2,.875\r +*E-FENCE04,�潺(+ �ļ�)\r +A,.85,-.15,[KSC15,kosdic.shx,s=.1],-.15,.85\r +\r +;; �������\r +*E-UTIL01,����(| �Ǽ�)\r +A,1.0,[KSC01,kosdic.shx,s=.1],1.0\r +*E-UTIL02,����(|| �ļ�)\r +A,.05,[KSC01,kosdic.shx,s=.1],-.1,[KSC01,kosdic.shx,s=.1],1.85\r +*E-UTIL03,����(|| �Ǽ�)\r +A,.95,[KSC01,kosdic.shx,s=.1],.1,[KSC01,kosdic.shx,s=.1],.95\r +*E-UTIL04,����(||| �ļ�)\r +A,.9,[KSC01,kosdic.shx,s=.1],-.1,[KSC01,kosdic.shx,s=.1],-.1,[KSC01,kosdic.shx,s=.1],.9\r +*E-UTIL05,����(||| �Ǽ�)\r +A,.9,[KSC01,kosdic.shx,s=.1],.1,[KSC01,kosdic.shx,s=.1],.1,[KSC01,kosdic.shx,s=.1],.9\r +*E-UTIL06,����(/ �ļ�)\r +A,.9,-.1,[KSC02,kosdic.shx,s=.1],-.1,.9\r +*E-UTIL07,����(/ �Ǽ�)\r +A,1.0,[KSC02,kosdic.shx,s=.1],1.0\r +*E-UTIL08,����(// �ļ�)\r +A,.85,-.15,[KSC05,kosdic.shx,s=.1],-.15,.85\r +*E-UTIL09,����(// �Ǽ�)\r +A,1.0,[KSC05,kosdic.shx,s=.1],1.0\r +*E-UTIL10,����(/// �ļ�)\r +A,.8,-.2,[KSC06,kosdic.shx,s=.1],-.2,.8\r +*E-UTIL11,����(/// �Ǽ�)\r +A,1.0,[KSC06,kosdic.shx,s=.1],1.0\r +\r +;; �ü�����\r +*E-FACLN01,�ü�(- ���༱)\r +A,.25,[KSC01,kosdic.shx,y=-.05,s=.1,r=270],.25\r +*E-FACLN02,�ü�(= ���༱)\r +A,.25,[KSC04,kosdic.shx,y=-.05,s=.1],.25\r +*E-FACLN03,�ü�(O �ļ�)\r +A,.85,[KSC31,kosdic.shx,x=.075,s=.075],-.15,1.0\r +*E-FACLN04,�ü�(O �Ǽ�)\r +A,1.0,[KSC31,kosdic.shx,s=.075],1.0\r +*E-FACLN05,�ü�(��,����Ʈ)\r +A,1.0,[KSC32,kosdic.shx,s=.075],1.0\r +\r +;; ��������\r +*E-TOPOG01,����(�� �ļ�)\r +A,.000002,[KSC16,kosdic.shx,s=.1],-.25\r +*E-TOPOG02,����(�� �Ǽ�)\r +A,.000002,[KSC16,kosdic.shx,s=.1],-.2\r +*E-TOPOG03,����(| �Ǽ�)\r +A,0,-.1,[KSC15,kosdic.shx,s=.1],-.1\r +*E-TOPOG04,����(| ����)\r +A,0,[KSC00,kosdic.shx,y=.1,s=.1],.2,[KSC00,kosdic.shx,s=.1],.2\r +*E-TOPOG05,����(~. ����)\r +A,.000005,[KSC1C,kosdic.shx,s=.1],-.45,[KSC30,kosdic.shx,s=.1],-.05\r +\r +;; ������� ����\r +*B-ZIGZG01,�������(��)\r +A,.000002,[KSC13,kosdic.shx,s=.1],-.2\r +*B-ZIGZG02,�������(ȣ)\r +A,.000002,[KSC1B,kosdic.shx,s=.1],-.2\r +*C-ZIGZG01,�������(�Ǽ�,��)\r +A,.1,[KSC13,kosdic.shx,s=.1],.1\r +*C-ZIGZG02,�������(�Ǽ�,ȣ)\r +A,.1,[KSC1B,kosdic.shx,s=.1],.1\r +\r +;; ���� �� ����\r +*D-SWALL01,����(�ű�)\r +A,0,[KSC61,kosdic.shx,y=-.1,s=.1],-.2\r +*X-SWALL01,����(����)\r +A,0,[KSC71,kosdic.shx,s=.1],-.4\r +*D-BWALL01,���ϴ�(����)\r +A,0,[KSC18,kosdic.shx,s=.1],-.25\r +*D-BWALL02,���ϴ�(�ű�)\r +A,.000005,[KSC3A,kosdic.shx,s=.05],-.1,[KSC3A,kosdic.shx,s=.05],-.1,[KSC04,kosdic.shx,y=-.025,s=.05],-.1,[KSC04,kosdic.shx,y=-.025,s=.05],-.1,[KSC04,kosdic.shx,y=-.025,s=.05],-.05\r +\r +;; ��/�����迭\r +*E-DOTLN01,���ҹ迭\r +A,0,[KSC30,kosdic.shx,s=.3],-.15\r +*E-DOTLN02,���ҹ迭(��)\r +A,.075,[KSC30,kosdic.shx,s=.3],.075\r +*E-CIRCL01,�����������Ϲ迭\r +A,0,[KSC31,kosdic.shx,s=.1],-.2\r +*E-CIRCL02,ä��������Ϲ迭\r +A,0,[KSC32,kosdic.shx,s=.1],-.2\r +*D-RROAD01,ö��(����)\r +A,0,[KSC3A,kosdic.shx,s=.1],-.2,[KSC04,kosdic.shx,y=-.05,s=.1],-.2\r +\r +;; ������\r +*E-DIGLN01,������\r +A,.9,-.2,[KSC19,kosdic.shx,s=.1,r=180],.9\r +*E-DIGLN01H,������(�ݹ��)\r +A,.45,-.1,[KSC19,kosdic.shx,s=.05,r=180],.45\r +*E-DIGLN01X,������(���)\r +A,1.8,-.4,[KSC19,kosdic.shx,s=.2,r=180],1.8\r +\r +;; ���\r +*B-GREEN01,����/�����\r +A,.000002,[KSC08,kosdic.shx,s=.1],-.2\r +*B-GREEN02,�����\r +A,0,[KSC21,kosdic.shx,s=.1],-.45\r +*E-BOUND01,�������\r +A,.875,[KSC60,kosdic.shx,s=.1],-.25,.875\r +\r +;; ��Ÿ\r +*B-RANDM01,�ұ�Ģ��\r +A,0,[KSC1A,kosdic.shx,s=.1],-.2\r +*E-DEMOL01,ö�Ŵ��\r +A,.075,[KSC01,kosdic.shx,s=.1,r=30],.075\r +*X-EARTH01,���ݼ�\r +A,0,[KSC20,kosdic.shx,s=.1,x=.25,r=180],.25\r +\r +;; ���ܼ�\r +*E-CUTLN01,���ܼ�(��)\r +A,.95,[KSC14,kosdic.shx,s=.1],-.1,.95\r +*E-CUTLN02,���ܼ�(ȣ)\r +A,.95,[KSC22,kosdic.shx,s=.1],-.1,.95\r +\r +;; ���帧 ����\r +*E-WFLOW01,���帧(��, �ļ�)\r +A,.6,[KSC36,kosdic.shx,s=.1],-.65\r +*E-WFLOW02,���帧(��, �Ǽ�)\r +A,1.5,[KSC36,kosdic.shx,s=.1],0\r +*E-WFLOW03,���帧(ȭ��, �ļ�)\r +A,.6,[KSC35,kosdic.shx,s=.1],-.65\r +*E-WFLOW04,���帧(ȭ��, �Ǽ�)\r +A,1.5,[KSC35,kosdic.shx,s=.1],0\r +\r +;; ���������\r +*G-WATER01,���������(W ����)\r +A,2.933333,["W",Standard,y=.05,s=.2],.066667\r +*G-WATER02,���������(W �ļ�)\r +A,2.75,-.05,["W",Standard,y=-.1,s=.2,r=360],-.2\r +\r +;; �¼�����\r +*G-HWATR01,�¼�����(HWL ����)\r +A,2.783629,["HWL",Standard,y=.05,s=.2],.216371\r +*G-HWATR02,�¼�����(HWL �ļ�)\r +A,2.35,-.05,["HWL",Standard,y=-.1,s=.2],-.6\r +\r +;; �ü�����\r +*G-CWATR01,�ü�����(CWL ����)\r +A,2.783629,["CWL",Standard,y=.05,s=.2],.216371\r +*G-CWATR02,�ü�����(CWL �ļ�)\r +A,2.35,-.05,["CWL",Standard,y=-.1,s=.2],-.6\r +\r +;; ��������\r +*E-SEWER01,��������(����)\r +A,.95,-.1,[KSC09,kosdic.shx,s=.1,r=180],.95\r +*E-SEWER01H,��������(����,�ݹ��)\r +A,.475,-.05,[KSC09,kosdic.shx,s=.05,r=180],.475\r +*E-SEWER01X,��������(����,���)\r +A,1.9,-.2,[KSC09,kosdic.shx,s=.2,r=180],1.9\r +*G-SEWER01,��������(S ����)\r +A,2.933333,["S",Standard,y=.05,s=.2],.066667\r +*G-SEWER02,��������(S �ļ�)\r +A,2.75,-.05,["S",Standard,y=-.1,s=.2,r=360],-.2\r +\r +;; ��ż���\r +*G-TELCM01,��ż���(T ����)\r +A,2.933333,["T",Standard,y=.05,s=.2],.066667\r +*G-TELCM02,��ż���(T �ļ�)\r +A,2.75,-.05,["T",Standard,y=-.1,s=.2,r=360],-.2\r +\r +;; ���⼱��\r +*G-ELECT01,���⼱��(E ����)\r +A,2.933333,["E",Standard,y=.05,s=.2],.066667\r +*G-ELECT02,���⼱��(E �ļ�)\r +A,2.75,-.05,["E",Standard,y=-.1,s=.2,r=360],-.2\r +\r +;; ��������\r +*G-GASLN01,��������(G ����)\r +A,2.933333,["G",Standard,y=.05,s=.2],.066667\r +*G-GASLN02,��������(G �ļ�)\r +A,2.75,-.05,["G",Standard,y=-.1,s=.2,r=360],-.2\r +*G-GASLN03,��������(GAS ����)\r +A,2.783629,["GAS",Standard,y=.05,s=.2],.216371\r +*G-GASLN04,��������(GAS �ļ�)\r +A,2.35,-.05,["GAS",Standard,y=-.1,s=.2],-.6\r +\r +;; �Ϲ�������\r +;; *CAL421,PIPE\r +;; A,2.733333,["PIPE",Standard,y=.05,s=.2],.266667\r +*G-PIPEL01,�Ϲ� ������(PIPE �ļ�)\r +A,3.25,-.05,["PIPE",Standard,y=-.1,s=.2],-.7\r +\r +;; �������\r +*H-DICHT00,�������\r +A,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["T",Standard,y=-.1,s=.2,r=360],-.216667\r +*H-DICHT00R,�������(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.466667,["T",Standard,y=.1,s=.2,r=180],-.083333\r +\r +;; L������\r +*H-DICHL00,L������ ����00\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.333333,["L",Standard,y=-.1,s=.2],-.216667\r +*H-DICHL00R,L������ ����00(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.466667,["L",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL01,L������ ����01\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.366667,["L1",Standard,y=-.1,s=.2,r=360],-.383333\r +*H-DICHL01R,L������ ����01(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.633333,["L1",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHL02,L������ ����02\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["L2",Standard,y=-.1,s=.2],-.416667\r +*H-DICHL02R,L������ ����02(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["L2",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL03,L������ ����03\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["L3",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHL03R,L������ ����03(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["L3",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL04,L������ ����04\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["L4",Standard,y=-.1,s=.2],-.416667\r +*H-DICHL04R,L������ ����04(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["L4",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL05,L������ ����05\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["L5",Standard,y=-.1,s=.2],-.416667\r +*H-DICHL05R,L������ ����05(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,["L5",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL06,L������ ����06\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["L6",Standard,y=-.1,s=.2],-.416667\r +*H-DICHL06R,L������ ����06(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,["L6",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL07,L������ ����07\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["L7",Standard,y=-.1,s=.2],-.416667\r +*H-DICHL07R,L������ ����07(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["L7",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL08,L������ ����08\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["L8",Standard,y=-.1,s=.2],-.416667\r +*H-DICHL08R,L������ ����08(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["L8",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL09,L������ ����09\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["L9",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHL09R,L������ ����09(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,["L9",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHL10,L������ ����10\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["L10",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-DICHL10R,L������ ����10(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["L10",Standard,y=.1,s=.2,r=180],-.133333\r +*H-DICHL11,L������ ����11\r +A,.7,[KSC35,kosdic.shx,s=.1],-.4,["L11",Standard,y=-.1,s=.2],-.55\r +*H-DICHL11R,L������ ����11(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.8,["L11",Standard,y=.1,s=.2,r=180],-.15\r +*H-DICHL12,L������ ����12\r +A,.7,[KSC35,kosdic.shx,s=.1],-.366667,["L12",Standard,y=-.1,s=.2],-.583333\r +*H-DICHL12R,L������ ����12(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.833333,["L12",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHL13,L������ ����13\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.366667,["L13",Standard,y=-.1,s=.2,r=360],-.583333\r +*H-DICHL13R,L������ ����13(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.833333,["L13",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHL14,L������ ����14\r +A,.7,[KSC35,kosdic.shx,s=.1],-.366667,["L14",Standard,y=-.1,s=.2],-.583333\r +*H-DICHL14R,L������ ����14(����)\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.833333,["L14",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHL15,L������ ����15\r +A,.7,[KSC35,kosdic.shx,s=.1],-.366667,["L15",Standard,y=-.1,s=.2],-.583333\r +*H-DICHL15R,L������ ����15(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.833333,["L15",Standard,y=.1,s=.2,r=180],-.116667\r +\r +;; U������\r +*H-DICHU00,U������ ����00\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.333333,["U",Standard,y=-.1,s=.2],-.216667\r +*H-DICHU00R,U������ ����00(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.466667,["U",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU01,U������ ����01\r +A,.9,[KSC35,kosdic.shx,s=.1],-.366667,["U1",Standard,y=-.1,s=.2],-.383333\r +*H-DICHU01R,U������ ����01(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.633333,["U1",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHU02,U������ ����02\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["U2",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHU02R,U������ ����02(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["U2",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU03,U������ ����03\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["U3",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHU03R,U������ ����03(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["U3",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU04,U������ ����04\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["U4",Standard,y=-.1,s=.2],-.416667\r +*H-DICHU04R,U������ ����04(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["U4",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU05,U������ ����05\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["U5",Standard,y=-.1,s=.2],-.416667\r +*H-DICHU05R,U������ ����05(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["U5",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU06,U������ ����06\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["U6",Standard,y=-.1,s=.2],-.416667\r +*H-DICHU06R,U������ ����06(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["U6",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU07,U������ ����07\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["U7",Standard,y=-.1,s=.2],-.416667\r +*H-DICHU07R,U������ ����07(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["U7",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU08,U������ ����08\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["U8",Standard,y=-.1,s=.2],-.416667\r +*H-DICHU08R,U������ ����08(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["U8",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU09,U������ ����09\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["U9",Standard,y=-.1,s=.2],-.416667\r +*H-DICHU09R,U������ ����09(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["U9",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHU10,U������ ����10\r +A,.7,[KSC35,kosdic.shx,s=.1],-.383333,["U10",Standard,y=-.1,s=.2],-.566667\r +*H-DICHU10R,U������ ����10(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["U10",Standard,y=.1,s=.2,r=180],-.133333\r +*H-DICHU11,U������ ����11\r +A,.7,[KSC35,kosdic.shx,s=.1],-.4,["U11",Standard,y=-.1,s=.2],-.55\r +*H-DICHU11R,U������ ����11(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.8,["U11",Standard,y=.1,s=.2,r=180],-.15\r +*H-DICHU12,U������ ����12\r +A,.7,[KSC35,kosdic.shx,s=.1],-.366667,["U12",Standard,y=-.1,s=.2],-.583333\r +*H-DICHU12R,U������ ����12(����)\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.833333,["U12",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHU13,U������ ����13\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.366667,["U13",Standard,y=-.1,s=.2,r=360],-.583333\r +*H-DICHU13R,U������ ����13(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.833333,["U13",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHU14,U������ ����14\r +A,.7,[KSC35,kosdic.shx,s=.1],-.366667,["U14",Standard,y=-.1,s=.2],-.583333\r +*H-DICHU14R,U������ ����14(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.833333,["U14",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHU15,U������ ����15\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.366667,["U15",Standard,y=-.1,s=.2,r=360],-.583333\r +*H-DICHU15R,U������ ����15(����)\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.833333,["U15",Standard,y=.1,s=.2,r=180],-.116667\r +\r +;; V������\r +*H-DICHV00,V������ ����00\r +A,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.3,["V",Standard,y=-.1,s=.2,r=360],-.25\r +*H-DICHV00R,V������ ����00(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.5,["V",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV01,V������ ����01\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["V1",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHV01R,V������ ����01(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["V1",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHV02,V������ ����02\r +A,.9,[KSC35,kosdic.shx,s=.1],-.3,["V2",Standard,y=-.1,s=.2],-.45\r +*H-DICHV02R,V������ ����02(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.7,["V2",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV03,V������ ����03\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,["V3",Standard,y=-.1,s=.2,r=360],-.45\r +*H-DICHV03R,V������ ����03(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.7,["V3",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV04,V������ ����04\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,["V4",Standard,y=-.1,s=.2,r=360],-.45\r +*H-DICHV04R,V������ ����04(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.7,["V4",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV05,V������ ����05\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,["V5",Standard,y=-.1,s=.2,r=360],-.45\r +*H-DICHV05R,V������ ����05(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.7,["V5",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV06,V������ ����06\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,["V6",Standard,y=-.1,s=.2,r=360],-.45\r +*H-DICHV06R,V������ ����06(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.25,0,-.45,["V6",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV07,V������ ����07\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,["V7",Standard,y=-.1,s=.2,r=360],-.45\r +*H-DICHV07R,V������ ����07(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.7,["V7",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV08,V������ ����08\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,["V8",Standard,y=-.1,s=.2,r=360],-.45\r +*H-DICHV08R,V������ ����08(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.7,["V8",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV09,V������ ����09\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,["V9",Standard,y=-.1,s=.2,r=360],-.45\r +*H-DICHV09R,V������ ����09(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.7,["V9",Standard,y=.1,s=.2,r=180],-.05\r +*H-DICHV10,V������ ����10\r +A,.7,[KSC35,kosdic.shx,s=.1],-.35,["V10",Standard,y=-.1,s=.2],-.6\r +*H-DICHV10R,V������ ����10(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.85,["V10",Standard,y=.1,s=.2,r=180],-.1\r +*H-DICHV11,V������ ����11\r +A,.7,[KSC35,kosdic.shx,s=.1],-.366667,["V11",Standard,y=-.1,s=.2],-.583333\r +*H-DICHV11R,V������ ����11(����)\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.833333,["V11",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHV12,V������ ����12\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["V12",Standard,y=-.1,s=.2,r=360],-.616667\r +*H-DICHV12R,V������ ����12(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.866667,["V12",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHV13,V������ ����13\r +A,.7,[KSC35,kosdic.shx,s=.1],-.333333,["V13",Standard,y=-.1,s=.2],-.616667\r +*H-DICHV13R,V������ ����13(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.866667,["V13",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHV14,V������ ����14\r +A,.7,[KSC35,kosdic.shx,s=.1],-.333333,["V14",Standard,y=-.1,s=.2],-.616667\r +*H-DICHV14R,V������ ����14(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.866667,["V14",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHV15,V������ ����15\r +A,.7,[KSC35,kosdic.shx,s=.1],-.333333,["V15",Standard,y=-.1,s=.2],-.616667\r +*H-DICHV15R,V������ ����15(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.866667,["V15",Standard,y=.1,s=.2,r=180],-.083333\r +\r +;; ����ũ\r +*H-DICHD00,����ũ ����00\r +A,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["D",Standard,y=-.1,s=.2,r=360],-.216667\r +*H-DICHD00R,����ũ ����00(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.466667,["D",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHD01,����ũ ����01\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.366667,["D1",Standard,y=-.1,s=.2,r=360],-.383333\r +*H-DICHD01R,����ũ ����01(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.633333,["D1",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHD02,����ũ ����02\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["D2",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHD02R,����ũ ����02(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["D2",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHD03,����ũ ����03\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["D3",Standard,y=-.1,s=.2],-.416667\r +*H-DICHD03R,����ũ ����03(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["D3",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHD04,����ũ ����04\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["D4",Standard,y=-.1,s=.2],-.416667\r +*H-DICHD04R,����ũ ����04(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,["D4",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHD05,����ũ ����05\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["D5",Standard,y=-.1,s=.2],-.416667\r +*H-DICHD05R,����ũ ����05(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["D5",Standard,y=.1,s=.2,r=180],-.083333\r +\r +;; �긶�� ����\r +*H-DICHB00,�긶������ ����00\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.633333,["B",Standard,y=-.1,s=.2],-.216667\r +*H-DICHB00R,�긶������ ����00(����)\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.766667,["B",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHB01,�긶������ ����01\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.666667,["B1",Standard,y=-.1,s=.2],-.383333\r +*H-DICHB01R,�긶������ ����01(����)\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.933333,["B1",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHB02,�긶������ ����02\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.633333,["B2",Standard,y=-.1,s=.2],-.416667\r +*H-DICHB02R,�긶������ ����02(����)\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.966667,["B2",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHB03,�긶������ ����03\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.633333,["B3",Standard,y=-.1,s=.2],-.416667\r +*H-DICHB03R,�긶������ ����03(����)\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.966667,["B3",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHB04,�긶������ ����04\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.633333,["B4",Standard,y=-.1,s=.2],-.416667\r +*H-DICHB04R,�긶������ ����04(����)\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.966667,["B4",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHB05,�긶������ ����05\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.633333,["B5",Standard,y=-.1,s=.2],-.416667\r +*H-DICHB05R,�긶������ ����05(����)\r +A,.00001,[KSC52,kosdic.shx,s=.1],-.966667,["B5",Standard,y=.1,s=.2,r=180],-.083333\r +\r +;; �;ϰ�\r +*H-DICHM00,�;ϰ� ����00\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.333333,["M",Standard,y=-.1,s=.2],-.216667\r +*H-DICHM00R,�;ϰ� ����00(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.466667,["M",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHM01,�;ϰ� ����01\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.366667,["M1",Standard,y=-.1,s=.2,r=360],-.383333\r +*H-DICHM01R,�;ϰ� ����01(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.633333,["M1",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHM02,�;ϰ� ����02\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["M2",Standard,y=-.1,s=.2],-.416667\r +*H-DICHM02R,�;ϰ� ����02(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,["M2",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHM03,�;ϰ� ����03\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["M3",Standard,y=-.1,s=.2],-.416667\r +*H-DICHM03R,�;ϰ� ����03(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["M3",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHM04,�;ϰ� ����04\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["M4",Standard,y=-.1,s=.2],-.416667\r +*H-DICHM04R,�;ϰ� ����04(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["M4",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHM05,�;ϰ� ����05\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["M5",Standard,y=-.1,s=.2],-.416667\r +*H-DICHM05R,�;ϰ� ����05(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["M5",Standard,y=.1,s=.2,r=180],-.083333\r +\r +;; �������\r +*H-DICHO00,������� ����00\r +A,.7,[KSC35,kosdic.shx,s=.1],-.333333,["L/O",Standard,y=-.1,s=.2],-.616667\r +*H-DICHO00R,������� ����00(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.866667,["L/O",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHO01,������� ����01\r +A,.5,[KSC35,kosdic.shx,s=.1],-.366667,["L1/O",Standard,y=-.1,s=.2],-.783333\r +*H-DICHO01R,������� ����01(����)\r +A,.5,[KSC35,kosdic.shx,s=.1],-1.033333,["L1/O",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHO02,������� ����02\r +A,.5,[KSC35,kosdic.shx,s=.1],-.333333,["L2/O",Standard,y=-.1,s=.2],-.816667\r +*H-DICHO02R,������� ����02(����)\r +A,.5,[KSC35,kosdic.shx,s=.1,r=360],-1.066667,["L2/O",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHO03,������� ����03\r +A,.5,[KSC35,kosdic.shx,s=.1],-.333333,["L3/O",Standard,y=-.1,s=.2],-.816667\r +*H-DICHO03R,������� ����03(����)\r +A,.5,[KSC35,kosdic.shx,s=.1],-1.066667,["L3/O",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHO04,������� ����04\r +A,.5,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["L4/O",Standard,y=-.1,s=.2,r=360],-.816667\r +*H-DICHO04R,������� ����04(����)\r +A,.5,[KSC35,kosdic.shx,s=.1],-1.066667,["L4/O",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHO05,������� ����05\r +A,.5,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["L5/O",Standard,y=-.1,s=.2,r=360],-.816667\r +*H-DICHO05R,������� ����05(����)\r +A,.5,[KSC35,kosdic.shx,s=.1],-1.066667,["L5/O",Standard,y=.1,s=.2,r=180],-.083333\r +\r +;; �Ҵ�����\r +*H-DICHG00,�Ҵ����� ����00\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.333333,["G",Standard,y=-.1,s=.2],-.216667\r +*H-DICHG00R,�Ҵ����� ����00(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.466667,["G",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHG01,�Ҵ����� ����01\r +A,.9,[KSC35,kosdic.shx,s=.1],-.366667,["G1",Standard,y=-.1,s=.2],-.383333\r +*H-DICHG01R,�Ҵ����� ����01(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.633333,["G1",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHG02,�Ҵ����� ����02\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["G2",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHG02R,�Ҵ����� ����02(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["G2",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHG03,�Ҵ����� ����03\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["G3",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHG03R,�Ҵ����� ����03(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["G3",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHG04,�Ҵ����� ����04\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["G4",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHG04R,�Ҵ����� ����04(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["G4",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHG05,�Ҵ����� ����05\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["G5",Standard,y=-.1,s=.2],-.416667\r +*H-DICHG05R,�Ҵ����� ����05(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["G5",Standard,y=.1,s=.2,r=180],-.083333\r +\r +;; J������\r +*H-DICHJ00,J������ ����00\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.333333,["J",Standard,y=-.1,s=.2],-.216667\r +*H-DICHJ00R,J������ ����00(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.466667,["J",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHJ01,J������ ����01\r +A,.9,[KSC35,kosdic.shx,s=.1],-.366667,["J1",Standard,y=-.1,s=.2],-.383333\r +*H-DICHJ01R,J������ ����01(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.633333,["J1",Standard,y=.1,s=.2,r=180],-.116667\r +*H-DICHJ02,J������ ����02\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["J2",Standard,y=-.1,s=.2],-.416667\r +*H-DICHJ02R,J������ ����02(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["J2",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHJ03,J������ ����03\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["J3",Standard,y=-.1,s=.2],-.416667\r +*H-DICHJ03R,J������ ����03(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["J3",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHJ04,J������ ����04\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["J4",Standard,y=-.1,s=.2],-.416667\r +*H-DICHJ04R,J������ ����04(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["J4",Standard,y=.1,s=.2,r=180],-.083333\r +*H-DICHJ05,J������ ����05\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["J5",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-DICHJ05R,J������ ����05(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["J5",Standard,y=.1,s=.2,r=180],-.083333\r +\r +;; �����\r +*H-CANAL00,����� ����00\r +A,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["Y",Standard,y=-.1,s=.2,r=360],-.216667\r +*H-CANAL00R,����� ����00(����)\r +A,1.1,[KSC35,kosdic.shx,s=.1],-.466667,["Y",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL01,����� ����01\r +A,.9,[KSC35,kosdic.shx,s=.1],-.366667,["Y1",Standard,y=-.1,s=.2],-.383333\r +*H-CANAL01R,����� ����01(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.633333,["Y1",Standard,y=.1,s=.2,r=180],-.116667\r +*H-CANAL02,����� ����02\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["Y2",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-CANAL02R,����� ����02(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,["Y2",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL03,����� ����03\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["Y3",Standard,y=-.1,s=.2],-.416667\r +*H-CANAL03R,����� ����03(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,["Y3",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL04,����� ����04\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["Y4",Standard,y=-.1,s=.2],-.416667\r +*H-CANAL04R,����� ����04(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["Y4",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL05,����� ����05\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,["Y5",Standard,y=-.1,s=.2,r=360],-.416667\r +*H-CANAL05R,����� ����05(����)\r +A,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,["Y5",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL06,����� ����06\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["Y6",Standard,y=-.1,s=.2],-.416667\r +*H-CANAL06R,����� ����06(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["Y6",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL07,����� ����07\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["Y7",Standard,y=-.1,s=.2],-.416667\r +*H-CANAL07R,����� ����07(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["Y7",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL08,����� ����08\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["Y8",Standard,y=-.1,s=.2],-.416667\r +*H-CANAL08R,����� ����08(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["Y8",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL09,����� ����09\r +A,.9,[KSC35,kosdic.shx,s=.1],-.333333,["Y9",Standard,y=-.1,s=.2],-.416667\r +*H-CANAL09R,����� ����09(����)\r +A,.9,[KSC35,kosdic.shx,s=.1],-.666667,["Y9",Standard,y=.1,s=.2,r=180],-.083333\r +*H-CANAL10,����� ����10\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y10",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL10R,����� ����10(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y10",Standard,y=.1,s=.2,r=180],-.133333\r +*H-CANAL11,����� ����11\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y11",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL11R,����� ����11(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y11",Standard,y=.1,s=.2,r=180],-.133333\r +*H-CANAL12,����� ����12\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y12",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL12R,����� ����12(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y12",Standard,y=.1,s=.2,r=180],-.133333\r +*H-CANAL13,����� ����13\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y13",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL13R,����� ����13(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y13",Standard,y=.1,s=.2,r=180],-.133333\r +*H-CANAL14,����� ����14\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y14",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL14R,����� ����14(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y14",Standard,y=.1,s=.2,r=180],-.133333\r +*H-CANAL15,����� ����15\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y15",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL15R,����� ����15(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y15",Standard,y=.1,s=.2,r=180],-.133333\r +*H-CANAL16,����� ����16\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y16",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL16R,����� ����16(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y16",Standard,y=.1,s=.2,r=180],-.133333\r +*H-CANAL17,����� ����17\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y17",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL17R,����� ����17(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y17",Standard,y=.1,s=.2,r=180],-.133333\r +*H-CANAL18,����� ����18\r +A,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,["Y18",Standard,y=-.1,s=.2,r=360],-.566667\r +*H-CANAL18R,����� ����18(����)\r +A,.7,[KSC35,kosdic.shx,s=.1],-.816667,["Y18",Standard,y=.1,s=.2,r=180],-.133333\r +\r +`;function fA(n){const e=[];let t="",i=!1;for(let _=0;_0){const _=e[0];_.startsWith('"')&&_.endsWith('"')?(s="text",o=_.slice(1,-1),e.length>1&&!e[1].includes("=")&&(l=e[1])):(s="shape",r=_,e.length>1&&!e[1].includes("=")&&(a=e[1]));for(let p=1;p0){const A=g.substring(0,b).trim().toLowerCase(),x=g.substring(b+1).trim(),E=parseFloat(x);isNaN(E)||(A==="s"?c=E:A==="r"?u=E:A==="a"?(u=E,d=!0):A==="u"?(u=E,h=!0):A==="x"?f=E:A==="y"&&(m=E))}}}return{type:s,shapeName:r,shxFile:a,text:o,style:l,scale:c,rotation:u,isAbsoluteAngle:d,isUprightAngle:h,xOffset:f,yOffset:m}}function pA(n){const e=n.replace(/^A\s*,\s*/i,"").trim(),t=[];let i="",s=!1,r=!1;for(let a=0;a0?(i=r.substring(1,a).trim(),s=r.substring(a+1).trim()):(i=r.substring(1).trim(),s="")}else if(i&&r.toUpperCase().startsWith("A,")){const a=pA(r),o=[];let l=0;for(const c of a)if(c.startsWith("[")&&c.endsWith("]")){const u=fA(c.slice(1,-1));o.push(u)}else{const u=parseFloat(c);if(!isNaN(u))if(u>1e-6)o.push({type:"dash",val:u,scale:1,rotation:0,isAbsoluteAngle:!1,isUprightAngle:!1,xOffset:0,yOffset:0}),l+=u;else if(u<-1e-6){const d=Math.abs(u);o.push({type:"gap",val:-d,scale:1,rotation:0,isAbsoluteAngle:!1,isUprightAngle:!1,xOffset:0,yOffset:0}),l+=d}else o.push({type:"dash",val:.05,scale:1,rotation:0,isAbsoluteAngle:!1,isUprightAngle:!1,xOffset:0,yOffset:0}),l+=.05}o.length>0&&e.set(i.toUpperCase(),{name:i,description:s,elements:o,patternLength:Math.max(l,.1)}),i=null}}return e}const Np=new Map;function kp(n){const e=mA(n);for(const[t,i]of e.entries())Np.set(t,i)}kp(hA);kp(dA);const gA={"H-DICHL02":"L2-2/0","H-DICHL02R":"L2-2","H-DICHL01":"L2-3/0","H-DICHL01R":"L2-3","H-DICHL06":"L5-1","H-DICHL06R":"L5-1","H-DICHL05":"L5","H-DICHL05R":"L5","H-DICHU05":"U5","H-DICHU05R":"U5","H-DICHB01":"B1","H-DICHB01R":"B1","H-DICHM03":"M3","H-DICHM03R":"M3","H-DICHV01":"V1","H-DICHV01R":"V1","H-DICHO01":"O1","H-DICHO01R":"O1","H-DICHL03":"L3","H-DICHL03R":"L3","H-DICHL04":"L4","H-DICHL04R":"L4","H-DICHL08":"L8","H-DICHL08R":"L8"},_A=new Set(["H-DICHL05","H-DICHL05R","H-DICHU05","H-DICHU05R","H-DICHB01","H-DICHB01R","H-DICHM03","H-DICHM03R","H-DICHV01","H-DICHV01R","H-DICHO01","H-DICHO01R"]);function xA(n){if(!n)return;const e=n.toUpperCase().trim(),t=Np.get(e);if(!t)return;let i=t.elements;_A.has(e)&&(i=i.filter(r=>r.type!=="shape"));const s=gA[e];return s&&(i=i.map(r=>r.type==="text"?{...r,text:s}:r)),{...t,elements:i}}const yl=13226457,yd=64,vl=72,yA=14;function ks(n){return n?n.replace(/\\A\d+;/g,"").replace(/\\p[^;]*;/g,"").replace(/\\P/g,` +`).replace(/\\[a-zA-Z][^;]*;/g,"").replace(/\{[^{}]*\}/g,e=>ks(e.slice(1,-1))).replace(/%%d/gi,"°").replace(/%%p/gi,"±").replace(/%%c/gi,"Ø").replace(/[{}]/g,"").replace(/[ \t]{2,}/g," ").replace(/^[ \t]+|[ \t]+$/gm,"").replace(/\n{3,}/g,` -`).replace(/^\n+|\n+$/g,""):""}class u2{constructor(e){this._container=e,this._entityMeta=[],this._layerByHandle=new Map,this._layerByName=new Map,this._onSelectCb=null,this._measureActive=!1,this._measureCb=null,this._measurePtA=null,this._measureMarkers=[],this._textGen=0,Ir.shared().catch(()=>{}),this._scene=new Ym,this._scene.background=new et(856343);const t=e.clientWidth||800,i=e.clientHeight||600;this._camera=new Gc(-t/2,t/2,i/2,-i/2,-1e4,1e4),this._camera.position.set(0,0,100),this._renderer=new z_({antialias:!0,preserveDrawingBuffer:!0}),this._renderer.setPixelRatio(window.devicePixelRatio),this._renderer.setSize(t,i),e.appendChild(this._renderer.domElement),this._controls=new V_(this._camera,this._renderer.domElement),this._controls.enableRotate=!1,this._controls.screenSpacePanning=!0,this._controls.zoomToCursor=!0,this._controls.mouseButtons={LEFT:ui.PAN,MIDDLE:ui.PAN,RIGHT:ui.PAN},this._controls.touches={ONE:Li.PAN,TWO:Li.DOLLY_PAN};const s=localStorage.getItem("hmw:zoom-speed");if(s){const r=parseFloat(s);isNaN(r)||(this._controls.zoomSpeed=r)}window.addEventListener("keydown",r=>{(r.key==="f"||r.key==="F")&&this.fit()}),this._group=new gr,this._scene.add(this._group),window.addEventListener("resize",()=>this._onResize()),this._renderer.domElement.addEventListener("pointerdown",r=>{r.button===1&&r.preventDefault()}),this._renderer.domElement.addEventListener("mousedown",r=>{this._downXY=[r.clientX,r.clientY],r.button===1&&r.preventDefault()}),this._renderer.domElement.addEventListener("click",r=>this._onClick(r)),this._renderer.domElement.addEventListener("pointermove",r=>this._onPointerMove(r)),this._renderer.domElement.addEventListener("pointerleave",()=>{this._onPointerWorldCb&&this._onPointerWorldCb(null)}),this._selColor={r:216/255,g:58/255,b:47/255},this._gridVisible=!1,this._gridMesh=null,this._activeSpaceHex=null,this._onPointerWorldCb=null,this._ptrWorldTmp=new B,this._coordOrigin={x:0,y:0,z:0},this._coordXAxis={x:1,y:0,z:0},this._coordYAxis={x:0,y:1,z:0},this._controls.addEventListener("change",()=>{this._gridVisible&&this._rebuildGrid()}),this._animate()}onSelect(e){this._onSelectCb=e}resize(){this._onResize()}setZoomSpeed(e){this._controls&&(this._controls.zoomSpeed=e)}getZoomSpeed(){return this._controls?this._controls.zoomSpeed:1}onPointerWorld(e){this._onPointerWorldCb=e||null}screenToWorld(e,t){const i=this._screenToWcs(e,t);return i?this._wcsToCad(i.x,i.y):null}_screenToWcs(e,t){var M,E,_,T,b;const i=(M=this._renderer)==null?void 0:M.domElement,s=this._camera;if(!i||!s)return null;const r=i.getBoundingClientRect();if(r.width<1||r.height<1)return null;s.updateMatrixWorld(!0);const a=(e-r.left)/r.width*2-1,o=-((t-r.top)/r.height)*2+1,l=s.zoom||1,c=(s.right-s.left)*.5/l,u=(s.top-s.bottom)*.5/l,f=s.matrixWorld.elements,h=f[0],d=f[1],p=f[4],x=f[5],m=((_=(E=this._controls)==null?void 0:E.target)==null?void 0:_.x)??s.position.x,g=((b=(T=this._controls)==null?void 0:T.target)==null?void 0:b.y)??s.position.y;return{x:m+a*c*h+o*u*p,y:g+a*c*d+o*u*x,z:0}}_wcsToCad(e,t){const i=this._coordOrigin||{x:0,y:0},s=this._coordXAxis||{x:1,y:0},r=this._coordYAxis||{x:0,y:1},a=e-(i.x||0),o=t-(i.y||0);return{x:a*(s.x||0)+o*(s.y||0),y:a*(r.x||0)+o*(r.y||0),z:0}}_setCoordFrame(e){const i=Sr(e).find(r=>r.handleHex===this._activeSpaceHex),s=(e==null?void 0:e.vars)||{};(i==null?void 0:i.kind)==="model"&&s.ucsOrigin?(this._coordOrigin={x:s.ucsOrigin.x||0,y:s.ucsOrigin.y||0,z:s.ucsOrigin.z||0},this._coordXAxis=s.ucsXAxis||{x:1,y:0,z:0},this._coordYAxis=s.ucsYAxis||{x:0,y:1,z:0}):(this._coordOrigin={x:0,y:0,z:0},this._coordXAxis={x:1,y:0,z:0},this._coordYAxis={x:0,y:1,z:0})}_onPointerMove(e){if(!this._onPointerWorldCb)return;const t=this.screenToWorld(e.clientX,e.clientY);this._onPointerWorldCb(t)}fit(){if(this._contentBox&&!this._contentBox.isEmpty()){this._fit(this._contentBox);return}const e=new Oi,t=[];if(this._group.traverse(s=>{var l;if(!s.geometry)return;e.expandByObject(s);const r=(l=s.geometry.attributes)==null?void 0:l.position;if(!(r!=null&&r.array))return;const a=r.array,o=Math.max(3,Math.floor(a.length/3/4e3)*3);for(let c=0;c+10;this._blockCount=f.size,this._activeSpaceHex&&h.size&&!h.has(this._activeSpaceHex)&&(this._activeSpaceHex=null);const m=this._activeSpaceHex?ol(i,this._activeSpaceHex):null,g=new Map;for(const R of i){const Ae=(Z=(U=R.ownerHandle)==null?void 0:U.value)==null?void 0:Z.toString(16);Ae!=null&&(g.has(Ae)||g.set(Ae,[]),g.get(Ae).push(R))}const M=[];let E=0;const _=(R,Ae,W=0)=>{!Number.isFinite(R)||!Number.isFinite(Ae)||(l.expandByPoint(c.set(R,Ae,W)),E++,!(E&7)&&M.length<1e5&&M.push(R,Ae))},T=(R,Ae,W,P,y,H)=>{const F=(H>>16&255)/255,G=(H>>8&255)/255,te=(H&255)/255;if(o){let oe=a.get(o.key);oe||(oe={dash:o.dash,gap:o.gap,verts:[],colors:[]},a.set(o.key,oe)),oe.verts.push(R,Ae,y,W,P,y),oe.colors.push(F,G,te,F,G,te)}else s.push(R,Ae,y,W,P,y),r.push(F,G,te,F,G,te);this._pickCurIdx>=0&&(this._pickSegs.push(R,Ae,W,P),this._pickSegMeta.push(this._pickCurIdx)),_(R,Ae,y),_(W,P,y)},b=-1,S=Sr(e),v=S.find(R=>R.handleHex===this._activeSpaceHex);if((v==null?void 0:v.kind)==="paper"){const R=S.find(Ae=>Ae.kind==="model");if(R){const Ae=ol(i,R.handleHex),W=i.filter(H=>{var G,te;return(H.type||H.typeName||"").toUpperCase()!=="VIEWPORT"?!1:((te=(G=H.ownerHandle)==null?void 0:G.value)==null?void 0:te.toString(16))===this._activeSpaceHex&&this._isModelViewport(H)}),P=(H,F,G,te,oe,V)=>{T(H,F,G,te,b,V)},y=(H,F,G=0)=>_(H,F,b);for(const H of W)this._emitModelThroughViewport(H,{entities:i,modelAllowed:Ae,blockDefHandles:f,entsByOwner:g,blockBaseByHex:d,blockNameByHex:p,pushSeg:P,expand:y,pendingTexts:u,box:l,_tmp:c,underlay:!0})}}for(const R of i){const Ae=($=(k=R.ownerHandle)==null?void 0:k.value)==null?void 0:$.toString(16);if(x&&Ae&&f.has(Ae)||m&&Ae&&!m.has(Ae))continue;if((D=this._hiddenLayers)!=null&&D.size){const F=((ae=R.layerHandle)==null?void 0:ae.value)??R.layerHandle,G=(F!=null&&this._layerNameByHandle.get(String(F)))??R.layer??R.layerName;if(G&&this._hiddenLayers.has(G))continue}const W=R.data||R,P=(R.type||R.typeName||"").toUpperCase(),y=this._entityColor(R);o=this._resolveDash(R);const H={entity:R,type:P,bounds:null,colStart:r.length};this._entityMeta.push(H),this._pickCurIdx=this._entityMeta.length-1;try{switch(P){case"LINE":W.start&&W.end&&(T(W.start.x,W.start.y,W.end.x,W.end.y,W.start.z||0,y),H.bounds={type:"line",x1:W.start.x,y1:W.start.y,x2:W.end.x,y2:W.end.y});break;case"CIRCLE":W.center&&W.radius!=null&&(this._arcSegs(W.center,W.radius,0,Math.PI*2,W.center.z||0,y,T),H.bounds={type:"circle",cx:W.center.x,cy:W.center.y,r:W.radius});break;case"ARC":W.center&&W.radius!=null&&(this._arcSegs(W.center,W.radius,W.startAngle??0,W.endAngle??Math.PI*2,W.center.z||0,y,T),H.bounds={type:"circle",cx:W.center.x,cy:W.center.y,r:W.radius});break;case"LWPOLYLINE":if((re=W.points)!=null&&re.length){const F=(ee=W.bulges)==null?void 0:ee.some(oe=>Math.abs(oe)>=1e-6),G=!!(W.closed||W.flags&1),te=G?W.points.length:W.points.length-1;this._polyHasWidth(R,te,1)?this._widePolyMesh(W.points,W.bulges,G,R,y,1,_):F?this._bulgePolySegs(W.points,W.bulges,G,y,T,_):(this._polylineSegs(W.points,G,W.elevation||0,y,T),W.points.forEach(oe=>_(oe.x,oe.y,W.elevation||0))),H.bounds={type:"point",cx:W.points[0].x,cy:W.points[0].y}}break;case"POLYLINE":this._polylineSegs(W.vertices||W.points,W.closed||W.flags&1,0,y,T);break;case"POLYLINE_2D":{const F=(g.get((he=(ce=R.handle)==null?void 0:ce.value)==null?void 0:he.toString(16))??[]).filter(G=>(G.type||"").toUpperCase().startsWith("VERTEX")&&G.point);if(F.length>=2){const G=F.map(K=>K.point),te=F.map(K=>K.bulge||0),oe=(W.flags&1)===1,V=W.elevation||0;te.some(K=>Math.abs(K)>=1e-6)?this._bulgePolySegs(G,te,oe,y,T,_):(this._polylineSegs(G,oe,V,y,T),G.forEach(K=>_(K.x,K.y,V))),H.bounds={type:"point",cx:G[0].x,cy:G[0].y}}break}case"POINT":{const F=W.position||W;typeof F.x=="number"&&(T(F.x-1,F.y,F.x+1,F.y,F.z||0,y),T(F.x,F.y-1,F.x,F.y+1,F.z||0,y),H.bounds={type:"point",cx:F.x,cy:F.y});break}case"ELLIPSE":W.center&&(this._ellipseSegs(W,y,T),H.bounds={type:"point",cx:W.center.x,cy:W.center.y});break;case"SPLINE":{const F=W.controlPoints??W.fitPoints;if((F==null?void 0:F.length)>=2){const G=F.length>=3?(()=>{const te=F.length*10,oe=[];for(let V=0;V<=te;V++){const K=V/te;oe.push(this._catmullRom(F,K))}return oe})():F;this._polylineSegs(G,!1,0,y,T),G.forEach(te=>_(te.x,te.y,te.z||0)),H.bounds={type:"point",cx:G[0].x,cy:G[0].y}}break}case"ATTRIB":case"ATTDEF":{if((W.flags??0)&1)break;const F=R.text??W.text??W.textValue??W.defaultValue??"",G=Fs(F),te=R.textHeight??R.height??W.textHeight??W.height??2.5,oe=R.rotationAngle??W.rotationAngle??0,V=R.horizAlignment??W.horizAlignment??0,K=R.vertAlignment??W.vertAlignment??0,de=V!==0||K!==0?R.alignmentPt??W.alignmentPt??R.insertionPt??W.insertionPt??W.insertionPoint??{x:0,y:0}:R.insertionPt??W.insertionPt??W.insertionPoint??{x:0,y:0};G&&(u.push({text:G,pos:de,height:te,rotation:oe,color:y,alignH:V,alignV:2}),H.bounds={type:"point",cx:de.x,cy:de.y},this._addTextPick(G,de,te,V,2),_(de.x,de.y,0));break}case"XLINE":case"RAY":{const F=W.basePoint??W.point??W.startPoint,G=W.direction??W.unitDir??W.vector;if(F&&G){const oe=F.x+G.x*1e6,V=F.y+G.y*1e6;P==="XLINE"?T(F.x-G.x*1e6,F.y-G.y*1e6,oe,V,0,y):T(F.x,F.y,oe,V,0,y),H.bounds={type:"point",cx:F.x,cy:F.y},_(F.x,F.y)}break}case"SOLID":{const F=[W.corner1||W.pt1||W.point1,W.corner2||W.pt2||W.point2,W.corner3||W.pt3||W.point3,W.corner4||W.pt4||W.point4].filter(Boolean);F.length>=3&&(this._solidMesh(F,y),H.bounds={type:"point",cx:F[0].x,cy:F[0].y});break}case"TEXT":case"MTEXT":{const F=R.text??W.text??"",G=Fs(F),te=R.textHeight??R.height??W.textHeight??W.height??2.5;let oe=0,V=0,K=0,ie;if(P==="TEXT")oe=R.rotationAngle??W.rotationAngle??0,V=R.horizAlignment??W.horizAlignment??0,K=R.vertAlignment??W.vertAlignment??0,V===4&&(K=2),ie=V!==0||K!==0?R.alignmentPt??W.alignmentPt??R.insertionPt??W.insertionPt??{x:0,y:0}:R.insertionPt??W.insertionPt??W.insertionPoint??{x:0,y:0};else{const de=R.xAxisDir??W.xAxisDir;de&&(oe=Math.atan2(de.y,de.x));const pe=R.attachment??W.attachment??R.attachmentPoint??W.attachmentPoint??5;V=[1,4,7].includes(pe)?0:[3,6,9].includes(pe)?2:1,K=[1,2,3].includes(pe)?3:[7,8,9].includes(pe)?1:2,ie=R.insertionPt??W.insertionPt??W.insertionPoint??{x:0,y:0}}if(G){const de={text:G,pos:ie,height:te,rotation:oe,color:y,alignH:V,alignV:K};P==="MTEXT"&&(de.linespacingFactor=R.linespacingFactor??W.linespacingFactor??1,de.rectWidth=R.rectWidth??W.rectWidth??0,de.rectHeight=R.rectHeight??W.rectHeight??0,de.bgFillFlags=R.bgFillFlags??W.bgFillFlags??0,de.bgScale=R.bgScale??W.bgScale??1.5,de.bgColorIndex=R.bgColorIndex??W.bgColorIndex,de.bgColorRgb=R.bgColorRgb??W.bgColorRgb),u.push(de),H.bounds={type:"point",cx:ie.x,cy:ie.y},this._addTextPick(G,ie,te,V,K),_(ie.x,ie.y,0)}break}case"INSERT":{const F=R.insertionPt??W.insertionPt??W.insertionPoint,G=W.scaleX??((fe=W.scale)==null?void 0:fe.x)??((X=R.scale)==null?void 0:X.x)??1,te=W.scaleY??((se=W.scale)==null?void 0:se.y)??((Q=R.scale)==null?void 0:Q.y)??1,oe=W.rotation??R.rotation??0,V=((ye=R.blockHeaderHandle)==null?void 0:ye.value)??((ve=W.blockHeaderHandle)==null?void 0:ve.value);if(V!=null){const K=V.toString(16),ie=g.get(K)??[];if(ie.length>0){const de=(Ze=(_e=e==null?void 0:e.tables)==null?void 0:_e.blocks)==null?void 0:Ze.find(pe=>{var Me;return(typeof pe.handle=="object"?(Me=pe.handle)==null?void 0:Me.value:pe.handle)===V});this._insertEntities(ie,{insertionPoint:F??{x:0,y:0,z:0},xScale:G,yScale:te,rotation:oe,basePoint:de==null?void 0:de.basePoint},y,T,u,{entsByOwner:g,blockBase:d})}}F&&(H.bounds={type:"point",cx:F.x,cy:F.y},_(F.x,F.y,0));break}case"HATCH":{const F=W.paths??R.paths,G=W.solidFill??R.solidFill??!1;if(!(F!=null&&F.length))break;let te=null;for(const oe of F){if(!((Ye=oe.points)!=null&&Ye.length)||oe.points.length<2)continue;te||(te=oe.points[0]),((Oe=oe.bulges)==null?void 0:Oe.some(K=>Math.abs(K)>=1e-6))?this._bulgePolySegs(oe.points,oe.bulges,!0,y,T,_):(this._polylineSegs(oe.points,!0,0,y,T),oe.points.forEach(K=>_(K.x,K.y,0)))}G&&this._hatchFill(F,y),te&&(H.bounds={type:"point",cx:te.x,cy:te.y});break}case"DIMENSION":case"DIMENSION_LINEAR":case"DIMENSION_ALIGNED":case"DIMENSION_RADIUS":case"DIMENSION_DIAMETER":case"DIMENSION_ANG_3PT":case"DIMENSION_ANG_2LN":case"DIMENSION_ORDINATE":{const F=((Fe=R.blockHeaderHandle)==null?void 0:Fe.value)??((Ve=W.blockHeaderHandle)==null?void 0:Ve.value);let G=[];if(F!=null){const te=F.toString(16);G=g.get(te)??[]}if(G.length>0){for(const V of G){const K=(V.type||V.typeName||"").toUpperCase(),ie=V.data||V,de=this._entityColor(V)||y;if(K==="LINE"&&ie.start&&ie.end)T(ie.start.x,ie.start.y,ie.end.x,ie.end.y,0,de),_(ie.start.x,ie.start.y),_(ie.end.x,ie.end.y);else if(K==="SOLID"){const pe=[ie.corner1||ie.pt1,ie.corner2||ie.pt2,ie.corner3||ie.pt3,ie.corner4||ie.pt4].filter(Boolean);pe.length>=3&&(this._solidMesh(pe,de),pe.forEach(ge=>_(ge.x,ge.y)))}else if(K==="ARC"&&ie.center&&ie.radius!=null)this._arcSegs(ie.center,ie.radius,ie.startAngle??0,ie.endAngle??Math.PI*2,0,de,T);else if(K==="TEXT"||K==="MTEXT"){const pe=V.text??ie.text??ie.textValue??"",ge=Fs(pe),Me=V.insertionPt??ie.insertionPt??ie.insertionPoint??{x:0,y:0},He=ie.textHeight??ie.height??V.textHeight??2.5;ge&&(u.push({text:ge,pos:Me,height:He,rotation:ie.rotationAngle??0,color:de,alignH:1,alignV:2}),_(Me.x,Me.y))}else if(K==="INSERT"){const pe=V.insertionPt??ie.insertionPt??ie.insertionPoint??{x:0,y:0},ge=ie.rotation??V.rotation??0,Me=ie.scaleX??((at=ie.scale)==null?void 0:at.x)??((ot=V.scale)==null?void 0:ot.x)??1,He=ie.scaleY??((pt=ie.scale)==null?void 0:pt.y)??((vt=V.scale)==null?void 0:vt.y)??Me,qe=((ct=V.blockHeaderHandle)==null?void 0:ct.value)??((ut=ie.blockHeaderHandle)==null?void 0:ut.value),z=qe==null?void 0:qe.toString(16),xe=p.get(z)??"",le=z?g.get(z)??[]:[];xe.includes("dot")?this._dotMesh(pe,this._arrowDotRadius(le)*Math.abs(Me)||Math.abs(Me)*.5,de):le.length?this._insertEntities(le,{insertionPoint:pe,xScale:Me,yScale:He,rotation:ge,basePoint:d.get(z)},de,T,u,{entsByOwner:g,blockBase:d}):this._defaultArrow(xe,pe,ge,Math.abs(Me)||1,de,T),_(pe.x,pe.y)}}const te=G.find(V=>(V.type||V.typeName||"").toUpperCase()==="LINE"),oe=(te==null?void 0:te.data)||te;oe!=null&&oe.start&&(H.bounds={type:"point",cx:oe.start.x,cy:oe.start.y})}else{this._renderDimFallback(R,W,P,y,T,u,_);const te=R.pt10??W.pt10;te&&(H.bounds={type:"point",cx:te.x,cy:te.y},_(te.x,te.y))}break}case"LEADER":{const F=W.points??R.points;if((F==null?void 0:F.length)>=2){if(this._polylineSegs(F,!1,0,y,T),F.forEach(G=>_(G.x,G.y,G.z||0)),W.arrowheadOn??R.arrowheadOn??!0){const G=F[0],te=F[1],oe=Math.atan2(te.y-G.y,te.x-G.x),V=W.arrowSize??R.arrowSize??2.5;this._arrowMesh(G,oe,V,y)}H.bounds={type:"point",cx:F[0].x,cy:F[0].y}}break}case"OLE2FRAME":{const F=R.upperLeft??W.upperLeft??{x:0,y:0,z:0},G=R.lowerRight??W.lowerRight??{x:0,y:0,z:0},te=R.sourceApp??W.sourceApp??R.source_application??"",oe=R.imageDataUrl??W.imageDataUrl;let V=Math.min(F.x,G.x),K=Math.max(F.x,G.x),ie=Math.min(F.y,G.y),de=Math.max(F.y,G.y),pe=K-V,ge=de-ie;const Me=F.z||0;if(T(V,ie,K,ie,Me,y),T(K,ie,K,de,Me,y),T(K,de,V,de,Me,y),T(V,de,V,ie,Me,y),oe)try{const qe=(Ce=>{const ue=Ce.split(",")[1],ke=atob(ue),Le=new Uint8Array(ke.length);for(let vn=0;vn0,us=document.createElement("canvas");us.width=Ut,us.height=ti;const tr=us.getContext("2d"),nr=tr.createImageData(Ut,ti),qt=nr.data;if(Vr===32){const vn=Ut*4;for(let an=0;an0&&Number.isFinite(K)&&W.push(K)}W.sort((V,K)=>V-K);const P=W.length?W[W.length>>1]:2.5,y=Math.min(Ae*2e-4,P),H=2e4,F=u.filter(V=>V.underlay),G=u.filter(V=>!V.underlay),te=F.concat(G),oe=te.length>H?(console.warn(`텍스트 ${te.length}개 → ${H}개로 제한`),G.concat(F).sort((V,K)=>K.height-V.height).slice(0,H)):te;this._drawTexts(oe,y)}if(this._lineColorAttr=null,this._origColors=null,s.length){const R=new wt;R.setAttribute("position",new ht(s,3));const Ae=new ht(r,3);R.setAttribute("color",Ae),this._group.add(new da(R,new Ns({vertexColors:!0}))),this._lineColorAttr=Ae,this._origColors=Float32Array.from(Ae.array)}for(const R of a.values()){if(!R.verts.length)continue;const Ae=new wt;Ae.setAttribute("position",new ht(R.verts,3)),Ae.setAttribute("color",new ht(R.colors,3));const W=new da(Ae,new Gg({vertexColors:!0,dashSize:R.dash,gapSize:R.gap}));W.computeLineDistances(),this._group.add(W)}this._setCoordFrame(e);const w=l.isEmpty()?null:this._trimmedContentBox(M,l)||l;this._contentBox=w?w.clone():null,!t.keepView&&w&&!w.isEmpty()&&this._fit(w)}setTheme(e){this._scene.background=new et(e?658189:16250611),this._gridVisible&&this._rebuildGrid()}setGrid(e){this._gridVisible=e,e?this._rebuildGrid():this._gridMesh&&(this._scene.remove(this._gridMesh),this._gridMesh.geometry.dispose(),this._gridMesh.material.dispose(),this._gridMesh=null)}_rebuildGrid(){this._gridMesh&&(this._scene.remove(this._gridMesh),this._gridMesh.geometry.dispose(),this._gridMesh.material.dispose(),this._gridMesh=null);const e=this._camera.zoom||1,t=this._camera.position.x,i=this._camera.position.y,s=(this._camera.right-this._camera.left)/e/2,r=(this._camera.top-this._camera.bottom)/e/2,a=Math.max(s,r)*3,o=this._niceSpacing(Math.max(s,r)*2/20),[l,c,u,f]=[t-a,t+a,i-a,i+a],d=this._scene.background.r<.5?2829099:12303291,p=[];for(let m=Math.ceil(l/o)*o;m<=c;m+=o)p.push(m,u,-.5,m,f,-.5);for(let m=Math.ceil(u/o)*o;m<=f;m+=o)p.push(l,m,-.5,c,m,-.5);const x=new wt;x.setAttribute("position",new ht(p,3)),this._gridMesh=new da(x,new Ns({color:d})),this._scene.add(this._gridMesh)}_niceSpacing(e){if(e<=0)return 1;const t=Math.pow(10,Math.floor(Math.log10(e))),i=e/t;return(i<2?1:i<5?2:5)*t}getZoomPercent(){var e;return Math.round((((e=this._camera)==null?void 0:e.zoom)??1)*100)}onViewChange(e){var t;(t=this._controls)==null||t.addEventListener("change",e)}setHiddenLayers(e){this._hiddenLayers=e||new Set,this._lastResult&&this.load(this._lastResult,{keepView:!0})}getSpaces(){return Sr(this._lastResult)}getActiveSpace(){return this._activeSpaceHex}setSpace(e,t={}){e==null||e===""?this._activeSpaceHex=null:typeof e=="number"?this._activeSpaceHex=e.toString(16):this._activeSpaceHex=String(e).toLowerCase(),this._lastResult&&this.load(this._lastResult,{keepView:!!t.keepView,spaceHandle:this._activeSpaceHex})}_isModelViewport(e){if(!e||e.status&&e.status.isOn===!1||(e.id??0)===1)return!1;const i=Number(e.height)||0,s=Number(e.viewHeight)||0;if(i<=0||s<=0)return!1;const r=i/s,a=e.center||{},o=e.viewCenter||{},l=e.viewTarget||{},c=Math.hypot(l.x||0,l.y||0)<.001,u=Math.hypot((o.x||0)-(a.x||0),(o.y||0)-(a.y||0))1e-12?Number(e.viewHeight):r,o=r/a,l=Number(e.twistAngle)||0,c=Math.cos(l),u=Math.sin(l),f=(h,d)=>{const p=h-(s.x||0),x=d-(s.y||0),m=c*p-u*x,g=u*p+c*x;return{x:(t.x||0)+(m-(i.x||0))*o,y:(t.y||0)+(g-(i.y||0))*o}};return f.scale=o,f.twist=l,f}_viewportPaperClip(e){const t=e.center||{x:0,y:0},i=(Number(e.width)||0)/2,s=(Number(e.height)||0)/2,r=Math.max(i,s)*1e-6;return{minX:(t.x||0)-i-r,maxX:(t.x||0)+i+r,minY:(t.y||0)-s-r,maxY:(t.y||0)+s+r}}_clipSegToRect(e,t,i,s,r,a){const h=(x,m)=>{let g=0;return xr.maxX&&(g|=2),mr.maxY&&(g|=8),g};let d=h(e,t),p=h(i,s);for(;;){if(!(d|p)){a(e,t,i,s);return}if(d&p)return;const x=d||p;let m=0,g=0;x&8?(m=e+(i-e)*(r.maxY-t)/(s-t||1e-30),g=r.maxY):x&4?(m=e+(i-e)*(r.minY-t)/(s-t||1e-30),g=r.minY):x&2?(g=t+(s-t)*(r.maxX-e)/(i-e||1e-30),m=r.maxX):(g=t+(s-t)*(r.minX-e)/(i-e||1e-30),m=r.minX),x===d?(e=m,t=g,d=h(e,t)):(i=m,s=g,p=h(i,s))}}_emitModelThroughViewport(e,t){var E,_,T,b,S,v,w,I,L,C,O,N,U,Z;const{entities:i,modelAllowed:s,blockDefHandles:r,entsByOwner:a,blockBaseByHex:o,pushSeg:l,expand:c,pendingTexts:u,underlay:f=!1}=t,h=this._viewportModelToPaper(e),d=this._viewportPaperClip(e),p=h.scale||1,x=new Set((e.frozenLayers||[]).map(k=>String(k))),m=(k,$,D,ae,re,ee)=>{const ce=h(k,$),he=h(D,ae);this._clipSegToRect(ce.x,ce.y,he.x,he.y,d,(fe,X,se,Q)=>{l(fe,X,se,Q,re||0,ee)})},g=(k,$,D=0)=>{const ae=h(k,$);ae.x>=d.minX&&ae.x<=d.maxX&&ae.y>=d.minY&&ae.y<=d.maxY&&c(ae.x,ae.y,D)},M=(k,$)=>k>=d.minX&&k<=d.maxX&&$>=d.minY&&$<=d.maxY;for(const k of i){const $=(_=(E=k.ownerHandle)==null?void 0:E.value)==null?void 0:_.toString(16);if(!$||!s.has($)||r.has($))continue;if((T=this._hiddenLayers)!=null&&T.size){const ee=((b=k.layerHandle)==null?void 0:b.value)??k.layerHandle,ce=(ee!=null&&this._layerNameByHandle.get(String(ee)))??k.layer??k.layerName;if(ce&&this._hiddenLayers.has(ce))continue}if(x.size){const ee=(S=k.layerHandle)==null?void 0:S.value;if(ee!=null&&x.has(String(ee)))continue}const D=k.data||k,ae=(k.type||k.typeName||"").toUpperCase(),re=this._entityColor(k);try{switch(ae){case"LINE":D.start&&D.end&&m(D.start.x,D.start.y,D.end.x,D.end.y,D.start.z||0,re);break;case"CIRCLE":D.center&&D.radius!=null&&this._arcSegs(D.center,D.radius,0,Math.PI*2,D.center.z||0,re,m);break;case"ARC":D.center&&D.radius!=null&&this._arcSegs(D.center,D.radius,D.startAngle??0,D.endAngle??Math.PI*2,D.center.z||0,re,m);break;case"LWPOLYLINE":if((v=D.points)!=null&&v.length){const ee=(w=D.bulges)==null?void 0:w.some(he=>Math.abs(he)>=1e-6),ce=!!(D.closed||D.flags&1);ee?this._bulgePolySegs(D.points,D.bulges,ce,re,m,g):(this._polylineSegs(D.points,ce,D.elevation||0,re,m),D.points.forEach(he=>g(he.x,he.y,D.elevation||0)))}break;case"POLYLINE":this._polylineSegs(D.vertices||D.points,D.closed||D.flags&1,0,re,m);break;case"ELLIPSE":if(D.center)if(typeof this._ellipseSegs=="function")this._ellipseSegs(D,re,m);else{const ee=D.center.x,ce=D.center.y,he=D.smAxis||D.majorAxis||{x:D.radius||1,y:0},fe=D.axisRatio??D.minorAxisRatio??.5,X=D.startAngle??D.startParameter??0,se=D.endAngle??D.endParameter??Math.PI*2,Q=64;let ye,ve;for(let _e=0;_e<=Q;_e++){const Ze=X+(se-X)*(_e/Q),Ye=Math.cos(Ze),Oe=Math.sin(Ze),Fe=ee+he.x*Ye-he.y*fe*Oe,Ve=ce+he.y*Ye+he.x*fe*Oe;_e>0&&m(ye,ve,Fe,Ve,0,re),ye=Fe,ve=Ve}}break;case"SOLID":{const ee=[D.corner1||D.pt1,D.corner2||D.pt2,D.corner3||D.pt3,D.corner4||D.pt4].filter(Boolean);if(ee.length>=2)for(let ce=0;ceMath.abs(se)>=1e-6)?this._bulgePolySegs(he,X,fe,re,m,g):(this._polylineSegs(he,fe,0,re,m),he.forEach(se=>g(se.x,se.y)))}break}case"SPLINE":{const ee=(I=D.fitPoints)!=null&&I.length?D.fitPoints:D.controlPoints;(ee==null?void 0:ee.length)>=2&&this._polylineSegs(ee,!!D.closed,0,re,m);break}case"TEXT":case"MTEXT":{const ee=k.text??D.text??"",ce=Fs(ee);if(!ce)break;const he=(k.textHeight??k.height??D.textHeight??D.height??2.5)*p;let fe=(k.rotationAngle??D.rotationAngle??0)+(h.twist||0),X=0,se=0,Q;if(ae==="TEXT")X=k.horizAlignment??D.horizAlignment??0,se=k.vertAlignment??D.vertAlignment??0,X===4&&(se=2),Q=X!==0||se!==0?k.alignmentPt??D.alignmentPt??k.insertionPt??D.insertionPt??{x:0,y:0}:k.insertionPt??D.insertionPt??D.insertionPoint??{x:0,y:0};else{const ve=k.xAxisDir??D.xAxisDir;ve&&(fe=Math.atan2(ve.y,ve.x)+(h.twist||0));const _e=k.attachment??D.attachment??k.attachmentPoint??D.attachmentPoint??5;X=[1,4,7].includes(_e)?0:[3,6,9].includes(_e)?2:1,se=[1,2,3].includes(_e)?3:[7,8,9].includes(_e)?1:2,Q=k.insertionPt??D.insertionPt??D.insertionPoint??{x:0,y:0}}const ye=h(Q.x,Q.y);if(!M(ye.x,ye.y))break;u.push({text:ce,pos:ye,height:he,rotation:fe,color:re,alignH:X,alignV:se,underlay:!!f}),g(Q.x,Q.y);break}case"INSERT":{const ee=k.insertionPt??D.insertionPt??D.insertionPoint;if(!ee)break;const ce=D.scaleX??((L=D.scale)==null?void 0:L.x)??((C=k.scale)==null?void 0:C.x)??1,he=D.scaleY??((O=D.scale)==null?void 0:O.y)??((N=k.scale)==null?void 0:N.y)??1,fe=((U=k.blockHeaderHandle)==null?void 0:U.value)??((Z=D.blockHeaderHandle)==null?void 0:Z.value),X=fe!=null?fe.toString(16):null,se=X?a.get(X)??[]:[];if(se.length){const Q=u.length;this._insertEntities(se,{insertionPoint:ee,xScale:ce,yScale:he,rotation:D.rotation??k.rotation??0,basePoint:o.get(X)},re,m,u,{entsByOwner:a,blockBase:o});for(let ye=Q;ye{this._renderer.render(this._scene,this._camera),this._renderer.domElement.toBlob(t=>e(t),"image/webp",.75)})}getLayerInfo(){var r,a,o,l,c;const e=this._lastResult;if(!e)return[];const t=new Map,i=this._activeSpaceHex?ol(e.entities||[],this._activeSpaceHex):null;for(const u of e.entities||[]){const f=(a=(r=u.ownerHandle)==null?void 0:r.value)==null?void 0:a.toString(16);if(i&&f&&!i.has(f))continue;const h=((o=u.layerHandle)==null?void 0:o.value)??u.layerHandle,d=(h!=null&&((l=this._layerNameByHandle)==null?void 0:l.get(String(h))))??u.layer??u.layerName??"0";t.set(d,(t.get(d)||0)+1)}const s=this._hiddenLayers||new Set;return(((c=e.tables)==null?void 0:c.layers)||[]).map(u=>{const f=u.name??u.layerName??"0",h=Math.abs(u.colorIndex??u.color??u.colorNumber??7);return{name:f,colorHex:"#"+(Sa(h)??vl).toString(16).padStart(6,"0"),count:t.get(f)||0,visible:!s.has(f)}}).filter(u=>u.count>0||!u.name.startsWith("*"))}_buildLayerMap(e){var t;if(this._layerByHandle.clear(),this._layerByName.clear(),this._layerNameByHandle=new Map,this._layer0Handle=null,!!e)for(const i of e){const s=((t=i.handle)==null?void 0:t.value)??i.handle,r=i.name??i.layerName,a=Math.abs(i.colorIndex??i.color??i.colorNumber??7),o=Sa(a)??vl;s!=null&&this._layerByHandle.set(String(s),o),r&&this._layerByName.set(r,o),s!=null&&r&&this._layerNameByHandle.set(String(s),r),r==="0"&&s!=null&&(this._layer0Handle=String(s))}}_readViewTwist(e){var r;const t=(r=e==null?void 0:e.tables)==null?void 0:r.vports;if(!Array.isArray(t)||!t.length)return 0;const i=t.find(a=>/active/i.test(a.name||""))||t[0],s=i==null?void 0:i.viewTwist;return typeof s=="number"&&isFinite(s)?s:0}_buildLinetypeMap(e){var t,i,s,r;this._ltPatterns=new Map,this._layerLtByName=new Map,this._layerLtByHandle=new Map,this._globalLtscale=((t=e==null?void 0:e.vars)==null?void 0:t.ltscale)>0?e.vars.ltscale:1;for(const a of((i=e==null?void 0:e.tables)==null?void 0:i.lineTypes)??[])a!=null&&a.name&&this._ltPatterns.set(a.name,Array.isArray(a.pattern)?a.pattern:[]);for(const a of((s=e==null?void 0:e.tables)==null?void 0:s.layers)??[]){const o=a.name??a.layerName,l=((r=a.handle)==null?void 0:r.value)??a.handle,c=a.lineType??a.linetype;o&&c&&this._layerLtByName.set(o,c),l!=null&&c&&this._layerLtByHandle.set(String(l),c)}}_resolveDash(e){var l,c;if(!this._ltPatterns||this._ltPatterns.size===0)return null;let t=e.lineType??e.linetype;if(!t||t==="ByLayer"||t==="BYLAYER"||t==="ByBlock"||t==="BYBLOCK"){const u=((l=e.layerHandle)==null?void 0:l.value)??e.layerHandle;t=u!=null&&this._layerLtByHandle.get(String(u))||this._layerLtByName.get(e.layer??e.layerName)||null}if(!t||t==="Continuous"||t==="ByLayer"||t==="ByBlock")return null;const i=this._ltPatterns.get(t);if(!i||i.length===0)return null;const s=((c=e.entityHeader)==null?void 0:c.linetypeScale)>0?e.entityHeader.linetypeScale:1,r=this._globalLtscale*s;let a=0,o=0;for(const u of i){const f=Math.abs(u)*r;u>1e-6?a+=f:u<-1e-6?o+=f:a+=Math.max(f,.01*r)}return a<1e-4||o<1e-4?null:{key:`${a.toFixed(3)}|${o.toFixed(3)}`,dash:a,gap:o}}_resolveBlockColor(e,t){var r,a;const i=((r=e.entityHeader)==null?void 0:r.colorIndex)??e.color??e.colorIndex??e.colorNumber??256;if(i===0)return t;const s=String(((a=e.layerHandle)==null?void 0:a.value)??e.layerHandle??"");return i===256&&this._layer0Handle&&s===this._layer0Handle?t:this._entityColor(e)}_entityColor(e){var r,a;const t=((r=e.entityHeader)==null?void 0:r.colorIndex)??e.color??e.colorIndex??e.colorNumber??256;if(t!=null){const o=Sa(t);if(o!==null)return o}const i=((a=e.layerHandle)==null?void 0:a.value)??e.layerHandle;if(i!=null){const o=this._layerByHandle.get(String(i));if(o!==void 0)return o}const s=e.layer??e.layerName;if(s){const o=this._layerByName.get(s);if(o!==void 0)return o}return vl}_arrowMesh(e,t,i,s){if(!e||i<1e-4)return;const r=i*.166,a=(s>>16&255)/255,o=(s>>8&255)/255,l=(s&255)/255,c=new wt;c.setAttribute("position",new ht([0,0,0,-i,r,0,-i,-r,0],3)),c.setAttribute("color",new ht([a,o,l,a,o,l,a,o,l],3));const u=new Gt(c,new Vn({vertexColors:!0,side:zt}));u.position.set(e.x,e.y,(e.z||0)+.5),u.rotation.z=t,this._group.add(u)}_defaultArrow(e,t,i,s,r,a){if(!t||s<1e-4)return;const o=(e||"").replace(/^[_*]+/,""),l=Math.cos(i),c=Math.sin(i),u=(f,h)=>({x:t.x+f*l-h*c,y:t.y+f*c+h*l});if(!(o==="none"||o==="small"||o==="integral")){if(o==="dot"||o==="dotsmall"||o==="dotblank"||o==="dotsmallblank"||o==="origin"||o==="origin2"){this._dotMesh(t,s*(o==="dotsmall"?.12:.5),r);return}if(o==="oblique"||o==="archtick"){const f=u(s*.5,s*.5),h=u(-s*.5,-s*.5);a(f.x,f.y,h.x,h.y,(t.z||0)+.5,r);return}if(o==="open"||o==="open30"||o==="open90"){const f=o==="open90"?s:s*.42,h=u(0,0),d=u(-s,f),p=u(-s,-f);a(d.x,d.y,h.x,h.y,(t.z||0)+.5,r),a(p.x,p.y,h.x,h.y,(t.z||0)+.5,r);return}this._arrowMesh(t,i,s,r)}}_dotMesh(e,t,i){if(!e||!(t>1e-5))return;const s=(i>>16&255)/255,r=(i>>8&255)/255,a=(i&255)/255,o=20,l=[],c=[],u=(e.z||0)+.5;for(let h=0;h{a+=l.x,o+=l.y}),a/=r.length,o/=r.length,r.forEach(l=>{t=Math.max(t,Math.hypot(l.x-a,l.y-o))})}}return t}_arcSegs(e,t,i,s,r,a,o){let l=s-i;l<=0&&(l+=Math.PI*2);const c=Math.max(8,Math.ceil(l/(Math.PI*2)*l2));let u=null;for(let f=0;f<=c;f++){const h=i+l*f/c,d=e.x+t*Math.cos(h),p=e.y+t*Math.sin(h);u&&o(u.x,u.y,d,p,r,a),u={x:d,y:p}}}_catmullRom(e,t){const i=e.length,s=t*(i-1),r=Math.min(Math.floor(s),i-2),a=s-r,o=e[Math.max(r-1,0)],l=e[r],c=e[r+1],u=e[Math.min(r+2,i-1)],f=a*a,h=f*a;return{x:.5*(2*l.x+(-o.x+c.x)*a+(2*o.x-5*l.x+4*c.x-u.x)*f+(-o.x+3*l.x-3*c.x+u.x)*h),y:.5*(2*l.y+(-o.y+c.y)*a+(2*o.y-5*l.y+4*c.y-u.y)*f+(-o.y+3*l.y-3*c.y+u.y)*h),z:.5*(2*(l.z||0)+(-(o.z||0)+(c.z||0))*a+(2*(o.z||0)-5*(l.z||0)+4*(c.z||0)-(u.z||0))*f+(-(o.z||0)+3*(l.z||0)-3*(c.z||0)+(u.z||0))*h)}}_ellipseSegs(e,t,i){const s=e.majorAxis??e.smAxis??{x:1,y:0},r=e.center,a=e.ratio??e.axisRatio??1,o=e.startParam??0,l=e.endParam??Math.PI*2,c=(s==null?void 0:s.x)??1,u=(s==null?void 0:s.y)??0,f=Math.sqrt(c*c+u*u),h=f*a,d=Math.atan2(u,c);let p=l-o;p<=0&&(p+=Math.PI*2);let x=null;for(let m=0;m<=vf;m++){const g=o+p*m/vf,M=f*Math.cos(g),E=h*Math.sin(g),_=r.x+M*Math.cos(d)-E*Math.sin(d),T=r.y+M*Math.sin(d)+E*Math.cos(d);x&&i(x.x,x.y,_,T,r.z||0,t),x={x:_,y:T}}}_polylineSegs(e,t,i,s,r){if(!(!e||e.length<2)){for(let a=0;a1e-12?l:Math.abs(r)>1e-12?r:a,f=Math.abs(c)>1e-12?c:Math.abs(r)>1e-12?r:o;return{sw:Math.abs(u),ew:Math.abs(f)}}_polyHasWidth(e,t,i=1){for(let s=0;s1e-9||a>1e-9)return!0}return!1}_pushWideSeg(e,t,i,s,r){const a=i.x-t.x,o=i.y-t.y,l=Math.hypot(a,o);if(l<1e-12)return;const c=-o/l,u=a/l,f=s*.5,h=r*.5,d={x:t.x+c*f,y:t.y+u*f},p={x:t.x-c*f,y:t.y-u*f},x={x:i.x-c*h,y:i.y-u*h},m={x:i.x+c*h,y:i.y+u*h};e.push(d.x,d.y,0,p.x,p.y,0,x.x,x.y,0),e.push(d.x,d.y,0,x.x,x.y,0,m.x,m.y,0)}_widePolyMesh(e,t,i,s,r,a=1,o=null){if(!e||e.length<2)return;const l=e.length,c=i?l:l-1,u=[];for(let d=0;d0?1:-1,U=I+N*C*w,Z=L+N*O*w,k=Math.atan2(p.y-Z,p.x-U),$=Math.max(2,Math.ceil(Math.abs(b)/(Math.PI/16)));let D={x:p.x,y:p.y},ae=m;for(let re=1;re<=$;re++){const ee=re/$,ce=k+b*re/$,he={x:U+v*Math.cos(ce),y:Z+v*Math.sin(ce)},fe=m+(g-m)*ee;this._pushWideSeg(u,D,he,ae,fe),D=he,ae=fe}o&&(o(p.x,p.y),o(x.x,x.y))}}if(u.length<9)return;const f=new wt;f.setAttribute("position",new ht(u,3)),f.computeVertexNormals();const h=new Vn({color:new et(r),side:zt,depthWrite:!1});if(this._group.add(new Gt(f,h)),this._pickCurIdx>=0&&this._pickSegs)for(let d=0;d0?1:-1,w=_+v*b*E,I=T+v*S*E,L=Math.atan2(u.y-I,u.x-w),C=Math.max(2,Math.ceil(Math.abs(m)/(Math.PI/16)));let O=u;for(let N=1;N<=C;N++){const U=L+m*N/C,Z=w+M*Math.cos(U),k=I+M*Math.sin(U);r(O.x,O.y,Z,k,0,s),O={x:Z,y:k}}a&&(a(u.x,u.y),a(f.x,f.y))}}}_solidMesh(e,t){const i=(t>>16&255)/255,s=(t>>8&255)/255,r=(t&255)/255,a=[],o=[],l=(...u)=>{for(const f of u)a.push(f.x,f.y,f.z||0),o.push(i,s,r)};e.length>=4?(l(e[0],e[1],e[3]),l(e[0],e[3],e[2])):l(e[0],e[1],e[2]);const c=new wt;if(c.setAttribute("position",new ht(a,3)),c.setAttribute("color",new ht(o,3)),this._group.add(new Gt(c,new Vn({vertexColors:!0,side:zt}))),this._pickCurIdx>=0&&e.length>=3){const u=e.length>=4?[e[0],e[1],e[3],e[2]]:e.slice(0,3);this._pickFills.push({metaIdx:this._pickCurIdx,loops:[u]})}}_addTextPick(e,t,i,s=0,r=0){if(this._pickCurIdx<0||!t)return;const a=String(e).split(` -`),l=a.reduce((h,d)=>Math.max(h,d.length),1)*i*.62,c=a.length*i*1.2;let u=t.x;s===2?u=t.x-l:(s===1||s===4)&&(u=t.x-l/2);let f=t.y;r===3?f=t.y-c:r===2&&(f=t.y-c/2),this._pickFills.push({metaIdx:this._pickCurIdx,loops:[[{x:u,y:f},{x:u+l,y:f},{x:u+l,y:f+c},{x:u,y:f+c}]]})}_fillHit(e,t,i){let s=!1;for(const r of e)for(let a=0,o=r.length-1;ai!=f>i&&t<(u-l)*(i-c)/(f-c)+l&&(s=!s)}return s}_pointInAnyLoop(e,t,i){for(const s of e){if(!(s!=null&&s.length))continue;let r=!1;for(let a=0,o=s.length-1;ai!=c.y>i&&t<(c.x-l.x)*(i-l.y)/(c.y-l.y)+l.x&&(r=!r)}if(r)return!0}return!1}_loopArea(e){let t=0;for(let i=0;ic&&(c=m.x),m.y>u&&(u=m.y);const f=Math.hypot(c-o,u-l)||1;if(a>f*1e-4&&a>1e-6)return;let h=0;for(let m=0;m5e3)return;let p=0,x=0;for(const m of e)p+=m.x,x+=m.y;p/=e.length,x/=e.length;for(const m of this._pickFills)if(this._pointInAnyLoop(m.loops,p,x))return;this._hatchFill([{points:e,bulges:t||null,closed:!0}],i)}_pathPoints(e){const t=e.points;if(!(t!=null&&t.length))return null;const i=e.bulges,s=t.length;if(!(i!=null&&i.some(a=>Math.abs(a)>=1e-6)))return t.map(a=>({x:a.x,y:a.y}));const r=[];for(let a=0;a0?1:-1,b=g+T*E*m,S=M+T*_*m,v=Math.atan2(o.y-S,o.x-b),w=Math.max(6,Math.ceil(Math.abs(d)/(Math.PI/16)));for(let I=1;I{var u;return l+(((u=c.points)==null?void 0:u.length)??0)},0)>8e3)return;let s=[];for(const l of e){const c=this._pathPoints(l);c&&c.length>=3&&s.push(c)}if(!s.length)return;const r=l=>{let c=0;for(let u=0;u{var c;return!((c=l.points)!=null&&c.length)})&&s.length>=3||s.length>=5){const l=s.map(r).sort((u,f)=>u-f),c=l[Math.floor(l.length/2)]||0;if(c>0&&(s=s.filter(u=>r(u)<=c*10)),!s.length)return}if(this._pickCurIdx>=0&&s.length&&this._pickFills.push({metaIdx:this._pickCurIdx,loops:s}),s.length>=5||s.some(l=>this._polySelfIntersects(l))||this._hatchHasNestedLoop(s)){this._hatchFillEvenOddCanvas(s,t);return}const o=new Vn({color:new et(t),side:zt});for(const l of s)try{const c=new ud;c.moveTo(l[0].x,l[0].y);for(let u=1;u{let l=0;for(let c=0;c{let l=1/0,c=1/0,u=-1/0,f=-1/0;for(const h of o)h.xu&&(u=h.x),h.y>f&&(f=h.y);return{minX:l,minY:c,maxX:u,maxY:f}},s=(o,l)=>{let c=!1;for(let u=0,f=o.length-1;ul.y!=d.y>l.y&&l.x<(d.x-h.x)*(l.y-h.y)/(d.y-h.y)+h.x&&(c=!c)}return c},r=e.map(t),a=e.map(i);for(let o=0;o=h.maxX&&f.maxY>=h.maxY||s(e[u],{x:l,y:c}))return!0}}return!1}_polySelfIntersects(e){const t=e.length;if(t<4)return!1;const i=(a,o,l)=>(o.x-a.x)*(l.y-a.y)-(o.y-a.y)*(l.x-a.x),s=(a,o,l,c)=>{const u=i(a,o,l),f=i(a,o,c),h=i(l,c,a),d=i(l,c,o);return(u>0&&f<0||u<0&&f>0)&&(h>0&&d<0||h<0&&d>0)},r=Math.min(t,80);for(let a=0;as&&(s=M.x),M.y>r&&(r=M.y);const a=s-t,o=r-i,l=Math.min(a,o);if(!(l>1e-9))return!1;const c=(t+s)/2,u=(i+r)/2,f=.55*l,h=.22*l;let d=0;for(let M=0;M1e-9&&x>g*1.15}_convexHull(e){const t=e.map(a=>({x:a.x,y:a.y})).sort((a,o)=>a.x-o.x||a.y-o.y);if(t.length<=2)return t;const i=(a,o,l)=>(o.x-a.x)*(l.y-a.y)-(o.y-a.y)*(l.x-a.x),s=[];for(const a of t){for(;s.length>=2&&i(s[s.length-2],s[s.length-1],a)<=0;)s.pop();s.push(a)}const r=[];for(let a=t.length-1;a>=0;a--){const o=t[a];for(;r.length>=2&&i(r[r.length-2],r[r.length-1],o)<=0;)r.pop();r.push(o)}return s.pop(),r.pop(),s.concat(r)}_polyCentroid(e){let t=0,i=0;for(const s of e)t+=s.x,i+=s.y;return{x:t/e.length,y:i/e.length}}_pointInPoly(e,t){let i=!1;for(let s=0,r=e.length-1;st.y!=o.y>t.y&&t.x<(o.x-a.x)*(t.y-a.y)/(o.y-a.y)+a.x&&(i=!i)}return i}_hatchFillEvenOddCanvas(e,t){let i=1/0,s=1/0,r=-1/0,a=-1/0;for(const C of e)for(const O of C)O.xr&&(r=O.x),O.y>a&&(a=O.y);const o=r-i,l=a-s;if(!(o>1e-12)||!(l>1e-12))return;const c=2048,u=Math.min(c/o,c/l,64),f=Math.max(2,Math.ceil(o*u)+2),h=Math.max(2,Math.ceil(l*u)+2),d=(f-2)/o,p=(h-2)/l,x=document.createElement("canvas");x.width=f,x.height=h;const m=x.getContext("2d");if(!m)return;m.clearRect(0,0,f,h);const g=C=>({x:1+(C.x-i)*d,y:1+(a-C.y)*p}),M=C=>{if(C.length<3)return;const O=g(C[0]);m.moveTo(O.x,O.y);for(let N=1;Nthis._convexHull(C)),b=C=>{if(C.length<3||!T.length)return!1;const O=this._polyCentroid(C);for(const N of T)if(N.length>=3&&this._pointInPoly(N,O))return!0;return!1};if(E.length){m.fillStyle="#ffffff",m.beginPath();for(const O of E)M(O);m.fill("nonzero");const C=_.filter(b);if(C.length){m.globalCompositeOperation="destination-out",m.beginPath();for(const O of C)M(O);m.fill("nonzero"),m.globalCompositeOperation="source-over"}}const S=_.filter(C=>!b(C));if(S.length){m.fillStyle="#ffffff",m.beginPath();for(const C of S)M(C);m.fill("evenodd")}const v=new pa(x);v.colorSpace=oi,v.magFilter=Xt,v.minFilter=Di,v.generateMipmaps=!0,v.needsUpdate=!0;const w=new Vn({map:v,color:new et(t),transparent:!0,alphaTest:.4,side:zt,depthWrite:!1}),I=new Qi(o,l),L=new Gt(I,w);L.position.set((i+r)/2,(s+a)/2,0),this._group.add(L)}_multilineSprite(e,t,i,s,r,a,o,l=0){const u="96px 'Malgun Gothic', 'Apple SD Gothic Neo', monospace",f=document.createElement("canvas"),h=f.getContext("2d");h.font=u;let d=1,p=96*.7,x=96*.2;for(const N of e){const U=h.measureText(N||" ");d=Math.max(d,Math.ceil(U.width)),p=Math.max(p,U.actualBoundingBoxAscent||96*.7),x=Math.max(x,U.actualBoundingBoxDescent||96*.2)}const m=Math.ceil(96*.15),g=Math.ceil(p+x+96*.35);f.width=d+m*2,f.height=g*e.length+m*2,h.font=u;const M=r>>16&255,E=r>>8&255,_=r&255;h.fillStyle=`rgb(${M},${E},${_})`,h.textBaseline="alphabetic";let T=m;a===1||a===4?(h.textAlign="center",T=f.width/2):a===2?(h.textAlign="right",T=f.width-m):(h.textAlign="left",T=m);for(let N=0;N0?e.linespacingFactor:1,u=o*(5/3)*c;let f=0;if(t!=null&&t.measureEm)for(const O of l)f=Math.max(f,t.measureEm(O||" "));else for(const O of l)f=Math.max(f,(O||" ").length*.9);let h=Math.max(f*o,o*.5),d=l.length<=1?o:o+(l.length-1)*u;e.rectWidth>0&&(h=Math.max(h,e.rectWidth)),e.rectHeight>0&&(d=Math.max(d,e.rectHeight));const p=e.bgScale>0?e.bgScale:1.5,x=h*p,m=d*p,g=e.alignH??1,M=e.alignV??2;let E=0,_=0;g===0||g===3||g===5?E=h/2:g===2&&(E=-h/2),M===3?_=-d/2:(M===0||M===1)&&(_=d/2);const T=e.rotation||0,b=Math.cos(T),S=Math.sin(T),v=e.pos.x+E*b-_*S,w=e.pos.y+E*S+_*b;let I=16776960;if(s&2)I=((C=(L=this._scene)==null?void 0:L.background)==null?void 0:C.r)<.5?658189:16250611;else if(e.bgColorRgb&&e.bgColorRgb.r!=null)I=(e.bgColorRgb.r&255)<<16|(e.bgColorRgb.g&255)<<8|e.bgColorRgb.b&255;else if(e.bgColorIndex!=null){const O=Sa(e.bgColorIndex);O!=null&&(I=O)}if(r){const O=new Qi(x,m),N=new Vn({color:new et(I),side:zt,depthWrite:!1,transparent:!1}),U=new Gt(O,N);U.position.set(v,w,.4),U.rotation.z=T,this._group.add(U)}if(a&&!r){const O=x/2,N=m/2,Z=[[-O,-N],[O,-N],[O,N],[-O,N],[-O,-N]].map(([k,$])=>({x:v+k*b-$*S,y:w+k*S+$*b}));for(let k=0;k<4;k++){const $=Z[k],D=Z[k+1];this._widePolyMesh([$,D],null,!1,{constantWidth:Math.max(o*.05,.01)},I,1,null)}}}async _drawTexts(e,t){const i=this._textGen,s=e.filter(o=>o.underlay),r=e.filter(o=>!o.underlay),a=[{list:s,order:0},{list:r,order:1}];try{const o=await Ir.shared();if(i!==this._textGen)return;for(const{list:l,order:c}of a){if(!l.length)continue;for(const h of l)h.bgFillFlags|0&&this._drawMTextBackground(h,o,t);const u=new o2(o);for(const h of l)u.add(h.text,h.pos,Math.max(h.height,t),h.rotation||0,h.color,h.alignH??0,h.alignV??0);const f=u.build();f&&(f.renderOrder=c,f.material&&(f.material.depthWrite=!1,f.material.transparent=!0),this._group.add(f))}}catch(o){if(console.warn("[Viewer2D] Slug text unavailable, falling back to canvas sprites:",(o==null?void 0:o.message)??o),i!==this._textGen)return;for(const{list:l,order:c}of a)for(const u of l)u.bgFillFlags|0&&this._drawMTextBackground(u,null,t),this._textSprite(u.text,u.pos,Math.max(u.height,t),u.rotation,u.color,u.alignH??0,u.alignV??0,c)}}_textSprite(e,t,i,s,r,a=0,o=0,l=0){const c=String(e).split(` -`);if(c.length>1){this._multilineSprite(c,t,i,s,r,a,o,l);return}const u=e+"\0"+r;let f=(this._texCache??(this._texCache=new Map)).get(u);if(!f){const v="96px 'Malgun Gothic', 'Apple SD Gothic Neo', monospace",w=document.createElement("canvas"),I=w.getContext("2d");I.font=v;const L=I.measureText(e),C=Math.max(1,Math.ceil(L.width)),O=L.actualBoundingBoxAscent||96*.7,N=L.actualBoundingBoxDescent||96*.2,U=Math.ceil(96*.15);w.width=C+U*2,w.height=Math.ceil(O+N)+U*2,I.font=v;const Z=r>>16&255,k=r>>8&255,$=r&255;I.fillStyle=`rgb(${Z},${k},${$})`,I.textBaseline="alphabetic",I.fillText(e,U,U+O),f={texture:new pa(w),w:w.width,h:w.height,asc:O,pad:U},this._texCache.set(u,f)}const{texture:h,asc:d,pad:p}=f,x=i*f.h/d,m=x*(f.w/f.h),g=x/f.h,M=f.h/2;let E=0;a===0||a===3||a===5?E=m/2:a===1||a===4?E=0:a===2&&(E=-m/2);let _=0;a!==4&&(o===0||o===1?_=(p+d-M)*g:o===3&&(_=(p-M)*g));const T=new fc({map:h,transparent:!0,depthTest:!1});s&&(T.rotation=s);const b=new Du(T);b.scale.set(m,x,1),b.position.set(t.x+E,t.y+_,1),b.renderOrder=l,this._group.add(b)}_insertEntities(e,t,i,s,r,a){var v,w,I,L,C,O,N,U,Z,k;const o=a==null?void 0:a.entsByOwner,l=a==null?void 0:a.blockBase,c=(a==null?void 0:a.parentXf)??null,u=(a==null?void 0:a.scale)??1,f=(a==null?void 0:a.rot)??0,h=(a==null?void 0:a.depth)??0,d=t.insertionPoint??{x:0,y:0},p=t.basePoint,x=t.xScale??1,m=t.yScale??1,g=t.rotation??0,M=Math.cos(g),E=Math.sin(g),_=($,D)=>{const ae=p?$-p.x:$,re=p?D-p.y:D;return[d.x+ae*x*M-re*m*E,d.y+ae*x*E+re*m*M]},T=c?($,D)=>c(..._($,D)):_,b=u*Math.max(Math.abs(x),Math.abs(m)),S=f+g;for(const $ of e){const D=$.data||$,ae=($.type||$.typeName||"").toUpperCase();if(ae==="ATTDEF")continue;const re=this._resolveBlockColor($,i);try{if(ae==="LINE"&&D.start&&D.end){const[ee,ce]=T(D.start.x,D.start.y),[he,fe]=T(D.end.x,D.end.y);s(ee,ce,he,fe,0,re)}else if((ae==="CIRCLE"||ae==="ARC")&&D.center&&D.radius!=null){const[ee,ce]=T(D.center.x,D.center.y),he=D.radius*b,fe=ae==="ARC"?(D.startAngle??0)+S:0,X=ae==="ARC"?(D.endAngle??Math.PI*2)+S:Math.PI*2;this._arcSegs({x:ee,y:ce,z:0},he,fe,X,0,re,s)}else if(ae==="ELLIPSE"&&D.center){const[ee,ce]=T(D.center.x,D.center.y),he=D.majorAxis??D.smAxis??{x:1,y:0},fe=Math.hypot(he.x??0,he.y??0)*b,X=Math.atan2(he.y??0,he.x??1)+S;this._ellipseSegs({center:{x:ee,y:ce,z:0},majorAxis:{x:fe*Math.cos(X),y:fe*Math.sin(X)},ratio:D.ratio??D.axisRatio??1,startParam:D.startParam??0,endParam:D.endParam??Math.PI*2},re,s)}else if((ae==="LWPOLYLINE"||ae==="POLYLINE")&&(D.points||D.vertices)){const ce=(D.points??D.vertices).map(se=>{const[Q,ye]=T(se.x,se.y);return{x:Q,y:ye}}),he=D.bulges??null,fe=!!(D.closed||D.flags&1);let X=!1;if(ce.length>=2&&this._pickFills.length){let se=0,Q=0,ye=1/0,ve=1/0,_e=-1/0,Ze=-1/0;for(const Fe of ce)se+=Fe.x,Q+=Fe.y,Fe.x_e&&(_e=Fe.x),Fe.y>Ze&&(Ze=Fe.y);se/=ce.length,Q/=ce.length;const Ye=Math.max(_e-ye,1e-9),Oe=Math.max(Ze-ve,1e-9);for(const Fe of this._pickFills)if(this._pointInAnyLoop(Fe.loops,se,Q)){for(const Ve of Fe.loops){if(!(Ve!=null&&Ve.length))continue;let at=1/0,ot=1/0,pt=-1/0,vt=-1/0;for(const Ae of Ve)Ae.xpt&&(pt=Ae.x),Ae.y>vt&&(vt=Ae.y);const ct=Math.max(pt-at,1e-9),ut=Math.max(vt-ot,1e-9);if(Ye<=ct*1.5&&Oe<=ut*1.5&&ct<=Ye*1.5&&ut<=Oe*1.5){X=!0;break}}if(X)break}}if(!X){const se=fe?ce.length:ce.length-1;this._polyHasWidth($,se,b)?this._widePolyMesh(ce,he,fe,$,re,b,null):(he!=null&&he.some(Q=>Math.abs(Q)>=1e-6)?this._bulgePolySegs(ce,he,fe,re,s):this._polylineSegs(ce,fe,0,re,s),this._fillClosedPolyIfUncovered(ce,he,re))}}else if(ae==="POLYLINE_2D"&&o){const ee=(o.get((w=(v=$.handle)==null?void 0:v.value)==null?void 0:w.toString(16))??[]).filter(ce=>(ce.type||"").toUpperCase().startsWith("VERTEX")&&ce.point);if(ee.length>=2){const ce=ee.map(X=>{const[se,Q]=T(X.point.x,X.point.y);return{x:se,y:Q}}),he=ee.map(X=>X.bulge||0),fe=(D.flags&1)===1;he.some(X=>Math.abs(X)>=1e-6)?this._bulgePolySegs(ce,he,fe,re,s):this._polylineSegs(ce,fe,0,re,s)}}else if(ae==="HATCH"){const ee=D.paths??$.paths;if(ee!=null&&ee.length){const ce=D.solidFill??$.solidFill??!1,he=ee.map(fe=>({...fe,points:(fe.points??[]).map(X=>{const[se,Q]=T(X.x,X.y);return{x:se,y:Q}})}));if(ce)this._hatchFill(he,re);else for(const fe of he)(((I=fe.points)==null?void 0:I.length)??0)<2||((L=fe.bulges)!=null&&L.some(X=>Math.abs(X)>=1e-6)?this._bulgePolySegs(fe.points,fe.bulges,!0,re,s):this._polylineSegs(fe.points,!0,0,re,s))}}else if(ae==="SOLID"){const ee=[D.corner1||D.pt1,D.corner2||D.pt2,D.corner3||D.pt3,D.corner4||D.pt4].filter(Boolean);if(ee.length>=3){const ce=ee.map(he=>{const[fe,X]=T(he.x,he.y);return{x:fe,y:X,z:he.z||0}});this._solidMesh(ce,re)}}else if(ae==="INSERT"&&o&&h<8){const ee=((C=$.blockHeaderHandle)==null?void 0:C.value)??((O=D.blockHeaderHandle)==null?void 0:O.value);if(ee!=null){const ce=ee.toString(16),he=o.get(ce)??[];if(he.length){const fe=$.insertionPt??D.insertionPt??D.insertionPoint??{x:0,y:0},X=D.scaleX??((N=D.scale)==null?void 0:N.x)??((U=$.scale)==null?void 0:U.x)??1,se=D.scaleY??((Z=D.scale)==null?void 0:Z.y)??((k=$.scale)==null?void 0:k.y)??1,Q=D.rotation??$.rotation??0;this._insertEntities(he,{insertionPoint:fe,xScale:X,yScale:se,rotation:Q,basePoint:l==null?void 0:l.get(ce)},re,s,r,{entsByOwner:o,blockBase:l,parentXf:T,scale:b,rot:S,depth:h+1})}}}else if((ae==="TEXT"||ae==="MTEXT"||ae==="ATTRIB"||ae==="ATTDEF")&&r){if((ae==="ATTRIB"||ae==="ATTDEF")&&(D.flags??0)&1)continue;const ee=$.text??D.text??D.textValue??D.defaultValue??"",ce=Fs(ee);let he,fe,X=(D.rotationAngle??0)+S;if(ae==="MTEXT"){const Oe=$.attachment??D.attachment??$.attachmentPoint??D.attachmentPoint??5;he=[1,4,7].includes(Oe)?0:[3,6,9].includes(Oe)?2:1,fe=[1,2,3].includes(Oe)?3:[7,8,9].includes(Oe)?1:2;const Fe=$.xAxisDir??D.xAxisDir;Fe&&(X=Math.atan2(Fe.y,Fe.x)+S)}else he=D.horizAlignment??$.horizAlignment??0,fe=D.vertAlignment??$.vertAlignment??0;const se=ae!=="MTEXT"&&(he!==0||fe!==0),Q=$.alignmentPt??D.alignmentPt,ye=$.insertionPt??D.insertionPt??D.insertionPoint,ve=se?Q??ye??{x:0,y:0}:ye??{x:0,y:0},[_e,Ze]=T(ve.x,ve.y),Ye=(D.textHeight??D.height??$.textHeight??2.5)*b;if(ce){const Oe={text:ce,pos:{x:_e,y:Ze},height:Ye,rotation:X,color:re,alignH:he,alignV:fe};ae==="MTEXT"&&(Oe.linespacingFactor=$.linespacingFactor??D.linespacingFactor??1,Oe.rectWidth=($.rectWidth??D.rectWidth??0)*b,Oe.rectHeight=($.rectHeight??D.rectHeight??0)*b,Oe.bgFillFlags=$.bgFillFlags??D.bgFillFlags??0,Oe.bgScale=$.bgScale??D.bgScale??1.5,Oe.bgColorIndex=$.bgColorIndex??D.bgColorIndex,Oe.bgColorRgb=$.bgColorRgb??D.bgColorRgb),r.push(Oe)}}}catch{}}}_renderDimFallback(e,t,i,s,r,a,o){const l=e.pt10??t.pt10,c=e.pt13??t.pt13,u=e.pt14??t.pt14,f=e.pt15??t.pt15,h=e.textMidPt??t.textMidPt,d=e.actualMeasurement??t.actualMeasurement??0,p=e.textRot??t.textRot??0,x=e.dimRot??t.dimRot??0,m=e.userText??t.userText??"",g=b=>Math.abs(b)<1?b.toFixed(3):b.toFixed(2),M=(b,S)=>{!b||!S||(r(b.x,b.y,S.x,S.y,0,s),o(b.x,b.y),o(S.x,S.y))},E=(b,S,v,w,I)=>{this._arcSegs({x:b,y:S},v,w,I,0,s,r)},_=(b,S,v)=>this._arrowMesh(b,S,v,s),T=(b,S,v,w)=>{S&&b&&a.push({text:S,pos:b,height:v,rotation:w??0,color:s,alignH:1,alignV:2})};switch(i){case"DIMENSION":case"DIMENSION_LINEAR":case"DIMENSION_ALIGNED":{if(!c||!u||!l)return;let b,S,v,w;if(i==="DIMENSION_ALIGNED"){const L=u.x-c.x,C=u.y-c.y,O=Math.hypot(L,C);if(O<1e-9)return;const N=L/O,U=C/O,Z=d/2;b=l.x-N*Z,S=l.y-U*Z,v=l.x+N*Z,w=l.y+U*Z}else{const L=Math.abs(Math.sin(x))>.5,C=d/2;b=l.x-(L?0:C),S=l.y-(L?C:0),v=l.x+(L?0:C),w=l.y+(L?C:0)}const I=Math.max(d*.04,1);M({x:b,y:S},{x:v,y:w}),M(c,{x:b,y:S}),M(u,{x:v,y:w}),_({x:b,y:S,z:0},Math.atan2(S-w,b-v),I),_({x:v,y:w,z:0},Math.atan2(w-S,v-b),I),T(h??{x:(b+v)/2,y:(S+w)/2},m||g(d),Math.max(I*1.5,1),p);break}case"DIMENSION_RADIUS":{if(!l||!f)return;const b=Math.max(d*.05,.5);M(l,f),_({x:f.x,y:f.y,z:0},Math.atan2(f.y-l.y,f.x-l.x),b),T(h??{x:(l.x+f.x)/2,y:(l.y+f.y)/2},m||`R${g(d)}`,Math.max(b*2,1));break}case"DIMENSION_DIAMETER":{if(!l||!f)return;const b={x:2*l.x-f.x,y:2*l.y-f.y},S=Math.max(d/2*.05,.5);M(f,b),_({x:f.x,y:f.y,z:0},Math.atan2(f.y-l.y,f.x-l.x),S),_({x:b.x,y:b.y,z:0},Math.atan2(b.y-l.y,b.x-l.x),S),T(h??l,m||`Ø${g(d)}`,Math.max(S*2,1));break}case"DIMENSION_ANG_3PT":case"DIMENSION_ANG_2LN":{if(!l||!c||!u)return;const b=l.x,S=l.y,v=Math.hypot(c.x-b,c.y-S);if(v<1e-9)return;let w=Math.atan2(c.y-S,c.x-b),I=Math.atan2(u.y-S,u.x-b),L=I-w;for(;L<0;)L+=Math.PI*2;L>Math.PI&&([w,I]=[I,w],L=Math.PI*2-L),E(b,S,v,w,w+L);const C=Math.max(v*.05,.5);_({x:b+Math.cos(w)*v,y:S+Math.sin(w)*v,z:0},w-Math.PI/2,C),_({x:b+Math.cos(w+L)*v,y:S+Math.sin(w+L)*v,z:0},w+L+Math.PI/2,C);const O=w+L/2;T(h??{x:b+Math.cos(O)*v*1.2,y:S+Math.sin(O)*v*1.2},m||`${(d*180/Math.PI).toFixed(1)}°`,Math.max(v*.1,1));break}case"DIMENSION_ORDINATE":{if(!l||!c)return;M(l,c),T(h??c,m||((d==null?void 0:d.toFixed(2))??""),2.5);break}}}_onClick(e){var d;if(this._downXY){const p=e.clientX-this._downXY[0],x=e.clientY-this._downXY[1];if(Math.hypot(p,x)>5)return}const t=this._camera,i=this._renderer.domElement.getBoundingClientRect(),s=this._screenToWcs(e.clientX,e.clientY);if(!s)return;const r=s.x,a=s.y;if(this._measureActive){this._doMeasure2D(r,a);return}const o=c2*(t.right-t.left)/(i.width*(t.zoom||1));let l=-1,c=o;const u=this._pickSegs,f=this._pickSegMeta;for(let p=0,x=0;p=0?this._entityMeta[l]:null;this._highlight(h),(d=this._onSelectCb)==null||d.call(this,h?h.entity:null)}_segDist(e,t,i,s,r,a){const o=r-i,l=a-s,c=o*o+l*l;if(!c)return Math.hypot(e-i,t-s);const u=Math.max(0,Math.min(1,((e-i)*o+(t-s)*l)/c));return Math.hypot(e-(i+u*o),t-(s+u*l))}startMeasure(e){this.stopMeasure(),this._measureCb=e,this._measureActive=!0}stopMeasure(){var e,t;this._measureActive=!1,this._measureCb=null,this._measurePtA=null;for(const i of this._measureMarkers)this._group.remove(i),(e=i.geometry)==null||e.dispose(),(t=i.material)==null||t.dispose();this._measureMarkers=[]}_doMeasure2D(e,t){var i,s;if(this._measurePtA){const r=this._measurePtA,a=Math.hypot(e-r.x,t-r.y),o=this._mkMeasureMarker(e,t),l=this._mkMeasureLine(r.x,r.y,e,t);this._measureMarkers.push(o,l),this._group.add(o,l),(s=this._measureCb)==null||s.call(this,{phase:"done",ax:r.x,ay:r.y,az:0,bx:e,by:t,bz:0,d:a}),this._measurePtA=null}else{this._measurePtA={x:e,y:t};const r=this._mkMeasureMarker(e,t);this._measureMarkers.push(r),this._group.add(r),(i=this._measureCb)==null||i.call(this,{phase:"a",ax:e,ay:t,az:0,bx:e,by:t,bz:0,d:0})}}_mkMeasureMarker(e,t){const i=this._camera,s=this._renderer.domElement.getBoundingClientRect(),r=(i.right-i.left)/(s.width*(i.zoom||1))*8,a=[new B(e-r,t,0),new B(e+r,t,0),new B(e,t-r,0),new B(e,t+r,0)],o=new wt().setFromPoints(a);o.setIndex([0,1,2,3]);const l=new Ns({color:15085616,depthTest:!1}),c=new da(o,l);return c.renderOrder=100,c}_mkMeasureLine(e,t,i,s){const r=new wt().setFromPoints([new B(e,t,0),new B(i,s,0)]),a=new Ns({color:15085616,depthTest:!1}),o=new id(r,a);return o.renderOrder=100,o}_highlight(e){const t=this._lineColorAttr,i=this._origColors;if(this._selMeta&&t&&i){const s=this._selMeta;for(let r=s.colStart;re.colStart){const s=this._selColor;for(let r=e.colStart;r>1:0;if(i<32)return t.clone();const s=new Float64Array(i),r=new Float64Array(i);let a=0;for(let M=0;M+1f)||!(p>d))return t.clone();const x=Math.max((h-f)*.02,1),m=Math.max((p-d)*.02,1),g=new Oi(new B(f-x,d-m,0),new B(h+x,p+m,0));return g.min.max(t.min),g.max.min(t.max),g}_fit(e){if(!e||e.isEmpty())return;const t=e.getCenter(new B),i=e.getSize(new B),s=this._container.clientWidth||800,r=this._container.clientHeight||600,a=s/Math.max(r,1),o=1.12,l=Math.max(i.x,1e-9),c=Math.max(i.y,1e-9),u=l/c;let f,h;u>a*8?(h=c*o,f=h*a):ua?h=f/a:f=h*a),this._camera.zoom=1,this._camera.left=-f/2,this._camera.right=f/2,this._camera.top=h/2,this._camera.bottom=-h/2;const d=Math.max(f,h,1e3);this._camera.near=-d,this._camera.far=d,this._camera.position.set(t.x,t.y,100);const p=-(this._viewTwist||0);this._camera.up.set(-Math.sin(p),Math.cos(p),0),this._controls.target.set(t.x,t.y,0),this._camera.lookAt(this._controls.target),this._camera.updateProjectionMatrix(),this._camera.updateMatrixWorld(!0),this._controls.update()}_clear(){var e,t,i;for(let s=this._group.children.length-1;s>=0;s--){const r=this._group.children[s];(e=r.geometry)==null||e.dispose(),r.material&&((t=r.material.map)==null||t.dispose(),r.material.dispose()),this._group.remove(r)}(i=this._texCache)==null||i.clear(),this._textGen++,this._contentBox=null}_onResize(){const e=this._container.clientWidth,t=this._container.clientHeight;if(!e||!t)return;this._renderer.setSize(e,t);const i=(this._camera.right-this._camera.left)/2,s=i/(e/t);this._camera.left=-i,this._camera.right=i,this._camera.top=s,this._camera.bottom=-s,this._camera.updateProjectionMatrix()}_animate(){requestAnimationFrame(()=>this._animate()),this._controls.update(),this._renderer.render(this._scene,this._camera)}}const h2="modulepreload",f2=function(n){return"/"+n},yf={},d2=function(e,t,i){let s=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),o=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));s=Promise.allSettled(t.map(l=>{if(l=f2(l),l in yf)return;yf[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":h2,c||(f.as="script"),f.crossOrigin="",f.href=l,o&&f.setAttribute("nonce",o),document.head.appendChild(f),c)return new Promise((h,d)=>{f.addEventListener("load",h),f.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${l}`)))})}))}function r(a){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=a,window.dispatchEvent(o),!o.defaultPrevented)throw a}return s.then(a=>{for(const o of a||[])o.status==="rejected"&&r(o.reason);return e().catch(r)})},_f=/[\uAC00-\uD7A3]/,bf=/[\u1100-\u11FF\u3130-\u318F]/,p2=["cp949","windows-949","euc-kr"];let pr;function m2(){if(pr!==void 0)return pr;for(const n of p2)try{return pr=new TextDecoder(n),pr}catch{}return pr=null,null}function Sf(n){if(!n||_f.test(n)||bf.test(n))return n;let e=!1;const t=new Uint8Array(n.length);for(let r=0;r255)return n;a>127&&(e=!0),t[r]=a}if(!e)return n;const i=m2();if(!i)return n;let s;try{s=i.decode(t)}catch{return n}return(_f.test(s)||bf.test(s))&&!s.includes("�")?s:n}function g2(n){if(n==null||typeof n!="object")return n;const e=new WeakSet,t=i=>{if(i==null||typeof i!="object"||e.has(i))return;if(e.add(i),Array.isArray(i)){for(let r=0;r{const{initAcadrustParser:i,parseDwgAcadrust:s}=await import("./acadrustParser-BLUkSD4E.js");return{initAcadrustParser:i,parseDwgAcadrust:s}},[]);return await e(),g2(t(n))}class x2{constructor(e){this._pointer=0,this._eof=!1,this._data=e}next(){if(!this.hasNext())throw this._eof?new Error("Cannot call 'next' after EOF group has been read"):new Error("Unexpected end of input: EOF group not read before end of file. Ended on code "+this._data[this._pointer]);const e={code:parseInt(this._data[this._pointer])};return this._pointer++,e.value=Ef(e.code,this._data[this._pointer].trim()),this._pointer++,e.code===0&&e.value==="EOF"&&(this._eof=!0),this.lastReadGroup=e,e}peek(){if(!this.hasNext())throw this._eof?new Error("Cannot call 'next' after EOF group has been read"):new Error("Unexpected end of input: EOF group not read before end of file. Ended on code "+this._data[this._pointer]);const e={code:parseInt(this._data[this._pointer])};return e.value=Ef(e.code,this._data[this._pointer+1].trim()),e}rewind(e=1){this._pointer=this._pointer-e*2}hasNext(){return!(this._eof||this._pointer>this._data.length-2)}isEOF(){return this._eof}}function Ef(n,e){return n<=9?e:n>=10&&n<=59?parseFloat(e):n>=60&&n<=99?parseInt(e):n>=100&&n<=109?e:n>=110&&n<=149?parseFloat(e):n>=160&&n<=179?parseInt(e):n>=210&&n<=239?parseFloat(e):n>=270&&n<=289?parseInt(e):n>=290&&n<=299?v2(e):n>=300&&n<=369?e:n>=370&&n<=389?parseInt(e):n>=390&&n<=399?e:n>=400&&n<=409?parseInt(e):n>=410&&n<=419?e:n>=420&&n<=429?parseInt(e):n>=430&&n<=439?e:n>=440&&n<=459?parseInt(e):n>=460&&n<=469?parseFloat(e):n>=470&&n<=481||n===999||n>=1e3&&n<=1009?e:n>=1010&&n<=1059?parseFloat(e):n>=1060&&n<=1071?parseInt(e):(console.log("WARNING: Group code does not have a defined type: %j",{code:n,value:e}),e)}function v2(n){if(n==="0")return!1;if(n==="1")return!0;throw TypeError("String '"+n+"' cannot be cast to Boolean type")}const Up=[0,16711680,16776960,65280,65535,255,16711935,16777215,8421504,12632256,16711680,16744319,13369344,13395558,10027008,10046540,8323072,8339263,4980736,4990502,16727808,16752511,13382400,13401958,10036736,10051404,8331008,8343359,4985600,4992806,16744192,16760703,13395456,13408614,10046464,10056268,8339200,8347455,4990464,4995366,16760576,16768895,13408512,13415014,10056192,10061132,8347392,8351551,4995328,4997670,16776960,16777087,13421568,13421670,10000384,10000460,8355584,8355647,5000192,5000230,12582656,14679935,10079232,11717734,7510016,8755276,6258432,7307071,3755008,4344870,8388352,12582783,6736896,10079334,5019648,7510092,4161280,6258495,2509824,3755046,4194048,10485631,3394560,8375398,2529280,6264908,2064128,5209919,1264640,3099686,65280,8388479,52224,6736998,38912,5019724,32512,4161343,19456,2509862,65343,8388511,52275,6737023,38950,5019743,32543,4161359,19475,2509871,65407,8388543,52326,6737049,38988,5019762,32575,4161375,19494,2509881,65471,8388575,52377,6737074,39026,5019781,32607,4161391,19513,2509890,65535,8388607,52428,6737100,39064,5019800,32639,4161407,19532,2509900,49151,8380415,39372,6730444,29336,5014936,24447,4157311,14668,2507340,32767,8372223,26316,6724044,19608,5010072,16255,4153215,9804,2505036,16383,8364031,13260,6717388,9880,5005208,8063,4149119,4940,2502476,255,8355839,204,6710988,152,5000344,127,4145023,76,2500172,4129023,10452991,3342540,8349388,2490520,6245528,2031743,5193599,1245260,3089996,8323327,12550143,6684876,10053324,4980888,7490712,4128895,6242175,2490444,3745356,12517631,14647295,10027212,11691724,7471256,8735896,6226047,7290751,3735628,4335180,16711935,16744447,13369548,13395660,9961624,9981080,8323199,8339327,4980812,4990540,16711871,16744415,13369497,13395634,9961586,9981061,8323167,8339311,4980793,4990530,16711807,16744383,13369446,13395609,9961548,9981042,8323135,8339295,4980774,4990521,16711743,16744351,13369395,13395583,9961510,9981023,8323103,8339279,4980755,4990511,3355443,5987163,8684676,11382189,14079702,16777215];function y2(n){return Up[n]}function it(n){const e={};n.rewind();let t=n.next(),i=t.code;if(e.x=t.value,i+=10,t=n.next(),t.code!=i)throw new Error("Expected code for point value to be "+i+" but got "+t.code+".");return e.y=t.value,i+=10,t=n.next(),t.code!=i?(n.rewind(),e):(e.z=t.value,e)}function Yt(n,e,t){switch(e.code){case 0:n.type=e.value;break;case 5:n.handle=e.value;break;case 6:n.lineType=e.value;break;case 8:n.layer=e.value;break;case 48:n.lineTypeScale=e.value;break;case 60:n.visible=e.value===0;break;case 62:n.colorIndex=e.value,n.color=y2(Math.abs(e.value));break;case 67:n.inPaperSpace=e.value!==0;break;case 100:break;case 101:for(;e.code!=0;)e=t.next();t.rewind();break;case 330:n.ownerHandle=e.value;break;case 347:n.materialObjectHandle=e.value;break;case 370:n.lineweight=e.value;break;case 420:n.color=e.value;break;case 1e3:n.extendedData=n.extendedData||{},n.extendedData.customStrings=n.extendedData.customStrings||[],n.extendedData.customStrings.push(e.value);break;case 1001:n.extendedData=n.extendedData||{},n.extendedData.applicationName=e.value;break;default:return!1}return!0}class _2{constructor(){this.ForEntityName="3DFACE"}parseEntity(e,t){const i={type:t.value,vertices:[]};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 70:i.shape=(t.value&1)===1,i.hasContinuousLinetypePattern=(t.value&128)===128;break;case 10:i.vertices=b2(e,t),t=e.lastReadGroup;break;default:Yt(i,t,e);break}t=e.next()}return i}}function b2(n,e){var t=[],i=!1,s=!1,r=4;for(let o=0;o<=r;o++){for(var a={};!n.isEOF()&&!(e.code===0||s);){switch(e.code){case 10:case 11:case 12:case 13:if(i){s=!0;continue}a.x=e.value,i=!0;break;case 20:case 21:case 22:case 23:a.y=e.value;break;case 30:case 31:case 32:case 33:a.z=e.value;break;default:return t}e=n.next()}t.push(a),i=!1,s=!1}return n.rewind(),t}class S2{constructor(){this.ForEntityName="ARC"}parseEntity(e,t){const i={type:t.value};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 10:i.center=it(e);break;case 40:i.radius=t.value;break;case 50:i.startAngle=Math.PI/180*t.value;break;case 51:i.endAngle=Math.PI/180*t.value,i.angleLength=i.endAngle-i.startAngle;break;case 210:i.extrusionDirectionX=t.value;break;case 220:i.extrusionDirectionY=t.value;break;case 230:i.extrusionDirectionZ=t.value;break;default:Yt(i,t,e);break}t=e.next()}return i}}class M2{constructor(){this.ForEntityName="ATTDEF"}parseEntity(e,t){var i={type:t.value,scale:1,textStyle:"STANDARD"};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 1:i.text=t.value;break;case 2:i.tag=t.value;break;case 3:i.prompt=t.value;break;case 7:i.textStyle=t.value;break;case 10:i.startPoint=it(e);break;case 11:i.endPoint=it(e);break;case 39:i.thickness=t.value;break;case 40:i.textHeight=t.value;break;case 41:i.scale=t.value;break;case 50:i.rotation=t.value;break;case 51:i.obliqueAngle=t.value;break;case 70:i.invisible=!!(t.value&1),i.constant=!!(t.value&2),i.verificationRequired=!!(t.value&4),i.preset=!!(t.value&8);break;case 71:i.backwards=!!(t.value&2),i.mirrored=!!(t.value&4);break;case 72:i.horizontalJustification=t.value;break;case 73:i.fieldLength=t.value;break;case 74:i.verticalJustification=t.value;break;case 100:break;case 210:i.extrusionDirectionX=t.value;break;case 220:i.extrusionDirectionY=t.value;break;case 230:i.extrusionDirectionZ=t.value;break;default:Yt(i,t,e);break}t=e.next()}return i}}class E2{constructor(){this.ForEntityName="CIRCLE"}parseEntity(e,t){const i={type:t.value};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 10:i.center=it(e);break;case 40:i.radius=t.value;break;case 50:i.startAngle=Math.PI/180*t.value;break;case 51:const s=Math.PI/180*t.value;s=0&&C<=g.levels.SILENT)return C;throw new TypeError("log.setLevel() called with invalid level: "+L)}g.name=x,g.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},g.methodFactory=m||h,g.getLevel=function(){return _??E??M},g.setLevel=function(L,C){return _=w(L),C!==!1&&b(_),u.call(g)},g.setDefaultLevel=function(L){E=w(L),S()||g.setLevel(L,!1)},g.resetLevel=function(){_=null,v(),u.call(g)},g.enableAll=function(L){g.setLevel(g.levels.TRACE,L)},g.disableAll=function(L){g.setLevel(g.levels.SILENT,L)},g.rebuild=function(){if(a!==g&&(M=w(a.getLevel())),u.call(g),a===g)for(var L in r)r[L].rebuild()},M=w(a?a.getLevel():"WARN");var I=S();I!=null&&(_=w(I)),u.call(g)}a=new d,a.getLogger=function(m){if(typeof m!="symbol"&&typeof m!="string"||m==="")throw new TypeError("You must supply a name when creating a logger.");var g=r[m];return g||(g=r[m]=new d(m,a.methodFactory)),g};var p=typeof window!==t?window.log:void 0;return a.noConflict=function(){return typeof window!==t&&window.log===a&&(window.log=p),a},a.getLoggers=function(){return r},a.default=a,a})})(Op);var G2=Op.exports;const tt=z2(G2);tt.setLevel("error");function V2(n){n.registerEntityHandler(_2),n.registerEntityHandler(S2),n.registerEntityHandler(M2),n.registerEntityHandler(E2),n.registerEntityHandler(T2),n.registerEntityHandler(A2),n.registerEntityHandler(w2),n.registerEntityHandler(C2),n.registerEntityHandler(R2),n.registerEntityHandler(L2),n.registerEntityHandler(D2),n.registerEntityHandler(U2),n.registerEntityHandler(N2),n.registerEntityHandler(k2),n.registerEntityHandler(B2)}class W2{constructor(){this._entityHandlers={},V2(this)}parse(e){return typeof e=="string"?this._parse(e):(console.error("Cannot read dxf source of type `"+typeof e),null)}registerEntityHandler(e){const t=new e;this._entityHandlers[t.ForEntityName]=t}parseSync(e){return this.parse(e)}parseStream(e){let t="";const i=this;return new Promise((s,r)=>{e.on("data",a=>{t+=a}),e.on("end",()=>{try{s(i._parse(t))}catch(a){r(a)}}),e.on("error",a=>{r(a)})})}_parse(e){const t={};let i=0;const s=e.split(/\r\n|\r|\n/g),r=new x2(s);if(!r.hasNext())throw Error("Empty file");const a=this;let o;function l(){for(o=r.next();!r.isEOF();)if(o.code===0&&o.value==="SECTION"){if(o=r.next(),o.code!==2){console.error("Unexpected code %s after 0:SECTION",Fp(o)),o=r.next();continue}o.value==="HEADER"?(tt.debug("> HEADER"),t.header=c(),tt.debug("<")):o.value==="BLOCKS"?(tt.debug("> BLOCKS"),t.blocks=u(),tt.debug("<")):o.value==="ENTITIES"?(tt.debug("> ENTITIES"),t.entities=E(!1),tt.debug("<")):o.value==="TABLES"?(tt.debug("> TABLES"),t.tables=h(),tt.debug("<")):o.value==="EOF"?tt.debug("EOF"):tt.warn("Skipping section '%s'",o.value)}else o=r.next()}function c(){let b=null,S=null;const v={};for(o=r.next();;){if(Gn(o,0,"ENDSEC")){b&&(v[b]=S);break}else o.code===9?(b&&(v[b]=S),b=o.value):o.code===10?S={x:o.value}:o.code===20?S.y=o.value:o.code===30?S.z=o.value:S=o.value;o=r.next()}return o=r.next(),v}function u(){const b={};for(o=r.next();o.value!=="EOF"&&!Gn(o,0,"ENDSEC");)if(Gn(o,0,"BLOCK")){tt.debug("block {");const S=f();tt.debug("}"),T(S),S.name?b[S.name]=S:tt.error('block with handle "'+S.handle+'" is missing a name.')}else qi(o),o=r.next();return b}function f(){const b={};for(o=r.next();o.value!=="EOF";){switch(o.code){case 1:b.xrefPath=o.value,o=r.next();break;case 2:b.name=o.value,o=r.next();break;case 3:b.name2=o.value,o=r.next();break;case 5:b.handle=o.value,o=r.next();break;case 8:b.layer=o.value,o=r.next();break;case 10:b.position=_(o),o=r.next();break;case 67:b.paperSpace=!!(o.value&&o.value==1),o=r.next();break;case 70:o.value!=0&&(b.type=o.value),o=r.next();break;case 100:o=r.next();break;case 330:b.ownerHandle=o.value,o=r.next();break;case 0:if(o.value=="ENDBLK")break;b.entities=E(!0);break;default:qi(o),o=r.next()}if(Gn(o,0,"ENDBLK")){o=r.next();break}}return b}function h(){const b={};for(o=r.next();o.value!=="EOF"&&!Gn(o,0,"ENDSEC");)Gn(o,0,"TABLE")?(o=r.next(),M[o.value]?(tt.debug(o.value+" Table {"),b[M[o.value].tableName]=p(o),tt.debug("}")):tt.debug("Unhandled Table "+o.value)):o=r.next();return o=r.next(),b}const d="ENDTAB";function p(b){const S=M[b.value],v={};let w=0;for(o=r.next();!Gn(o,0,d);)switch(o.code){case 5:v.handle=o.value,o=r.next();break;case 330:v.ownerHandle=o.value,o=r.next();break;case 100:o.value==="AcDbSymbolTable"||qi(o),o=r.next();break;case 70:w=o.value,o=r.next();break;case 0:o.value===S.dxfSymbolName?v[S.tableRecordsProperty]=S.parseTableRecords():(qi(o),o=r.next());break;default:qi(o),o=r.next()}const I=v[S.tableRecordsProperty];if(I){let L=(()=>{if(I.constructor===Array)return I.length;if(typeof I=="object")return Object.keys(I).length})();w!==L&&tt.warn("Parsed "+L+" "+S.dxfSymbolName+"'s but expected "+w)}return o=r.next(),v}function x(){const b=[];let S={};for(tt.debug("ViewPort {"),o=r.next();!Gn(o,0,d);)switch(o.code){case 2:S.name=o.value,o=r.next();break;case 10:S.lowerLeftCorner=_(o),o=r.next();break;case 11:S.upperRightCorner=_(o),o=r.next();break;case 12:S.center=_(o),o=r.next();break;case 13:S.snapBasePoint=_(o),o=r.next();break;case 14:S.snapSpacing=_(o),o=r.next();break;case 15:S.gridSpacing=_(o),o=r.next();break;case 16:S.viewDirectionFromTarget=_(o),o=r.next();break;case 17:S.viewTarget=_(o),o=r.next();break;case 42:S.lensLength=o.value,o=r.next();break;case 43:S.frontClippingPlane=o.value,o=r.next();break;case 44:S.backClippingPlane=o.value,o=r.next();break;case 45:S.viewHeight=o.value,o=r.next();break;case 50:S.snapRotationAngle=o.value,o=r.next();break;case 51:S.viewTwistAngle=o.value,o=r.next();break;case 79:S.orthographicType=o.value,o=r.next();break;case 110:S.ucsOrigin=_(o),o=r.next();break;case 111:S.ucsXAxis=_(o),o=r.next();break;case 112:S.ucsYAxis=_(o),o=r.next();break;case 110:S.ucsOrigin=_(o),o=r.next();break;case 281:S.renderMode=o.value,o=r.next();break;case 281:S.defaultLightingType=o.value,o=r.next();break;case 292:S.defaultLightingOn=o.value,o=r.next();break;case 330:S.ownerHandle=o.value,o=r.next();break;case 63:case 421:case 431:S.ambientColor=o.value,o=r.next();break;case 0:o.value==="VPORT"&&(tt.debug("}"),b.push(S),tt.debug("ViewPort {"),S={},o=r.next());break;default:qi(o),o=r.next();break}return tt.debug("}"),b.push(S),b}function m(){const b={};let S={},v=0,w;for(tt.debug("LType {"),o=r.next();!Gn(o,0,"ENDTAB");)switch(o.code){case 2:S.name=o.value,w=o.value,o=r.next();break;case 3:S.description=o.value,o=r.next();break;case 73:v=o.value,v>0&&(S.pattern=[]),o=r.next();break;case 40:S.patternLength=o.value,o=r.next();break;case 49:S.pattern.push(o.value),o=r.next();break;case 0:tt.debug("}"),v>0&&v!==S.pattern.length&&tt.warn("lengths do not match on LTYPE pattern"),b[w]=S,S={},tt.debug("LType {"),o=r.next();break;default:o=r.next()}return tt.debug("}"),b[w]=S,b}function g(){const b={};let S={},v;for(tt.debug("Layer {"),o=r.next();!Gn(o,0,"ENDTAB");)switch(o.code){case 2:S.name=o.value,v=o.value,o=r.next();break;case 62:S.visible=o.value>=0,S.colorIndex=Math.abs(o.value),S.color=X2(S.colorIndex),o=r.next();break;case 70:S.frozen=(o.value&1)!=0||(o.value&2)!=0,o=r.next();break;case 0:o.value==="LAYER"&&(tt.debug("}"),b[v]=S,tt.debug("Layer {"),S={},v=void 0,o=r.next());break;default:qi(o),o=r.next();break}return tt.debug("}"),b[v]=S,b}const M={VPORT:{tableRecordsProperty:"viewPorts",tableName:"viewPort",dxfSymbolName:"VPORT",parseTableRecords:x},LTYPE:{tableRecordsProperty:"lineTypes",tableName:"lineType",dxfSymbolName:"LTYPE",parseTableRecords:m},LAYER:{tableRecordsProperty:"layers",tableName:"layer",dxfSymbolName:"LAYER",parseTableRecords:g}};function E(b){const S=[],v=b?"ENDBLK":"ENDSEC";for(b||(o=r.next());;)if(o.code===0){if(o.value===v)break;const w=a._entityHandlers[o.value];if(w!=null){tt.debug(o.value+" {");const I=w.parseEntity(r,o);o=r.lastReadGroup,tt.debug("}"),T(I),S.push(I)}else{tt.warn("Unhandled entity "+o.value),o=r.next();continue}}else o=r.next();return v=="ENDSEC"&&(o=r.next()),S}function _(b){const S={};let v=b.code;if(S.x=b.value,v+=10,b=r.next(),b.code!=v)throw new Error("Expected code for point value to be "+v+" but got "+b.code+".");return S.y=b.value,v+=10,b=r.next(),b.code!=v?(r.rewind(),S):(S.z=b.value,S)}function T(b){if(!b)throw new TypeError("entity cannot be undefined or null");b.handle||(b.handle=i++)}return l(),t}}function Gn(n,e,t){return n.code===e&&n.value===t}function qi(n){tt.debug("unhandled group "+Fp(n))}function Fp(n){return n.code+":"+n.value}function X2(n){return Up[n]}const Pa=Math.PI/180,Y2=48;function q2(n,e,t,i,s,r,a){let o=s-i;if(r)for(;o<=0;)o+=Math.PI*2;else for(;o>=0;)o-=Math.PI*2;const l=Math.max(2,Math.ceil(Math.abs(o)/(Math.PI*2)*Y2));for(let c=0;c<=l;c++){const u=i+o*c/l;a.push({x:n+t*Math.cos(u),y:e+t*Math.sin(u)})}}class $2{constructor(){this.ForEntityName="HATCH"}parseEntity(e,t){const i={type:t.value,paths:[],solidFill:!1};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 70:i.solidFill=t.value!==0;break;case 2:i.patternName=t.value;break;case 8:i.layer=t.value;break;case 62:i.colorIndex=t.value;break;case 91:{const s=t.value;let r=e.next();for(let a=0;a=2&&t.paths.push(a),o}_readEdge(e,t,i,s){if(i===1){let r=0,a=0,o=0,l=0;s.code===10&&(r=s.value,s=e.next()),s.code===20&&(a=s.value,s=e.next()),s.code===11&&(o=s.value,s=e.next()),s.code===21&&(l=s.value,s=e.next()),t.points.push({x:r,y:a}),t.points.push({x:o,y:l})}else if(i===2){let r=0,a=0,o=0,l=0,c=0,u=1;s.code===10&&(r=s.value,s=e.next()),s.code===20&&(a=s.value,s=e.next()),s.code===40&&(o=s.value,s=e.next()),s.code===50&&(l=s.value*Pa,s=e.next()),s.code===51&&(c=s.value*Pa,s=e.next()),s.code===73&&(u=s.value,s=e.next()),q2(r,a,o,l,c,u!==0,t.points)}else if(i===3){let r=0,a=0,o=1,l=0,c=1,u=0,f=Math.PI*2,h=1;s.code===10&&(r=s.value,s=e.next()),s.code===20&&(a=s.value,s=e.next()),s.code===11&&(o=s.value,s=e.next()),s.code===21&&(l=s.value,s=e.next()),s.code===40&&(c=s.value,s=e.next()),s.code===50&&(u=s.value*Pa,s=e.next()),s.code===51&&(f=s.value*Pa,s=e.next()),s.code===73&&(h=s.value,s=e.next());const d=Math.hypot(o,l),p=d*c,x=Math.atan2(l,o);let m=f-u;if(h!==0)for(;m<=0;)m+=Math.PI*2;else for(;m>=0;)m-=Math.PI*2;const g=Math.max(4,Math.ceil(Math.abs(m)/(Math.PI*2)*72));for(let M=0;M<=g;M++){const E=u+m*M/g,_=d*Math.cos(E),T=p*Math.sin(E);t.points.push({x:r+_*Math.cos(x)-T*Math.sin(x),y:a+_*Math.sin(x)+T*Math.cos(x)})}}else if(i===4){let r=0,a=0;const o=()=>{const l=s.value|0;return s=e.next(),l};for(;!e.isEOF();)if(s.code===95)r=o();else if(s.code===96)a=o();else if(s.code===94||s.code===73||s.code===74)s=e.next();else break;for(let l=0;ln&&{x:n.x,y:n.y,z:n.z||0};function Tf(n,e){var s;const t={...n};switch(delete t.color,(n.type||"").toUpperCase()){case"LINE":((s=n.vertices)==null?void 0:s.length)>=2&&(t.start=Wt(n.vertices[0]),t.end=Wt(n.vertices[1]));break;case"POLYLINE":case"LWPOLYLINE":t.type="LWPOLYLINE",t.points=(n.vertices||[]).map(Wt),t.bulges=(n.vertices||[]).map(r=>r.bulge||0),t.closed=!!n.shape||((n.flags||0)&1)===1;break;case"ARC":case"CIRCLE":t.center=Wt(n.center);break;case"ELLIPSE":t.center=Wt(n.center),t.majorAxis=Wt(n.majorAxisEndPoint),t.ratio=n.axisRatio,t.startParam=n.startAngle,t.endParam=n.endAngle;break;case"POINT":t.position=Wt(n.position);break;case"SOLID":case"3DFACE":{const r=n.points||[];r[0]&&(t.corner1=Wt(r[0])),r[1]&&(t.corner2=Wt(r[1])),r[2]&&(t.corner3=Wt(r[2])),r[3]&&(t.corner4=Wt(r[3])),t.type="SOLID";break}case"TEXT":case"ATTRIB":case"ATTDEF":t.insertionPoint=Wt(n.startPoint||n.position),t.alignmentPt=Wt(n.endPoint),t.rotationAngle=(n.rotation||0)*La,t.horizAlignment=n.halign||0,t.vertAlignment=n.valign||0,t.textHeight=n.textHeight??n.height;break;case"MTEXT":t.insertionPoint=Wt(n.position),t.textHeight=n.height??n.textHeight,n.directionVector?t.xAxisDir=Wt(n.directionVector):n.rotation!=null&&(t.xAxisDir={x:Math.cos(n.rotation*La),y:Math.sin(n.rotation*La)});break;case"INSERT":{t.insertionPoint=Wt(n.position),t.scaleX=n.xScale??1,t.scaleY=n.yScale??1,t.rotation=(n.rotation||0)*La;const r=e.get(n.name);r!=null&&(t.blockHeaderHandle={value:r});break}case"DIMENSION":{const r=e.get(n.block);r!=null&&(t.blockHeaderHandle={value:r});break}}return t}function Z2(n){var u,f;const e=n.blocks||{},t=Object.keys(e),i=new Map;t.forEach((h,d)=>i.set(h,d+1));const s=t.find(h=>/model_space/i.test(h))??t.find(h=>/model/i.test(h)),r=s!=null?i.get(s):0,a=[];for(const h of n.entities||[]){const d=Tf(h,i);d.ownerHandle={value:r},a.push(d)}for(const h of t){const d=i.get(h);for(const p of e[h].entities||[]){const x=Tf(p,i);x.ownerHandle={value:d},a.push(x)}}const o=t.map(h=>({name:h,handle:{value:i.get(h)},basePoint:Wt(e[h].position)||{x:0,y:0,z:0}})),l=((f=(u=n.tables)==null?void 0:u.layer)==null?void 0:f.layers)||{},c=Object.values(l).map(h=>({name:h.name,colorIndex:h.colorIndex}));return{version:"dxf",vars:n.header||{},entities:a,tables:{blocks:o,layers:c}}}function K2(n){var s,r;try{return new TextDecoder("utf-8",{fatal:!0}).decode(n)}catch{}const t=(r=(s=new TextDecoder("latin1").decode(new Uint8Array(n,0,Math.min(n.byteLength,4096))).match(/\$DWGCODEPAGE[\s\S]*?\n\s*3\s*\n\s*([^\r\n]+)/i))==null?void 0:s[1])==null?void 0:r.trim().toLowerCase();let i="windows-1252";t&&(/949/.test(t)?i="euc-kr":/932/.test(t)?i="shift_jis":/936/.test(t)?i="gbk":/950/.test(t)&&(i="big5"));try{return new TextDecoder(i).decode(n)}catch{return new TextDecoder("utf-8").decode(n)}}function Af(n){return J2(K2(n))}function J2(n){const e=new W2;e.registerEntityHandler($2);const t=e.parseSync(n);return Z2(t)}const Np=/\.dwg$/i,kp=/\.dxf$/i;function j2(n){return Np.test(n)}function Q2(n){return kp.test(n)}function eA(n){return Np.test(n)||kp.test(n)}s2("/fonts/NanumGothic-Regular.ttf");const tA=document.getElementById("app"),wf=document.getElementById("status"),yl=document.getElementById("layerList"),Cf=document.getElementById("layers"),Da=document.getElementById("spaces");function rs(n,e=!1){wf.textContent=n,wf.classList.toggle("err",e)}const Jt=new u2(tA);Jt.onSelect(n=>{var t;if(!n){rs("deselected");return}const e=n;rs(`select ${e.type??"?"} · layer=${e.layer??"-"} · h=${((t=e.handle)==null?void 0:t.value)??"-"}`)});const Rf=document.getElementById("coordX"),Pf=document.getElementById("coordY");function Lf(n){const e=Math.abs(n);return e>=1e6?n.toFixed(1):e>=1e3?n.toFixed(2):e>=1?n.toFixed(3):n.toFixed(4)}Jt.onPointerWorld(n=>{if(!n){Rf.textContent="—",Pf.textContent="—";return}Rf.textContent=Lf(n.x),Pf.textContent=Lf(n.y)});function Bp(){var t;const n=Jt.getSpaces(),e=Jt.getActiveSpace();if(Da.innerHTML="",n.length<2&&!((t=n[0])!=null&&t.entityCount)){Da.style.display="none";return}Da.style.display="flex";for(const i of n){const s=document.createElement("button");s.type="button",s.textContent=`${i.label}${i.entityCount?` (${i.entityCount})`:""}`,s.title=`${i.name} · handle ${i.handleHex}`,i.handleHex===e&&s.classList.add("active"),s.addEventListener("click",()=>{i.handleHex!==Jt.getActiveSpace()&&(Jt.setSpace(i.handleHex),Bp(),Gp(),Jt.fit(),rs(`space ${i.label} · ${i.entityCount} entities`))}),Da.append(s)}}async function nA(n,e){return Q2(e)?Af(n):j2(e)?Mf(new Uint8Array(n)):new TextDecoder("latin1").decode(new Uint8Array(n,0,Math.min(6,n.byteLength))).startsWith("AC")?Mf(new Uint8Array(n)):Af(n)}async function Hp(n,e){const t=await nA(n,e),i=Sr(t),s=ob(i);return Jt.load(t,{spaceHandle:(s==null?void 0:s.handleHex)??null}),Jt.resize(),t}async function ru(n,e){const t=e??n.split("?")[0].split("/").pop()??n,i=await fetch(n);if(!i.ok)throw new Error(`HTTP ${i.status}`);return Hp(await i.arrayBuffer(),t)}async function zp(n){if(!eA(n.name))throw new Error(`not .dwg/.dxf: ${n.name}`);return Hp(await n.arrayBuffer(),n.name)}function Gp(){yl.innerHTML="";for(const n of Jt.getLayerInfo()){const e=document.createElement("label");e.dataset.name=n.name;const t=document.createElement("span");t.className="swatch",t.style.background=n.colorHex||"#888";const i=document.createElement("input");i.type="checkbox",i.checked=n.visible,i.addEventListener("change",()=>{const r=new Set;yl.querySelectorAll("label").forEach(a=>{a.querySelector("input").checked||r.add(a.dataset.name)}),Jt.setHiddenLayers(r)});const s=document.createElement("span");s.textContent=`${n.name} (${n.count})`,e.append(t,i,s),yl.append(e)}}async function iA(n,e){var r;const i=Sr(e).find(a=>a.handleHex===Jt.getActiveSpace()),s=i?` · ${i.label}`:"";rs(`✓ ${n} · ${((r=e.entities)==null?void 0:r.length)??0} entities${s}`),Bp(),Gp(),Jt.fit()}async function zr(n,e){rs(`loading ${n}…`);try{await iA(n,await e())}catch(t){rs(`${n}: ${t.message}`,!0),console.error(t)}}document.getElementById("sample").addEventListener("click",()=>{zr("BasicSample.dwg",()=>ru("/samples/BasicSample.dwg","BasicSample.dwg"))});document.getElementById("sampleDxf").addEventListener("click",()=>{zr("simple.dxf",()=>ru("/samples/simple.dxf","simple.dxf"))});document.getElementById("file").addEventListener("change",n=>{var t;const e=(t=n.target.files)==null?void 0:t[0];e&&(zr(e.name,()=>zp(e)),n.target.value="")});document.getElementById("fit").addEventListener("click",()=>Jt.fit());let _l=!0;document.getElementById("theme").addEventListener("click",()=>{_l=!_l,Jt.setTheme(_l)});document.getElementById("layersBtn").addEventListener("click",()=>{Cf.style.display=Cf.style.display==="block"?"none":"block"});window.addEventListener("dragover",n=>n.preventDefault());window.addEventListener("drop",n=>{var t,i;n.preventDefault();const e=(i=(t=n.dataTransfer)==null?void 0:t.files)==null?void 0:i[0];e&&zr(e.name,()=>zp(e))});const bl=new URLSearchParams(location.search).get("model");bl?zr(bl,()=>ru(bl)):rs("ready · Sample DWG / DXF 또는 파일 드롭");window.addEventListener("resize",()=>Jt.resize()); +`).replace(/^\n+|\n+$/g,""):""}class vA{constructor(e){this._container=e,this._entityMeta=[],this._layerByHandle=new Map,this._layerByName=new Map,this._onSelectCb=null,this._measureActive=!1,this._measureCb=null,this._measurePtA=null,this._measureMarkers=[],this._textGen=0,Or.shared().catch(()=>{}),this._scene=new Z0,this._scene.background=new et(856343);const t=e.clientWidth||800,i=e.clientHeight||600;this._camera=new Wc(-t/2,t/2,i/2,-i/2,-1e4,1e4),this._camera.position.set(0,0,100),this._renderer=new Wy({antialias:!0,preserveDrawingBuffer:!0}),this._renderer.setPixelRatio(window.devicePixelRatio),this._renderer.setSize(t,i),e.appendChild(this._renderer.domElement),this._controls=new Yy(this._camera,this._renderer.domElement),this._controls.enableRotate=!1,this._controls.screenSpacePanning=!0,this._controls.zoomToCursor=!0,this._controls.mouseButtons={LEFT:di.PAN,MIDDLE:di.PAN,RIGHT:di.PAN},this._controls.touches={ONE:Oi.PAN,TWO:Oi.DOLLY_PAN};const s=localStorage.getItem("hmw:zoom-speed");if(s){const r=parseFloat(s);isNaN(r)||(this._controls.zoomSpeed=r)}window.addEventListener("keydown",r=>{(r.key==="f"||r.key==="F")&&this.fit()}),this._group=new _r,this._scene.add(this._group),window.addEventListener("resize",()=>this._onResize()),this._renderer.domElement.addEventListener("pointerdown",r=>{r.button===1&&r.preventDefault()}),this._renderer.domElement.addEventListener("mousedown",r=>{this._downXY=[r.clientX,r.clientY],r.button===1&&r.preventDefault()}),this._renderer.domElement.addEventListener("click",r=>this._onClick(r)),this._renderer.domElement.addEventListener("pointermove",r=>this._onPointerMove(r)),this._renderer.domElement.addEventListener("pointerleave",()=>{this._onPointerWorldCb&&this._onPointerWorldCb(null)}),this._selColor={r:216/255,g:58/255,b:47/255},this._gridVisible=!1,this._gridMesh=null,this._activeSpaceHex=null,this._onPointerWorldCb=null,this._ptrWorldTmp=new H,this._coordOrigin={x:0,y:0,z:0},this._coordXAxis={x:1,y:0,z:0},this._coordYAxis={x:0,y:1,z:0},this._controls.addEventListener("change",()=>{this._gridVisible&&this._rebuildGrid()}),this._animate()}onSelect(e){this._onSelectCb=e}resize(){this._onResize()}setZoomSpeed(e){this._controls&&(this._controls.zoomSpeed=e)}getZoomSpeed(){return this._controls?this._controls.zoomSpeed:1}onPointerWorld(e){this._onPointerWorldCb=e||null}screenToWorld(e,t){const i=this._screenToWcs(e,t);return i?this._wcsToCad(i.x,i.y):null}_screenToWcs(e,t){var b,A,x,E,S;const i=(b=this._renderer)==null?void 0:b.domElement,s=this._camera;if(!i||!s)return null;const r=i.getBoundingClientRect();if(r.width<1||r.height<1)return null;s.updateMatrixWorld(!0);const a=(e-r.left)/r.width*2-1,o=-((t-r.top)/r.height)*2+1,l=s.zoom||1,c=(s.right-s.left)*.5/l,u=(s.top-s.bottom)*.5/l,d=s.matrixWorld.elements,h=d[0],f=d[1],m=d[4],_=d[5],p=((x=(A=this._controls)==null?void 0:A.target)==null?void 0:x.x)??s.position.x,g=((S=(E=this._controls)==null?void 0:E.target)==null?void 0:S.y)??s.position.y;return{x:p+a*c*h+o*u*m,y:g+a*c*f+o*u*_,z:0}}_wcsToCad(e,t){const i=this._coordOrigin||{x:0,y:0},s=this._coordXAxis||{x:1,y:0},r=this._coordYAxis||{x:0,y:1},a=e-(i.x||0),o=t-(i.y||0);return{x:a*(s.x||0)+o*(s.y||0),y:a*(r.x||0)+o*(r.y||0),z:0}}_setCoordFrame(e){const i=Mr(e).find(r=>r.handleHex===this._activeSpaceHex),s=(e==null?void 0:e.vars)||{};(i==null?void 0:i.kind)==="model"&&s.ucsOrigin?(this._coordOrigin={x:s.ucsOrigin.x||0,y:s.ucsOrigin.y||0,z:s.ucsOrigin.z||0},this._coordXAxis=s.ucsXAxis||{x:1,y:0,z:0},this._coordYAxis=s.ucsYAxis||{x:0,y:1,z:0}):(this._coordOrigin={x:0,y:0,z:0},this._coordXAxis={x:1,y:0,z:0},this._coordYAxis={x:0,y:1,z:0})}_onPointerMove(e){if(!this._onPointerWorldCb)return;const t=this.screenToWorld(e.clientX,e.clientY);this._onPointerWorldCb(t)}fit(){if(this._contentBox&&!this._contentBox.isEmpty()){this._fit(this._contentBox);return}const e=new Fi,t=[];if(this._group.traverse(s=>{var l;if(!s.geometry)return;e.expandByObject(s);const r=(l=s.geometry.attributes)==null?void 0:l.position;if(!(r!=null&&r.array))return;const a=r.array,o=Math.max(3,Math.floor(a.length/3/4e3)*3);for(let c=0;c+10;this._blockCount=d.size,this._activeSpaceHex&&h.size&&!h.has(this._activeSpaceHex)&&(this._activeSpaceHex=null);const p=this._activeSpaceHex?ll(i,this._activeSpaceHex):null,g=new Map;for(const D of i){const Ee=($=(O=D.ownerHandle)==null?void 0:O.value)==null?void 0:$.toString(16);Ee!=null&&(g.has(Ee)||g.set(Ee,[]),g.get(Ee).push(D))}const b=[];let A=0;const x=(D,Ee,z=0)=>{!Number.isFinite(D)||!Number.isFinite(Ee)||(l.expandByPoint(c.set(D,Ee,z)),A++,!(A&7)&&b.length<1e5&&b.push(D,Ee))},E=(D,Ee,z,P,v,B)=>{const Y=(B>>16&255)/255,N=(B>>8&255)/255,J=(B&255)/255;if(o){let ie=a.get(o.key);ie||(ie={dash:o.dash,gap:o.gap,verts:[],colors:[]},a.set(o.key,ie)),ie.verts.push(D,Ee,v,z,P,v),ie.colors.push(Y,N,J,Y,N,J)}else s.push(D,Ee,v,z,P,v),r.push(Y,N,J,Y,N,J);this._pickCurIdx>=0&&(this._pickSegs.push(D,Ee,z,P),this._pickSegMeta.push(this._pickCurIdx)),x(D,Ee,v),x(z,P,v)},S=-1,M=Mr(e),y=M.find(D=>D.handleHex===this._activeSpaceHex);if((y==null?void 0:y.kind)==="paper"){const D=M.find(Ee=>Ee.kind==="model");if(D){const Ee=ll(i,D.handleHex),z=i.filter(B=>{var N,J;return(B.type||B.typeName||"").toUpperCase()!=="VIEWPORT"?!1:((J=(N=B.ownerHandle)==null?void 0:N.value)==null?void 0:J.toString(16))===this._activeSpaceHex&&this._isModelViewport(B)}),P=(B,Y,N,J,ie,X)=>{E(B,Y,N,J,S,X)},v=(B,Y,N=0)=>x(B,Y,S);for(const B of z)this._emitModelThroughViewport(B,{entities:i,modelAllowed:Ee,blockDefHandles:d,entsByOwner:g,blockBaseByHex:f,blockNameByHex:m,pushSeg:P,expand:v,pendingTexts:u,box:l,_tmp:c,underlay:!0})}}for(const D of i){const Ee=(Z=(F=D.ownerHandle)==null?void 0:F.value)==null?void 0:Z.toString(16);if(_&&Ee&&d.has(Ee)||p&&Ee&&!p.has(Ee))continue;if((R=this._hiddenLayers)!=null&&R.size){const N=((re=D.layerHandle)==null?void 0:re.value)??D.layerHandle,J=(N!=null&&this._layerNameByHandle.get(String(N)))??D.layer??D.layerName;if(J&&this._hiddenLayers.has(J))continue}const z=D.data||D,P=(D.type||D.typeName||"").toUpperCase(),v=this._entityColor(D),B=this._resolveComplexLinetype(D);B?o=null:o=this._resolveDash(D);const Y={entity:D,type:P,bounds:null,colStart:r.length};this._entityMeta.push(Y),this._pickCurIdx=this._entityMeta.length-1;try{switch(P){case"LINE":z.start&&z.end&&(B?this._drawComplexPath([z.start,z.end],!1,B.pattern,B.ltscale,v,E,u):E(z.start.x,z.start.y,z.end.x,z.end.y,z.start.z||0,v),Y.bounds={type:"line",x1:z.start.x,y1:z.start.y,x2:z.end.x,y2:z.end.y});break;case"CIRCLE":if(z.center&&z.radius!=null){if(B){const N=this._sampleArcPoints(z.center,z.radius,0,Math.PI*2,z.center.z||0);this._drawComplexPath(N,!0,B.pattern,B.ltscale,v,E,u)}else this._arcSegs(z.center,z.radius,0,Math.PI*2,z.center.z||0,v,E);Y.bounds={type:"circle",cx:z.center.x,cy:z.center.y,r:z.radius}}break;case"ARC":if(z.center&&z.radius!=null){if(B){const N=this._sampleArcPoints(z.center,z.radius,z.startAngle??0,z.endAngle??Math.PI*2,z.center.z||0);this._drawComplexPath(N,!1,B.pattern,B.ltscale,v,E,u)}else this._arcSegs(z.center,z.radius,z.startAngle??0,z.endAngle??Math.PI*2,z.center.z||0,v,E);Y.bounds={type:"circle",cx:z.center.x,cy:z.center.y,r:z.radius}}break;case"LWPOLYLINE":if((se=z.points)!=null&&se.length){const N=(ae=z.bulges)==null?void 0:ae.some(X=>Math.abs(X)>=1e-6),J=!!(z.closed||z.flags&1),ie=J?z.points.length:z.points.length-1;if(this._polyHasWidth(D,ie,1))this._widePolyMesh(z.points,z.bulges,J,D,v,1,x);else if(B){const X=this._samplePolylinePoints(z.points,z.bulges,J,z.elevation||0);this._drawComplexPath(X,J,B.pattern,B.ltscale,v,E,u),X.forEach(W=>x(W.x,W.y,W.z))}else N?this._bulgePolySegs(z.points,z.bulges,J,v,E,x):(this._polylineSegs(z.points,J,z.elevation||0,v,E),z.points.forEach(X=>x(X.x,X.y,z.elevation||0)));Y.bounds={type:"point",cx:z.points[0].x,cy:z.points[0].y}}break;case"POLYLINE":if(B&&(z.vertices||z.points)){const N=!!(z.closed||z.flags&1),J=z.vertices||z.points;this._drawComplexPath(J,N,B.pattern,B.ltscale,v,E,u),J.forEach(ie=>x(ie.x,ie.y,ie.z||0))}else this._polylineSegs(z.vertices||z.points,z.closed||z.flags&1,0,v,E);break;case"POLYLINE_2D":{const N=(g.get((he=(ge=D.handle)==null?void 0:ge.value)==null?void 0:he.toString(16))??[]).filter(J=>(J.type||"").toUpperCase().startsWith("VERTEX")&&J.point);if(N.length>=2){const J=N.map(ce=>ce.point),ie=N.map(ce=>ce.bulge||0),X=(z.flags&1)===1,W=z.elevation||0;if(B){const ce=this._samplePolylinePoints(J,ie,X,W);this._drawComplexPath(ce,X,B.pattern,B.ltscale,v,E,u),ce.forEach(le=>x(le.x,le.y,le.z))}else ie.some(ce=>Math.abs(ce)>=1e-6)?this._bulgePolySegs(J,ie,X,v,E,x):(this._polylineSegs(J,X,W,v,E),J.forEach(ce=>x(ce.x,ce.y,W)));Y.bounds={type:"point",cx:J[0].x,cy:J[0].y}}break}case"POINT":{const N=z.position||z;typeof N.x=="number"&&(E(N.x-1,N.y,N.x+1,N.y,N.z||0,v),E(N.x,N.y-1,N.x,N.y+1,N.z||0,v),Y.bounds={type:"point",cx:N.x,cy:N.y});break}case"ELLIPSE":if(z.center){if(B){const N=this._sampleEllipsePoints(z);this._drawComplexPath(N,!1,B.pattern,B.ltscale,v,E,u),N.forEach(J=>x(J.x,J.y,J.z||0))}else this._ellipseSegs(z,v,E);Y.bounds={type:"point",cx:z.center.x,cy:z.center.y}}break;case"SPLINE":{const N=z.controlPoints??z.fitPoints;if((N==null?void 0:N.length)>=2){const J=N.length>=3?(()=>{const ie=N.length*10,X=[];for(let W=0;W<=ie;W++){const ce=W/ie;X.push(this._catmullRom(N,ce))}return X})():N;B?(this._drawComplexPath(J,!!z.closed,B.pattern,B.ltscale,v,E,u),J.forEach(ie=>x(ie.x,ie.y,ie.z||0))):(this._polylineSegs(J,!1,0,v,E),J.forEach(ie=>x(ie.x,ie.y,ie.z||0))),Y.bounds={type:"point",cx:J[0].x,cy:J[0].y}}break}case"ATTRIB":case"ATTDEF":{if((z.flags??0)&1)break;const N=D.text??z.text??z.textValue??z.defaultValue??"",J=ks(N),ie=D.textHeight??D.height??z.textHeight??z.height??2.5,X=D.rotationAngle??z.rotationAngle??0,W=D.horizAlignment??z.horizAlignment??0,ce=D.vertAlignment??z.vertAlignment??0,de=W!==0||ce!==0?D.alignmentPt??z.alignmentPt??D.insertionPt??z.insertionPt??z.insertionPoint??{x:0,y:0}:D.insertionPt??z.insertionPt??z.insertionPoint??{x:0,y:0};J&&(u.push({text:J,pos:de,height:ie,rotation:X,color:v,alignH:W,alignV:2}),Y.bounds={type:"point",cx:de.x,cy:de.y},this._addTextPick(J,de,ie,W,2),x(de.x,de.y,0));break}case"XLINE":case"RAY":{const N=z.basePoint??z.point??z.startPoint,J=z.direction??z.unitDir??z.vector;if(N&&J){const X=N.x+J.x*1e6,W=N.y+J.y*1e6;P==="XLINE"?E(N.x-J.x*1e6,N.y-J.y*1e6,X,W,0,v):E(N.x,N.y,X,W,0,v),Y.bounds={type:"point",cx:N.x,cy:N.y},x(N.x,N.y)}break}case"SOLID":{const N=[z.corner1||z.pt1||z.point1,z.corner2||z.pt2||z.point2,z.corner3||z.pt3||z.point3,z.corner4||z.pt4||z.point4].filter(Boolean);N.length>=3&&(this._solidMesh(N,v),Y.bounds={type:"point",cx:N[0].x,cy:N[0].y});break}case"TEXT":case"MTEXT":{const N=D.text??z.text??"",J=ks(N),ie=D.textHeight??D.height??z.textHeight??z.height??2.5;let X=0,W=0,ce=0,le;if(P==="TEXT")X=D.rotationAngle??z.rotationAngle??0,W=D.horizAlignment??z.horizAlignment??0,ce=D.vertAlignment??z.vertAlignment??0,W===4&&(ce=2),le=W!==0||ce!==0?D.alignmentPt??z.alignmentPt??D.insertionPt??z.insertionPt??{x:0,y:0}:D.insertionPt??z.insertionPt??z.insertionPoint??{x:0,y:0};else{const de=D.xAxisDir??z.xAxisDir;de&&(X=Math.atan2(de.y,de.x));const pe=D.attachment??z.attachment??D.attachmentPoint??z.attachmentPoint??5;W=[1,4,7].includes(pe)?0:[3,6,9].includes(pe)?2:1,ce=[1,2,3].includes(pe)?3:[7,8,9].includes(pe)?1:2,le=D.insertionPt??z.insertionPt??z.insertionPoint??{x:0,y:0}}if(J){const de={text:J,pos:le,height:ie,rotation:X,color:v,alignH:W,alignV:ce};P==="MTEXT"&&(de.linespacingFactor=D.linespacingFactor??z.linespacingFactor??1,de.rectWidth=D.rectWidth??z.rectWidth??0,de.rectHeight=D.rectHeight??z.rectHeight??0,de.bgFillFlags=D.bgFillFlags??z.bgFillFlags??0,de.bgScale=D.bgScale??z.bgScale??1.5,de.bgColorIndex=D.bgColorIndex??z.bgColorIndex,de.bgColorRgb=D.bgColorRgb??z.bgColorRgb),u.push(de),Y.bounds={type:"point",cx:le.x,cy:le.y},this._addTextPick(J,le,ie,W,ce),x(le.x,le.y,0)}break}case"INSERT":{const N=D.insertionPt??z.insertionPt??z.insertionPoint,J=z.scaleX??((oe=z.scale)==null?void 0:oe.x)??((G=D.scale)==null?void 0:G.x)??1,ie=z.scaleY??((ne=z.scale)==null?void 0:ne.y)??((j=D.scale)==null?void 0:j.y)??1,X=z.rotation??D.rotation??0,W=((xe=D.blockHeaderHandle)==null?void 0:xe.value)??((be=z.blockHeaderHandle)==null?void 0:be.value);if(W!=null){const ce=W.toString(16),le=g.get(ce)??[];if(le.length>0){const de=(Be=(ve=e==null?void 0:e.tables)==null?void 0:ve.blocks)==null?void 0:Be.find(pe=>{var we;return(typeof pe.handle=="object"?(we=pe.handle)==null?void 0:we.value:pe.handle)===W});this._insertEntities(le,{insertionPoint:N??{x:0,y:0,z:0},xScale:J,yScale:ie,rotation:X,basePoint:de==null?void 0:de.basePoint},v,E,u,{entsByOwner:g,blockBase:f})}}N&&(Y.bounds={type:"point",cx:N.x,cy:N.y},x(N.x,N.y,0));break}case"HATCH":{const N=z.paths??D.paths,J=z.solidFill??D.solidFill??!1;if(!(N!=null&&N.length))break;let ie=null;for(const X of N){if(!((Ve=X.points)!=null&&Ve.length)||X.points.length<2)continue;ie||(ie=X.points[0]),((Ne=X.bulges)==null?void 0:Ne.some(ce=>Math.abs(ce)>=1e-6))?this._bulgePolySegs(X.points,X.bulges,!0,v,E,x):(this._polylineSegs(X.points,!0,0,v,E),X.points.forEach(ce=>x(ce.x,ce.y,0)))}J&&this._hatchFill(N,v),ie&&(Y.bounds={type:"point",cx:ie.x,cy:ie.y});break}case"DIMENSION":case"DIMENSION_LINEAR":case"DIMENSION_ALIGNED":case"DIMENSION_RADIUS":case"DIMENSION_DIAMETER":case"DIMENSION_ANG_3PT":case"DIMENSION_ANG_2LN":case"DIMENSION_ORDINATE":{const N=((ke=D.blockHeaderHandle)==null?void 0:ke.value)??((Xe=z.blockHeaderHandle)==null?void 0:Xe.value);let J=[];if(N!=null){const ie=N.toString(16);J=g.get(ie)??[]}if(J.length>0){for(const W of J){const ce=(W.type||W.typeName||"").toUpperCase(),le=W.data||W,de=this._entityColor(W)||v;if(ce==="LINE"&&le.start&&le.end)E(le.start.x,le.start.y,le.end.x,le.end.y,0,de),x(le.start.x,le.start.y),x(le.end.x,le.end.y);else if(ce==="SOLID"){const pe=[le.corner1||le.pt1,le.corner2||le.pt2,le.corner3||le.pt3,le.corner4||le.pt4].filter(Boolean);pe.length>=3&&(this._solidMesh(pe,de),pe.forEach(Le=>x(Le.x,Le.y)))}else if(ce==="ARC"&&le.center&&le.radius!=null)this._arcSegs(le.center,le.radius,le.startAngle??0,le.endAngle??Math.PI*2,0,de,E);else if(ce==="TEXT"||ce==="MTEXT"){const pe=W.text??le.text??le.textValue??"",Le=ks(pe),we=W.insertionPt??le.insertionPt??le.insertionPoint??{x:0,y:0},Ye=le.textHeight??le.height??W.textHeight??2.5;Le&&(u.push({text:Le,pos:we,height:Ye,rotation:le.rotationAngle??0,color:de,alignH:1,alignV:2}),x(we.x,we.y))}else if(ce==="INSERT"){const pe=W.insertionPt??le.insertionPt??le.insertionPoint??{x:0,y:0},Le=le.rotation??W.rotation??0,we=le.scaleX??((tt=le.scale)==null?void 0:tt.x)??((rt=W.scale)==null?void 0:rt.x)??1,Ye=le.scaleY??((gt=le.scale)==null?void 0:gt.y)??((vt=W.scale)==null?void 0:vt.y)??we,V=((ht=W.blockHeaderHandle)==null?void 0:ht.value)??((dt=le.blockHeaderHandle)==null?void 0:dt.value),_e=V==null?void 0:V.toString(16),ue=m.get(_e)??"",ye=_e?g.get(_e)??[]:[];ue.includes("dot")?this._dotMesh(pe,this._arrowDotRadius(ye)*Math.abs(we)||Math.abs(we)*.5,de):ye.length?this._insertEntities(ye,{insertionPoint:pe,xScale:we,yScale:Ye,rotation:Le,basePoint:f.get(_e)},de,E,u,{entsByOwner:g,blockBase:f}):this._defaultArrow(ue,pe,Le,Math.abs(we)||1,de,E),x(pe.x,pe.y)}}const ie=J.find(W=>(W.type||W.typeName||"").toUpperCase()==="LINE"),X=(ie==null?void 0:ie.data)||ie;X!=null&&X.start&&(Y.bounds={type:"point",cx:X.start.x,cy:X.start.y})}else{this._renderDimFallback(D,z,P,v,E,u,x);const ie=D.pt10??z.pt10;ie&&(Y.bounds={type:"point",cx:ie.x,cy:ie.y},x(ie.x,ie.y))}break}case"LEADER":{const N=z.points??D.points;if((N==null?void 0:N.length)>=2){if(this._polylineSegs(N,!1,0,v,E),N.forEach(J=>x(J.x,J.y,J.z||0)),z.arrowheadOn??D.arrowheadOn??!0){const J=N[0],ie=N[1],X=Math.atan2(ie.y-J.y,ie.x-J.x),W=z.arrowSize??D.arrowSize??2.5;this._arrowMesh(J,X,W,v)}Y.bounds={type:"point",cx:N[0].x,cy:N[0].y}}break}case"OLE2FRAME":{const N=D.upperLeft??z.upperLeft??{x:0,y:0,z:0},J=D.lowerRight??z.lowerRight??{x:0,y:0,z:0},ie=D.sourceApp??z.sourceApp??D.source_application??"",X=D.imageDataUrl??z.imageDataUrl;let W=Math.min(N.x,J.x),ce=Math.max(N.x,J.x),le=Math.min(N.y,J.y),de=Math.max(N.y,J.y),pe=ce-W,Le=de-le;const we=N.z||0;if(E(W,le,ce,le,we,v),E(ce,le,ce,de,we,v),E(ce,de,W,de,we,v),E(W,de,W,le,we,v),X)try{const V=(fe=>{const He=fe.split(",")[1],Oe=atob(He),ot=new Uint8Array(Oe.length);for(let An=0;An0,Xi=document.createElement("canvas");Xi.width=kn,Xi.height=Fn;const ir=Xi.getContext("2d"),Bn=ir.createImageData(kn,Fn),mn=Bn.data;if(nr===32){const An=kn*4;for(let sn=0;sn0&&Number.isFinite(W)&&z.push(W)}z.sort((X,W)=>X-W);const P=z.length?z[z.length>>1]:2.5,v=Math.min(Ee*2e-4,P),B=2e4,Y=u.filter(X=>X.underlay),N=u.filter(X=>!X.underlay),J=Y.concat(N),ie=J.length>B?(console.warn(`텍스트 ${J.length}개 → ${B}개로 제한`),N.concat(Y).sort((X,W)=>W.height-X.height).slice(0,B)):J;this._drawTexts(ie,v)}if(this._lineColorAttr=null,this._origColors=null,s.length){const D=new Ct;D.setAttribute("position",new ft(s,3));const Ee=new ft(r,3);D.setAttribute("color",Ee),this._group.add(new pa(D,new Fs({vertexColors:!0}))),this._lineColorAttr=Ee,this._origColors=Float32Array.from(Ee.array)}for(const D of a.values()){if(!D.verts.length)continue;const Ee=new Ct;Ee.setAttribute("position",new ft(D.verts,3)),Ee.setAttribute("color",new ft(D.colors,3));const z=new pa(Ee,new Xm({vertexColors:!0,dashSize:D.dash,gapSize:D.gap}));z.computeLineDistances(),this._group.add(z)}this._setCoordFrame(e);const T=l.isEmpty()?null:this._trimmedContentBox(b,l)||l;this._contentBox=T?T.clone():null,!t.keepView&&T&&!T.isEmpty()&&this._fit(T)}setTheme(e){this._scene.background=new et(e?658189:16250611),this._gridVisible&&this._rebuildGrid()}setGrid(e){this._gridVisible=e,e?this._rebuildGrid():this._gridMesh&&(this._scene.remove(this._gridMesh),this._gridMesh.geometry.dispose(),this._gridMesh.material.dispose(),this._gridMesh=null)}_rebuildGrid(){this._gridMesh&&(this._scene.remove(this._gridMesh),this._gridMesh.geometry.dispose(),this._gridMesh.material.dispose(),this._gridMesh=null);const e=this._camera.zoom||1,t=this._camera.position.x,i=this._camera.position.y,s=(this._camera.right-this._camera.left)/e/2,r=(this._camera.top-this._camera.bottom)/e/2,a=Math.max(s,r)*3,o=this._niceSpacing(Math.max(s,r)*2/20),[l,c,u,d]=[t-a,t+a,i-a,i+a],f=this._scene.background.r<.5?2829099:12303291,m=[];for(let p=Math.ceil(l/o)*o;p<=c;p+=o)m.push(p,u,-.5,p,d,-.5);for(let p=Math.ceil(u/o)*o;p<=d;p+=o)m.push(l,p,-.5,c,p,-.5);const _=new Ct;_.setAttribute("position",new ft(m,3)),this._gridMesh=new pa(_,new Fs({color:f})),this._scene.add(this._gridMesh)}_niceSpacing(e){if(e<=0)return 1;const t=Math.pow(10,Math.floor(Math.log10(e))),i=e/t;return(i<2?1:i<5?2:5)*t}getZoomPercent(){var e;return Math.round((((e=this._camera)==null?void 0:e.zoom)??1)*100)}onViewChange(e){var t;(t=this._controls)==null||t.addEventListener("change",e)}setHiddenLayers(e){this._hiddenLayers=e||new Set,this._lastResult&&this.load(this._lastResult,{keepView:!0})}getSpaces(){return Mr(this._lastResult)}getActiveSpace(){return this._activeSpaceHex}setSpace(e,t={}){e==null||e===""?this._activeSpaceHex=null:typeof e=="number"?this._activeSpaceHex=e.toString(16):this._activeSpaceHex=String(e).toLowerCase(),this._lastResult&&this.load(this._lastResult,{keepView:!!t.keepView,spaceHandle:this._activeSpaceHex})}_isModelViewport(e){if(!e||e.status&&e.status.isOn===!1||(e.id??0)===1)return!1;const i=Number(e.height)||0,s=Number(e.viewHeight)||0;if(i<=0||s<=0)return!1;const r=i/s,a=e.center||{},o=e.viewCenter||{},l=e.viewTarget||{},c=Math.hypot(l.x||0,l.y||0)<.001,u=Math.hypot((o.x||0)-(a.x||0),(o.y||0)-(a.y||0))1e-12?Number(e.viewHeight):r,o=r/a,l=Number(e.twistAngle)||0,c=Math.cos(l),u=Math.sin(l),d=(h,f)=>{const m=h-(s.x||0),_=f-(s.y||0),p=c*m-u*_,g=u*m+c*_;return{x:(t.x||0)+(p-(i.x||0))*o,y:(t.y||0)+(g-(i.y||0))*o}};return d.scale=o,d.twist=l,d}_viewportPaperClip(e){const t=e.center||{x:0,y:0},i=(Number(e.width)||0)/2,s=(Number(e.height)||0)/2,r=Math.max(i,s)*1e-6;return{minX:(t.x||0)-i-r,maxX:(t.x||0)+i+r,minY:(t.y||0)-s-r,maxY:(t.y||0)+s+r}}_clipSegToRect(e,t,i,s,r,a){const h=(_,p)=>{let g=0;return _r.maxX&&(g|=2),pr.maxY&&(g|=8),g};let f=h(e,t),m=h(i,s);for(;;){if(!(f|m)){a(e,t,i,s);return}if(f&m)return;const _=f||m;let p=0,g=0;_&8?(p=e+(i-e)*(r.maxY-t)/(s-t||1e-30),g=r.maxY):_&4?(p=e+(i-e)*(r.minY-t)/(s-t||1e-30),g=r.minY):_&2?(g=t+(s-t)*(r.maxX-e)/(i-e||1e-30),p=r.maxX):(g=t+(s-t)*(r.minX-e)/(i-e||1e-30),p=r.minX),_===f?(e=p,t=g,f=h(e,t)):(i=p,s=g,m=h(i,s))}}_emitModelThroughViewport(e,t){var A,x,E,S,M,y,T,I,L,w,U,k,O,$;const{entities:i,modelAllowed:s,blockDefHandles:r,entsByOwner:a,blockBaseByHex:o,pushSeg:l,expand:c,pendingTexts:u,underlay:d=!1}=t,h=this._viewportModelToPaper(e),f=this._viewportPaperClip(e),m=h.scale||1,_=new Set((e.frozenLayers||[]).map(F=>String(F))),p=(F,Z,R,re,se,ae)=>{const ge=h(F,Z),he=h(R,re);this._clipSegToRect(ge.x,ge.y,he.x,he.y,f,(oe,G,ne,j)=>{l(oe,G,ne,j,se||0,ae)})},g=(F,Z,R=0)=>{const re=h(F,Z);re.x>=f.minX&&re.x<=f.maxX&&re.y>=f.minY&&re.y<=f.maxY&&c(re.x,re.y,R)},b=(F,Z)=>F>=f.minX&&F<=f.maxX&&Z>=f.minY&&Z<=f.maxY;for(const F of i){const Z=(x=(A=F.ownerHandle)==null?void 0:A.value)==null?void 0:x.toString(16);if(!Z||!s.has(Z)||r.has(Z))continue;if((E=this._hiddenLayers)!=null&&E.size){const he=((S=F.layerHandle)==null?void 0:S.value)??F.layerHandle,oe=(he!=null&&this._layerNameByHandle.get(String(he)))??F.layer??F.layerName;if(oe&&this._hiddenLayers.has(oe))continue}if(_.size){const he=(M=F.layerHandle)==null?void 0:M.value;if(he!=null&&_.has(String(he)))continue}const R=F.data||F,re=(F.type||F.typeName||"").toUpperCase(),se=this._entityColor(F),ae=this._resolveComplexLinetype(F),ge=u.length;try{switch(re){case"LINE":R.start&&R.end&&(ae?this._drawComplexPath([R.start,R.end],!1,ae.pattern,ae.ltscale,se,p,u):p(R.start.x,R.start.y,R.end.x,R.end.y,R.start.z||0,se));break;case"CIRCLE":if(R.center&&R.radius!=null)if(ae){const he=this._sampleArcPoints(R.center,R.radius,0,Math.PI*2,R.center.z||0);this._drawComplexPath(he,!0,ae.pattern,ae.ltscale,se,p,u)}else this._arcSegs(R.center,R.radius,0,Math.PI*2,R.center.z||0,se,p);break;case"ARC":if(R.center&&R.radius!=null)if(ae){const he=this._sampleArcPoints(R.center,R.radius,R.startAngle??0,R.endAngle??Math.PI*2,R.center.z||0);this._drawComplexPath(he,!1,ae.pattern,ae.ltscale,se,p,u)}else this._arcSegs(R.center,R.radius,R.startAngle??0,R.endAngle??Math.PI*2,R.center.z||0,se,p);break;case"LWPOLYLINE":if((y=R.points)!=null&&y.length){const he=(T=R.bulges)==null?void 0:T.some(G=>Math.abs(G)>=1e-6),oe=!!(R.closed||R.flags&1);if(ae){const G=this._samplePolylinePoints(R.points,R.bulges,oe,R.elevation||0);this._drawComplexPath(G,oe,ae.pattern,ae.ltscale,se,p,u),G.forEach(ne=>g(ne.x,ne.y,ne.z))}else he?this._bulgePolySegs(R.points,R.bulges,oe,se,p,g):(this._polylineSegs(R.points,oe,R.elevation||0,se,p),R.points.forEach(G=>g(G.x,G.y,R.elevation||0)))}break;case"POLYLINE":if(ae&&(R.vertices||R.points)){const he=!!(R.closed||R.flags&1),oe=R.vertices||R.points;this._drawComplexPath(oe,he,ae.pattern,ae.ltscale,se,p,u),oe.forEach(G=>g(G.x,G.y,G.z||0))}else this._polylineSegs(R.vertices||R.points,R.closed||R.flags&1,0,se,p);break;case"ELLIPSE":if(R.center)if(typeof this._ellipseSegs=="function")this._ellipseSegs(R,se,p);else{const he=R.center.x,oe=R.center.y,G=R.smAxis||R.majorAxis||{x:R.radius||1,y:0},ne=R.axisRatio??R.minorAxisRatio??.5,j=R.startAngle??R.startParameter??0,xe=R.endAngle??R.endParameter??Math.PI*2,be=64;let ve,Be;for(let Ve=0;Ve<=be;Ve++){const Ne=j+(xe-j)*(Ve/be),ke=Math.cos(Ne),Xe=Math.sin(Ne),tt=he+G.x*ke-G.y*ne*Xe,rt=oe+G.y*ke+G.x*ne*Xe;Ve>0&&p(ve,Be,tt,rt,0,se),ve=tt,Be=rt}}break;case"SOLID":{const he=[R.corner1||R.pt1,R.corner2||R.pt2,R.corner3||R.pt3,R.corner4||R.pt4].filter(Boolean);if(he.length>=2)for(let oe=0;oeMath.abs(xe)>=1e-6)?this._bulgePolySegs(G,j,ne,se,p,g):(this._polylineSegs(G,ne,0,se,p),G.forEach(xe=>g(xe.x,xe.y)))}break}case"SPLINE":{const he=(I=R.fitPoints)!=null&&I.length?R.fitPoints:R.controlPoints;(he==null?void 0:he.length)>=2&&this._polylineSegs(he,!!R.closed,0,se,p);break}case"TEXT":case"MTEXT":{const he=F.text??R.text??"",oe=ks(he);if(!oe)break;const G=(F.textHeight??F.height??R.textHeight??R.height??2.5)*m;let ne=(F.rotationAngle??R.rotationAngle??0)+(h.twist||0),j=0,xe=0,be;if(re==="TEXT")j=F.horizAlignment??R.horizAlignment??0,xe=F.vertAlignment??R.vertAlignment??0,j===4&&(xe=2),be=j!==0||xe!==0?F.alignmentPt??R.alignmentPt??F.insertionPt??R.insertionPt??{x:0,y:0}:F.insertionPt??R.insertionPt??R.insertionPoint??{x:0,y:0};else{const Be=F.xAxisDir??R.xAxisDir;Be&&(ne=Math.atan2(Be.y,Be.x)+(h.twist||0));const Ve=F.attachment??R.attachment??F.attachmentPoint??R.attachmentPoint??5;j=[1,4,7].includes(Ve)?0:[3,6,9].includes(Ve)?2:1,xe=[1,2,3].includes(Ve)?3:[7,8,9].includes(Ve)?1:2,be=F.insertionPt??R.insertionPt??R.insertionPoint??{x:0,y:0}}const ve=h(be.x,be.y);if(!b(ve.x,ve.y))break;u.push({text:oe,pos:ve,height:G,rotation:ne,color:se,alignH:j,alignV:xe,underlay:!!d}),g(be.x,be.y);break}case"INSERT":{const he=F.insertionPt??R.insertionPt??R.insertionPoint;if(!he)break;const oe=R.scaleX??((L=R.scale)==null?void 0:L.x)??((w=F.scale)==null?void 0:w.x)??1,G=R.scaleY??((U=R.scale)==null?void 0:U.y)??((k=F.scale)==null?void 0:k.y)??1,ne=((O=F.blockHeaderHandle)==null?void 0:O.value)??(($=R.blockHeaderHandle)==null?void 0:$.value),j=ne!=null?ne.toString(16):null,xe=j?a.get(j)??[]:[];if(xe.length){const be=u.length;this._insertEntities(xe,{insertionPoint:he,xScale:oe,yScale:G,rotation:R.rotation??F.rotation??0,basePoint:o.get(j)},se,p,u,{entsByOwner:a,blockBase:o});for(let ve=be;vege)for(let he=ge;he{this._renderer.render(this._scene,this._camera),this._renderer.domElement.toBlob(t=>e(t),"image/webp",.75)})}getLayerInfo(){var r,a,o,l,c;const e=this._lastResult;if(!e)return[];const t=new Map,i=this._activeSpaceHex?ll(e.entities||[],this._activeSpaceHex):null;for(const u of e.entities||[]){const d=(a=(r=u.ownerHandle)==null?void 0:r.value)==null?void 0:a.toString(16);if(i&&d&&!i.has(d))continue;const h=((o=u.layerHandle)==null?void 0:o.value)??u.layerHandle,f=(h!=null&&((l=this._layerNameByHandle)==null?void 0:l.get(String(h))))??u.layer??u.layerName??"0";t.set(f,(t.get(f)||0)+1)}const s=this._hiddenLayers||new Set;return(((c=e.tables)==null?void 0:c.layers)||[]).map(u=>{const d=u.name??u.layerName??"0",h=Math.abs(u.colorIndex??u.color??u.colorNumber??7);return{name:d,colorHex:"#"+(Ma(h)??yl).toString(16).padStart(6,"0"),count:t.get(d)||0,visible:!s.has(d)}}).filter(u=>u.count>0||!u.name.startsWith("*"))}_resolveComplexLinetype(e){var a,o,l,c;let t=e.lineType??e.linetype;if(!t||t==="ByLayer"||t==="BYLAYER"||t==="ByBlock"||t==="BYBLOCK"){const u=((a=e.layerHandle)==null?void 0:a.value)??e.layerHandle;t=u!=null&&((o=this._layerLtByHandle)==null?void 0:o.get(String(u)))||((l=this._layerLtByName)==null?void 0:l.get(e.layer??e.layerName))||null}if(!t||t==="Continuous"||t==="ByLayer"||t==="ByBlock")return null;const i=xA(t);if(!i)return null;const s=((c=e.entityHeader)==null?void 0:c.linetypeScale)>0?e.entityHeader.linetypeScale:1,r=(this._globalLtscale||1)*s;return{pattern:i,ltscale:r}}_sampleArcPoints(e,t,i,s,r=0){let a=s-i;a<=0&&(a+=Math.PI*2);const o=Math.max(16,Math.ceil(a/(Math.PI*2)*yd)),l=[],c=e.z||r||0;for(let u=0;u<=o;u++){const d=i+a*u/o;l.push({x:e.x+t*Math.cos(d),y:e.y+t*Math.sin(d),z:c})}return l}_samplePolylinePoints(e,t,i,s=0){if(!e||e.length<2)return e||[];const r=[],a=i?e.length:e.length-1;for(let o=0;o1e-9){const _=4*Math.atan(u),p=Math.abs(_)/2,g=m/2/Math.sin(p),b=g*Math.cos(p),A=(l.x+c.x)/2,x=(l.y+c.y)/2,E=-f/m,S=h/m,M=u>0?1:-1,y=A+M*E*b,T=x+M*S*b,I=Math.atan2(l.y-T,l.x-y),L=Math.max(4,Math.ceil(Math.abs(_)/(Math.PI/16)));for(let w=r.length===0?0:1;w<=L;w++){const U=I+_*w/L;r.push({x:y+g*Math.cos(U),y:T+g*Math.sin(U),z:d})}}}}return r}_sampleEllipsePoints(e){const t=e.majorAxis??e.smAxis??{x:e.radius||1,y:0},i=e.center||{x:0,y:0},s=e.ratio??e.axisRatio??e.minorAxisRatio??.5,r=e.startParam??e.startAngle??0,a=e.endParam??e.endAngle??Math.PI*2,o=Math.hypot(t.x??1,t.y??0),l=o*s,c=Math.atan2(t.y??0,t.x??1);let u=a-r;u<=0&&(u+=Math.PI*2);const d=vl,h=[],f=i.z||0;for(let m=0;m<=d;m++){const _=r+u*m/d,p=o*Math.cos(_),g=l*Math.sin(_),b=i.x+p*Math.cos(c)-g*Math.sin(c),A=i.y+p*Math.sin(c)+g*Math.cos(c);h.push({x:b,y:A,z:f})}return h}_drawComplexPath(e,t,i,s,r,a,o){if(!e||e.length<2)return;const l=e.slice();t&&Math.hypot(l[l.length-1].x-l[0].x,l[l.length-1].y-l[0].y)>1e-6&&l.push(l[0]);const c=[];let u=0;for(let p=0;p{let g=Math.max(0,Math.min(p,u));for(let x=0;x1e-9?g/E:0,M=l[x],y=l[x+1],T=M.x+(y.x-M.x)*S,I=M.y+(y.y-M.y)*S,L=(M.z||0)+((y.z||0)-(M.z||0))*S,w=Math.atan2(y.y-M.y,y.x-M.x);return{x:T,y:I,z:L,angle:w}}g-=E}const b=l[l.length-1],A=l[l.length-2];return{x:b.x,y:b.y,z:b.z||0,angle:Math.atan2(b.y-A.y,b.x-A.x)}};if(i.patternLength*s<1e-6)return;let f=0,m=0;const _=i.elements;for(;fb){const x=d(b),E=d(A);a(x.x,x.y,E.x,E.y,x.z,r)}f+=g}else if(p.type==="gap"){const g=Math.abs(p.val||.1)*s;f+=g}else if(p.type==="shape"){const g=d(f);this._renderShapeSymbol(p,g,s,r,a)}else if(p.type==="text"){const g=d(f);if(p.text&&o){const b=(p.scale||.2)*s;let A=g.angle+(p.rotation||0)*Math.PI/180;p.isAbsoluteAngle&&(A=(p.rotation||0)*Math.PI/180);let x=Math.atan2(Math.sin(A),Math.cos(A));x>Math.PI/2?x-=Math.PI:x<-Math.PI/2&&(x+=Math.PI),A=x;const E=Math.cos(A),S=Math.sin(A),M=(p.xOffset||0)*s,T=(p.yOffset!=null&&Math.abs(p.yOffset)>1e-4?Math.abs(p.yOffset):.02)*s,I=g.x+(M*E-T*S),L=g.y+(M*S+T*E);o.push({text:p.text,pos:{x:I,y:L,z:g.z},height:Math.max(b,.01),rotation:A,color:r,alignH:1,alignV:2})}}}}_renderShapeSymbol(e,t,i,s,r){const a=(e.shapeName||"").toUpperCase(),o=(e.scale||.1)*i,l=e.isAbsoluteAngle?(e.rotation||0)*Math.PI/180:t.angle+(e.rotation||0)*Math.PI/180,c=(e.xOffset||0)*i,u=(e.yOffset||0)*i,d=Math.cos(t.angle),h=Math.sin(t.angle),f=t.x+(c*d-u*h),m=t.y+(c*h+u*d),_=t.z||0,p=Math.cos(l),g=Math.sin(l),b=(A,x)=>({x:f+(A*p-x*g)*o,y:m+(A*g+x*p)*o});if(a.includes("KSC35")||a.includes("KSC36")||a.includes("KSC19")||a.includes("ARROW")){for(let M=0;M<=12;M++){const y=M/12,T=-.5+y,I=.25*(1-y),L=b(T,I),w=b(T,-I);r(L.x,L.y,w.x,w.y,_,s)}const x=b(.5,0),E=b(-.5,.25),S=b(-.5,-.25);r(x.x,x.y,E.x,E.y,_,s),r(E.x,E.y,S.x,S.y,_,s),r(S.x,S.y,x.x,x.y,_,s)}else if(a.includes("CIRC")||a.includes("KSC11")||a.includes("KSC01")){let x=b(.3,0);for(let E=1;E<=12;E++){const S=E/12*Math.PI*2,M=b(.3*Math.cos(S),.3*Math.sin(S));r(x.x,x.y,M.x,M.y,_,s),x=M}}else if(a.includes("BOX")||a.includes("KSC02")||a.includes("KSC05")){const A=b(-.3,-.3),x=b(.3,-.3),E=b(.3,.3),S=b(-.3,.3);r(A.x,A.y,x.x,x.y,_,s),r(x.x,x.y,E.x,E.y,_,s),r(E.x,E.y,S.x,S.y,_,s),r(S.x,S.y,A.x,A.y,_,s)}else if(a.includes("TRACK1")){const A=b(0,-.4),x=b(0,.4);r(A.x,A.y,x.x,x.y,_,s)}else if(a.includes("BAT")||a.includes("DIAMOND")){const A=b(0,.4),x=b(.4,0),E=b(0,-.4),S=b(-.4,0);r(A.x,A.y,x.x,x.y,_,s),r(x.x,x.y,E.x,E.y,_,s),r(E.x,E.y,S.x,S.y,_,s),r(S.x,S.y,A.x,A.y,_,s)}else{const A=b(.3,0),x=b(-.3,.2),E=b(-.3,-.2);r(A.x,A.y,x.x,x.y,_,s),r(x.x,x.y,E.x,E.y,_,s),r(E.x,E.y,A.x,A.y,_,s)}}_buildLayerMap(e){var t;if(this._layerByHandle.clear(),this._layerByName.clear(),this._layerNameByHandle=new Map,this._layer0Handle=null,!!e)for(const i of e){const s=((t=i.handle)==null?void 0:t.value)??i.handle,r=i.name??i.layerName,a=Math.abs(i.colorIndex??i.color??i.colorNumber??7),o=Ma(a)??yl;s!=null&&this._layerByHandle.set(String(s),o),r&&this._layerByName.set(r,o),s!=null&&r&&this._layerNameByHandle.set(String(s),r),r==="0"&&s!=null&&(this._layer0Handle=String(s))}}_readViewTwist(e){var r;const t=(r=e==null?void 0:e.tables)==null?void 0:r.vports;if(!Array.isArray(t)||!t.length)return 0;const i=t.find(a=>/active/i.test(a.name||""))||t[0],s=i==null?void 0:i.viewTwist;return typeof s=="number"&&isFinite(s)?s:0}_buildLinetypeMap(e){var t,i,s,r;this._ltPatterns=new Map,this._layerLtByName=new Map,this._layerLtByHandle=new Map,this._globalLtscale=((t=e==null?void 0:e.vars)==null?void 0:t.ltscale)>0?e.vars.ltscale:1;for(const a of((i=e==null?void 0:e.tables)==null?void 0:i.lineTypes)??[])a!=null&&a.name&&this._ltPatterns.set(a.name,Array.isArray(a.pattern)?a.pattern:[]);for(const a of((s=e==null?void 0:e.tables)==null?void 0:s.layers)??[]){const o=a.name??a.layerName,l=((r=a.handle)==null?void 0:r.value)??a.handle,c=a.lineType??a.linetype;o&&c&&this._layerLtByName.set(o,c),l!=null&&c&&this._layerLtByHandle.set(String(l),c)}}_resolveDash(e){var l,c;if(!this._ltPatterns||this._ltPatterns.size===0)return null;let t=e.lineType??e.linetype;if(!t||t==="ByLayer"||t==="BYLAYER"||t==="ByBlock"||t==="BYBLOCK"){const u=((l=e.layerHandle)==null?void 0:l.value)??e.layerHandle;t=u!=null&&this._layerLtByHandle.get(String(u))||this._layerLtByName.get(e.layer??e.layerName)||null}if(!t||t==="Continuous"||t==="ByLayer"||t==="ByBlock")return null;const i=this._ltPatterns.get(t);if(!i||i.length===0)return null;const s=((c=e.entityHeader)==null?void 0:c.linetypeScale)>0?e.entityHeader.linetypeScale:1,r=this._globalLtscale*s;let a=0,o=0;for(const u of i){const d=Math.abs(u)*r;u>1e-6?a+=d:u<-1e-6?o+=d:a+=Math.max(d,.01*r)}return a<1e-4||o<1e-4?null:{key:`${a.toFixed(3)}|${o.toFixed(3)}`,dash:a,gap:o}}_resolveBlockColor(e,t){var r,a;const i=((r=e.entityHeader)==null?void 0:r.colorIndex)??e.color??e.colorIndex??e.colorNumber??256;if(i===0)return t;const s=String(((a=e.layerHandle)==null?void 0:a.value)??e.layerHandle??"");return i===256&&this._layer0Handle&&s===this._layer0Handle?t:this._entityColor(e)}_entityColor(e){var r,a;const t=((r=e.entityHeader)==null?void 0:r.colorIndex)??e.color??e.colorIndex??e.colorNumber??256;if(t!=null){const o=Ma(t);if(o!==null)return o}const i=((a=e.layerHandle)==null?void 0:a.value)??e.layerHandle;if(i!=null){const o=this._layerByHandle.get(String(i));if(o!==void 0)return o}const s=e.layer??e.layerName;if(s){const o=this._layerByName.get(s);if(o!==void 0)return o}return yl}_arrowMesh(e,t,i,s){if(!e||i<1e-4)return;const r=i*.166,a=(s>>16&255)/255,o=(s>>8&255)/255,l=(s&255)/255,c=new Ct;c.setAttribute("position",new ft([0,0,0,-i,r,0,-i,-r,0],3)),c.setAttribute("color",new ft([a,o,l,a,o,l,a,o,l],3));const u=new zt(c,new Yn({vertexColors:!0,side:Ht}));u.position.set(e.x,e.y,(e.z||0)+.5),u.rotation.z=t,this._group.add(u)}_defaultArrow(e,t,i,s,r,a){if(!t||s<1e-4)return;const o=(e||"").replace(/^[_*]+/,""),l=Math.cos(i),c=Math.sin(i),u=(d,h)=>({x:t.x+d*l-h*c,y:t.y+d*c+h*l});if(!(o==="none"||o==="small"||o==="integral")){if(o==="dot"||o==="dotsmall"||o==="dotblank"||o==="dotsmallblank"||o==="origin"||o==="origin2"){this._dotMesh(t,s*(o==="dotsmall"?.12:.5),r);return}if(o==="oblique"||o==="archtick"){const d=u(s*.5,s*.5),h=u(-s*.5,-s*.5);a(d.x,d.y,h.x,h.y,(t.z||0)+.5,r);return}if(o==="open"||o==="open30"||o==="open90"){const d=o==="open90"?s:s*.42,h=u(0,0),f=u(-s,d),m=u(-s,-d);a(f.x,f.y,h.x,h.y,(t.z||0)+.5,r),a(m.x,m.y,h.x,h.y,(t.z||0)+.5,r);return}this._arrowMesh(t,i,s,r)}}_dotMesh(e,t,i){if(!e||!(t>1e-5))return;const s=(i>>16&255)/255,r=(i>>8&255)/255,a=(i&255)/255,o=20,l=[],c=[],u=(e.z||0)+.5;for(let h=0;h{a+=l.x,o+=l.y}),a/=r.length,o/=r.length,r.forEach(l=>{t=Math.max(t,Math.hypot(l.x-a,l.y-o))})}}return t}_arcSegs(e,t,i,s,r,a,o){let l=s-i;l<=0&&(l+=Math.PI*2);const c=Math.max(8,Math.ceil(l/(Math.PI*2)*yd));let u=null;for(let d=0;d<=c;d++){const h=i+l*d/c,f=e.x+t*Math.cos(h),m=e.y+t*Math.sin(h);u&&o(u.x,u.y,f,m,r,a),u={x:f,y:m}}}_catmullRom(e,t){const i=e.length,s=t*(i-1),r=Math.min(Math.floor(s),i-2),a=s-r,o=e[Math.max(r-1,0)],l=e[r],c=e[r+1],u=e[Math.min(r+2,i-1)],d=a*a,h=d*a;return{x:.5*(2*l.x+(-o.x+c.x)*a+(2*o.x-5*l.x+4*c.x-u.x)*d+(-o.x+3*l.x-3*c.x+u.x)*h),y:.5*(2*l.y+(-o.y+c.y)*a+(2*o.y-5*l.y+4*c.y-u.y)*d+(-o.y+3*l.y-3*c.y+u.y)*h),z:.5*(2*(l.z||0)+(-(o.z||0)+(c.z||0))*a+(2*(o.z||0)-5*(l.z||0)+4*(c.z||0)-(u.z||0))*d+(-(o.z||0)+3*(l.z||0)-3*(c.z||0)+(u.z||0))*h)}}_ellipseSegs(e,t,i){const s=e.majorAxis??e.smAxis??{x:1,y:0},r=e.center,a=e.ratio??e.axisRatio??1,o=e.startParam??0,l=e.endParam??Math.PI*2,c=(s==null?void 0:s.x)??1,u=(s==null?void 0:s.y)??0,d=Math.sqrt(c*c+u*u),h=d*a,f=Math.atan2(u,c);let m=l-o;m<=0&&(m+=Math.PI*2);let _=null;for(let p=0;p<=vl;p++){const g=o+m*p/vl,b=d*Math.cos(g),A=h*Math.sin(g),x=r.x+b*Math.cos(f)-A*Math.sin(f),E=r.y+b*Math.sin(f)+A*Math.cos(f);_&&i(_.x,_.y,x,E,r.z||0,t),_={x,y:E}}}_polylineSegs(e,t,i,s,r){if(!(!e||e.length<2)){for(let a=0;a1e-12?l:Math.abs(r)>1e-12?r:a,d=Math.abs(c)>1e-12?c:Math.abs(r)>1e-12?r:o;return{sw:Math.abs(u),ew:Math.abs(d)}}_polyHasWidth(e,t,i=1){for(let s=0;s1e-9||a>1e-9)return!0}return!1}_pushWideSeg(e,t,i,s,r){const a=i.x-t.x,o=i.y-t.y,l=Math.hypot(a,o);if(l<1e-12)return;const c=-o/l,u=a/l,d=s*.5,h=r*.5,f={x:t.x+c*d,y:t.y+u*d},m={x:t.x-c*d,y:t.y-u*d},_={x:i.x-c*h,y:i.y-u*h},p={x:i.x+c*h,y:i.y+u*h};e.push(f.x,f.y,0,m.x,m.y,0,_.x,_.y,0),e.push(f.x,f.y,0,_.x,_.y,0,p.x,p.y,0)}_widePolyMesh(e,t,i,s,r,a=1,o=null){if(!e||e.length<2)return;const l=e.length,c=i?l:l-1,u=[];for(let f=0;f0?1:-1,O=I+k*w*T,$=L+k*U*T,F=Math.atan2(m.y-$,m.x-O),Z=Math.max(2,Math.ceil(Math.abs(S)/(Math.PI/16)));let R={x:m.x,y:m.y},re=p;for(let se=1;se<=Z;se++){const ae=se/Z,ge=F+S*se/Z,he={x:O+y*Math.cos(ge),y:$+y*Math.sin(ge)},oe=p+(g-p)*ae;this._pushWideSeg(u,R,he,re,oe),R=he,re=oe}o&&(o(m.x,m.y),o(_.x,_.y))}}if(u.length<9)return;const d=new Ct;d.setAttribute("position",new ft(u,3)),d.computeVertexNormals();const h=new Yn({color:new et(r),side:Ht,depthWrite:!1});if(this._group.add(new zt(d,h)),this._pickCurIdx>=0&&this._pickSegs)for(let f=0;f0?1:-1,T=x+y*S*A,I=E+y*M*A,L=Math.atan2(u.y-I,u.x-T),w=Math.max(2,Math.ceil(Math.abs(p)/(Math.PI/16)));let U=u;for(let k=1;k<=w;k++){const O=L+p*k/w,$=T+b*Math.cos(O),F=I+b*Math.sin(O);r(U.x,U.y,$,F,0,s),U={x:$,y:F}}a&&(a(u.x,u.y),a(d.x,d.y))}}}_solidMesh(e,t){const i=(t>>16&255)/255,s=(t>>8&255)/255,r=(t&255)/255,a=[],o=[],l=(...u)=>{for(const d of u)a.push(d.x,d.y,d.z||0),o.push(i,s,r)};e.length>=4?(l(e[0],e[1],e[3]),l(e[0],e[3],e[2])):l(e[0],e[1],e[2]);const c=new Ct;if(c.setAttribute("position",new ft(a,3)),c.setAttribute("color",new ft(o,3)),this._group.add(new zt(c,new Yn({vertexColors:!0,side:Ht}))),this._pickCurIdx>=0&&e.length>=3){const u=e.length>=4?[e[0],e[1],e[3],e[2]]:e.slice(0,3);this._pickFills.push({metaIdx:this._pickCurIdx,loops:[u]})}}_addTextPick(e,t,i,s=0,r=0){if(this._pickCurIdx<0||!t)return;const a=String(e).split(` +`),l=a.reduce((h,f)=>Math.max(h,f.length),1)*i*.62,c=a.length*i*1.2;let u=t.x;s===2?u=t.x-l:(s===1||s===4)&&(u=t.x-l/2);let d=t.y;r===3?d=t.y-c:r===2&&(d=t.y-c/2),this._pickFills.push({metaIdx:this._pickCurIdx,loops:[[{x:u,y:d},{x:u+l,y:d},{x:u+l,y:d+c},{x:u,y:d+c}]]})}_fillHit(e,t,i){let s=!1;for(const r of e)for(let a=0,o=r.length-1;ai!=d>i&&t<(u-l)*(i-c)/(d-c)+l&&(s=!s)}return s}_pointInAnyLoop(e,t,i){for(const s of e){if(!(s!=null&&s.length))continue;let r=!1;for(let a=0,o=s.length-1;ai!=c.y>i&&t<(c.x-l.x)*(i-l.y)/(c.y-l.y)+l.x&&(r=!r)}if(r)return!0}return!1}_loopArea(e){let t=0;for(let i=0;ic&&(c=p.x),p.y>u&&(u=p.y);const d=Math.hypot(c-o,u-l)||1;if(a>d*1e-4&&a>1e-6)return;let h=0;for(let p=0;p5e3)return;let m=0,_=0;for(const p of e)m+=p.x,_+=p.y;m/=e.length,_/=e.length;for(const p of this._pickFills)if(this._pointInAnyLoop(p.loops,m,_))return;this._hatchFill([{points:e,bulges:t||null,closed:!0}],i)}_pathPoints(e){const t=e.points;if(!(t!=null&&t.length))return null;const i=e.bulges,s=t.length;if(!(i!=null&&i.some(a=>Math.abs(a)>=1e-6)))return t.map(a=>({x:a.x,y:a.y}));const r=[];for(let a=0;a0?1:-1,S=g+E*A*p,M=b+E*x*p,y=Math.atan2(o.y-M,o.x-S),T=Math.max(6,Math.ceil(Math.abs(f)/(Math.PI/16)));for(let I=1;I{var u;return l+(((u=c.points)==null?void 0:u.length)??0)},0)>8e3)return;let s=[];for(const l of e){const c=this._pathPoints(l);c&&c.length>=3&&s.push(c)}if(!s.length)return;const r=l=>{let c=0;for(let u=0;u{var c;return!((c=l.points)!=null&&c.length)})&&s.length>=3||s.length>=5){const l=s.map(r).sort((u,d)=>u-d),c=l[Math.floor(l.length/2)]||0;if(c>0&&(s=s.filter(u=>r(u)<=c*10)),!s.length)return}if(this._pickCurIdx>=0&&s.length&&this._pickFills.push({metaIdx:this._pickCurIdx,loops:s}),s.length>=5||s.some(l=>this._polySelfIntersects(l))||this._hatchHasNestedLoop(s)){this._hatchFillEvenOddCanvas(s,t);return}const o=new Yn({color:new et(t),side:Ht});for(const l of s)try{const c=new df;c.moveTo(l[0].x,l[0].y);for(let u=1;u{let l=0;for(let c=0;c{let l=1/0,c=1/0,u=-1/0,d=-1/0;for(const h of o)h.xu&&(u=h.x),h.y>d&&(d=h.y);return{minX:l,minY:c,maxX:u,maxY:d}},s=(o,l)=>{let c=!1;for(let u=0,d=o.length-1;ul.y!=f.y>l.y&&l.x<(f.x-h.x)*(l.y-h.y)/(f.y-h.y)+h.x&&(c=!c)}return c},r=e.map(t),a=e.map(i);for(let o=0;o=h.maxX&&d.maxY>=h.maxY||s(e[u],{x:l,y:c}))return!0}}return!1}_polySelfIntersects(e){const t=e.length;if(t<4)return!1;const i=(a,o,l)=>(o.x-a.x)*(l.y-a.y)-(o.y-a.y)*(l.x-a.x),s=(a,o,l,c)=>{const u=i(a,o,l),d=i(a,o,c),h=i(l,c,a),f=i(l,c,o);return(u>0&&d<0||u<0&&d>0)&&(h>0&&f<0||h<0&&f>0)},r=Math.min(t,80);for(let a=0;as&&(s=b.x),b.y>r&&(r=b.y);const a=s-t,o=r-i,l=Math.min(a,o);if(!(l>1e-9))return!1;const c=(t+s)/2,u=(i+r)/2,d=.55*l,h=.22*l;let f=0;for(let b=0;b1e-9&&_>g*1.15}_convexHull(e){const t=e.map(a=>({x:a.x,y:a.y})).sort((a,o)=>a.x-o.x||a.y-o.y);if(t.length<=2)return t;const i=(a,o,l)=>(o.x-a.x)*(l.y-a.y)-(o.y-a.y)*(l.x-a.x),s=[];for(const a of t){for(;s.length>=2&&i(s[s.length-2],s[s.length-1],a)<=0;)s.pop();s.push(a)}const r=[];for(let a=t.length-1;a>=0;a--){const o=t[a];for(;r.length>=2&&i(r[r.length-2],r[r.length-1],o)<=0;)r.pop();r.push(o)}return s.pop(),r.pop(),s.concat(r)}_polyCentroid(e){let t=0,i=0;for(const s of e)t+=s.x,i+=s.y;return{x:t/e.length,y:i/e.length}}_pointInPoly(e,t){let i=!1;for(let s=0,r=e.length-1;st.y!=o.y>t.y&&t.x<(o.x-a.x)*(t.y-a.y)/(o.y-a.y)+a.x&&(i=!i)}return i}_hatchFillEvenOddCanvas(e,t){let i=1/0,s=1/0,r=-1/0,a=-1/0;for(const w of e)for(const U of w)U.xr&&(r=U.x),U.y>a&&(a=U.y);const o=r-i,l=a-s;if(!(o>1e-12)||!(l>1e-12))return;const c=2048,u=Math.min(c/o,c/l,64),d=Math.max(2,Math.ceil(o*u)+2),h=Math.max(2,Math.ceil(l*u)+2),f=(d-2)/o,m=(h-2)/l,_=document.createElement("canvas");_.width=d,_.height=h;const p=_.getContext("2d");if(!p)return;p.clearRect(0,0,d,h);const g=w=>({x:1+(w.x-i)*f,y:1+(a-w.y)*m}),b=w=>{if(w.length<3)return;const U=g(w[0]);p.moveTo(U.x,U.y);for(let k=1;kthis._convexHull(w)),S=w=>{if(w.length<3||!E.length)return!1;const U=this._polyCentroid(w);for(const k of E)if(k.length>=3&&this._pointInPoly(k,U))return!0;return!1};if(A.length){p.fillStyle="#ffffff",p.beginPath();for(const U of A)b(U);p.fill("nonzero");const w=x.filter(S);if(w.length){p.globalCompositeOperation="destination-out",p.beginPath();for(const U of w)b(U);p.fill("nonzero"),p.globalCompositeOperation="source-over"}}const M=x.filter(w=>!S(w));if(M.length){p.fillStyle="#ffffff",p.beginPath();for(const w of M)b(w);p.fill("evenodd")}const y=new ma(_);y.colorSpace=ci,y.magFilter=Wt,y.minFilter=Ui,y.generateMipmaps=!0,y.needsUpdate=!0;const T=new Yn({map:y,color:new et(t),transparent:!0,alphaTest:.4,side:Ht,depthWrite:!1}),I=new is(o,l),L=new zt(I,T);L.position.set((i+r)/2,(s+a)/2,0),this._group.add(L)}_multilineSprite(e,t,i,s,r,a,o,l=0){const u="96px 'Malgun Gothic', 'Apple SD Gothic Neo', monospace",d=document.createElement("canvas"),h=d.getContext("2d");h.font=u;let f=1,m=96*.7,_=96*.2;for(const k of e){const O=h.measureText(k||" ");f=Math.max(f,Math.ceil(O.width)),m=Math.max(m,O.actualBoundingBoxAscent||96*.7),_=Math.max(_,O.actualBoundingBoxDescent||96*.2)}const p=Math.ceil(96*.15),g=Math.ceil(m+_+96*.35);d.width=f+p*2,d.height=g*e.length+p*2,h.font=u;const b=r>>16&255,A=r>>8&255,x=r&255;h.fillStyle=`rgb(${b},${A},${x})`,h.textBaseline="alphabetic";let E=p;a===1||a===4?(h.textAlign="center",E=d.width/2):a===2?(h.textAlign="right",E=d.width-p):(h.textAlign="left",E=p);for(let k=0;k0?e.linespacingFactor:1,u=o*(5/3)*c;let d=0;if(t!=null&&t.measureEm)for(const U of l)d=Math.max(d,t.measureEm(U||" "));else for(const U of l)d=Math.max(d,(U||" ").length*.9);let h=Math.max(d*o,o*.5),f=l.length<=1?o:o+(l.length-1)*u;e.rectWidth>0&&(h=Math.max(h,e.rectWidth)),e.rectHeight>0&&(f=Math.max(f,e.rectHeight));const m=e.bgScale>0?e.bgScale:1.5,_=h*m,p=f*m,g=e.alignH??1,b=e.alignV??2;let A=0,x=0;g===0||g===3||g===5?A=h/2:g===2&&(A=-h/2),b===3?x=-f/2:(b===0||b===1)&&(x=f/2);const E=e.rotation||0,S=Math.cos(E),M=Math.sin(E),y=e.pos.x+A*S-x*M,T=e.pos.y+A*M+x*S;let I=16776960;if(s&2)I=((w=(L=this._scene)==null?void 0:L.background)==null?void 0:w.r)<.5?658189:16250611;else if(e.bgColorRgb&&e.bgColorRgb.r!=null)I=(e.bgColorRgb.r&255)<<16|(e.bgColorRgb.g&255)<<8|e.bgColorRgb.b&255;else if(e.bgColorIndex!=null){const U=Ma(e.bgColorIndex);U!=null&&(I=U)}if(r){const U=new is(_,p),k=new Yn({color:new et(I),side:Ht,depthWrite:!1,transparent:!1}),O=new zt(U,k);O.position.set(y,T,.4),O.rotation.z=E,this._group.add(O)}if(a&&!r){const U=_/2,k=p/2,$=[[-U,-k],[U,-k],[U,k],[-U,k],[-U,-k]].map(([F,Z])=>({x:y+F*S-Z*M,y:T+F*M+Z*S}));for(let F=0;F<4;F++){const Z=$[F],R=$[F+1];this._widePolyMesh([Z,R],null,!1,{constantWidth:Math.max(o*.05,.01)},I,1,null)}}}async _drawTexts(e,t){const i=this._textGen,s=e.filter(o=>o.underlay),r=e.filter(o=>!o.underlay),a=[{list:s,order:0},{list:r,order:1}];try{const o=await Or.shared();if(i!==this._textGen)return;for(const{list:l,order:c}of a){if(!l.length)continue;for(const h of l)h.bgFillFlags|0&&this._drawMTextBackground(h,o,t);const u=new uA(o);for(const h of l)u.add(h.text,h.pos,Math.max(h.height,t),h.rotation||0,h.color,h.alignH??0,h.alignV??0);const d=u.build();d&&(d.renderOrder=c,d.material&&(d.material.depthWrite=!1,d.material.transparent=!0),this._group.add(d))}}catch(o){if(console.warn("[Viewer2D] Slug text unavailable, falling back to canvas sprites:",(o==null?void 0:o.message)??o),i!==this._textGen)return;for(const{list:l,order:c}of a)for(const u of l)u.bgFillFlags|0&&this._drawMTextBackground(u,null,t),this._textSprite(u.text,u.pos,Math.max(u.height,t),u.rotation,u.color,u.alignH??0,u.alignV??0,c)}}_textSprite(e,t,i,s,r,a=0,o=0,l=0){const c=String(e).split(` +`);if(c.length>1){this._multilineSprite(c,t,i,s,r,a,o,l);return}const u=e+"\0"+r;let d=(this._texCache??(this._texCache=new Map)).get(u);if(!d){const y="96px 'Malgun Gothic', 'Apple SD Gothic Neo', monospace",T=document.createElement("canvas"),I=T.getContext("2d");I.font=y;const L=I.measureText(e),w=Math.max(1,Math.ceil(L.width)),U=L.actualBoundingBoxAscent||96*.7,k=L.actualBoundingBoxDescent||96*.2,O=Math.ceil(96*.15);T.width=w+O*2,T.height=Math.ceil(U+k)+O*2,I.font=y;const $=r>>16&255,F=r>>8&255,Z=r&255;I.fillStyle=`rgb(${$},${F},${Z})`,I.textBaseline="alphabetic",I.fillText(e,O,O+U),d={texture:new ma(T),w:T.width,h:T.height,asc:U,pad:O},this._texCache.set(u,d)}const{texture:h,asc:f,pad:m}=d,_=i*d.h/f,p=_*(d.w/d.h),g=_/d.h,b=d.h/2;let A=0;a===0||a===3||a===5?A=p/2:a===1||a===4?A=0:a===2&&(A=-p/2);let x=0;a!==4&&(o===0||o===1?x=(m+f-b)*g:o===3&&(x=(m-b)*g));const E=new pc({map:h,transparent:!0,depthTest:!1});s&&(E.rotation=s);const S=new Ou(E);S.scale.set(p,_,1),S.position.set(t.x+A,t.y+x,1),S.renderOrder=l,this._group.add(S)}_insertEntities(e,t,i,s,r,a){var y,T,I,L,w,U,k,O,$,F;const o=a==null?void 0:a.entsByOwner,l=a==null?void 0:a.blockBase,c=(a==null?void 0:a.parentXf)??null,u=(a==null?void 0:a.scale)??1,d=(a==null?void 0:a.rot)??0,h=(a==null?void 0:a.depth)??0,f=t.insertionPoint??{x:0,y:0},m=t.basePoint,_=t.xScale??1,p=t.yScale??1,g=t.rotation??0,b=Math.cos(g),A=Math.sin(g),x=(Z,R)=>{const re=m?Z-m.x:Z,se=m?R-m.y:R;return[f.x+re*_*b-se*p*A,f.y+re*_*A+se*p*b]},E=c?(Z,R)=>c(...x(Z,R)):x,S=u*Math.max(Math.abs(_),Math.abs(p)),M=d+g;for(const Z of e){const R=Z.data||Z,re=(Z.type||Z.typeName||"").toUpperCase();if(re==="ATTDEF")continue;const se=this._resolveBlockColor(Z,i);try{if(re==="LINE"&&R.start&&R.end){const[ae,ge]=E(R.start.x,R.start.y),[he,oe]=E(R.end.x,R.end.y);s(ae,ge,he,oe,0,se)}else if((re==="CIRCLE"||re==="ARC")&&R.center&&R.radius!=null){const[ae,ge]=E(R.center.x,R.center.y),he=R.radius*S,oe=re==="ARC"?(R.startAngle??0)+M:0,G=re==="ARC"?(R.endAngle??Math.PI*2)+M:Math.PI*2;this._arcSegs({x:ae,y:ge,z:0},he,oe,G,0,se,s)}else if(re==="ELLIPSE"&&R.center){const[ae,ge]=E(R.center.x,R.center.y),he=R.majorAxis??R.smAxis??{x:1,y:0},oe=Math.hypot(he.x??0,he.y??0)*S,G=Math.atan2(he.y??0,he.x??1)+M;this._ellipseSegs({center:{x:ae,y:ge,z:0},majorAxis:{x:oe*Math.cos(G),y:oe*Math.sin(G)},ratio:R.ratio??R.axisRatio??1,startParam:R.startParam??0,endParam:R.endParam??Math.PI*2},se,s)}else if((re==="LWPOLYLINE"||re==="POLYLINE")&&(R.points||R.vertices)){const ge=(R.points??R.vertices).map(ne=>{const[j,xe]=E(ne.x,ne.y);return{x:j,y:xe}}),he=R.bulges??null,oe=!!(R.closed||R.flags&1);let G=!1;if(ge.length>=2&&this._pickFills.length){let ne=0,j=0,xe=1/0,be=1/0,ve=-1/0,Be=-1/0;for(const ke of ge)ne+=ke.x,j+=ke.y,ke.xve&&(ve=ke.x),ke.y>Be&&(Be=ke.y);ne/=ge.length,j/=ge.length;const Ve=Math.max(ve-xe,1e-9),Ne=Math.max(Be-be,1e-9);for(const ke of this._pickFills)if(this._pointInAnyLoop(ke.loops,ne,j)){for(const Xe of ke.loops){if(!(Xe!=null&&Xe.length))continue;let tt=1/0,rt=1/0,gt=-1/0,vt=-1/0;for(const Ee of Xe)Ee.xgt&&(gt=Ee.x),Ee.y>vt&&(vt=Ee.y);const ht=Math.max(gt-tt,1e-9),dt=Math.max(vt-rt,1e-9);if(Ve<=ht*1.5&&Ne<=dt*1.5&&ht<=Ve*1.5&&dt<=Ne*1.5){G=!0;break}}if(G)break}}if(!G){const ne=oe?ge.length:ge.length-1;this._polyHasWidth(Z,ne,S)?this._widePolyMesh(ge,he,oe,Z,se,S,null):(he!=null&&he.some(j=>Math.abs(j)>=1e-6)?this._bulgePolySegs(ge,he,oe,se,s):this._polylineSegs(ge,oe,0,se,s),this._fillClosedPolyIfUncovered(ge,he,se))}}else if(re==="POLYLINE_2D"&&o){const ae=(o.get((T=(y=Z.handle)==null?void 0:y.value)==null?void 0:T.toString(16))??[]).filter(ge=>(ge.type||"").toUpperCase().startsWith("VERTEX")&&ge.point);if(ae.length>=2){const ge=ae.map(G=>{const[ne,j]=E(G.point.x,G.point.y);return{x:ne,y:j}}),he=ae.map(G=>G.bulge||0),oe=(R.flags&1)===1;he.some(G=>Math.abs(G)>=1e-6)?this._bulgePolySegs(ge,he,oe,se,s):this._polylineSegs(ge,oe,0,se,s)}}else if(re==="HATCH"){const ae=R.paths??Z.paths;if(ae!=null&&ae.length){const ge=R.solidFill??Z.solidFill??!1,he=ae.map(oe=>({...oe,points:(oe.points??[]).map(G=>{const[ne,j]=E(G.x,G.y);return{x:ne,y:j}})}));if(ge)this._hatchFill(he,se);else for(const oe of he)(((I=oe.points)==null?void 0:I.length)??0)<2||((L=oe.bulges)!=null&&L.some(G=>Math.abs(G)>=1e-6)?this._bulgePolySegs(oe.points,oe.bulges,!0,se,s):this._polylineSegs(oe.points,!0,0,se,s))}}else if(re==="SOLID"){const ae=[R.corner1||R.pt1,R.corner2||R.pt2,R.corner3||R.pt3,R.corner4||R.pt4].filter(Boolean);if(ae.length>=3){const ge=ae.map(he=>{const[oe,G]=E(he.x,he.y);return{x:oe,y:G,z:he.z||0}});this._solidMesh(ge,se)}}else if(re==="INSERT"&&o&&h<8){const ae=((w=Z.blockHeaderHandle)==null?void 0:w.value)??((U=R.blockHeaderHandle)==null?void 0:U.value);if(ae!=null){const ge=ae.toString(16),he=o.get(ge)??[];if(he.length){const oe=Z.insertionPt??R.insertionPt??R.insertionPoint??{x:0,y:0},G=R.scaleX??((k=R.scale)==null?void 0:k.x)??((O=Z.scale)==null?void 0:O.x)??1,ne=R.scaleY??(($=R.scale)==null?void 0:$.y)??((F=Z.scale)==null?void 0:F.y)??1,j=R.rotation??Z.rotation??0;this._insertEntities(he,{insertionPoint:oe,xScale:G,yScale:ne,rotation:j,basePoint:l==null?void 0:l.get(ge)},se,s,r,{entsByOwner:o,blockBase:l,parentXf:E,scale:S,rot:M,depth:h+1})}}}else if((re==="TEXT"||re==="MTEXT"||re==="ATTRIB"||re==="ATTDEF")&&r){if((re==="ATTRIB"||re==="ATTDEF")&&(R.flags??0)&1)continue;const ae=Z.text??R.text??R.textValue??R.defaultValue??"",ge=ks(ae);let he,oe,G=(R.rotationAngle??0)+M;if(re==="MTEXT"){const Ne=Z.attachment??R.attachment??Z.attachmentPoint??R.attachmentPoint??5;he=[1,4,7].includes(Ne)?0:[3,6,9].includes(Ne)?2:1,oe=[1,2,3].includes(Ne)?3:[7,8,9].includes(Ne)?1:2;const ke=Z.xAxisDir??R.xAxisDir;ke&&(G=Math.atan2(ke.y,ke.x)+M)}else he=R.horizAlignment??Z.horizAlignment??0,oe=R.vertAlignment??Z.vertAlignment??0;const ne=re!=="MTEXT"&&(he!==0||oe!==0),j=Z.alignmentPt??R.alignmentPt,xe=Z.insertionPt??R.insertionPt??R.insertionPoint,be=ne?j??xe??{x:0,y:0}:xe??{x:0,y:0},[ve,Be]=E(be.x,be.y),Ve=(R.textHeight??R.height??Z.textHeight??2.5)*S;if(ge){const Ne={text:ge,pos:{x:ve,y:Be},height:Ve,rotation:G,color:se,alignH:he,alignV:oe};re==="MTEXT"&&(Ne.linespacingFactor=Z.linespacingFactor??R.linespacingFactor??1,Ne.rectWidth=(Z.rectWidth??R.rectWidth??0)*S,Ne.rectHeight=(Z.rectHeight??R.rectHeight??0)*S,Ne.bgFillFlags=Z.bgFillFlags??R.bgFillFlags??0,Ne.bgScale=Z.bgScale??R.bgScale??1.5,Ne.bgColorIndex=Z.bgColorIndex??R.bgColorIndex,Ne.bgColorRgb=Z.bgColorRgb??R.bgColorRgb),r.push(Ne)}}}catch{}}}_renderDimFallback(e,t,i,s,r,a,o){const l=e.pt10??t.pt10,c=e.pt13??t.pt13,u=e.pt14??t.pt14,d=e.pt15??t.pt15,h=e.textMidPt??t.textMidPt,f=e.actualMeasurement??t.actualMeasurement??0,m=e.textRot??t.textRot??0,_=e.dimRot??t.dimRot??0,p=e.userText??t.userText??"",g=S=>Math.abs(S)<1?S.toFixed(3):S.toFixed(2),b=(S,M)=>{!S||!M||(r(S.x,S.y,M.x,M.y,0,s),o(S.x,S.y),o(M.x,M.y))},A=(S,M,y,T,I)=>{this._arcSegs({x:S,y:M},y,T,I,0,s,r)},x=(S,M,y)=>this._arrowMesh(S,M,y,s),E=(S,M,y,T)=>{M&&S&&a.push({text:M,pos:S,height:y,rotation:T??0,color:s,alignH:1,alignV:2})};switch(i){case"DIMENSION":case"DIMENSION_LINEAR":case"DIMENSION_ALIGNED":{if(!c||!u||!l)return;let S,M,y,T;if(i==="DIMENSION_ALIGNED"){const L=u.x-c.x,w=u.y-c.y,U=Math.hypot(L,w);if(U<1e-9)return;const k=L/U,O=w/U,$=f/2;S=l.x-k*$,M=l.y-O*$,y=l.x+k*$,T=l.y+O*$}else{const L=Math.abs(Math.sin(_))>.5,w=f/2;S=l.x-(L?0:w),M=l.y-(L?w:0),y=l.x+(L?0:w),T=l.y+(L?w:0)}const I=Math.max(f*.04,1);b({x:S,y:M},{x:y,y:T}),b(c,{x:S,y:M}),b(u,{x:y,y:T}),x({x:S,y:M,z:0},Math.atan2(M-T,S-y),I),x({x:y,y:T,z:0},Math.atan2(T-M,y-S),I),E(h??{x:(S+y)/2,y:(M+T)/2},p||g(f),Math.max(I*1.5,1),m);break}case"DIMENSION_RADIUS":{if(!l||!d)return;const S=Math.max(f*.05,.5);b(l,d),x({x:d.x,y:d.y,z:0},Math.atan2(d.y-l.y,d.x-l.x),S),E(h??{x:(l.x+d.x)/2,y:(l.y+d.y)/2},p||`R${g(f)}`,Math.max(S*2,1));break}case"DIMENSION_DIAMETER":{if(!l||!d)return;const S={x:2*l.x-d.x,y:2*l.y-d.y},M=Math.max(f/2*.05,.5);b(d,S),x({x:d.x,y:d.y,z:0},Math.atan2(d.y-l.y,d.x-l.x),M),x({x:S.x,y:S.y,z:0},Math.atan2(S.y-l.y,S.x-l.x),M),E(h??l,p||`Ø${g(f)}`,Math.max(M*2,1));break}case"DIMENSION_ANG_3PT":case"DIMENSION_ANG_2LN":{if(!l||!c||!u)return;const S=l.x,M=l.y,y=Math.hypot(c.x-S,c.y-M);if(y<1e-9)return;let T=Math.atan2(c.y-M,c.x-S),I=Math.atan2(u.y-M,u.x-S),L=I-T;for(;L<0;)L+=Math.PI*2;L>Math.PI&&([T,I]=[I,T],L=Math.PI*2-L),A(S,M,y,T,T+L);const w=Math.max(y*.05,.5);x({x:S+Math.cos(T)*y,y:M+Math.sin(T)*y,z:0},T-Math.PI/2,w),x({x:S+Math.cos(T+L)*y,y:M+Math.sin(T+L)*y,z:0},T+L+Math.PI/2,w);const U=T+L/2;E(h??{x:S+Math.cos(U)*y*1.2,y:M+Math.sin(U)*y*1.2},p||`${(f*180/Math.PI).toFixed(1)}°`,Math.max(y*.1,1));break}case"DIMENSION_ORDINATE":{if(!l||!c)return;b(l,c),E(h??c,p||((f==null?void 0:f.toFixed(2))??""),2.5);break}}}_onClick(e){var f;if(this._downXY){const m=e.clientX-this._downXY[0],_=e.clientY-this._downXY[1];if(Math.hypot(m,_)>5)return}const t=this._camera,i=this._renderer.domElement.getBoundingClientRect(),s=this._screenToWcs(e.clientX,e.clientY);if(!s)return;const r=s.x,a=s.y;if(this._measureActive){this._doMeasure2D(r,a);return}const o=yA*(t.right-t.left)/(i.width*(t.zoom||1));let l=-1,c=o;const u=this._pickSegs,d=this._pickSegMeta;for(let m=0,_=0;m=0?this._entityMeta[l]:null;this._highlight(h),(f=this._onSelectCb)==null||f.call(this,h?h.entity:null)}_segDist(e,t,i,s,r,a){const o=r-i,l=a-s,c=o*o+l*l;if(!c)return Math.hypot(e-i,t-s);const u=Math.max(0,Math.min(1,((e-i)*o+(t-s)*l)/c));return Math.hypot(e-(i+u*o),t-(s+u*l))}startMeasure(e){this.stopMeasure(),this._measureCb=e,this._measureActive=!0}stopMeasure(){var e,t;this._measureActive=!1,this._measureCb=null,this._measurePtA=null;for(const i of this._measureMarkers)this._group.remove(i),(e=i.geometry)==null||e.dispose(),(t=i.material)==null||t.dispose();this._measureMarkers=[]}_doMeasure2D(e,t){var i,s;if(this._measurePtA){const r=this._measurePtA,a=Math.hypot(e-r.x,t-r.y),o=this._mkMeasureMarker(e,t),l=this._mkMeasureLine(r.x,r.y,e,t);this._measureMarkers.push(o,l),this._group.add(o,l),(s=this._measureCb)==null||s.call(this,{phase:"done",ax:r.x,ay:r.y,az:0,bx:e,by:t,bz:0,d:a}),this._measurePtA=null}else{this._measurePtA={x:e,y:t};const r=this._mkMeasureMarker(e,t);this._measureMarkers.push(r),this._group.add(r),(i=this._measureCb)==null||i.call(this,{phase:"a",ax:e,ay:t,az:0,bx:e,by:t,bz:0,d:0})}}_mkMeasureMarker(e,t){const i=this._camera,s=this._renderer.domElement.getBoundingClientRect(),r=(i.right-i.left)/(s.width*(i.zoom||1))*8,a=[new H(e-r,t,0),new H(e+r,t,0),new H(e,t-r,0),new H(e,t+r,0)],o=new Ct().setFromPoints(a);o.setIndex([0,1,2,3]);const l=new Fs({color:15085616,depthTest:!1}),c=new pa(o,l);return c.renderOrder=100,c}_mkMeasureLine(e,t,i,s){const r=new Ct().setFromPoints([new H(e,t,0),new H(i,s,0)]),a=new Fs({color:15085616,depthTest:!1}),o=new rf(r,a);return o.renderOrder=100,o}_highlight(e){const t=this._lineColorAttr,i=this._origColors;if(this._selMeta&&t&&i){const s=this._selMeta;for(let r=s.colStart;re.colStart){const s=this._selColor;for(let r=e.colStart;r>1:0;if(i<32)return t.clone();const s=new Float64Array(i),r=new Float64Array(i);let a=0;for(let b=0;b+1d)||!(m>f))return t.clone();const _=Math.max((h-d)*.02,1),p=Math.max((m-f)*.02,1),g=new Fi(new H(d-_,f-p,0),new H(h+_,m+p,0));return g.min.max(t.min),g.max.min(t.max),g}_fit(e){if(!e||e.isEmpty())return;const t=e.getCenter(new H),i=e.getSize(new H),s=this._container.clientWidth||800,r=this._container.clientHeight||600,a=s/Math.max(r,1),o=1.12,l=Math.max(i.x,1e-9),c=Math.max(i.y,1e-9),u=l/c;let d,h;u>a*8?(h=c*o,d=h*a):ua?h=d/a:d=h*a),this._camera.zoom=1,this._camera.left=-d/2,this._camera.right=d/2,this._camera.top=h/2,this._camera.bottom=-h/2;const f=Math.max(d,h,1e3);this._camera.near=-f,this._camera.far=f,this._camera.position.set(t.x,t.y,100);const m=-(this._viewTwist||0);this._camera.up.set(-Math.sin(m),Math.cos(m),0),this._controls.target.set(t.x,t.y,0),this._camera.lookAt(this._controls.target),this._camera.updateProjectionMatrix(),this._camera.updateMatrixWorld(!0),this._controls.update()}_clear(){var e,t,i;for(let s=this._group.children.length-1;s>=0;s--){const r=this._group.children[s];(e=r.geometry)==null||e.dispose(),r.material&&((t=r.material.map)==null||t.dispose(),r.material.dispose()),this._group.remove(r)}(i=this._texCache)==null||i.clear(),this._textGen++,this._contentBox=null}_onResize(){const e=this._container.clientWidth,t=this._container.clientHeight;if(!e||!t)return;this._renderer.setSize(e,t);const i=(this._camera.right-this._camera.left)/2,s=i/(e/t);this._camera.left=-i,this._camera.right=i,this._camera.top=s,this._camera.bottom=-s,this._camera.updateProjectionMatrix()}_animate(){requestAnimationFrame(()=>this._animate()),this._controls.update(),this._renderer.render(this._scene,this._camera)}}const SA="modulepreload",bA=function(n){return"/"+n},vd={},MA=function(e,t,i){let s=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),o=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));s=Promise.allSettled(t.map(l=>{if(l=bA(l),l in vd)return;vd[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const d=document.createElement("link");if(d.rel=c?"stylesheet":SA,c||(d.as="script"),d.crossOrigin="",d.href=l,o&&d.setAttribute("nonce",o),document.head.appendChild(d),c)return new Promise((h,f)=>{d.addEventListener("load",h),d.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${l}`)))})}))}function r(a){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=a,window.dispatchEvent(o),!o.defaultPrevented)throw a}return s.then(a=>{for(const o of a||[])o.status==="rejected"&&r(o.reason);return e().catch(r)})},Sd=/[\uAC00-\uD7A3]/,bd=/[\u1100-\u11FF\u3130-\u318F]/,AA=["cp949","windows-949","euc-kr"];let mr;function EA(){if(mr!==void 0)return mr;for(const n of AA)try{return mr=new TextDecoder(n),mr}catch{}return mr=null,null}function Md(n){if(!n||Sd.test(n)||bd.test(n))return n;let e=!1;const t=new Uint8Array(n.length);for(let r=0;r255)return n;a>127&&(e=!0),t[r]=a}if(!e)return n;const i=EA();if(!i)return n;let s;try{s=i.decode(t)}catch{return n}return(Sd.test(s)||bd.test(s))&&!s.includes("�")?s:n}function TA(n){if(n==null||typeof n!="object")return n;const e=new WeakSet,t=i=>{if(i==null||typeof i!="object"||e.has(i))return;if(e.add(i),Array.isArray(i)){for(let r=0;r{const{initAcadrustParser:i,parseDwgAcadrust:s}=await import("./acadrustParser-BLUkSD4E.js");return{initAcadrustParser:i,parseDwgAcadrust:s}},[]);return await e(),TA(t(n))}class CA{constructor(e){this._pointer=0,this._eof=!1,this._data=e}next(){if(!this.hasNext())throw this._eof?new Error("Cannot call 'next' after EOF group has been read"):new Error("Unexpected end of input: EOF group not read before end of file. Ended on code "+this._data[this._pointer]);const e={code:parseInt(this._data[this._pointer])};return this._pointer++,e.value=Ed(e.code,this._data[this._pointer].trim()),this._pointer++,e.code===0&&e.value==="EOF"&&(this._eof=!0),this.lastReadGroup=e,e}peek(){if(!this.hasNext())throw this._eof?new Error("Cannot call 'next' after EOF group has been read"):new Error("Unexpected end of input: EOF group not read before end of file. Ended on code "+this._data[this._pointer]);const e={code:parseInt(this._data[this._pointer])};return e.value=Ed(e.code,this._data[this._pointer+1].trim()),e}rewind(e=1){this._pointer=this._pointer-e*2}hasNext(){return!(this._eof||this._pointer>this._data.length-2)}isEOF(){return this._eof}}function Ed(n,e){return n<=9?e:n>=10&&n<=59?parseFloat(e):n>=60&&n<=99?parseInt(e):n>=100&&n<=109?e:n>=110&&n<=149?parseFloat(e):n>=160&&n<=179?parseInt(e):n>=210&&n<=239?parseFloat(e):n>=270&&n<=289?parseInt(e):n>=290&&n<=299?wA(e):n>=300&&n<=369?e:n>=370&&n<=389?parseInt(e):n>=390&&n<=399?e:n>=400&&n<=409?parseInt(e):n>=410&&n<=419?e:n>=420&&n<=429?parseInt(e):n>=430&&n<=439?e:n>=440&&n<=459?parseInt(e):n>=460&&n<=469?parseFloat(e):n>=470&&n<=481||n===999||n>=1e3&&n<=1009?e:n>=1010&&n<=1059?parseFloat(e):n>=1060&&n<=1071?parseInt(e):(console.log("WARNING: Group code does not have a defined type: %j",{code:n,value:e}),e)}function wA(n){if(n==="0")return!1;if(n==="1")return!0;throw TypeError("String '"+n+"' cannot be cast to Boolean type")}const Fp=[0,16711680,16776960,65280,65535,255,16711935,16777215,8421504,12632256,16711680,16744319,13369344,13395558,10027008,10046540,8323072,8339263,4980736,4990502,16727808,16752511,13382400,13401958,10036736,10051404,8331008,8343359,4985600,4992806,16744192,16760703,13395456,13408614,10046464,10056268,8339200,8347455,4990464,4995366,16760576,16768895,13408512,13415014,10056192,10061132,8347392,8351551,4995328,4997670,16776960,16777087,13421568,13421670,10000384,10000460,8355584,8355647,5000192,5000230,12582656,14679935,10079232,11717734,7510016,8755276,6258432,7307071,3755008,4344870,8388352,12582783,6736896,10079334,5019648,7510092,4161280,6258495,2509824,3755046,4194048,10485631,3394560,8375398,2529280,6264908,2064128,5209919,1264640,3099686,65280,8388479,52224,6736998,38912,5019724,32512,4161343,19456,2509862,65343,8388511,52275,6737023,38950,5019743,32543,4161359,19475,2509871,65407,8388543,52326,6737049,38988,5019762,32575,4161375,19494,2509881,65471,8388575,52377,6737074,39026,5019781,32607,4161391,19513,2509890,65535,8388607,52428,6737100,39064,5019800,32639,4161407,19532,2509900,49151,8380415,39372,6730444,29336,5014936,24447,4157311,14668,2507340,32767,8372223,26316,6724044,19608,5010072,16255,4153215,9804,2505036,16383,8364031,13260,6717388,9880,5005208,8063,4149119,4940,2502476,255,8355839,204,6710988,152,5000344,127,4145023,76,2500172,4129023,10452991,3342540,8349388,2490520,6245528,2031743,5193599,1245260,3089996,8323327,12550143,6684876,10053324,4980888,7490712,4128895,6242175,2490444,3745356,12517631,14647295,10027212,11691724,7471256,8735896,6226047,7290751,3735628,4335180,16711935,16744447,13369548,13395660,9961624,9981080,8323199,8339327,4980812,4990540,16711871,16744415,13369497,13395634,9961586,9981061,8323167,8339311,4980793,4990530,16711807,16744383,13369446,13395609,9961548,9981042,8323135,8339295,4980774,4990521,16711743,16744351,13369395,13395583,9961510,9981023,8323103,8339279,4980755,4990511,3355443,5987163,8684676,11382189,14079702,16777215];function RA(n){return Fp[n]}function st(n){const e={};n.rewind();let t=n.next(),i=t.code;if(e.x=t.value,i+=10,t=n.next(),t.code!=i)throw new Error("Expected code for point value to be "+i+" but got "+t.code+".");return e.y=t.value,i+=10,t=n.next(),t.code!=i?(n.rewind(),e):(e.z=t.value,e)}function Xt(n,e,t){switch(e.code){case 0:n.type=e.value;break;case 5:n.handle=e.value;break;case 6:n.lineType=e.value;break;case 8:n.layer=e.value;break;case 48:n.lineTypeScale=e.value;break;case 60:n.visible=e.value===0;break;case 62:n.colorIndex=e.value,n.color=RA(Math.abs(e.value));break;case 67:n.inPaperSpace=e.value!==0;break;case 100:break;case 101:for(;e.code!=0;)e=t.next();t.rewind();break;case 330:n.ownerHandle=e.value;break;case 347:n.materialObjectHandle=e.value;break;case 370:n.lineweight=e.value;break;case 420:n.color=e.value;break;case 1e3:n.extendedData=n.extendedData||{},n.extendedData.customStrings=n.extendedData.customStrings||[],n.extendedData.customStrings.push(e.value);break;case 1001:n.extendedData=n.extendedData||{},n.extendedData.applicationName=e.value;break;default:return!1}return!0}class DA{constructor(){this.ForEntityName="3DFACE"}parseEntity(e,t){const i={type:t.value,vertices:[]};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 70:i.shape=(t.value&1)===1,i.hasContinuousLinetypePattern=(t.value&128)===128;break;case 10:i.vertices=LA(e,t),t=e.lastReadGroup;break;default:Xt(i,t,e);break}t=e.next()}return i}}function LA(n,e){var t=[],i=!1,s=!1,r=4;for(let o=0;o<=r;o++){for(var a={};!n.isEOF()&&!(e.code===0||s);){switch(e.code){case 10:case 11:case 12:case 13:if(i){s=!0;continue}a.x=e.value,i=!0;break;case 20:case 21:case 22:case 23:a.y=e.value;break;case 30:case 31:case 32:case 33:a.z=e.value;break;default:return t}e=n.next()}t.push(a),i=!1,s=!1}return n.rewind(),t}class IA{constructor(){this.ForEntityName="ARC"}parseEntity(e,t){const i={type:t.value};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 10:i.center=st(e);break;case 40:i.radius=t.value;break;case 50:i.startAngle=Math.PI/180*t.value;break;case 51:i.endAngle=Math.PI/180*t.value,i.angleLength=i.endAngle-i.startAngle;break;case 210:i.extrusionDirectionX=t.value;break;case 220:i.extrusionDirectionY=t.value;break;case 230:i.extrusionDirectionZ=t.value;break;default:Xt(i,t,e);break}t=e.next()}return i}}class PA{constructor(){this.ForEntityName="ATTDEF"}parseEntity(e,t){var i={type:t.value,scale:1,textStyle:"STANDARD"};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 1:i.text=t.value;break;case 2:i.tag=t.value;break;case 3:i.prompt=t.value;break;case 7:i.textStyle=t.value;break;case 10:i.startPoint=st(e);break;case 11:i.endPoint=st(e);break;case 39:i.thickness=t.value;break;case 40:i.textHeight=t.value;break;case 41:i.scale=t.value;break;case 50:i.rotation=t.value;break;case 51:i.obliqueAngle=t.value;break;case 70:i.invisible=!!(t.value&1),i.constant=!!(t.value&2),i.verificationRequired=!!(t.value&4),i.preset=!!(t.value&8);break;case 71:i.backwards=!!(t.value&2),i.mirrored=!!(t.value&4);break;case 72:i.horizontalJustification=t.value;break;case 73:i.fieldLength=t.value;break;case 74:i.verticalJustification=t.value;break;case 100:break;case 210:i.extrusionDirectionX=t.value;break;case 220:i.extrusionDirectionY=t.value;break;case 230:i.extrusionDirectionZ=t.value;break;default:Xt(i,t,e);break}t=e.next()}return i}}class OA{constructor(){this.ForEntityName="CIRCLE"}parseEntity(e,t){const i={type:t.value};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 10:i.center=st(e);break;case 40:i.radius=t.value;break;case 50:i.startAngle=Math.PI/180*t.value;break;case 51:const s=Math.PI/180*t.value;s=0&&w<=g.levels.SILENT)return w;throw new TypeError("log.setLevel() called with invalid level: "+L)}g.name=_,g.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},g.methodFactory=p||h,g.getLevel=function(){return x??A??b},g.setLevel=function(L,w){return x=T(L),w!==!1&&S(x),u.call(g)},g.setDefaultLevel=function(L){A=T(L),M()||g.setLevel(L,!1)},g.resetLevel=function(){x=null,y(),u.call(g)},g.enableAll=function(L){g.setLevel(g.levels.TRACE,L)},g.disableAll=function(L){g.setLevel(g.levels.SILENT,L)},g.rebuild=function(){if(a!==g&&(b=T(a.getLevel())),u.call(g),a===g)for(var L in r)r[L].rebuild()},b=T(a?a.getLevel():"WARN");var I=M();I!=null&&(x=T(I)),u.call(g)}a=new f,a.getLogger=function(p){if(typeof p!="symbol"&&typeof p!="string"||p==="")throw new TypeError("You must supply a name when creating a logger.");var g=r[p];return g||(g=r[p]=new f(p,a.methodFactory)),g};var m=typeof window!==t?window.log:void 0;return a.noConflict=function(){return typeof window!==t&&window.log===a&&(window.log=m),a},a.getLoggers=function(){return r},a.default=a,a})})(Bp);var jA=Bp.exports;const nt=JA(jA);nt.setLevel("error");function QA(n){n.registerEntityHandler(DA),n.registerEntityHandler(IA),n.registerEntityHandler(PA),n.registerEntityHandler(OA),n.registerEntityHandler(UA),n.registerEntityHandler(NA),n.registerEntityHandler(kA),n.registerEntityHandler(FA),n.registerEntityHandler(BA),n.registerEntityHandler(zA),n.registerEntityHandler(VA),n.registerEntityHandler(WA),n.registerEntityHandler(KA),n.registerEntityHandler(qA),n.registerEntityHandler(ZA)}class eE{constructor(){this._entityHandlers={},QA(this)}parse(e){return typeof e=="string"?this._parse(e):(console.error("Cannot read dxf source of type `"+typeof e),null)}registerEntityHandler(e){const t=new e;this._entityHandlers[t.ForEntityName]=t}parseSync(e){return this.parse(e)}parseStream(e){let t="";const i=this;return new Promise((s,r)=>{e.on("data",a=>{t+=a}),e.on("end",()=>{try{s(i._parse(t))}catch(a){r(a)}}),e.on("error",a=>{r(a)})})}_parse(e){const t={};let i=0;const s=e.split(/\r\n|\r|\n/g),r=new CA(s);if(!r.hasNext())throw Error("Empty file");const a=this;let o;function l(){for(o=r.next();!r.isEOF();)if(o.code===0&&o.value==="SECTION"){if(o=r.next(),o.code!==2){console.error("Unexpected code %s after 0:SECTION",Hp(o)),o=r.next();continue}o.value==="HEADER"?(nt.debug("> HEADER"),t.header=c(),nt.debug("<")):o.value==="BLOCKS"?(nt.debug("> BLOCKS"),t.blocks=u(),nt.debug("<")):o.value==="ENTITIES"?(nt.debug("> ENTITIES"),t.entities=A(!1),nt.debug("<")):o.value==="TABLES"?(nt.debug("> TABLES"),t.tables=h(),nt.debug("<")):o.value==="EOF"?nt.debug("EOF"):nt.warn("Skipping section '%s'",o.value)}else o=r.next()}function c(){let S=null,M=null;const y={};for(o=r.next();;){if(Xn(o,0,"ENDSEC")){S&&(y[S]=M);break}else o.code===9?(S&&(y[S]=M),S=o.value):o.code===10?M={x:o.value}:o.code===20?M.y=o.value:o.code===30?M.z=o.value:M=o.value;o=r.next()}return o=r.next(),y}function u(){const S={};for(o=r.next();o.value!=="EOF"&&!Xn(o,0,"ENDSEC");)if(Xn(o,0,"BLOCK")){nt.debug("block {");const M=d();nt.debug("}"),E(M),M.name?S[M.name]=M:nt.error('block with handle "'+M.handle+'" is missing a name.')}else Ji(o),o=r.next();return S}function d(){const S={};for(o=r.next();o.value!=="EOF";){switch(o.code){case 1:S.xrefPath=o.value,o=r.next();break;case 2:S.name=o.value,o=r.next();break;case 3:S.name2=o.value,o=r.next();break;case 5:S.handle=o.value,o=r.next();break;case 8:S.layer=o.value,o=r.next();break;case 10:S.position=x(o),o=r.next();break;case 67:S.paperSpace=!!(o.value&&o.value==1),o=r.next();break;case 70:o.value!=0&&(S.type=o.value),o=r.next();break;case 100:o=r.next();break;case 330:S.ownerHandle=o.value,o=r.next();break;case 0:if(o.value=="ENDBLK")break;S.entities=A(!0);break;default:Ji(o),o=r.next()}if(Xn(o,0,"ENDBLK")){o=r.next();break}}return S}function h(){const S={};for(o=r.next();o.value!=="EOF"&&!Xn(o,0,"ENDSEC");)Xn(o,0,"TABLE")?(o=r.next(),b[o.value]?(nt.debug(o.value+" Table {"),S[b[o.value].tableName]=m(o),nt.debug("}")):nt.debug("Unhandled Table "+o.value)):o=r.next();return o=r.next(),S}const f="ENDTAB";function m(S){const M=b[S.value],y={};let T=0;for(o=r.next();!Xn(o,0,f);)switch(o.code){case 5:y.handle=o.value,o=r.next();break;case 330:y.ownerHandle=o.value,o=r.next();break;case 100:o.value==="AcDbSymbolTable"||Ji(o),o=r.next();break;case 70:T=o.value,o=r.next();break;case 0:o.value===M.dxfSymbolName?y[M.tableRecordsProperty]=M.parseTableRecords():(Ji(o),o=r.next());break;default:Ji(o),o=r.next()}const I=y[M.tableRecordsProperty];if(I){let L=(()=>{if(I.constructor===Array)return I.length;if(typeof I=="object")return Object.keys(I).length})();T!==L&&nt.warn("Parsed "+L+" "+M.dxfSymbolName+"'s but expected "+T)}return o=r.next(),y}function _(){const S=[];let M={};for(nt.debug("ViewPort {"),o=r.next();!Xn(o,0,f);)switch(o.code){case 2:M.name=o.value,o=r.next();break;case 10:M.lowerLeftCorner=x(o),o=r.next();break;case 11:M.upperRightCorner=x(o),o=r.next();break;case 12:M.center=x(o),o=r.next();break;case 13:M.snapBasePoint=x(o),o=r.next();break;case 14:M.snapSpacing=x(o),o=r.next();break;case 15:M.gridSpacing=x(o),o=r.next();break;case 16:M.viewDirectionFromTarget=x(o),o=r.next();break;case 17:M.viewTarget=x(o),o=r.next();break;case 42:M.lensLength=o.value,o=r.next();break;case 43:M.frontClippingPlane=o.value,o=r.next();break;case 44:M.backClippingPlane=o.value,o=r.next();break;case 45:M.viewHeight=o.value,o=r.next();break;case 50:M.snapRotationAngle=o.value,o=r.next();break;case 51:M.viewTwistAngle=o.value,o=r.next();break;case 79:M.orthographicType=o.value,o=r.next();break;case 110:M.ucsOrigin=x(o),o=r.next();break;case 111:M.ucsXAxis=x(o),o=r.next();break;case 112:M.ucsYAxis=x(o),o=r.next();break;case 110:M.ucsOrigin=x(o),o=r.next();break;case 281:M.renderMode=o.value,o=r.next();break;case 281:M.defaultLightingType=o.value,o=r.next();break;case 292:M.defaultLightingOn=o.value,o=r.next();break;case 330:M.ownerHandle=o.value,o=r.next();break;case 63:case 421:case 431:M.ambientColor=o.value,o=r.next();break;case 0:o.value==="VPORT"&&(nt.debug("}"),S.push(M),nt.debug("ViewPort {"),M={},o=r.next());break;default:Ji(o),o=r.next();break}return nt.debug("}"),S.push(M),S}function p(){const S={};let M={},y=0,T;for(nt.debug("LType {"),o=r.next();!Xn(o,0,"ENDTAB");)switch(o.code){case 2:M.name=o.value,T=o.value,o=r.next();break;case 3:M.description=o.value,o=r.next();break;case 73:y=o.value,y>0&&(M.pattern=[]),o=r.next();break;case 40:M.patternLength=o.value,o=r.next();break;case 49:M.pattern.push(o.value),o=r.next();break;case 0:nt.debug("}"),y>0&&y!==M.pattern.length&&nt.warn("lengths do not match on LTYPE pattern"),S[T]=M,M={},nt.debug("LType {"),o=r.next();break;default:o=r.next()}return nt.debug("}"),S[T]=M,S}function g(){const S={};let M={},y;for(nt.debug("Layer {"),o=r.next();!Xn(o,0,"ENDTAB");)switch(o.code){case 2:M.name=o.value,y=o.value,o=r.next();break;case 62:M.visible=o.value>=0,M.colorIndex=Math.abs(o.value),M.color=tE(M.colorIndex),o=r.next();break;case 70:M.frozen=(o.value&1)!=0||(o.value&2)!=0,o=r.next();break;case 0:o.value==="LAYER"&&(nt.debug("}"),S[y]=M,nt.debug("Layer {"),M={},y=void 0,o=r.next());break;default:Ji(o),o=r.next();break}return nt.debug("}"),S[y]=M,S}const b={VPORT:{tableRecordsProperty:"viewPorts",tableName:"viewPort",dxfSymbolName:"VPORT",parseTableRecords:_},LTYPE:{tableRecordsProperty:"lineTypes",tableName:"lineType",dxfSymbolName:"LTYPE",parseTableRecords:p},LAYER:{tableRecordsProperty:"layers",tableName:"layer",dxfSymbolName:"LAYER",parseTableRecords:g}};function A(S){const M=[],y=S?"ENDBLK":"ENDSEC";for(S||(o=r.next());;)if(o.code===0){if(o.value===y)break;const T=a._entityHandlers[o.value];if(T!=null){nt.debug(o.value+" {");const I=T.parseEntity(r,o);o=r.lastReadGroup,nt.debug("}"),E(I),M.push(I)}else{nt.warn("Unhandled entity "+o.value),o=r.next();continue}}else o=r.next();return y=="ENDSEC"&&(o=r.next()),M}function x(S){const M={};let y=S.code;if(M.x=S.value,y+=10,S=r.next(),S.code!=y)throw new Error("Expected code for point value to be "+y+" but got "+S.code+".");return M.y=S.value,y+=10,S=r.next(),S.code!=y?(r.rewind(),M):(M.z=S.value,M)}function E(S){if(!S)throw new TypeError("entity cannot be undefined or null");S.handle||(S.handle=i++)}return l(),t}}function Xn(n,e,t){return n.code===e&&n.value===t}function Ji(n){nt.debug("unhandled group "+Hp(n))}function Hp(n){return n.code+":"+n.value}function tE(n){return Fp[n]}const La=Math.PI/180,nE=48;function iE(n,e,t,i,s,r,a){let o=s-i;if(r)for(;o<=0;)o+=Math.PI*2;else for(;o>=0;)o-=Math.PI*2;const l=Math.max(2,Math.ceil(Math.abs(o)/(Math.PI*2)*nE));for(let c=0;c<=l;c++){const u=i+o*c/l;a.push({x:n+t*Math.cos(u),y:e+t*Math.sin(u)})}}class sE{constructor(){this.ForEntityName="HATCH"}parseEntity(e,t){const i={type:t.value,paths:[],solidFill:!1};for(t=e.next();!e.isEOF()&&t.code!==0;){switch(t.code){case 70:i.solidFill=t.value!==0;break;case 2:i.patternName=t.value;break;case 8:i.layer=t.value;break;case 62:i.colorIndex=t.value;break;case 91:{const s=t.value;let r=e.next();for(let a=0;a=2&&t.paths.push(a),o}_readEdge(e,t,i,s){if(i===1){let r=0,a=0,o=0,l=0;s.code===10&&(r=s.value,s=e.next()),s.code===20&&(a=s.value,s=e.next()),s.code===11&&(o=s.value,s=e.next()),s.code===21&&(l=s.value,s=e.next()),t.points.push({x:r,y:a}),t.points.push({x:o,y:l})}else if(i===2){let r=0,a=0,o=0,l=0,c=0,u=1;s.code===10&&(r=s.value,s=e.next()),s.code===20&&(a=s.value,s=e.next()),s.code===40&&(o=s.value,s=e.next()),s.code===50&&(l=s.value*La,s=e.next()),s.code===51&&(c=s.value*La,s=e.next()),s.code===73&&(u=s.value,s=e.next()),iE(r,a,o,l,c,u!==0,t.points)}else if(i===3){let r=0,a=0,o=1,l=0,c=1,u=0,d=Math.PI*2,h=1;s.code===10&&(r=s.value,s=e.next()),s.code===20&&(a=s.value,s=e.next()),s.code===11&&(o=s.value,s=e.next()),s.code===21&&(l=s.value,s=e.next()),s.code===40&&(c=s.value,s=e.next()),s.code===50&&(u=s.value*La,s=e.next()),s.code===51&&(d=s.value*La,s=e.next()),s.code===73&&(h=s.value,s=e.next());const f=Math.hypot(o,l),m=f*c,_=Math.atan2(l,o);let p=d-u;if(h!==0)for(;p<=0;)p+=Math.PI*2;else for(;p>=0;)p-=Math.PI*2;const g=Math.max(4,Math.ceil(Math.abs(p)/(Math.PI*2)*72));for(let b=0;b<=g;b++){const A=u+p*b/g,x=f*Math.cos(A),E=m*Math.sin(A);t.points.push({x:r+x*Math.cos(_)-E*Math.sin(_),y:a+x*Math.sin(_)+E*Math.cos(_)})}}else if(i===4){let r=0,a=0;const o=()=>{const l=s.value|0;return s=e.next(),l};for(;!e.isEOF();)if(s.code===95)r=o();else if(s.code===96)a=o();else if(s.code===94||s.code===73||s.code===74)s=e.next();else break;for(let l=0;ln&&{x:n.x,y:n.y,z:n.z||0};function Td(n,e){var s;const t={...n};switch(delete t.color,(n.type||"").toUpperCase()){case"LINE":((s=n.vertices)==null?void 0:s.length)>=2&&(t.start=Gt(n.vertices[0]),t.end=Gt(n.vertices[1]));break;case"POLYLINE":case"LWPOLYLINE":t.type="LWPOLYLINE",t.points=(n.vertices||[]).map(Gt),t.bulges=(n.vertices||[]).map(r=>r.bulge||0),t.closed=!!n.shape||((n.flags||0)&1)===1;break;case"ARC":case"CIRCLE":t.center=Gt(n.center);break;case"ELLIPSE":t.center=Gt(n.center),t.majorAxis=Gt(n.majorAxisEndPoint),t.ratio=n.axisRatio,t.startParam=n.startAngle,t.endParam=n.endAngle;break;case"POINT":t.position=Gt(n.position);break;case"SOLID":case"3DFACE":{const r=n.points||[];r[0]&&(t.corner1=Gt(r[0])),r[1]&&(t.corner2=Gt(r[1])),r[2]&&(t.corner3=Gt(r[2])),r[3]&&(t.corner4=Gt(r[3])),t.type="SOLID";break}case"TEXT":case"ATTRIB":case"ATTDEF":t.insertionPoint=Gt(n.startPoint||n.position),t.alignmentPt=Gt(n.endPoint),t.rotationAngle=(n.rotation||0)*Ia,t.horizAlignment=n.halign||0,t.vertAlignment=n.valign||0,t.textHeight=n.textHeight??n.height;break;case"MTEXT":t.insertionPoint=Gt(n.position),t.textHeight=n.height??n.textHeight,n.directionVector?t.xAxisDir=Gt(n.directionVector):n.rotation!=null&&(t.xAxisDir={x:Math.cos(n.rotation*Ia),y:Math.sin(n.rotation*Ia)});break;case"INSERT":{t.insertionPoint=Gt(n.position),t.scaleX=n.xScale??1,t.scaleY=n.yScale??1,t.rotation=(n.rotation||0)*Ia;const r=e.get(n.name);r!=null&&(t.blockHeaderHandle={value:r});break}case"DIMENSION":{const r=e.get(n.block);r!=null&&(t.blockHeaderHandle={value:r});break}}return t}function rE(n){var u,d;const e=n.blocks||{},t=Object.keys(e),i=new Map;t.forEach((h,f)=>i.set(h,f+1));const s=t.find(h=>/model_space/i.test(h))??t.find(h=>/model/i.test(h)),r=s!=null?i.get(s):0,a=[];for(const h of n.entities||[]){const f=Td(h,i);f.ownerHandle={value:r},a.push(f)}for(const h of t){const f=i.get(h);for(const m of e[h].entities||[]){const _=Td(m,i);_.ownerHandle={value:f},a.push(_)}}const o=t.map(h=>({name:h,handle:{value:i.get(h)},basePoint:Gt(e[h].position)||{x:0,y:0,z:0}})),l=((d=(u=n.tables)==null?void 0:u.layer)==null?void 0:d.layers)||{},c=Object.values(l).map(h=>({name:h.name,colorIndex:h.colorIndex}));return{version:"dxf",vars:n.header||{},entities:a,tables:{blocks:o,layers:c}}}function aE(n){var s,r;try{return new TextDecoder("utf-8",{fatal:!0}).decode(n)}catch{}const t=(r=(s=new TextDecoder("latin1").decode(new Uint8Array(n,0,Math.min(n.byteLength,4096))).match(/\$DWGCODEPAGE[\s\S]*?\n\s*3\s*\n\s*([^\r\n]+)/i))==null?void 0:s[1])==null?void 0:r.trim().toLowerCase();let i="windows-1252";t&&(/949/.test(t)?i="euc-kr":/932/.test(t)?i="shift_jis":/936/.test(t)?i="gbk":/950/.test(t)&&(i="big5"));try{return new TextDecoder(i).decode(n)}catch{return new TextDecoder("utf-8").decode(n)}}function Cd(n){return oE(aE(n))}function oE(n){const e=new eE;e.registerEntityHandler(sE);const t=e.parseSync(n);return rE(t)}const zp=/\.dwg$/i,Vp=/\.dxf$/i;function lE(n){return zp.test(n)}function cE(n){return Vp.test(n)}function uE(n){return zp.test(n)||Vp.test(n)}oA("/fonts/NanumGothic-Regular.ttf");const hE=document.getElementById("app"),wd=document.getElementById("status"),Sl=document.getElementById("layerList"),Rd=document.getElementById("layers"),Pa=document.getElementById("spaces");function cs(n,e=!1){wd.textContent=n,wd.classList.toggle("err",e)}const Zt=new vA(hE);Zt.onSelect(n=>{var t;if(!n){cs("deselected");return}const e=n;cs(`select ${e.type??"?"} · layer=${e.layer??"-"} · h=${((t=e.handle)==null?void 0:t.value)??"-"}`)});const Dd=document.getElementById("coordX"),Ld=document.getElementById("coordY");function Id(n){const e=Math.abs(n);return e>=1e6?n.toFixed(1):e>=1e3?n.toFixed(2):e>=1?n.toFixed(3):n.toFixed(4)}Zt.onPointerWorld(n=>{if(!n){Dd.textContent="—",Ld.textContent="—";return}Dd.textContent=Id(n.x),Ld.textContent=Id(n.y)});function Gp(){var t;const n=Zt.getSpaces(),e=Zt.getActiveSpace();if(Pa.innerHTML="",n.length<2&&!((t=n[0])!=null&&t.entityCount)){Pa.style.display="none";return}Pa.style.display="flex";for(const i of n){const s=document.createElement("button");s.type="button",s.textContent=`${i.label}${i.entityCount?` (${i.entityCount})`:""}`,s.title=`${i.name} · handle ${i.handleHex}`,i.handleHex===e&&s.classList.add("active"),s.addEventListener("click",()=>{i.handleHex!==Zt.getActiveSpace()&&(Zt.setSpace(i.handleHex),Gp(),Yp(),Zt.fit(),cs(`space ${i.label} · ${i.entityCount} entities`))}),Pa.append(s)}}async function dE(n,e){return cE(e)?Cd(n):lE(e)?Ad(new Uint8Array(n)):new TextDecoder("latin1").decode(new Uint8Array(n,0,Math.min(6,n.byteLength))).startsWith("AC")?Ad(new Uint8Array(n)):Cd(n)}async function Wp(n,e){const t=await dE(n,e),i=Mr(t),s=uv(i);return Zt.load(t,{spaceHandle:(s==null?void 0:s.handleHex)??null}),Zt.resize(),t}async function ou(n,e){const t=e??n.split("?")[0].split("/").pop()??n,i=await fetch(n);if(!i.ok)throw new Error(`HTTP ${i.status}`);return Wp(await i.arrayBuffer(),t)}async function Xp(n){if(!uE(n.name))throw new Error(`not .dwg/.dxf: ${n.name}`);return Wp(await n.arrayBuffer(),n.name)}function Yp(){Sl.innerHTML="";for(const n of Zt.getLayerInfo()){const e=document.createElement("label");e.dataset.name=n.name;const t=document.createElement("span");t.className="swatch",t.style.background=n.colorHex||"#888";const i=document.createElement("input");i.type="checkbox",i.checked=n.visible,i.addEventListener("change",()=>{const r=new Set;Sl.querySelectorAll("label").forEach(a=>{a.querySelector("input").checked||r.add(a.dataset.name)}),Zt.setHiddenLayers(r)});const s=document.createElement("span");s.textContent=`${n.name} (${n.count})`,e.append(t,i,s),Sl.append(e)}}async function fE(n,e){var r;const i=Mr(e).find(a=>a.handleHex===Zt.getActiveSpace()),s=i?` · ${i.label}`:"";cs(`✓ ${n} · ${((r=e.entities)==null?void 0:r.length)??0} entities${s}`),Gp(),Yp(),Zt.fit()}async function Vr(n,e){cs(`loading ${n}…`);try{await fE(n,await e())}catch(t){cs(`${n}: ${t.message}`,!0),console.error(t)}}document.getElementById("sample").addEventListener("click",()=>{Vr("BasicSample.dwg",()=>ou("/samples/BasicSample.dwg","BasicSample.dwg"))});document.getElementById("sampleDxf").addEventListener("click",()=>{Vr("simple.dxf",()=>ou("/samples/simple.dxf","simple.dxf"))});document.getElementById("file").addEventListener("change",n=>{var t;const e=(t=n.target.files)==null?void 0:t[0];e&&(Vr(e.name,()=>Xp(e)),n.target.value="")});document.getElementById("fit").addEventListener("click",()=>Zt.fit());let bl=!0;document.getElementById("theme").addEventListener("click",()=>{bl=!bl,Zt.setTheme(bl)});document.getElementById("layersBtn").addEventListener("click",()=>{Rd.style.display=Rd.style.display==="block"?"none":"block"});window.addEventListener("dragover",n=>n.preventDefault());window.addEventListener("drop",n=>{var t,i;n.preventDefault();const e=(i=(t=n.dataTransfer)==null?void 0:t.files)==null?void 0:i[0];e&&Vr(e.name,()=>Xp(e))});const Ml=new URLSearchParams(location.search).get("model");Ml?Vr(Ml,()=>ou(Ml)):cs("ready · Sample DWG / DXF 또는 파일 드롭");window.addEventListener("resize",()=>Zt.resize()); diff --git a/dist2/index.html b/dist2/index.html index 409e403..f4aae6f 100644 --- a/dist2/index.html +++ b/dist2/index.html @@ -97,7 +97,7 @@ #coords .lbl { color: var(--accent); margin-right: 6px; font-weight: 600; } #coords .sep { color: var(--line); margin: 0 12px; } - +
diff --git a/src/viewer2d/Viewer2D.js b/src/viewer2d/Viewer2D.js index 15dea65..27f80ee 100644 --- a/src/viewer2d/Viewer2D.js +++ b/src/viewer2d/Viewer2D.js @@ -11,6 +11,7 @@ import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; import { aciToHex } from './aciColors.js'; import { buildAllowedOwnerHexes, listCadSpaces } from './cadSpaces'; import { SlugTextEngine, SlugTextBatch } from './slugText'; +import { getLinPattern } from './linParser'; const DEFAULT_COLOR = 0xc9d1d9; const ARC_SEGS = 64; @@ -424,7 +425,9 @@ export class Viewer2D { const d = e.data || e; const type = (e.type || e.typeName || '').toUpperCase(); const color = this._entityColor(e); - curDash = this._resolveDash(e); + const complexLt = this._resolveComplexLinetype(e); + if (complexLt) curDash = null; + else curDash = this._resolveDash(e); const meta = { entity: e, type, bounds: null, colStart: lineColors.length }; this._entityMeta.push(meta); this._pickCurIdx = this._entityMeta.length - 1; // owner for pick geometry emitted below @@ -435,21 +438,35 @@ export class Viewer2D { // ── Basic geometry ──────────────────────────────────────────────── case 'LINE': if (d.start && d.end) { - pushSeg(d.start.x, d.start.y, d.end.x, d.end.y, d.start.z || 0, color); + if (complexLt) { + this._drawComplexPath([d.start, d.end], false, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + } else { + pushSeg(d.start.x, d.start.y, d.end.x, d.end.y, d.start.z || 0, color); + } meta.bounds = { type:'line', x1:d.start.x, y1:d.start.y, x2:d.end.x, y2:d.end.y }; } break; case 'CIRCLE': if (d.center && d.radius != null) { - this._arcSegs(d.center, d.radius, 0, Math.PI*2, d.center.z||0, color, pushSeg); + if (complexLt) { + const pts = this._sampleArcPoints(d.center, d.radius, 0, Math.PI * 2, d.center.z || 0); + this._drawComplexPath(pts, true, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + } else { + this._arcSegs(d.center, d.radius, 0, Math.PI*2, d.center.z||0, color, pushSeg); + } meta.bounds = { type:'circle', cx:d.center.x, cy:d.center.y, r:d.radius }; } break; case 'ARC': if (d.center && d.radius != null) { - this._arcSegs(d.center, d.radius, d.startAngle??0, d.endAngle??Math.PI*2, d.center.z||0, color, pushSeg); + if (complexLt) { + const pts = this._sampleArcPoints(d.center, d.radius, d.startAngle ?? 0, d.endAngle ?? Math.PI * 2, d.center.z || 0); + this._drawComplexPath(pts, false, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + } else { + this._arcSegs(d.center, d.radius, d.startAngle??0, d.endAngle??Math.PI*2, d.center.z||0, color, pushSeg); + } meta.bounds = { type:'circle', cx:d.center.x, cy:d.center.y, r:d.radius }; } break; @@ -461,6 +478,10 @@ export class Viewer2D { const nSeg = closed ? d.points.length : d.points.length - 1; if (this._polyHasWidth(e, nSeg, 1)) { this._widePolyMesh(d.points, d.bulges, closed, e, color, 1, expand); + } else if (complexLt) { + const pts = this._samplePolylinePoints(d.points, d.bulges, closed, d.elevation || 0); + this._drawComplexPath(pts, closed, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + pts.forEach(p => expand(p.x, p.y, p.z)); } else if (hasBulge) { this._bulgePolySegs(d.points, d.bulges, closed, color, pushSeg, expand); } else { @@ -474,7 +495,14 @@ export class Viewer2D { break; case 'POLYLINE': - this._polylineSegs(d.vertices||d.points, d.closed||(d.flags&1), 0, color, pushSeg); + if (complexLt && (d.vertices || d.points)) { + const closed = !!(d.closed || (d.flags & 1)); + const pts = d.vertices || d.points; + this._drawComplexPath(pts, closed, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + pts.forEach(p => expand(p.x, p.y, p.z || 0)); + } else { + this._polylineSegs(d.vertices||d.points, d.closed||(d.flags&1), 0, color, pushSeg); + } break; case 'POLYLINE_2D': { @@ -487,7 +515,11 @@ export class Viewer2D { const bulges = kids.map(v => v.bulge || 0); const closed = (d.flags & 1) === 1; const elev = d.elevation || 0; - if (bulges.some(b => Math.abs(b) >= 1e-6)) { + if (complexLt) { + const sampled = this._samplePolylinePoints(pts, bulges, closed, elev); + this._drawComplexPath(sampled, closed, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + sampled.forEach(p => expand(p.x, p.y, p.z)); + } else if (bulges.some(b => Math.abs(b) >= 1e-6)) { this._bulgePolySegs(pts, bulges, closed, color, pushSeg, expand); } else { this._polylineSegs(pts, closed, elev, color, pushSeg); @@ -511,7 +543,13 @@ export class Viewer2D { case 'ELLIPSE': if (d.center) { - this._ellipseSegs(d, color, pushSeg); + if (complexLt) { + const pts = this._sampleEllipsePoints(d); + this._drawComplexPath(pts, false, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + pts.forEach(p => expand(p.x, p.y, p.z || 0)); + } else { + this._ellipseSegs(d, color, pushSeg); + } meta.bounds = { type:'point', cx:d.center.x, cy:d.center.y }; } break; @@ -530,8 +568,13 @@ export class Viewer2D { return result; })() : cps; - this._polylineSegs(pts, false, 0, color, pushSeg); - pts.forEach(p => expand(p.x, p.y, p.z || 0)); + if (complexLt) { + this._drawComplexPath(pts, !!d.closed, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + pts.forEach(p => expand(p.x, p.y, p.z || 0)); + } else { + this._polylineSegs(pts, false, 0, color, pushSeg); + pts.forEach(p => expand(p.x, p.y, p.z || 0)); + } meta.bounds = { type:'point', cx:pts[0].x, cy:pts[0].y }; } break; @@ -1247,29 +1290,50 @@ export class Viewer2D { const d = e.data || e; const type = (e.type || e.typeName || '').toUpperCase(); const color = this._entityColor(e); + const complexLt = this._resolveComplexLinetype(e); + const vpTextStart = pendingTexts.length; + try { switch (type) { case 'LINE': if (d.start && d.end) { - pushSeg(d.start.x, d.start.y, d.end.x, d.end.y, d.start.z || 0, color); + if (complexLt) { + this._drawComplexPath([d.start, d.end], false, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + } else { + pushSeg(d.start.x, d.start.y, d.end.x, d.end.y, d.start.z || 0, color); + } } break; case 'CIRCLE': if (d.center && d.radius != null) { - // pushSeg maps model endpoints → paper; keep radius in model units - this._arcSegs(d.center, d.radius, 0, Math.PI * 2, d.center.z || 0, color, pushSeg); + if (complexLt) { + const pts = this._sampleArcPoints(d.center, d.radius, 0, Math.PI * 2, d.center.z || 0); + this._drawComplexPath(pts, true, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + } else { + // pushSeg maps model endpoints → paper; keep radius in model units + this._arcSegs(d.center, d.radius, 0, Math.PI * 2, d.center.z || 0, color, pushSeg); + } } break; case 'ARC': if (d.center && d.radius != null) { - this._arcSegs(d.center, d.radius, d.startAngle ?? 0, d.endAngle ?? Math.PI * 2, d.center.z || 0, color, pushSeg); + if (complexLt) { + const pts = this._sampleArcPoints(d.center, d.radius, d.startAngle ?? 0, d.endAngle ?? Math.PI * 2, d.center.z || 0); + this._drawComplexPath(pts, false, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + } else { + this._arcSegs(d.center, d.radius, d.startAngle ?? 0, d.endAngle ?? Math.PI * 2, d.center.z || 0, color, pushSeg); + } } break; case 'LWPOLYLINE': if (d.points?.length) { const hasBulge = d.bulges?.some((b) => Math.abs(b) >= 1e-6); const closed = !!(d.closed || (d.flags & 1)); - if (hasBulge) this._bulgePolySegs(d.points, d.bulges, closed, color, pushSeg, expand); + if (complexLt) { + const pts = this._samplePolylinePoints(d.points, d.bulges, closed, d.elevation || 0); + this._drawComplexPath(pts, closed, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + pts.forEach((p) => expand(p.x, p.y, p.z)); + } else if (hasBulge) this._bulgePolySegs(d.points, d.bulges, closed, color, pushSeg, expand); else { this._polylineSegs(d.points, closed, d.elevation || 0, color, pushSeg); d.points.forEach((p) => expand(p.x, p.y, d.elevation || 0)); @@ -1277,7 +1341,14 @@ export class Viewer2D { } break; case 'POLYLINE': - this._polylineSegs(d.vertices || d.points, d.closed || (d.flags & 1), 0, color, pushSeg); + if (complexLt && (d.vertices || d.points)) { + const closed = !!(d.closed || (d.flags & 1)); + const pts = d.vertices || d.points; + this._drawComplexPath(pts, closed, complexLt.pattern, complexLt.ltscale, color, pushSeg, pendingTexts); + pts.forEach((p) => expand(p.x, p.y, p.z || 0)); + } else { + this._polylineSegs(d.vertices || d.points, d.closed || (d.flags & 1), 0, color, pushSeg); + } break; case 'ELLIPSE': if (d.center) { @@ -1410,6 +1481,17 @@ export class Viewer2D { default: break; } + if (complexLt && pendingTexts.length > vpTextStart) { + for (let ti = vpTextStart; ti < pendingTexts.length; ti++) { + const t = pendingTexts[ti]; + if (!t?.pos) continue; + const q = xf(t.pos.x, t.pos.y); + t.pos = q; + t.height = (t.height || 2.5) * scale; + t.rotation = (t.rotation || 0) + (xf.twist || 0); + t.underlay = !!underlay; + } + } } catch { /* skip malformed */ } } @@ -1466,6 +1548,304 @@ export class Viewer2D { // ── Private helpers ──────────────────────────────────────────────────────── + _resolveComplexLinetype(e) { + let ltName = e.lineType ?? e.linetype; + if (!ltName || ltName === 'ByLayer' || ltName === 'BYLAYER' || + ltName === 'ByBlock' || ltName === 'BYBLOCK') { + const lh = e.layerHandle?.value ?? e.layerHandle; + ltName = (lh != null && this._layerLtByHandle?.get(String(lh))) + || this._layerLtByName?.get(e.layer ?? e.layerName) || null; + } + if (!ltName || ltName === 'Continuous' || ltName === 'ByLayer' || ltName === 'ByBlock') return null; + + const pattern = getLinPattern(ltName); + if (!pattern) return null; + + const entScale = (e.entityHeader?.linetypeScale > 0 ? e.entityHeader.linetypeScale : 1); + const ltscale = (this._globalLtscale || 1) * entScale; + + return { pattern, ltscale }; + } + + _sampleArcPoints(center, radius, startAngle, endAngle, elevation = 0) { + let sweep = endAngle - startAngle; + if (sweep <= 0) sweep += Math.PI * 2; + const steps = Math.max(16, Math.ceil((sweep / (Math.PI * 2)) * ARC_SEGS)); + const pts = []; + const z = center.z || elevation || 0; + for (let i = 0; i <= steps; i++) { + const a = startAngle + (sweep * i) / steps; + pts.push({ + x: center.x + radius * Math.cos(a), + y: center.y + radius * Math.sin(a), + z, + }); + } + return pts; + } + + _samplePolylinePoints(points, bulges, closed, elevation = 0) { + if (!points || points.length < 2) return points || []; + const res = []; + const n = closed ? points.length : points.length - 1; + for (let i = 0; i < n; i++) { + const u = points[i]; + const v = points[(i + 1) % points.length]; + const b = bulges?.[i] || 0; + const z = u.z || elevation || 0; + if (Math.abs(b) < 1e-6) { + if (res.length === 0) res.push({ x: u.x, y: u.y, z }); + res.push({ x: v.x, y: v.y, z }); + } else { + const dx = v.x - u.x; + const dy = v.y - u.y; + const dist = Math.hypot(dx, dy); + if (dist > 1e-9) { + const theta = 4 * Math.atan(b); + const halfTheta = Math.abs(theta) / 2; + const R = dist / 2 / Math.sin(halfTheta); + const dCenter = R * Math.cos(halfTheta); + const mx = (u.x + v.x) / 2; + const my = (u.y + v.y) / 2; + const nx = -dy / dist; + const ny = dx / dist; + const dir = b > 0 ? 1 : -1; + const cx = mx + dir * nx * dCenter; + const cy = my + dir * ny * dCenter; + const a1 = Math.atan2(u.y - cy, u.x - cx); + const steps = Math.max(4, Math.ceil(Math.abs(theta) / (Math.PI / 16))); + for (let k = (res.length === 0 ? 0 : 1); k <= steps; k++) { + const a = a1 + (theta * k) / steps; + res.push({ + x: cx + R * Math.cos(a), + y: cy + R * Math.sin(a), + z, + }); + } + } + } + } + return res; + } + + _sampleEllipsePoints(d) { + const major = d.majorAxis ?? d.smAxis ?? { x: d.radius || 1, y: 0 }; + const center = d.center || { x: 0, y: 0 }; + const ratio = d.ratio ?? d.axisRatio ?? d.minorAxisRatio ?? 0.5; + const startParam = d.startParam ?? d.startAngle ?? 0; + const endParam = d.endParam ?? d.endAngle ?? Math.PI * 2; + const aLen = Math.hypot(major.x ?? 1, major.y ?? 0); + const bLen = aLen * ratio; + const rot = Math.atan2(major.y ?? 0, major.x ?? 1); + let sweep = endParam - startParam; + if (sweep <= 0) sweep += Math.PI * 2; + const steps = ELLIPSE_SEGS; + const pts = []; + const z = center.z || 0; + for (let i = 0; i <= steps; i++) { + const t = startParam + (sweep * i) / steps; + const ex = aLen * Math.cos(t); + const ey = bLen * Math.sin(t); + const x = center.x + ex * Math.cos(rot) - ey * Math.sin(rot); + const y = center.y + ex * Math.sin(rot) + ey * Math.cos(rot); + pts.push({ x, y, z }); + } + return pts; + } + + _drawComplexPath(points, closed, linPattern, ltscale, color, pushSeg, pendingTexts) { + if (!points || points.length < 2) return; + const pts = points.slice(); + if (closed && (Math.hypot(pts[pts.length - 1].x - pts[0].x, pts[pts.length - 1].y - pts[0].y) > 1e-6)) { + pts.push(pts[0]); + } + + const segLens = []; + let totalLen = 0; + for (let i = 0; i < pts.length - 1; i++) { + const dx = pts[i + 1].x - pts[i].x; + const dy = pts[i + 1].y - pts[i].y; + const len = Math.hypot(dx, dy); + segLens.push(len); + totalLen += len; + } + if (totalLen < 1e-6) return; + + const getPathState = (dist) => { + let s = Math.max(0, Math.min(dist, totalLen)); + for (let i = 0; i < segLens.length; i++) { + const len = segLens[i]; + if (s <= len || i === segLens.length - 1) { + const t = len > 1e-9 ? s / len : 0; + const p0 = pts[i]; + const p1 = pts[i + 1]; + const x = p0.x + (p1.x - p0.x) * t; + const y = p0.y + (p1.y - p0.y) * t; + const z = (p0.z || 0) + ((p1.z || 0) - (p0.z || 0)) * t; + const angle = Math.atan2(p1.y - p0.y, p1.x - p0.x); + return { x, y, z, angle }; + } + s -= len; + } + const last = pts[pts.length - 1]; + const prev = pts[pts.length - 2]; + return { + x: last.x, + y: last.y, + z: last.z || 0, + angle: Math.atan2(last.y - prev.y, last.x - prev.x), + }; + }; + + const patternLen = linPattern.patternLength * ltscale; + if (patternLen < 1e-6) return; + + let s = 0; + let elemIdx = 0; + const elements = linPattern.elements; + + while (s < totalLen) { + const elem = elements[elemIdx % elements.length]; + elemIdx++; + + if (elem.type === 'dash') { + const dashLen = Math.max((elem.val || 0.05) * ltscale, 0.01 * ltscale); + const startDist = s; + const endDist = Math.min(s + dashLen, totalLen); + + if (endDist > startDist) { + const pStart = getPathState(startDist); + const pEnd = getPathState(endDist); + pushSeg(pStart.x, pStart.y, pEnd.x, pEnd.y, pStart.z, color); + } + s += dashLen; + } else if (elem.type === 'gap') { + const gapLen = Math.abs(elem.val || 0.1) * ltscale; + s += gapLen; + } else if (elem.type === 'shape') { + const pState = getPathState(s); + this._renderShapeSymbol(elem, pState, ltscale, color, pushSeg); + } else if (elem.type === 'text') { + const pState = getPathState(s); + if (elem.text && pendingTexts) { + const h = (elem.scale || 0.2) * ltscale; + let angle = pState.angle + ((elem.rotation || 0) * Math.PI) / 180; + if (elem.isAbsoluteAngle) { + angle = ((elem.rotation || 0) * Math.PI) / 180; + } + + // CAD Standard Upright Rule: text must always read from bottom or right (-90deg to +90deg) + let normA = Math.atan2(Math.sin(angle), Math.cos(angle)); + if (normA > Math.PI / 2) normA -= Math.PI; + else if (normA < -Math.PI / 2) normA += Math.PI; + angle = normA; + + const cosT = Math.cos(angle); + const sinT = Math.sin(angle); + + const xo = (elem.xOffset || 0) * ltscale; + const rawYo = (elem.yOffset != null && Math.abs(elem.yOffset) > 1e-4) ? Math.abs(elem.yOffset) : 0.02; + const yo = rawYo * ltscale; + + const tx = pState.x + (xo * cosT - yo * sinT); + const ty = pState.y + (xo * sinT + yo * cosT); + + pendingTexts.push({ + text: elem.text, + pos: { x: tx, y: ty, z: pState.z }, + height: Math.max(h, 0.01), + rotation: angle, + color, + alignH: 1, + alignV: 2, + }); + } + } + } + } + + _renderShapeSymbol(elem, pState, ltscale, color, pushSeg) { + const name = (elem.shapeName || '').toUpperCase(); + const sc = (elem.scale || 0.1) * ltscale; + const angle = elem.isAbsoluteAngle + ? ((elem.rotation || 0) * Math.PI) / 180 + : pState.angle + ((elem.rotation || 0) * Math.PI) / 180; + + const xo = (elem.xOffset || 0) * ltscale; + const yo = (elem.yOffset || 0) * ltscale; + + const cosA = Math.cos(pState.angle); + const sinA = Math.sin(pState.angle); + const cx = pState.x + (xo * cosA - yo * sinA); + const cy = pState.y + (xo * sinA + yo * cosA); + const cz = pState.z || 0; + + const cosR = Math.cos(angle); + const sinR = Math.sin(angle); + + const transform = (lx, ly) => ({ + x: cx + (lx * cosR - ly * sinR) * sc, + y: cy + (lx * sinR + ly * cosR) * sc, + }); + + if (name.includes('KSC35') || name.includes('KSC36') || name.includes('KSC19') || name.includes('ARROW')) { + // Solid hatched arrowhead (matching AutoCAD KSC35 standard symbol) + const steps = 12; + for (let i = 0; i <= steps; i++) { + const t = i / steps; + const lx = -0.5 + t; + const hy = 0.25 * (1 - t); + const top = transform(lx, hy); + const bot = transform(lx, -hy); + pushSeg(top.x, top.y, bot.x, bot.y, cz, color); + } + const p1 = transform(0.5, 0); + const p2 = transform(-0.5, 0.25); + const p3 = transform(-0.5, -0.25); + pushSeg(p1.x, p1.y, p2.x, p2.y, cz, color); + pushSeg(p2.x, p2.y, p3.x, p3.y, cz, color); + pushSeg(p3.x, p3.y, p1.x, p1.y, cz, color); + } else if (name.includes('CIRC') || name.includes('KSC11') || name.includes('KSC01')) { + const segs = 12; + let prev = transform(0.3, 0); + for (let i = 1; i <= segs; i++) { + const a = (i / segs) * Math.PI * 2; + const curr = transform(0.3 * Math.cos(a), 0.3 * Math.sin(a)); + pushSeg(prev.x, prev.y, curr.x, curr.y, cz, color); + prev = curr; + } + } else if (name.includes('BOX') || name.includes('KSC02') || name.includes('KSC05')) { + const p1 = transform(-0.3, -0.3); + const p2 = transform(0.3, -0.3); + const p3 = transform(0.3, 0.3); + const p4 = transform(-0.3, 0.3); + pushSeg(p1.x, p1.y, p2.x, p2.y, cz, color); + pushSeg(p2.x, p2.y, p3.x, p3.y, cz, color); + pushSeg(p3.x, p3.y, p4.x, p4.y, cz, color); + pushSeg(p4.x, p4.y, p1.x, p1.y, cz, color); + } else if (name.includes('TRACK1')) { + const p1 = transform(0, -0.4); + const p2 = transform(0, 0.4); + pushSeg(p1.x, p1.y, p2.x, p2.y, cz, color); + } else if (name.includes('BAT') || name.includes('DIAMOND')) { + const p1 = transform(0, 0.4); + const p2 = transform(0.4, 0); + const p3 = transform(0, -0.4); + const p4 = transform(-0.4, 0); + pushSeg(p1.x, p1.y, p2.x, p2.y, cz, color); + pushSeg(p2.x, p2.y, p3.x, p3.y, cz, color); + pushSeg(p3.x, p3.y, p4.x, p4.y, cz, color); + pushSeg(p4.x, p4.y, p1.x, p1.y, cz, color); + } else { + const p1 = transform(0.3, 0); + const p2 = transform(-0.3, 0.2); + const p3 = transform(-0.3, -0.2); + pushSeg(p1.x, p1.y, p2.x, p2.y, cz, color); + pushSeg(p2.x, p2.y, p3.x, p3.y, cz, color); + pushSeg(p3.x, p3.y, p1.x, p1.y, cz, color); + } + } + _buildLayerMap(layers) { this._layerByHandle.clear(); this._layerByName.clear(); diff --git a/src/viewer2d/linData.ts b/src/viewer2d/linData.ts new file mode 100644 index 0000000..ecaed8e --- /dev/null +++ b/src/viewer2d/linData.ts @@ -0,0 +1,3 @@ +// Auto-generated standard LIN file definitions for Icad.lin and KOSDIC.lin +export const ICAD_LIN = "; IntelliCAD Linetypes\r\n;\r\n; icad.lin\r\n; Release 1.0 \r\n; \r\n; .............................................................................\r\n;\r\n; Copyright (c) 1998 by Visio Corporation. All rights reserved.\r\n;\r\n; The Software is subject to the license agreement that accompanies \r\n; or is included with the Software, which specifies the permitted \r\n; and prohibited uses of the Software. Any unauthorized duplication \r\n; or use of Visio Corporation Software, in whole or in part, in print, \r\n; or in any other storage and retrieval system is prohibited.\r\n; \r\n; To the maximum extent permitted by applicable law, Visio Corporation\r\n; and its suppliers disclaim any and all warranties and conditions,\r\n; either express or implied, including, without limitation, implied\r\n; warranties of merchantability, fitness for a particular purpose,\r\n; title, and non-infringement, and those arising out of usage of trade\r\n; or course of dealing, concerning these materials. These materials\r\n; are provided \"as is\" without warranty of any kind.\r\n; .............................................................................\r\n\r\n\r\n\r\n*BORDER,__ __ . __ __ . __ __ . __ __ . __ __ . __ __ . __ __ . __ __ . \r\nA,0.50,-0.250,0.50,-0.250,0,-0.250\r\n*BORDER2,__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__.__ \r\nA,0.25,-0.125,0.25,-0.125,0,-0.125\r\n*BORDERX2,____ ____ . ____ ____ . ____ ____ . ____ ____ . \r\nA,1.0,-0.5,1.0,-0.5,0,-0.5\r\n\r\n*CENTER,____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____ _\r\nA,1.250,-0.25,0.25,-0.25\r\n*CENTER2,___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ _\r\nA,0.75,-0.1250,0.1250,-0.125\r\n*CENTERX2,________ __ ________ __ ________ __ ________ __ ____\r\nA,2.5,-0.50,0.50,-0.50\r\n\r\n*DASHDOT,__ . __ . __ . __ . __ . __ . __ . __ . __ . __ . __ . __ . _\r\nA,0.50,-0.250,0,-0.250\r\n*DASHDOT2,_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.\r\nA,0.25,-0.125,0,-0.125\r\n*DASHDOTX2,____ . ____ . ____ . ____ . ____ . ____ . ____ \r\nA,1.0,-0.5,0,-0.5\r\n\r\n*DASHED,__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __\r\nA,0.50,-0.250\r\n*DASHED2,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.250,-0.1250\r\n*DASHEDX2,____ ____ ____ ____ ____ ____ ____ ____ ____ ____ \r\nA,1.0,-0.5\r\n\r\n*DIVIDE,____ . . ____ . . ____ . . ____ . . ____ . . ____ . . ____ . .\r\nA,0.50,-0.25,0,-0.25,0,-0.25\r\n*DIVIDE2,__..__..__..__..__..__..__..__..__..__..__..__..__..__..__..__..\r\nA,0.25,-0.125,0,-0.125,0,-0.125\r\n*DIVIDEX2,________ . . ________ . . ________ . . ________ . .\r\nA,1.0,-0.5,0,-0.5,0,-0.50\r\n\r\n*DOT,. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\r\nA,0,-0.25\r\n*DOT2,................................................................\r\nA,0,-0.125\r\n*DOTX2,. . . . . . . . . . . . . . . . . . . . . \r\nA,0,-0.5\r\n\r\n*HIDDEN,__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ \r\nA,0.250,-0.1250\r\n*HIDDEN2,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.125,-0.06250\r\n*HIDDENX2,____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ \r\nA,0.5,-0.25\r\n\r\n*PHANTOM,______ __ __ ______ __ __ ______ __ __ ______ __ __\r\nA,1.25,-0.25,0.250,-0.25,0.25,-0.25\r\n*PHANTOM2,___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _\r\nA,0.625,-0.125,0.1250,-0.125,0.125,-0.1250\r\n*PHANTOMX2,____________ ____ ____ ____________ ____ ____ \r\nA,2.5,-0.5,0.5,-0.5,0.50,-0.5\r\n\r\n*PHANTOM4,___ _ _ ___ _ _ (1/2 of Phantom2)__ _ _ ___ _ _ ___ _ _ ___ _ _\r\nA,0.3125,-0.0625,0.0625,-0.0625,0.0625,-0.0625\r\n\r\n*PHANTOM8,___ _ _ ___ _ _ (1/2 of Phantom4)__ _ _ ___ _ _ ___ _ _ ___ _ _\r\nA,0.15625,-0.03125,0.03125,-0.03125,0.03125,-0.03125\r\n\r\n*BORDER4,__.__.__.__.__.__._ (1/2 of Border2) _.__.__.__.__.__.__.__.__ \r\nA,0.125,-0.0625,0.125,-0.0625,0,-0.0625\r\n\r\n*CENTER4,___ _ ___ _ ___ _ __ (1/2 of Center2)__ _ ___ _ ___ _ ___ _ _\r\nA,0.375,-0.0625,0.0625,-0.0625\r\n*CENTER8,___ _ ___ _ ___ _ __ (1/2 of Center4)__ _ ___ _ ___ _ ___ _ _\r\nA,0.1875,-0.03125,0.03125,-0.03125\r\n\r\n*CENTERF,_____ _ _____ (Finer short dashes than Center) _____\r\nA,1.25,-0.125,0.125,-0.125\r\n*CENTERF2,___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ _\r\nA,0.75,-0.0625,0.0625,-0.0625\r\n;; Auto-Arch additions for finer linetypes.\r\n*CENTERF4,___ _ ___ _ ___ _ __ (1/2 of CenterF2)__ _ ___ _ ___ _ ___ _ _\r\nA,0.375,-0.03125,0.03125,-0.03125\r\n*CENTERF8,___ _ ___ _ ___ _ __ (1/2 of CenterF4)__ _ ___ _ ___ _ ___ _ _\r\nA,0.1875,-0.0015625,0.0015625,-0.0015625\r\n\r\n*DASHED4,_ _ _ _ _ _ _ _ (1/2 of Dashed2)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.125,-0.0625\r\n*DASHED8,_ _ _ _ _ _ _ _ (1/2 of Dashed4)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.0625,-0.03125\r\n\r\n*DEMOx2,____ ____ ____ ____ ____\r\nA,0.250,-0.5\r\n*DEMO,__ __ __ __ __ __ __ __ __ __ __\r\nA,0.125,-0.25\r\n*DEMO2,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.0625,-0.125\r\n*DEMO4,_ _ _ _ _ _ (1/2 of Demo2) _ _ _ _ _ _ _ _ _ _ _\r\nA,0.0625,-0.125\r\n*DEMO8,_ _ _ _ _ _ (1/2 of Demo4) _ _ _ _ _ _ _ _ _ _ _\r\nA,0.03125,-0.0625\r\n\r\n*INVISIBLE,. (Dot at endpoints only) .\r\nA,0,-1000\r\n\r\n*DOT4,...................(1/2 of Dot2)................................\r\nA,0,-0.06125\r\n*DOT8,...................(1/2 of Dot4)................................\r\nA,0,-0.03125\r\n*DOT16,..................(1/2 of Dot8)................................\r\nA,0,-0.0015625\r\n\r\n*HIDDEN4,_ _ _ _ _ _ _ _ (1/2 of Hidden2)_ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.0625,-0.03125\r\n*HIDDEN8,_ _ _ _ _ _ _ _ (1/2 of Hidden4)_ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.03125,-0.015\r\n\r\n*JIS_02_0.7, Hot Water Supply __ __ __ __ __ __ __\r\nA,0.8,-0.5\r\n*JIS_02_1.0, HIDDEN 0.8 - - - - - - - - - -\r\nA,0.8,-0.8\r\n*JIS_02_1.2, HIDDEN01.25 - - - - - - - - - -\r\nA,1.26,-1.26\r\n*JIS_02_2.0, HIDDEN02 __ __ __ __ __ __ __ __ __ __ __ \r\nA,1.99,-0.99\r\n*JIS_02_4.0, HIDDEN04 ____ ____ ____ ____ ____ ____ ____ \r\nA,3.999,-0.999\r\n*JIS_08_11, ___ _ ___ _ ___ _ ___ _ ___ _ ___ _ ___\r\nA,10.9999,-0.499,0.499,-0.499\r\n*JIS_08_15, ____ _ ____ _ ____ _ ____ _ ____ _ ____\r\nA,14.999,-0.499,0.499,-0.499\r\n*JIS_08_25, ________ __ ________ __ ________ __\r\nA,24.999,-1,0.8,-1\r\n*JIS_08_37, _____________ __ _____________ __ _____________ __ \r\nA,36.999,-1.0,0.8,-1\r\n*JIS_08_50, , ___________________ __ ___________________ __ \r\nA,49.999,-1.0,0.8,-1\r\n*JIS_09_08, _____ _ _ _____ _ _ _____ _ _ _____ _ _ _____ _ _ \r\nA,7.999,-0.5,0.5,-0.5,0.5,-0.5\r\n*JIS_09_15, _________ _ _ _________ _ _ _________ _ _ _________ _ _ \r\nA,14.999,-0.999,0.499,-0.999,0.499,-0.999\r\n*JIS_09_29, _____________ _ _ _____________ _ _ _____________ _ _ \r\nA,28.999,-1.499,0.999,-1.499,0.999,-1.499\r\n*JIS_09_50, _______________________ __ __ _______________________\r\nA,49.999,-1.499,0.999,-1.499,0.999,-1.499\r\n\r\n\r\n\r\n*CONTOUR,______ ______ ______ ______ ______ ______ ______ ______\r\nA,0.375,-0.09375\r\n*CONTOUR2,____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ \r\nA,0.25,-0.0625\r\n*COLDWR,___ _ ____ _ _____ _ _____ _ _____ _ ____\r\nA,0.25,-0.075,0.075,-0.075\r\n*HOTWR,___ _ _ ___ _ _ ___ _ _ ___ _ _ ___ _ _ ___\r\nA,0.25,-0.075,0.075,-0.075,0.075,-0.075\r\n*HCW,_____ _ _ _ _____ _ _ _ _____ _ _ _ _____\r\nA,1,-0.125,0.125,-0.125,0.125,-0.125,0.125,-0.125\r\n*BOUNDARY,___________ __ __ ___________ __ __ ______ \r\nA,1.75,-0.125,0.125,-0.125,0.125,-0.125\r\n*BOUNDARY2,______ _ _ ______ _ _ ______ _ _ ______ _ _ ______\r\nA,1,-0.0625,0.0625,-0.0625,0.0625,-0.0625\r\n*STREAM,_________ . . ___________ . . ___________\r\nA,1,-0.125,0,-0.125,0,-0.125 \r\n*PNEUM,__ ___ ___ ___ ___ ___ ___ ___ ___ ___ __\r\nA,0.2,-0.1,0.2,-0.1\r\n*WASTE,__ __ __ __ __ __ __ __ __ __ __ __ __ __\r\nA,0.25,-0.125\r\n*2DASHES,____ _ _ _____ _ _ ____ _ _ ____ _ _ ____\r\nA,0.75,-0.25,0.1,-0.25,0.1,-0.25\r\n*EWIREUP,__ . __ . __ . __ . __ . __ . __ . __ .__\r\nA,0.25,-.075,0,-.075\r\n*EWCELL,___ ___ . ___ ___ . __ __ . __ __ . __ __\r\nA,0.25,-0.075,0.25,-.075,0,-.075\r\n\r\n*EVENDASH,-- -- -- -- -- -- -- -- -- -- --\r\nA,0.125,-0.125\r\n\r\n;; Additional Plumbing linetypes\r\n*DCW,Domestic Cold Water ___ _ ______________ _ ____\r\nA,1.25,-0.06,0.08,-0.06\r\n*DCW2,Domestic Cold Water __ _ ______ _ _____ _ ____\r\nA,0.625,-0.03,0.04,-0.03\r\n*DCWX2,Domestic Cold Water ________ ___ __________\r\nA,2.5,-0.12,0.16,-0.12\r\n*DHW,Domestic Hot Water ___ _ _ ___________ _ _ ____\r\nA,1.25,-0.06,0.08,-0.06,0.08,-0.06\r\n*DHW2,Domestic Hot Water __ _ _ _____ _ _ ____ _ _ __\r\nA,0.625,-0.03,0.04,-0.03,0.04,-0.03\r\n*DHWX2,Domestic Hot Water _____ ___ ___ ___ _____\r\nA,2.5,-0.12,0.16,-0.12,0.16,-0.12\r\n*DHWR,Domestic Hot Wtr Return _____ __ __ __ ________\r\nA,1.25,-0.06,0.08,-0.06,0.08,-0.06,0.08,-0.06\r\n*DHWR2,Domestic Hot Wtr Return ___ _ _ _ ____________\r\nA,0.625,-0.03,0.04,-0.03,0.04,-0.03,0.04,-0.03\r\n*DHWRX2,Domestic Hot Wtr Return ____ ___ ____ ____ ____\r\nA,2.5,-0.12,0.16,-0.12,0.16,-0.12,0.16,-0.12\r\n*VENT,Sanitary Vent Pipe __ __ __ __ __ __ __ __ __ __\r\nA,0.16,-0.08\r\n*VENT2,Sanitary Vent Pipe _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.08,-0.04\r\n*VENTX2,Sanitary Vent Pipe ____ ____ ____ ___\r\nA,0.32,-0.16\r\n*COND,Steam Condensate __ __ __ __ __ __ __ __ __ __ __\r\nA,0.16,-0.08\r\n*COND2,Steam Condensate _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\nA,0.08,-0.04\r\n*CONDX2,Steam Condensate ____ ____ ____ ____\r\nA,0.32,-0.16\r\n\r\n;;; ISO LINTYPES\r\n*DaL013,02b013 Dashed line 0.13mm\r\nA,1.56,-0.39\r\n*DaSpL013,03b013 Dashed space line 0.13mm\r\nA,1.56,-2.34\r\n*LDaDoL013,04b013 Long dashed dotted line 0.13mm \r\nA,3.12,-0.39,0.065,-0.39\r\n*LDaDbDoL,05b013 Long dash double dotted line 0.13mm \r\nA,3.12,-0.39,0.065,-0.39,0.065,-0.39\r\n*LDaTrDoL,06b013 Long dashed triplicate dotted line 0.13mm \r\nA,3.12,-0.39,0.065,-0.39,0.065,-0.39,0.065,-0.39\r\n*DoL013,07b013 Dotted line\r\nA,0.065,-0.39\r\n*LDaShDaL013,08b013 Long dashed short dashed line 0.13mm \r\nA,3.12,-0.39,0.78,-0.39\r\n*09b013,Long dashed double-short-dashed line 0.13mm \r\nA,3.12,-0.39,0.78,-0.39,0.78,-0.39\r\n*10b013,Dashed dotted line 0.13mm \r\nA,1.56,-0.39,0.065,-0.39\r\n*11b013,Double-dashed dotted line 0.13mm \r\nA,1.56,-0.39,1.56,-0.39,0.065,-0.39\r\n*12b013,Dashed double-dotted line 0.13mm \r\nA,1.56,-0.39,0.065,-0.39,0.065,-0.39\r\n*13b013,Double-dashed double-dotted line 0.13mm \r\nA,1.56,-0.39,1.56,-0.39,0.065,-0.39,0.065,-0.39\r\n*14b013,Dashed triplicate-dotted line 0.13mm \r\nA,1.56,-0.39,0.065,-0.39,0.065,-0.39,0.065,-0.39\r\n*15b013,Double-dashed triplicate-dotted line 0.13mm \r\nA,1.56,-0.39,1.56,-0.39,0.065,-0.39,0.065,-0.39,0.065,-0.39\r\n*02b018,Dashed line 0.18mm \r\nA,2.16,-0.54\r\n*03b018,Dashed space line 0.18mm \r\nA,2.16,-3.24\r\n*04b018,Long dashed dotted line 0.18mm \r\nA,4.32,-0.54,0.09,-0.54\r\n*05b018,Long dash double dotted line 0.18mm \r\nA,4.32,-0.54,0.09,-0.54,0.09,-0.54\r\n*06b018,Long dashed triplicate dotted line 0.18mm \r\nA,4.32,-0.54,0.09,-0.54,0.09,-0.54,0.09,-0.54\r\n*07b018,Lotted line\r\nA,0.09,-0.54\r\n*08b018,Long dashed short dashed line 0.18mm \r\nA,4.32,-0.54,1.08,-0.54\r\n*09b018,Long dashed double-short-dashed line 0.18mm \r\nA,4.32,-0.54,1.08,-0.54,1.08,-0.54\r\n*10b018,Dashed dotted line 0.18mm \r\nA,2.16,-0.54,0.09,-0.54\r\n*11b018,Double-dashed dotted line 0.18mm \r\nA,2.16,-0.54,2.16,-0.54,.09,-0.54\r\n*12b018,Dashed double-dotted line 0.18mm \r\nA,2.16,-0.54,0.09,-0.54,0.09,-0.54\r\n*13b018,Double-dashed double-dotted line 0.18mm \r\nA,2.16,-0.54,2.16,-0.54,0.09,-0.54,0.09,-0.54\r\n*14b018,Dashed triplicate-dotted line 0.18mm \r\nA,2.16,-0.54,0.09,-0.54,0.09,-0.54,0.09,-0.54\r\n*15b018,Double-dashed triplicate-dotted line 0.18mm \r\nA,2.16,-0.54,2.16,-0.54,0.09,-0.54,0.09,-0.54,0.09,-0.54\r\n*02b025,Dashed Line 0.25mm \r\nA,3,-0.75\r\n*03b025,Dashed space line 0.25mm \r\nA,3,-4.5\r\n*04b025,Long dashed dotted line 0.25mm \r\nA,6,-0.75,0.125,-0.75\r\n*05b025,Long dash double dotted line 0.25mm \r\nA,6,-0.75,0.125,-0.75,0.125,-0.75\r\n*06b025,Long dashed triplicate dotted line 0.25mm \r\nA,6,-0.75,0.125,-0.75,0.125,-0.75,0.125,-0.75\r\n*07b025,Dotted line 0.25 mm \r\nA,0.125,-0.75\r\n*08b025,Long dashed short dashed line 0.25mm \r\nA,6,-0.75,1.5,-0.75\r\n*09b025,Long dashed double-short-dashed line 0.25mm \r\nA,6,-0.75,1.5,-0.75,1.5,-0.75\r\n*10b025,Dashed dotted line 0.25mm \r\nA,3,-0.75,0.125,-0.75\r\n*11b025,Double-dashed dotted line 0.25mm \r\nA,3,-0.75,3,-0.75,0.125,-0.75\r\n*12b025,Dashed double-dotted line 0.25mm \r\nA,3,-0.75,0.125,-0.75,0.125,-0.75\r\n*13b025,Double-dashed double-dotted line 0.25mm \r\nA,3,-0.75,3,-0.75,0.125,-0.75,0.125,-0.75\r\n*14b025,Dashed triplicate-dotted line 0.25mm \r\nA,3,-0.75,0.125,-0.75,0.125,-0.75,0.125,-0.75\r\n*15b025,Double-dashed triplicate-dotted line 0.25mm \r\nA,3,-0.75,3,-0.75,0.125,-0.75,0.125,-0.75,0.125,-0.75\r\n*02b035,Dashed line 0.35mm \r\nA,4.2,-1.05\r\n*03b035,Dashed space line 0.35mm \r\nA,4.2,-6.3\r\n*04b035,Long dashed dotted line 0.35mm \r\nA,8.4,-1.05,0.175,-1.05\r\n*05b035,Long dash double dotted line 0.35mm \r\nA,8.4,-1.05,0.175,-1.05,0.175,-1.05\r\n*06b035,Long dashed triplicate dotted line 0.35mm \r\nA,8.4,-1.05,.175,-1.05,.175,-1.05,0.175,-1.05\r\n*07b035,Dotted line 0.35mm \r\nA,.175,-1.05\r\n*08b035,Long dashed short dashed line 0.35mm \r\nA,8.4,-1.05,2.1,-1.05\r\n*09b035,Long dashed double-short-dashed line 0.35mm \r\nA,8.4,-1.05,2.1,-1.05,2.1,-1.05\r\n*10b035,Lashed dotted line 0.35mm \r\nA,4.2,-1.05,0.175,-1.05\r\n*11b035,Double-dashed dotted line 0.35mm \r\nA,4.2,-1.05,4.2,-1.05,.175,-1.05\r\n*12b035,Dashed double-dotted line 0.35mm \r\nA,4.2,-1.05,.175,-1.05,.175,-1.05\r\n*13b035,Double-dashed double-dotted line 0.35mm \r\nA,4.2,-1.05,4.2,-1.05,.175,-1.05,.175,-1.05\r\n*14b035,Dashed triplicate-dotted line 0.35mm \r\nA,4.2,-1.05,.175,-1.05,.175,-1.05,.175,-1.05\r\n*15b035,Double-dashed triplicate-dotted line 0.35mm \r\nA,4.2,-1.05,4.2,-1.05,.175,-1.05,.175,-1.05,.175,-1.05\r\n*02b05,Dashed line 0.5mm \r\nA,6,-1.5\r\n*03b05,Dashed space line 0.5mm \r\nA,6,-9\r\n*04b05,Long dashed dotted line 0.5mm \r\nA,12,-1.5,0.25,-1.5\r\n*05b05,Long dash double dotted line 0.5mm \r\nA,12,-1.5,0.25,-1.5,0.25,-1.5\r\n*06b05,Long dashed triplicate dotted line 0.5mm \r\nA,12,-1.5,0.25,-1.5,.25,-1.5,0.25,-1.5\r\n*07b05,Dotted line 0.5mm \r\nA,0.25,-1.5\r\n*08b05,Long dashed short dashed line 0.5mm \r\nA,12,-1.5,3,-1.5\r\n*09b05,Long dashed double-short-dashed line 0.5mm \r\nA,12,-1.5,3,-1.5,3,-1.5\r\n*10b05,Dashed dotted line 0.5mm \r\nA,6,-1.5,0.25,-1.5\r\n*11b05,Double-dashed dotted line 0.5mm \r\nA,6,-1.5,6,-1.5,0.25,-1.5\r\n*12b05,Dashed double-dotted line 0.5mm \r\nA,6,-1.5,.25,-1.5,0.25,-1.5\r\n*13b05,Double-dashed double-dotted line 0.5mm \r\nA,6,-1.5,6,-1.5,0.25,-1.5,0.25,-1.5\r\n*14b05,Dashed triplicate-dotted line 0.5mm \r\nA,6,-1.5,0.25,-1.5,0.25,-1.5,0.25,-1.5\r\n*15b05,Double-dashed triplicate-dotted line 0.5mm \r\nA,6,-1.5,6,-1.5,0.25,-1.5,0.25,-1.5,0.25,-1.5\r\n*02b07,Dashed Line 0.7mm \r\nA,8.4,-2.1\r\n*03b07,Dashed space line 0.7mm \r\nA,8.4,-12.6\r\n*04b07,Long dashed dotted line 0.7mm \r\nA,16.8,-2.1,0.35,-2.1\r\n*05b07,Long dash double dotted line 0.7mm \r\nA,16.8,-2.1,0.35,-2.1,0.35,-2.1\r\n*06b07,Long dashed triplicate dotted line 0.7mm \r\nA,16.8,-2.1,0.35,-2.1,0.35,-2.1,0.35,-2.1\r\n*07b07,Dotted line 0.7mm \r\nA,0.35,-2.1\r\n*08b07,Long dashed short dashed line 0.7mm \r\nA,16.8,-2.1,4.2,-2.1\r\n*09b07,Long dashed double-short-dashed line 0.7mm \r\nA,16.8,-2.1,4.2,-2.1,4.2,-2.1\r\n*10b07,Dashed dotted line 0.7mm \r\nA,8.4,-2.1,0.35,-2.1\r\n*11b07,Double-dashed dotted line 0.7mm \r\nA,8.4,-2.1,8.4,-2.1,0.35,-2.1\r\n*12b07,Dashed double-dotted line 0.7mm \r\nA,8.4,-2.1,0.35,-2.1,0.35,-2.1\r\n*13b07,Double-dashed double-dotted line 0.7mm \r\nA,8.4,-2.1,8.4,-2.1,0.35,-2.1,0.35,-2.1\r\n*14b07,Dashed triplicate-dotted line 0.7mm \r\nA,8.4,-2.1,0.35,-2.1,0.35,-2.1,0.35,-2.1\r\n*15b07,Double-dashed triplicate-dotted line 0.7mm \r\nA,8.4,-2.1,8.4,-2.1,0.35,-2.1,0.35,-2.1,0.35,-2.1\r\n*02b1,Dashed Line 1mm \r\nA,12,-3\r\n*03b1,Dashed space line 1mm \r\nA,12,-18\r\n*04b1,Long dashed dotted line 1mm \r\nA,24,-3,.5,-3\r\n*05b1,Long dash double dotted line 1mm \r\nA,24,-3,.5,-3,.5,-3\r\n*06b1,Long dashed triplicate dotted line 1mm \r\nA,24,-3,.5,-3,.5,-3,.5,-3\r\n*07b1,Dotted line\r\nA,.5,-3\r\n*08b1,Long dashed short dashed line 1mm \r\nA,24,-3,6,-3\r\n*09b1,Long dashed double-short-dashed line 1mm \r\nA,24,-3,6,-3,6,-3\r\n*10b1,Dashed dotted line 1mm \r\nA,12,-3,.5,-3\r\n*11b1,Double-dashed dotted line 1mm \r\nA,12,-3,12,-3,0.5,-3\r\n*12b1,Dashed double-dotted line 1mm \r\nA,12,-3,0.5,-3,0.5,-3\r\n*13b1,Double-dashed double-dotted line 1mm \r\nA,12,-3,12,-3,0.5,-3,0.5,-3\r\n*14b1,Dashed triplicate-dotted line 1mm \r\nA,12,-3,0.5,-3,0.5,-3,0.5,-3\r\n*15b1,Double-dashed triplicate-dotted line 1mm \r\nA,12,-3,12,-3,0.5,-3,.5,-3,0.5,-3\r\n*02b14,Dashed Line 1.4mm \r\nA,16.8,-4.2\r\n*03b14,Dashed space line 1.4mm \r\nA,16.8,25.2\r\n*04b14,Long dashed dotted line 1.4mm \r\nA,33.6,-4.2,.7,-4.2\r\n*05b14,Long dash double dotted line 1.4mm \r\nA,33.6,-4.2,.7,-4.2,.7,-4.2\r\n*06b14,Long dashed triplicate dotted line 1.4mm \r\nA,33.6,-4.2,.7,-4.2,.7,-4.2,.7,-4.2\r\n*07b14,Dotted line 1.4mm \r\nA,.7,-4.2\r\n*08b14,Long dashed short dashed line 1.4mm \r\nA,33.6,-4.2,8.4,-4.2\r\n*09b14,Long dashed double-short-dashed line 1.4mm \r\nA,33.6,-4.2,8.4,-4.2,8.4,-4.2\r\n*10b14,Dashed dotted line 1.4mm \r\nA,16.8,-4.2,.7,-4.2\r\n*11b14,Double-dashed dotted line 1.4mm \r\nA,16.8,-4.2,16.8,-4.2,.7,-4.2\r\n*12b14,Dashed double-dotted line 1.4mm \r\nA,16.8,-4.2,.7,-4.2,.7,-4.2\r\n*13b14,Double-dashed double-dotted line 1.4mm \r\nA,16.8,-4.2,16.8,-4.2,.7,-4.2,.7,-4.2\r\n*14b14,Dashed triplicate-dotted line 1.4mm \r\nA,16.8,-4.2,.7,-4.2,.7,-4.2,.7,-4.2\r\n*15b14,Double-dashed triplicate-dotted line 1.4mm \r\nA,16.8,-4.2,16.8,-4.2,.7,-4.2,.7,-4.2,.7,-4.2\r\n*02b2,Dashed Line 2mm \r\nA,24,-6\r\n*03b2,Dashed space line 2mm \r\nA,24,-36\r\n*04b2,Long dashed dotted line 2mm \r\nA,48,-6,1,-6\r\n*05b2,Long dash double dotted line 2mm \r\nA,48,-6,1,-6,1,-6\r\n*06b2,Long dashed triplicate dotted line 2mm \r\nA,48,-6,1,-6,1,-6,1,-6\r\n*07b2,Dotted line 2mm \r\nA,1,-6\r\n*08b2,Long dashed short dashed line 2mm \r\nA,48,-6,12,-6\r\n*09b2,Long dashed double-short-dashed line 2mm \r\nA,48,-6,12,-6,12,-6\r\n*10b2,Dashed dotted line 2mm \r\nA,24,-6,1,-6\r\n*11b2,Double-dashed dotted line 2mm \r\nA,24,-6,24,-6,1,-6\r\n*12b2,Dashed double-dotted line 2mm \r\nA,24,-6,1,-6,1,-6\r\n*13b2,Double-dashed double-dotted line 2mm \r\nA,24,-6,24,-6,1,-6,1,-6\r\n*14b2,Dashed triplicate-dotted line 2mm \r\nA,24,-6,1,-6,1,-6,1,-6\r\n*15b2,Double-dashed triplicate-dotted line 2mm \r\nA,24,-6,24,-6,1,-6,1,-6,1,-6\r\n;; Complex linetypes using standard style\r\n*FENCELINE1,Fenceline_circle ----0-----0----0-----0----0-----0--\r\nA,.25,-.1,[CIRC1,ltypeshp.shx,x=-.1,s=.1],-.1,.1\r\n*FENCELINE2,Fenceline square ----[]-----[]----[]-----[]----[]---\r\nA,.25,-.1,[BOX,ltypeshp.shx,x=-.1,s=.1],-.1,1\r\n*TRACKS,Tracks -|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-\r\nA,.15,[TRACK1,ltypeshp.shx,s=.25],.15\r\n*MAP,Map line ----MAP----MAP----MAP----MAP----MAP---- \r\nA,.5,-.2,[\"MAP\",STANDARD,S=.1,R=0.0,X=-0.1,Y=-.05],-.25\r\n*BATTING,Batting SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\r\nA,.0001,-.1,[BAT,ltypeshp.shx,x=-.1,s=.1],-.2,[BAT,ltypeshp.shx,r=180,x=.1,s=.1],-.1\r\n*ZIGZAG,Zig zag /\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\r\nA,.0001,-.2,[ZIG,ltypeshp.shx,x=-.2,s=.2],-.4,[ZIG,ltypeshp.shx,r=180,x=.2,s=.2],-.2\r\n*HOT_WATER_SUPPLY,Hot water supply ---- HW ---- HW ---- HW ----\r\nA,12.7,-5.08,[\"HW\",STANDARD,S=2.54,R=0.0,X=-2.54,Y=-1.27],-5.08\r\n*GAS_LINE,Gas line ----GAS----GAS----GAS----GAS----GAS----GAS--\r\nA,.5,-.2,[\"GAS\",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05],-.25\r\n*SMILEYS,Smiley line ---- :^) ---- 8) ---- :^) ----\r\nA,12.7,-5.08,[\":^)\",STANDARD,S=2.54,R=0.0,X=-2.54,Y=-1.27],-5.08,12.7,-5.08,[\"8)\",STANDARD,S=2.54,R=0.0,X=-2.54,Y=-1.27],-5.08\r\n\r\n;------------Slope--------------\r\n*SLOPE,1B 1S |-|-|-|-|-|-|-|-|-|-|-|-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE-D, 1B 1S Double |-|-|-|-|-|-|-|-|-|-|-|-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE2, 1B 2S ||-||-||-||-||-||-||-||-||-||-||-||-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE2-D, 1B 2S Double ||-||-||-||-||-||-||-||-||-||-||-||-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE3, 1B 3S |||-|||-|||-|||-|||-|||-|||-|||-|||-|||-|||-|||-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE3-D, 1B 3S Double |||-|||-|||-|||-|||-|||-|||-|||-|||-|||-|||-|||-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE4, 1B 4S ||||-||||-||||-||||-||||-||||-||||-||||-||||-||||-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE4-D, 1B 4S Double ||||-||||-||||-||||-||||-||||-||||-||||-||||-||||-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE5, 1B 5S |||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=0.52,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n*SLOPE5-D, 1B 5S Double |||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-|||||-\r\nA,0.13,[TRACK1,ltypeshp.shx,S=1.04,R=0.0,X=0,Y=1.04],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.52],0.26,[TRACK1,ltypeshp.shx,S=0.26,R=0.0,X=0,Y=0.26],0.13\r\n\r\n;------------Alphabets--------------\r\n*Letter A, ---- A ---- A ---- A ---- A ---- A ----\r\nA,1.0,-0.5,[\"A\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter B, ---- B ---- B ---- B ---- B ---- B ----\r\nA,1.0,-0.5,[\"B\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter C,---- C ---- C ---- C ---- C ---- C ----\r\nA,1.0,-0.5,[\"C\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter D, ---- D ---- D ---- D ---- D ---- D ----\r\nA,1.0,-0.5,[\"D\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter E, ---- E ---- E ---- E ---- E ---- E ----\r\nA,1.0,-0.5,[\"E\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter F, ---- F ---- F ---- F ---- F ---- F ----\r\nA,1.0,-0.5,[\"F\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter G, ---- G ---- G ---- G ---- G ---- G ----\r\nA,1.0,-0.5,[\"G\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter H, ---- H ---- H ---- H ---- H ---- H ----\r\nA,1.0,-0.5,[\"H\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter I, ---- I ---- I ---- I ---- I ---- I ----\r\nA,1.0,-0.5,[\"I\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter J, ---- J ---- J ---- J ---- J ---- J ----\r\nA,1.0,-0.5,[\"J\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter K, ---- K ---- K ---- K ---- K ---- K ----\r\nA,1.0,-0.5,[\"K\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter L, ---- L ---- L ---- L ---- L ---- L ----\r\nA,1.0,-0.5,[\"L\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter M, ---- M ---- M ---- M ---- M ---- M ----\r\nA,1.0,-0.5,[\"M\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter N, ---- N ---- N ---- N ---- N ---- N ----\r\nA,1.0,-0.5,[\"N\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter O, ---- O ---- O ---- O ---- O ---- O ----\r\nA,1.0,-0.5,[\"O\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter P, ---- P ---- P ---- P ---- P ---- P ----\r\nA,1.0,-0.5,[\"P\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter Q, ---- Q ---- Q ---- Q ---- Q ---- Q ----\r\nA,1.0,-0.5,[\"Q\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter R, ---- R ---- R ---- R ---- R ---- R ----\r\nA,1.0,-0.5,[\"R\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter S, ---- S ---- S ---- S ---- S ---- S ----\r\nA,1.0,-0.5,[\"S\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter T, ---- T ---- T ---- T ---- T ---- T ----\r\nA,1.0,-0.5,[\"T\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter U, ---- U ---- U ---- U ---- U ---- U ----\r\nA,1.0,-0.5,[\"U\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter V, ---- V ---- V ---- V ---- V ---- V ----\r\nA,1.0,-0.5,[\"V\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter W, ---- W ---- W ---- W ---- W ---- W ----\r\nA,1.0,-0.5,[\"W\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter X, ---- X ---- X ---- X ---- X ---- X ----\r\nA,1.0,-0.5,[\"X\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter Y, ---- Y ---- Y ---- Y ---- Y ---- Y ----\r\nA,1.0,-0.5,[\"Y\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Letter Z, ---- Z ---- Z ---- Z ---- Z ---- Z ----\r\nA,1.0,-0.5,[\"Z\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n\r\n;------------Numericals--------------\r\n*Numbers 0, ---- 0 ---- 0 ---- 0 ---- 0 ---- 0 ----\r\nA,1.0,-0.5,[\"0\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 1, ---- 1 ---- 1 ---- 1 ---- 1 ---- 1 ----\r\nA,1.0,-0.5,[\"1\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 2, ---- 2 ---- 2 ---- 2 ---- 2 ---- 2 ----\r\nA,1.0,-0.5,[\"2\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 3, ---- 3 ---- 3 ---- 3 ---- 3 ---- 3 ----\r\nA,1.0,-0.5,[\"3\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 4, ---- 4 ---- 4 ---- 4 ---- 4 ---- 4 ----\r\nA,1.0,-0.5,[\"4\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 5, ---- 5 ---- 5 ---- 5 ---- 5 ---- 5 ----\r\nA,1.0,-0.5,[\"5\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 6, ---- 6 ---- 6 ---- 6 ---- 6 ---- 6 ----\r\nA,1.0,-0.5,[\"6\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 7, ---- 7 ---- 7 ---- 7 ---- 7 ---- 7 ----\r\nA,1.0,-0.5,[\"7\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 8, ---- 8 ---- 8 ---- 8 ---- 8 ---- 8 ----\r\nA,1.0,-0.5,[\"8\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n*Numbers 9, ---- 9 ---- 9 ---- 9 ---- 9 ---- 9 ----\r\nA,1.0,-0.5,[\"9\",standard,S=1,R=0,X=0,Y=-0.5],-1.5\r\n\r\n\r\n"; +export const KOSDIC_LIN = ";; ------------------------------------�� �� �� ��------------------------------------\r\n;; �� �� ���� ���� ����(KOSDIC.lin)�� �Ǽ�CALS/EC ���ڵ��� �ۼ�ǥ���� �� ��Ͽ� ���ǵ� �� ������\r\n;; AutoCAD ����ڿ��� �����ϱ� ���� ���۵Ǿ����ϴ�.\r\n;; \r\n;; ǥ�ع��� : �Ǽ�CALS/EC ���ڵ��� �ۼ�ǥ�� V1.1(2006.12)\r\n;; ������� : �Ǽ�CALS/EC ������ �ѱ��Ǽ����������\r\n;;\r\n;; �����Ģ : 1/1 ��ô�� ����ũ�� 2.0mm�� ��� ������ ũ�⸦ ������\r\n;; LIB ��Ģ : AutoCAD�� ANSI����(���� ��������� ����)�� ����Ű ���� 1/10�� ������\r\n;; (��) ���� �� ���� ������ 2mm�̸� 0.2unit�� ����\r\n;; ����Ģ : �ǹ����鿡 ����� ��� �������� ��Ģ�� ���յǷ��� ��������ô�� 10�踦 ������\r\n;; (��) LTSCALE=10 (���� 8~10��), ������ô�� 1/5 �̸� LTSCALE=5x10��=50\r\n;;\r\n;; ISO���� �԰� 15��\r\n// ���� AutoCAD ISO�� 25.4����� ������ �� ����\r\n*A-ISONS01,ISO �����԰� 01 Continuous ________________________________\r\nA,1,1\r\n*A-ISONS02,ISO �����԰� 02 dash __ __ __ __ __ __ __ __ __ __ __ __ __\r\nA,.47244,-.118111\r\n*A-ISONS03,ISO �����԰� 03 dash space __ __ __ __ __ __\r\nA,.47244,-.7086614\r\n*A-ISONS04,ISO �����԰� 04 long-dash dot ____ . ____ . ____ . ____ . _\r\nA,.94488,-.11811,0,-.11811\r\n*A-ISONS05,ISO �����԰� 05 long-dash double-dot ____ .. ____ .. ____ . \r\nA,.94488,-.11811,0,-.11811,0,-.11811\r\n*A-ISONS06,ISO �����԰� 06 long-dash triple-dot ____ ... ____ ... ____\r\nA,.94488,-.11811,0,-.11811,0,-.11811,0,-.11811\r\n*A-ISONS07,ISO �����԰� 07 dot . . . . . . . . . . . . . . . . . . . . \r\nA,0,-.11811\r\n*A-ISONS08,ISO �����԰� 08 long-dash short-dash ____ __ ____ __ ____ _\r\nA,.94488,-.11811,.94488,-.11811\r\n*A-ISONS09,ISO �����԰� 09 long-dash double-short-dash ____ __ __ ____\r\nA,.94488,-.11811,.94488,-.11811,.94488,-.11811\r\n*A-ISONS10,ISO �����԰� 10 dash dot __ . __ . __ . __ . __ . __ . __ . \r\nA,.47244,-.11811,0,-.11811\r\n*A-ISONS11,ISO �����԰� 11 double-dash dot __ __ . __ __ . __ __ . __ _\r\nA,.47244,-.11811,.47244,-.11811,0,-.11811\r\n*A-ISONS12,ISO �����԰� 12 dash double-dot __ . . __ . . __ . . __ . . \r\nA,.47244,-.11811,0,-.11811,0,-.11811\r\n*A-ISONS13,ISO �����԰� 13 double-dash double-dot __ __ . . __ __ . . _\r\nA,.47244,-.11811,.47244,-.11811,0,-.11811,0,-.11811\r\n*A-ISONS14,ISO �����԰� 14 dash triple-dot __ . . . __ . . . __ . . . _\r\nA,.47244,-.11811,0,-.11811,0,-.11811,0,-.11811\r\n*A-ISONS15,ISO �����԰� 15 double-dash triple-dot __ __ . . . __ __ . .\r\nA,.47244,-.11811,.47244,-.11811,0,-.11811,0,-.11811,0,-.11811\r\n\r\n;; ���CAD ����\r\n*A-BORDR01,�ܰ���(�Ϲ�) Border __ __ . __ __ . __ __ . __ __ . __ __ .\r\nA,.5,-.25,.5,-.25,0,-.25\r\n*A-BORDR01H,�ܰ���(�ݹ��) Border (.5x) __.__.__.__.__.__.__.__.__.__.__.\r\nA,.25,-.125,.25,-.125,0,-.125\r\n*A-BORDR01X,�ܰ���(���) Border (2x) ____ ____ . ____ ____ . ___\r\nA,1.0,-.5,1.0,-.5,0,-.5\r\n*A-CENTR01,�߽ɼ�(�Ϲ�) Center ____ _ ____ _ ____ _ ____ _ ____ _ ____\r\nA,1.25,-.25,.25,-.25\r\n*A-CENTR01H,�߽ɼ�(�ݹ��) Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___\r\nA,.75,-.125,.125,-.125\r\n*A-CENTR01X,�߽ɼ�(���) Center (2x) ________ __ ________ __ _____\r\nA,2.5,-.5,.5,-.5\r\n*A-DASDT01,�Ĵ�����(�Ϲ�) Dash dot __ . __ . __ . __ . __ . __ . __ . __\r\nA,.5,-.25,0,-.25\r\n*A-DASDT01H,�Ĵ�����(�ݹ��) Dash dot (.5x) _._._._._._._._._._._._._._._.\r\nA,.25,-.125,0,-.125\r\n*A-DASDT01X,�Ĵ�����(���) Dash dot (2x) ____ . ____ . ____ . ___\r\nA,1.0,-.5,0,-.5\r\n*A-DASHD01,�ļ�(�Ϲ�) Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _\r\nA,.5,-.25\r\n*A-DASHD01H,�ļ�(�ݹ��) Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\nA,.25,-.125\r\n*A-DASHD01X,�ļ�(���) Dashed (2x) ____ ____ ____ ____ ____ ___\r\nA,1.0,-.5\r\n*A-DIVID01,���Ҽ�(�Ϲ�) Divide ____ . . ____ . . ____ . . ____ . . ____\r\nA,.5,-.25,0,-.25,0,-.25\r\n*A-DIVID01H,���Ҽ�(�ݹ��) Divide (.5x) __..__..__..__..__..__..__..__.._\r\nA,.25,-.125,0,-.125,0,-.125\r\n*A-DIVID01X,���Ҽ�(���) Divide (2x) ________ . . ________ . . _\r\nA,1.0,-.5,0,-.5,0,-.5\r\n*A-DOTLN01,����(�Ϲ�) Dot . . . . . . . . . . . . . . . . . . . . . . . .\r\nA,0,-.25\r\n*A-DOTLN01H,����(�ݹ��) Dot (.5x) ........................................\r\nA,0,-.125\r\n*A-DOTLN01X,����(���) Dot (2x) . . . . . . . . . . . . . .\r\nA,0,-.5\r\n*A-HIDDN01,������(�Ϲ�) Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ __\r\nA,.25,-.125\r\n*A-HIDDN01H,������(�ݹ��) Hidden (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\nA,.125,-.0625\r\n*A-HIDDN01X,������(���) Hidden (2x) ____ ____ ____ ____ ____ ____ ____ \r\nA,.5,-.25\r\n*A-PHATM01,����(�Ϲ�) Phantom ______ __ __ ______ __ __ ______ \r\nA,1.25,-.25,.25,-.25,.25,-.25\r\n*A-PHATM01H,����(�ݹ��) Phantom (.5x) ___ _ _ ___ _ _ ___ _ _ ___ _ _\r\nA,.625,-.125,.125,-.125,.125,-.125\r\n*A-PHATM01X,����(���) Phantom (2x) ____________ ____ ____ _\r\nA,2.5,-.5,.5,-.5,.5,-.5\r\n\r\n;; �潺�ü�\r\n*E-FENCE01,�潺(X �ļ�)\r\nA,.85,-.15,[KSC11,kosdic.shx,s=.1],-.15,.85\r\n*E-FENCE02,�潺(X �Ǽ�)\r\nA,1.0,[KSC11,kosdic.shx,s=.1],1.0\r\n*E-FENCE03,�潺(/\\ �ļ�)\r\nA,.875,-.05,[KSC12,kosdic.shx,s=.1],-.2,.875\r\n*E-FENCE04,�潺(+ �ļ�)\r\nA,.85,-.15,[KSC15,kosdic.shx,s=.1],-.15,.85\r\n\r\n;; �������\r\n*E-UTIL01,����(| �Ǽ�)\r\nA,1.0,[KSC01,kosdic.shx,s=.1],1.0\r\n*E-UTIL02,����(|| �ļ�)\r\nA,.05,[KSC01,kosdic.shx,s=.1],-.1,[KSC01,kosdic.shx,s=.1],1.85\r\n*E-UTIL03,����(|| �Ǽ�)\r\nA,.95,[KSC01,kosdic.shx,s=.1],.1,[KSC01,kosdic.shx,s=.1],.95\r\n*E-UTIL04,����(||| �ļ�)\r\nA,.9,[KSC01,kosdic.shx,s=.1],-.1,[KSC01,kosdic.shx,s=.1],-.1,[KSC01,kosdic.shx,s=.1],.9\r\n*E-UTIL05,����(||| �Ǽ�)\r\nA,.9,[KSC01,kosdic.shx,s=.1],.1,[KSC01,kosdic.shx,s=.1],.1,[KSC01,kosdic.shx,s=.1],.9\r\n*E-UTIL06,����(/ �ļ�)\r\nA,.9,-.1,[KSC02,kosdic.shx,s=.1],-.1,.9\r\n*E-UTIL07,����(/ �Ǽ�)\r\nA,1.0,[KSC02,kosdic.shx,s=.1],1.0\r\n*E-UTIL08,����(// �ļ�)\r\nA,.85,-.15,[KSC05,kosdic.shx,s=.1],-.15,.85\r\n*E-UTIL09,����(// �Ǽ�)\r\nA,1.0,[KSC05,kosdic.shx,s=.1],1.0\r\n*E-UTIL10,����(/// �ļ�)\r\nA,.8,-.2,[KSC06,kosdic.shx,s=.1],-.2,.8\r\n*E-UTIL11,����(/// �Ǽ�)\r\nA,1.0,[KSC06,kosdic.shx,s=.1],1.0\r\n\r\n;; �ü�����\r\n*E-FACLN01,�ü�(- ���༱)\r\nA,.25,[KSC01,kosdic.shx,y=-.05,s=.1,r=270],.25\r\n*E-FACLN02,�ü�(= ���༱)\r\nA,.25,[KSC04,kosdic.shx,y=-.05,s=.1],.25\r\n*E-FACLN03,�ü�(O �ļ�)\r\nA,.85,[KSC31,kosdic.shx,x=.075,s=.075],-.15,1.0\r\n*E-FACLN04,�ü�(O �Ǽ�)\r\nA,1.0,[KSC31,kosdic.shx,s=.075],1.0\r\n*E-FACLN05,�ü�(��,����Ʈ)\r\nA,1.0,[KSC32,kosdic.shx,s=.075],1.0\r\n\r\n;; ��������\r\n*E-TOPOG01,����(�� �ļ�)\r\nA,.000002,[KSC16,kosdic.shx,s=.1],-.25\r\n*E-TOPOG02,����(�� �Ǽ�)\r\nA,.000002,[KSC16,kosdic.shx,s=.1],-.2\r\n*E-TOPOG03,����(| �Ǽ�)\r\nA,0,-.1,[KSC15,kosdic.shx,s=.1],-.1\r\n*E-TOPOG04,����(| ����)\r\nA,0,[KSC00,kosdic.shx,y=.1,s=.1],.2,[KSC00,kosdic.shx,s=.1],.2\r\n*E-TOPOG05,����(~. ����)\r\nA,.000005,[KSC1C,kosdic.shx,s=.1],-.45,[KSC30,kosdic.shx,s=.1],-.05\r\n\r\n;; ������� ����\r\n*B-ZIGZG01,�������(��)\r\nA,.000002,[KSC13,kosdic.shx,s=.1],-.2\r\n*B-ZIGZG02,�������(ȣ)\r\nA,.000002,[KSC1B,kosdic.shx,s=.1],-.2\r\n*C-ZIGZG01,�������(�Ǽ�,��)\r\nA,.1,[KSC13,kosdic.shx,s=.1],.1\r\n*C-ZIGZG02,�������(�Ǽ�,ȣ)\r\nA,.1,[KSC1B,kosdic.shx,s=.1],.1\r\n\r\n;; ���� �� ����\r\n*D-SWALL01,����(�ű�)\r\nA,0,[KSC61,kosdic.shx,y=-.1,s=.1],-.2\r\n*X-SWALL01,����(����)\r\nA,0,[KSC71,kosdic.shx,s=.1],-.4\r\n*D-BWALL01,���ϴ�(����)\r\nA,0,[KSC18,kosdic.shx,s=.1],-.25\r\n*D-BWALL02,���ϴ�(�ű�)\r\nA,.000005,[KSC3A,kosdic.shx,s=.05],-.1,[KSC3A,kosdic.shx,s=.05],-.1,[KSC04,kosdic.shx,y=-.025,s=.05],-.1,[KSC04,kosdic.shx,y=-.025,s=.05],-.1,[KSC04,kosdic.shx,y=-.025,s=.05],-.05\r\n\r\n;; ��/�����迭\r\n*E-DOTLN01,���ҹ迭\r\nA,0,[KSC30,kosdic.shx,s=.3],-.15\r\n*E-DOTLN02,���ҹ迭(��)\r\nA,.075,[KSC30,kosdic.shx,s=.3],.075\r\n*E-CIRCL01,�����������Ϲ迭\r\nA,0,[KSC31,kosdic.shx,s=.1],-.2\r\n*E-CIRCL02,ä��������Ϲ迭\r\nA,0,[KSC32,kosdic.shx,s=.1],-.2\r\n*D-RROAD01,ö��(����)\r\nA,0,[KSC3A,kosdic.shx,s=.1],-.2,[KSC04,kosdic.shx,y=-.05,s=.1],-.2\r\n\r\n;; ������\r\n*E-DIGLN01,������\r\nA,.9,-.2,[KSC19,kosdic.shx,s=.1,r=180],.9\r\n*E-DIGLN01H,������(�ݹ��)\r\nA,.45,-.1,[KSC19,kosdic.shx,s=.05,r=180],.45\r\n*E-DIGLN01X,������(���)\r\nA,1.8,-.4,[KSC19,kosdic.shx,s=.2,r=180],1.8\r\n\r\n;; ���\r\n*B-GREEN01,����/�����\r\nA,.000002,[KSC08,kosdic.shx,s=.1],-.2\r\n*B-GREEN02,�����\r\nA,0,[KSC21,kosdic.shx,s=.1],-.45\r\n*E-BOUND01,�������\r\nA,.875,[KSC60,kosdic.shx,s=.1],-.25,.875\r\n\r\n;; ��Ÿ\r\n*B-RANDM01,�ұ�Ģ��\r\nA,0,[KSC1A,kosdic.shx,s=.1],-.2\r\n*E-DEMOL01,ö�Ŵ��\r\nA,.075,[KSC01,kosdic.shx,s=.1,r=30],.075\r\n*X-EARTH01,���ݼ�\r\nA,0,[KSC20,kosdic.shx,s=.1,x=.25,r=180],.25\r\n\r\n;; ���ܼ�\r\n*E-CUTLN01,���ܼ�(��)\r\nA,.95,[KSC14,kosdic.shx,s=.1],-.1,.95\r\n*E-CUTLN02,���ܼ�(ȣ)\r\nA,.95,[KSC22,kosdic.shx,s=.1],-.1,.95\r\n\r\n;; ���帧 ����\r\n*E-WFLOW01,���帧(��, �ļ�)\r\nA,.6,[KSC36,kosdic.shx,s=.1],-.65\r\n*E-WFLOW02,���帧(��, �Ǽ�)\r\nA,1.5,[KSC36,kosdic.shx,s=.1],0\r\n*E-WFLOW03,���帧(ȭ��, �ļ�)\r\nA,.6,[KSC35,kosdic.shx,s=.1],-.65\r\n*E-WFLOW04,���帧(ȭ��, �Ǽ�)\r\nA,1.5,[KSC35,kosdic.shx,s=.1],0\r\n\r\n;; ���������\r\n*G-WATER01,���������(W ����)\r\nA,2.933333,[\"W\",Standard,y=.05,s=.2],.066667\r\n*G-WATER02,���������(W �ļ�)\r\nA,2.75,-.05,[\"W\",Standard,y=-.1,s=.2,r=360],-.2\r\n\r\n;; �¼�����\r\n*G-HWATR01,�¼�����(HWL ����)\r\nA,2.783629,[\"HWL\",Standard,y=.05,s=.2],.216371\r\n*G-HWATR02,�¼�����(HWL �ļ�)\r\nA,2.35,-.05,[\"HWL\",Standard,y=-.1,s=.2],-.6\r\n\r\n;; �ü�����\r\n*G-CWATR01,�ü�����(CWL ����)\r\nA,2.783629,[\"CWL\",Standard,y=.05,s=.2],.216371\r\n*G-CWATR02,�ü�����(CWL �ļ�)\r\nA,2.35,-.05,[\"CWL\",Standard,y=-.1,s=.2],-.6\r\n\r\n;; ��������\r\n*E-SEWER01,��������(����)\r\nA,.95,-.1,[KSC09,kosdic.shx,s=.1,r=180],.95\r\n*E-SEWER01H,��������(����,�ݹ��)\r\nA,.475,-.05,[KSC09,kosdic.shx,s=.05,r=180],.475\r\n*E-SEWER01X,��������(����,���)\r\nA,1.9,-.2,[KSC09,kosdic.shx,s=.2,r=180],1.9\r\n*G-SEWER01,��������(S ����)\r\nA,2.933333,[\"S\",Standard,y=.05,s=.2],.066667\r\n*G-SEWER02,��������(S �ļ�)\r\nA,2.75,-.05,[\"S\",Standard,y=-.1,s=.2,r=360],-.2\r\n\r\n;; ��ż���\r\n*G-TELCM01,��ż���(T ����)\r\nA,2.933333,[\"T\",Standard,y=.05,s=.2],.066667\r\n*G-TELCM02,��ż���(T �ļ�)\r\nA,2.75,-.05,[\"T\",Standard,y=-.1,s=.2,r=360],-.2\r\n\r\n;; ���⼱��\r\n*G-ELECT01,���⼱��(E ����)\r\nA,2.933333,[\"E\",Standard,y=.05,s=.2],.066667\r\n*G-ELECT02,���⼱��(E �ļ�)\r\nA,2.75,-.05,[\"E\",Standard,y=-.1,s=.2,r=360],-.2\r\n\r\n;; ��������\r\n*G-GASLN01,��������(G ����)\r\nA,2.933333,[\"G\",Standard,y=.05,s=.2],.066667\r\n*G-GASLN02,��������(G �ļ�)\r\nA,2.75,-.05,[\"G\",Standard,y=-.1,s=.2,r=360],-.2\r\n*G-GASLN03,��������(GAS ����)\r\nA,2.783629,[\"GAS\",Standard,y=.05,s=.2],.216371\r\n*G-GASLN04,��������(GAS �ļ�)\r\nA,2.35,-.05,[\"GAS\",Standard,y=-.1,s=.2],-.6\r\n\r\n;; �Ϲ�������\r\n;; *CAL421,PIPE\r\n;; A,2.733333,[\"PIPE\",Standard,y=.05,s=.2],.266667\r\n*G-PIPEL01,�Ϲ� ������(PIPE �ļ�)\r\nA,3.25,-.05,[\"PIPE\",Standard,y=-.1,s=.2],-.7\r\n\r\n;; �������\r\n*H-DICHT00,�������\r\nA,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"T\",Standard,y=-.1,s=.2,r=360],-.216667\r\n*H-DICHT00R,�������(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.466667,[\"T\",Standard,y=.1,s=.2,r=180],-.083333\r\n\r\n;; L������\r\n*H-DICHL00,L������ ����00\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.333333,[\"L\",Standard,y=-.1,s=.2],-.216667\r\n*H-DICHL00R,L������ ����00(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.466667,[\"L\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL01,L������ ����01\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.366667,[\"L1\",Standard,y=-.1,s=.2,r=360],-.383333\r\n*H-DICHL01R,L������ ����01(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.633333,[\"L1\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHL02,L������ ����02\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"L2\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHL02R,L������ ����02(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"L2\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL03,L������ ����03\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"L3\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHL03R,L������ ����03(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"L3\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL04,L������ ����04\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"L4\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHL04R,L������ ����04(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"L4\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL05,L������ ����05\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"L5\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHL05R,L������ ����05(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,[\"L5\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL06,L������ ����06\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"L6\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHL06R,L������ ����06(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,[\"L6\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL07,L������ ����07\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"L7\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHL07R,L������ ����07(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"L7\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL08,L������ ����08\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"L8\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHL08R,L������ ����08(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"L8\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL09,L������ ����09\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"L9\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHL09R,L������ ����09(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,[\"L9\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHL10,L������ ����10\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"L10\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-DICHL10R,L������ ����10(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"L10\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-DICHL11,L������ ����11\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.4,[\"L11\",Standard,y=-.1,s=.2],-.55\r\n*H-DICHL11R,L������ ����11(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.8,[\"L11\",Standard,y=.1,s=.2,r=180],-.15\r\n*H-DICHL12,L������ ����12\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.366667,[\"L12\",Standard,y=-.1,s=.2],-.583333\r\n*H-DICHL12R,L������ ����12(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.833333,[\"L12\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHL13,L������ ����13\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.366667,[\"L13\",Standard,y=-.1,s=.2,r=360],-.583333\r\n*H-DICHL13R,L������ ����13(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.833333,[\"L13\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHL14,L������ ����14\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.366667,[\"L14\",Standard,y=-.1,s=.2],-.583333\r\n*H-DICHL14R,L������ ����14(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.833333,[\"L14\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHL15,L������ ����15\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.366667,[\"L15\",Standard,y=-.1,s=.2],-.583333\r\n*H-DICHL15R,L������ ����15(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.833333,[\"L15\",Standard,y=.1,s=.2,r=180],-.116667\r\n\r\n;; U������\r\n*H-DICHU00,U������ ����00\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.333333,[\"U\",Standard,y=-.1,s=.2],-.216667\r\n*H-DICHU00R,U������ ����00(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.466667,[\"U\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU01,U������ ����01\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.366667,[\"U1\",Standard,y=-.1,s=.2],-.383333\r\n*H-DICHU01R,U������ ����01(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.633333,[\"U1\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHU02,U������ ����02\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"U2\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHU02R,U������ ����02(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"U2\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU03,U������ ����03\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"U3\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHU03R,U������ ����03(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"U3\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU04,U������ ����04\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"U4\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHU04R,U������ ����04(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"U4\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU05,U������ ����05\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"U5\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHU05R,U������ ����05(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"U5\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU06,U������ ����06\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"U6\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHU06R,U������ ����06(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"U6\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU07,U������ ����07\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"U7\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHU07R,U������ ����07(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"U7\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU08,U������ ����08\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"U8\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHU08R,U������ ����08(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"U8\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU09,U������ ����09\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"U9\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHU09R,U������ ����09(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"U9\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHU10,U������ ����10\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.383333,[\"U10\",Standard,y=-.1,s=.2],-.566667\r\n*H-DICHU10R,U������ ����10(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"U10\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-DICHU11,U������ ����11\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.4,[\"U11\",Standard,y=-.1,s=.2],-.55\r\n*H-DICHU11R,U������ ����11(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.8,[\"U11\",Standard,y=.1,s=.2,r=180],-.15\r\n*H-DICHU12,U������ ����12\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.366667,[\"U12\",Standard,y=-.1,s=.2],-.583333\r\n*H-DICHU12R,U������ ����12(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.833333,[\"U12\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHU13,U������ ����13\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.366667,[\"U13\",Standard,y=-.1,s=.2,r=360],-.583333\r\n*H-DICHU13R,U������ ����13(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.833333,[\"U13\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHU14,U������ ����14\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.366667,[\"U14\",Standard,y=-.1,s=.2],-.583333\r\n*H-DICHU14R,U������ ����14(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.833333,[\"U14\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHU15,U������ ����15\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.366667,[\"U15\",Standard,y=-.1,s=.2,r=360],-.583333\r\n*H-DICHU15R,U������ ����15(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.833333,[\"U15\",Standard,y=.1,s=.2,r=180],-.116667\r\n\r\n;; V������\r\n*H-DICHV00,V������ ����00\r\nA,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.3,[\"V\",Standard,y=-.1,s=.2,r=360],-.25\r\n*H-DICHV00R,V������ ����00(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.5,[\"V\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV01,V������ ����01\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"V1\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHV01R,V������ ����01(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"V1\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHV02,V������ ����02\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.3,[\"V2\",Standard,y=-.1,s=.2],-.45\r\n*H-DICHV02R,V������ ����02(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.7,[\"V2\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV03,V������ ����03\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,[\"V3\",Standard,y=-.1,s=.2,r=360],-.45\r\n*H-DICHV03R,V������ ����03(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.7,[\"V3\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV04,V������ ����04\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,[\"V4\",Standard,y=-.1,s=.2,r=360],-.45\r\n*H-DICHV04R,V������ ����04(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.7,[\"V4\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV05,V������ ����05\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,[\"V5\",Standard,y=-.1,s=.2,r=360],-.45\r\n*H-DICHV05R,V������ ����05(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.7,[\"V5\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV06,V������ ����06\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,[\"V6\",Standard,y=-.1,s=.2,r=360],-.45\r\n*H-DICHV06R,V������ ����06(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.25,0,-.45,[\"V6\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV07,V������ ����07\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,[\"V7\",Standard,y=-.1,s=.2,r=360],-.45\r\n*H-DICHV07R,V������ ����07(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.7,[\"V7\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV08,V������ ����08\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,[\"V8\",Standard,y=-.1,s=.2,r=360],-.45\r\n*H-DICHV08R,V������ ����08(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.7,[\"V8\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV09,V������ ����09\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.3,[\"V9\",Standard,y=-.1,s=.2,r=360],-.45\r\n*H-DICHV09R,V������ ����09(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.7,[\"V9\",Standard,y=.1,s=.2,r=180],-.05\r\n*H-DICHV10,V������ ����10\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.35,[\"V10\",Standard,y=-.1,s=.2],-.6\r\n*H-DICHV10R,V������ ����10(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.85,[\"V10\",Standard,y=.1,s=.2,r=180],-.1\r\n*H-DICHV11,V������ ����11\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.366667,[\"V11\",Standard,y=-.1,s=.2],-.583333\r\n*H-DICHV11R,V������ ����11(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.833333,[\"V11\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHV12,V������ ����12\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"V12\",Standard,y=-.1,s=.2,r=360],-.616667\r\n*H-DICHV12R,V������ ����12(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.866667,[\"V12\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHV13,V������ ����13\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.333333,[\"V13\",Standard,y=-.1,s=.2],-.616667\r\n*H-DICHV13R,V������ ����13(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.866667,[\"V13\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHV14,V������ ����14\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.333333,[\"V14\",Standard,y=-.1,s=.2],-.616667\r\n*H-DICHV14R,V������ ����14(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.866667,[\"V14\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHV15,V������ ����15\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.333333,[\"V15\",Standard,y=-.1,s=.2],-.616667\r\n*H-DICHV15R,V������ ����15(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.866667,[\"V15\",Standard,y=.1,s=.2,r=180],-.083333\r\n\r\n;; ����ũ\r\n*H-DICHD00,����ũ ����00\r\nA,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"D\",Standard,y=-.1,s=.2,r=360],-.216667\r\n*H-DICHD00R,����ũ ����00(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.466667,[\"D\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHD01,����ũ ����01\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.366667,[\"D1\",Standard,y=-.1,s=.2,r=360],-.383333\r\n*H-DICHD01R,����ũ ����01(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.633333,[\"D1\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHD02,����ũ ����02\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"D2\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHD02R,����ũ ����02(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"D2\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHD03,����ũ ����03\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"D3\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHD03R,����ũ ����03(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"D3\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHD04,����ũ ����04\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"D4\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHD04R,����ũ ����04(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,[\"D4\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHD05,����ũ ����05\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"D5\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHD05R,����ũ ����05(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"D5\",Standard,y=.1,s=.2,r=180],-.083333\r\n\r\n;; �긶�� ����\r\n*H-DICHB00,�긶������ ����00\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.633333,[\"B\",Standard,y=-.1,s=.2],-.216667\r\n*H-DICHB00R,�긶������ ����00(����)\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.766667,[\"B\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHB01,�긶������ ����01\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.666667,[\"B1\",Standard,y=-.1,s=.2],-.383333\r\n*H-DICHB01R,�긶������ ����01(����)\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.933333,[\"B1\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHB02,�긶������ ����02\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.633333,[\"B2\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHB02R,�긶������ ����02(����)\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.966667,[\"B2\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHB03,�긶������ ����03\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.633333,[\"B3\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHB03R,�긶������ ����03(����)\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.966667,[\"B3\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHB04,�긶������ ����04\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.633333,[\"B4\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHB04R,�긶������ ����04(����)\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.966667,[\"B4\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHB05,�긶������ ����05\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.633333,[\"B5\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHB05R,�긶������ ����05(����)\r\nA,.00001,[KSC52,kosdic.shx,s=.1],-.966667,[\"B5\",Standard,y=.1,s=.2,r=180],-.083333\r\n\r\n;; �;ϰ�\r\n*H-DICHM00,�;ϰ� ����00\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.333333,[\"M\",Standard,y=-.1,s=.2],-.216667\r\n*H-DICHM00R,�;ϰ� ����00(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.466667,[\"M\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHM01,�;ϰ� ����01\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.366667,[\"M1\",Standard,y=-.1,s=.2,r=360],-.383333\r\n*H-DICHM01R,�;ϰ� ����01(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.633333,[\"M1\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHM02,�;ϰ� ����02\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"M2\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHM02R,�;ϰ� ����02(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,[\"M2\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHM03,�;ϰ� ����03\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"M3\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHM03R,�;ϰ� ����03(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"M3\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHM04,�;ϰ� ����04\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"M4\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHM04R,�;ϰ� ����04(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"M4\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHM05,�;ϰ� ����05\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"M5\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHM05R,�;ϰ� ����05(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"M5\",Standard,y=.1,s=.2,r=180],-.083333\r\n\r\n;; �������\r\n*H-DICHO00,������� ����00\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.333333,[\"L/O\",Standard,y=-.1,s=.2],-.616667\r\n*H-DICHO00R,������� ����00(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.866667,[\"L/O\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHO01,������� ����01\r\nA,.5,[KSC35,kosdic.shx,s=.1],-.366667,[\"L1/O\",Standard,y=-.1,s=.2],-.783333\r\n*H-DICHO01R,������� ����01(����)\r\nA,.5,[KSC35,kosdic.shx,s=.1],-1.033333,[\"L1/O\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHO02,������� ����02\r\nA,.5,[KSC35,kosdic.shx,s=.1],-.333333,[\"L2/O\",Standard,y=-.1,s=.2],-.816667\r\n*H-DICHO02R,������� ����02(����)\r\nA,.5,[KSC35,kosdic.shx,s=.1,r=360],-1.066667,[\"L2/O\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHO03,������� ����03\r\nA,.5,[KSC35,kosdic.shx,s=.1],-.333333,[\"L3/O\",Standard,y=-.1,s=.2],-.816667\r\n*H-DICHO03R,������� ����03(����)\r\nA,.5,[KSC35,kosdic.shx,s=.1],-1.066667,[\"L3/O\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHO04,������� ����04\r\nA,.5,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"L4/O\",Standard,y=-.1,s=.2,r=360],-.816667\r\n*H-DICHO04R,������� ����04(����)\r\nA,.5,[KSC35,kosdic.shx,s=.1],-1.066667,[\"L4/O\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHO05,������� ����05\r\nA,.5,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"L5/O\",Standard,y=-.1,s=.2,r=360],-.816667\r\n*H-DICHO05R,������� ����05(����)\r\nA,.5,[KSC35,kosdic.shx,s=.1],-1.066667,[\"L5/O\",Standard,y=.1,s=.2,r=180],-.083333\r\n\r\n;; �Ҵ�����\r\n*H-DICHG00,�Ҵ����� ����00\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.333333,[\"G\",Standard,y=-.1,s=.2],-.216667\r\n*H-DICHG00R,�Ҵ����� ����00(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.466667,[\"G\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHG01,�Ҵ����� ����01\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.366667,[\"G1\",Standard,y=-.1,s=.2],-.383333\r\n*H-DICHG01R,�Ҵ����� ����01(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.633333,[\"G1\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHG02,�Ҵ����� ����02\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"G2\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHG02R,�Ҵ����� ����02(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"G2\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHG03,�Ҵ����� ����03\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"G3\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHG03R,�Ҵ����� ����03(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"G3\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHG04,�Ҵ����� ����04\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"G4\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHG04R,�Ҵ����� ����04(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"G4\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHG05,�Ҵ����� ����05\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"G5\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHG05R,�Ҵ����� ����05(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"G5\",Standard,y=.1,s=.2,r=180],-.083333\r\n\r\n;; J������\r\n*H-DICHJ00,J������ ����00\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.333333,[\"J\",Standard,y=-.1,s=.2],-.216667\r\n*H-DICHJ00R,J������ ����00(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.466667,[\"J\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHJ01,J������ ����01\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.366667,[\"J1\",Standard,y=-.1,s=.2],-.383333\r\n*H-DICHJ01R,J������ ����01(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.633333,[\"J1\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-DICHJ02,J������ ����02\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"J2\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHJ02R,J������ ����02(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"J2\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHJ03,J������ ����03\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"J3\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHJ03R,J������ ����03(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"J3\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHJ04,J������ ����04\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"J4\",Standard,y=-.1,s=.2],-.416667\r\n*H-DICHJ04R,J������ ����04(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"J4\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-DICHJ05,J������ ����05\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"J5\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-DICHJ05R,J������ ����05(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"J5\",Standard,y=.1,s=.2,r=180],-.083333\r\n\r\n;; �����\r\n*H-CANAL00,����� ����00\r\nA,1.1,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"Y\",Standard,y=-.1,s=.2,r=360],-.216667\r\n*H-CANAL00R,����� ����00(����)\r\nA,1.1,[KSC35,kosdic.shx,s=.1],-.466667,[\"Y\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL01,����� ����01\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.366667,[\"Y1\",Standard,y=-.1,s=.2],-.383333\r\n*H-CANAL01R,����� ����01(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.633333,[\"Y1\",Standard,y=.1,s=.2,r=180],-.116667\r\n*H-CANAL02,����� ����02\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"Y2\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-CANAL02R,����� ����02(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,[\"Y2\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL03,����� ����03\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"Y3\",Standard,y=-.1,s=.2],-.416667\r\n*H-CANAL03R,����� ����03(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,[\"Y3\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL04,����� ����04\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"Y4\",Standard,y=-.1,s=.2],-.416667\r\n*H-CANAL04R,����� ����04(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"Y4\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL05,����� ����05\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.333333,[\"Y5\",Standard,y=-.1,s=.2,r=360],-.416667\r\n*H-CANAL05R,����� ����05(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1,r=360],-.666667,[\"Y5\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL06,����� ����06\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"Y6\",Standard,y=-.1,s=.2],-.416667\r\n*H-CANAL06R,����� ����06(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"Y6\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL07,����� ����07\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"Y7\",Standard,y=-.1,s=.2],-.416667\r\n*H-CANAL07R,����� ����07(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"Y7\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL08,����� ����08\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"Y8\",Standard,y=-.1,s=.2],-.416667\r\n*H-CANAL08R,����� ����08(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"Y8\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL09,����� ����09\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.333333,[\"Y9\",Standard,y=-.1,s=.2],-.416667\r\n*H-CANAL09R,����� ����09(����)\r\nA,.9,[KSC35,kosdic.shx,s=.1],-.666667,[\"Y9\",Standard,y=.1,s=.2,r=180],-.083333\r\n*H-CANAL10,����� ����10\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y10\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL10R,����� ����10(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y10\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-CANAL11,����� ����11\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y11\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL11R,����� ����11(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y11\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-CANAL12,����� ����12\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y12\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL12R,����� ����12(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y12\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-CANAL13,����� ����13\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y13\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL13R,����� ����13(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y13\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-CANAL14,����� ����14\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y14\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL14R,����� ����14(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y14\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-CANAL15,����� ����15\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y15\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL15R,����� ����15(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y15\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-CANAL16,����� ����16\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y16\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL16R,����� ����16(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y16\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-CANAL17,����� ����17\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y17\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL17R,����� ����17(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y17\",Standard,y=.1,s=.2,r=180],-.133333\r\n*H-CANAL18,����� ����18\r\nA,.7,[KSC35,kosdic.shx,s=.1,r=360],-.383333,[\"Y18\",Standard,y=-.1,s=.2,r=360],-.566667\r\n*H-CANAL18R,����� ����18(����)\r\nA,.7,[KSC35,kosdic.shx,s=.1],-.816667,[\"Y18\",Standard,y=.1,s=.2,r=180],-.133333\r\n\r\n"; diff --git a/src/viewer2d/linParser.ts b/src/viewer2d/linParser.ts new file mode 100644 index 0000000..f66cf38 --- /dev/null +++ b/src/viewer2d/linParser.ts @@ -0,0 +1,301 @@ +/** + * LIN File Parser & Complex Linetype Registry + * Parses AutoCAD LIN file definitions (including text and shape descriptors). + */ + +import { ICAD_LIN, KOSDIC_LIN } from './linData'; + +export interface LinElement { + type: 'dash' | 'gap' | 'shape' | 'text'; + val?: number; // dash length (+) or gap length (-) + shapeName?: string; // e.g. KSC35, CIRC1, BOX, TRACK1, BAT, ZIG + shxFile?: string; // e.g. kosdic.shx, ltypeshp.shx + text?: string; // e.g. "L2", "GAS", "HW" + style?: string; // e.g. Standard + scale: number; // s=... (default 1.0) + rotation: number; // r=... (angle in degrees) + isAbsoluteAngle: boolean;// a=... + isUprightAngle: boolean; // u=... + xOffset: number; // x=... + yOffset: number; // y=... +} + +export interface LinPattern { + name: string; + description: string; + elements: LinElement[]; + patternLength: number; // total length sum of dashes + abs(gaps) +} + +function parseBracketElement(inner: string): LinElement { + const parts: string[] = []; + let cur = ''; + let inQuote = false; + for (let i = 0; i < inner.length; i++) { + const c = inner[i]; + if (c === '"') inQuote = !inQuote; + if (c === ',' && !inQuote) { + parts.push(cur.trim()); + cur = ''; + } else { + cur += c; + } + } + if (cur.trim()) parts.push(cur.trim()); + + let type: 'shape' | 'text' = 'shape'; + let shapeName: string | undefined; + let shxFile: string | undefined; + let text: string | undefined; + let style: string | undefined; + + let scale = 1.0; + let rotation = 0; + let isAbsoluteAngle = false; + let isUprightAngle = false; + let xOffset = 0; + let yOffset = 0; + + if (parts.length > 0) { + const first = parts[0]; + if (first.startsWith('"') && first.endsWith('"')) { + type = 'text'; + text = first.slice(1, -1); + if (parts.length > 1 && !parts[1].includes('=')) style = parts[1]; + } else { + type = 'shape'; + shapeName = first; + if (parts.length > 1 && !parts[1].includes('=')) shxFile = parts[1]; + } + + for (let i = 1; i < parts.length; i++) { + const part = parts[i]; + const eqIdx = part.indexOf('='); + if (eqIdx > 0) { + const key = part.substring(0, eqIdx).trim().toLowerCase(); + const valStr = part.substring(eqIdx + 1).trim(); + const val = parseFloat(valStr); + if (!isNaN(val)) { + if (key === 's') scale = val; + else if (key === 'r') { rotation = val; } + else if (key === 'a') { rotation = val; isAbsoluteAngle = true; } + else if (key === 'u') { rotation = val; isUprightAngle = true; } + else if (key === 'x') xOffset = val; + else if (key === 'y') yOffset = val; + } + } + } + } + + return { + type, + shapeName, + shxFile, + text, + style, + scale, + rotation, + isAbsoluteAngle, + isUprightAngle, + xOffset, + yOffset, + }; +} + +function tokenizeLinPattern(patternStr: string): string[] { + const s = patternStr.replace(/^A\s*,\s*/i, '').trim(); + const tokens: string[] = []; + let current = ''; + let inBracket = false; + let inQuote = false; + + for (let i = 0; i < s.length; i++) { + const ch = s[i]; + if (ch === '"') inQuote = !inQuote; + if (ch === '[' && !inQuote) inBracket = true; + if (ch === ']' && !inQuote) inBracket = false; + + if (ch === ',' && !inBracket && !inQuote) { + if (current.trim()) tokens.push(current.trim()); + current = ''; + } else { + current += ch; + } + } + if (current.trim()) tokens.push(current.trim()); + return tokens; +} + +export function parseLinContent(content: string): Map { + const result = new Map(); + const lines = content.split(/\r?\n/); + let currentName: string | null = null; + let currentDesc = ''; + + for (let line of lines) { + line = line.trim(); + if (!line || line.startsWith(';')) continue; + if (line.startsWith('*')) { + const commaIdx = line.indexOf(','); + if (commaIdx > 0) { + currentName = line.substring(1, commaIdx).trim(); + currentDesc = line.substring(commaIdx + 1).trim(); + } else { + currentName = line.substring(1).trim(); + currentDesc = ''; + } + } else if (currentName && line.toUpperCase().startsWith('A,')) { + const tokens = tokenizeLinPattern(line); + const elements: LinElement[] = []; + let totalLength = 0; + + for (const tok of tokens) { + if (tok.startsWith('[') && tok.endsWith(']')) { + const elem = parseBracketElement(tok.slice(1, -1)); + elements.push(elem); + } else { + const val = parseFloat(tok); + if (!isNaN(val)) { + if (val > 1e-6) { + elements.push({ + type: 'dash', + val, + scale: 1, + rotation: 0, + isAbsoluteAngle: false, + isUprightAngle: false, + xOffset: 0, + yOffset: 0, + }); + totalLength += val; + } else if (val < -1e-6) { + const absVal = Math.abs(val); + elements.push({ + type: 'gap', + val: -absVal, + scale: 1, + rotation: 0, + isAbsoluteAngle: false, + isUprightAngle: false, + xOffset: 0, + yOffset: 0, + }); + totalLength += absVal; + } else { + // Dot (val === 0) + elements.push({ + type: 'dash', + val: 0.05, + scale: 1, + rotation: 0, + isAbsoluteAngle: false, + isUprightAngle: false, + xOffset: 0, + yOffset: 0, + }); + totalLength += 0.05; + } + } + } + } + + if (elements.length > 0) { + result.set(currentName.toUpperCase(), { + name: currentName, + description: currentDesc, + elements, + patternLength: Math.max(totalLength, 0.1), + }); + } + currentName = null; + } + } + + return result; +} + +// Global Linetype Registry initialized with Icad.lin and KOSDIC.lin +const globalRegistry = new Map(); + +export function registerLinContent(content: string) { + const parsed = parseLinContent(content); + for (const [key, pattern] of parsed.entries()) { + globalRegistry.set(key, pattern); + } +} + +// Warm up registry with bundled LIN files +registerLinContent(ICAD_LIN); +registerLinContent(KOSDIC_LIN); + +const CIVIL_LT_TEXT_MAP: Record = { + 'H-DICHL02': 'L2-2/0', + 'H-DICHL02R': 'L2-2', + 'H-DICHL01': 'L2-3/0', + 'H-DICHL01R': 'L2-3', + 'H-DICHL06': 'L5-1', + 'H-DICHL06R': 'L5-1', + 'H-DICHL05': 'L5', + 'H-DICHL05R': 'L5', + 'H-DICHU05': 'U5', + 'H-DICHU05R': 'U5', + 'H-DICHB01': 'B1', + 'H-DICHB01R': 'B1', + 'H-DICHM03': 'M3', + 'H-DICHM03R': 'M3', + 'H-DICHV01': 'V1', + 'H-DICHV01R': 'V1', + 'H-DICHO01': 'O1', + 'H-DICHO01R': 'O1', + 'H-DICHL03': 'L3', + 'H-DICHL03R': 'L3', + 'H-DICHL04': 'L4', + 'H-DICHL04R': 'L4', + 'H-DICHL08': 'L8', + 'H-DICHL08R': 'L8', +}; + +const NO_SHAPE_LINETYPES = new Set([ + 'H-DICHL05', + 'H-DICHL05R', + 'H-DICHU05', + 'H-DICHU05R', + 'H-DICHB01', + 'H-DICHB01R', + 'H-DICHM03', + 'H-DICHM03R', + 'H-DICHV01', + 'H-DICHV01R', + 'H-DICHO01', + 'H-DICHO01R', +]); + +export function getLinPattern(name: string): LinPattern | undefined { + if (!name) return undefined; + const key = name.toUpperCase().trim(); + const pattern = globalRegistry.get(key); + if (!pattern) return undefined; + + let elements = pattern.elements; + + // Filter out shape/arrowhead elements for L5, U5, B1, etc. as specified in official CAD spec + if (NO_SHAPE_LINETYPES.has(key)) { + elements = elements.filter((elem) => elem.type !== 'shape'); + } + + const overrideText = CIVIL_LT_TEXT_MAP[key]; + if (overrideText) { + elements = elements.map((elem) => + elem.type === 'text' ? { ...elem, text: overrideText } : elem + ); + } + + return { + ...pattern, + elements, + }; +} + +export function getAllRegisteredPatterns(): Map { + return globalRegistry; +}