Showcase

Time only moves when you move, built by DeepSeek V4.1 Flash 1017

Hostedvia OpenCodeOpenRouter
Running live in your browserNew tab
Speed
956tok/s
First token included
Written
420.5Ktokens
Time to build
7m 20s
Cost to build
$0.56
DeepSeek V4.1 Flash 1017's builds and scores
Show the code the model wrote
HTML1,031,111 characters
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <meta name="theme-color" content="#05070b" />
    <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' fill='%2305070b'/%3E%3Cpath d='M17 13h9v38h-9z' fill='%23ff5b22'/%3E%3Cpath d='M34 13h9v26l10 12h-11l-8-10z' fill='%23ebe7df'/%3E%3C/svg%3E" />
    <title>DEAD AIR — Time moves when you do</title>
    <meta name="description" content="A time-dilation first-person shooter on a rain-slicked rooftop. Time moves when you do." />
    <script type="module" crossorigin>(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(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"&&n(a)}).observe(document,{childList:!0,subtree:!0});function e(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 n(s){if(s.ep)return;s.ep=!0;const r=e(s);fetch(s.href,r)}})();/**
 * @license
 * Copyright 2010-2025 Three.js Authors
 * SPDX-License-Identifier: MIT
 */const Bo="180",Uh=0,dl=1,Nh=2,Ic=1,Uc=2,kn=3,ai=0,Ke=1,fn=2,Wn=0,Ai=1,Ee=2,fl=3,pl=4,Fh=5,wi=100,Oh=101,Bh=102,zh=103,kh=104,Hh=200,Gh=201,Vh=202,Wh=203,Oa=204,Ba=205,Xh=206,qh=207,Yh=208,Zh=209,Kh=210,$h=211,jh=212,Jh=213,Qh=214,za=0,ka=1,Ha=2,is=3,Ga=4,Va=5,Wa=6,Xa=7,Nc=0,tu=1,eu=2,Xn=0,nu=1,iu=2,su=3,ru=4,au=5,ou=6,lu=7,Fc=300,ss=301,rs=302,qa=303,Ya=304,Kr=306,Bs=1e3,Vn=1001,Za=1002,ln=1003,cu=1004,nr=1005,Rn=1006,ta=1007,bi=1008,Ln=1009,Oc=1010,Bc=1011,zs=1012,zo=1013,Ri=1014,Cn=1015,qn=1016,ko=1017,Ho=1018,ks=1020,zc=35902,kc=35899,Hc=1021,Gc=1022,wn=1023,Hs=1026,Gs=1027,Go=1028,Vo=1029,Vc=1030,Wo=1031,Xo=1033,Lr=33776,Ir=33777,Ur=33778,Nr=33779,Ka=35840,$a=35841,ja=35842,Ja=35843,Qa=36196,to=37492,eo=37496,no=37808,io=37809,so=37810,ro=37811,ao=37812,oo=37813,lo=37814,co=37815,ho=37816,uo=37817,fo=37818,po=37819,mo=37820,go=37821,_o=36492,vo=36494,xo=36495,Mo=36283,yo=36284,So=36285,wo=36286,hu=3200,uu=3201,Wc=0,du=1,Gn="",Ze="srgb",as="srgb-linear",kr="linear",ce="srgb",Ii=7680,ml=519,fu=512,pu=513,mu=514,Xc=515,gu=516,_u=517,vu=518,xu=519,To=35044,gl="300 es",Pn=2e3,Hr=2001;class fs{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const n=this._listeners;n[t]===void 0&&(n[t]=[]),n[t].indexOf(e)===-1&&n[t].push(e)}hasEventListener(t,e){const n=this._listeners;return n===void 0?!1:n[t]!==void 0&&n[t].indexOf(e)!==-1}removeEventListener(t,e){const n=this._listeners;if(n===void 0)return;const s=n[t];if(s!==void 0){const r=s.indexOf(e);r!==-1&&s.splice(r,1)}}dispatchEvent(t){const e=this._listeners;if(e===void 0)return;const n=e[t.type];if(n!==void 0){t.target=this;const s=n.slice(0);for(let r=0,a=s.length;r<a;r++)s[r].call(this,t);t.target=null}}}const Fe=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let _l=1234567;const Fs=Math.PI/180,Vs=180/Math.PI;function Yn(){const i=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,n=Math.random()*4294967295|0;return(Fe[i&255]+Fe[i>>8&255]+Fe[i>>16&255]+Fe[i>>24&255]+"-"+Fe[t&255]+Fe[t>>8&255]+"-"+Fe[t>>16&15|64]+Fe[t>>24&255]+"-"+Fe[e&63|128]+Fe[e>>8&255]+"-"+Fe[e>>16&255]+Fe[e>>24&255]+Fe[n&255]+Fe[n>>8&255]+Fe[n>>16&255]+Fe[n>>24&255]).toLowerCase()}function $t(i,t,e){return Math.max(t,Math.min(e,i))}function qo(i,t){return(i%t+t)%t}function Mu(i,t,e,n,s){return n+(i-t)*(s-n)/(e-t)}function yu(i,t,e){return i!==t?(e-i)/(t-i):0}function Os(i,t,e){return(1-e)*i+e*t}function Su(i,t,e,n){return Os(i,t,1-Math.exp(-e*n))}function wu(i,t=1){return t-Math.abs(qo(i,t*2)-t)}function Tu(i,t,e){return i<=t?0:i>=e?1:(i=(i-t)/(e-t),i*i*(3-2*i))}function Eu(i,t,e){return i<=t?0:i>=e?1:(i=(i-t)/(e-t),i*i*i*(i*(i*6-15)+10))}function bu(i,t){return i+Math.floor(Math.random()*(t-i+1))}function Au(i,t){return i+Math.random()*(t-i)}function Ru(i){return i*(.5-Math.random())}function Cu(i){i!==void 0&&(_l=i);let t=_l+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function Pu(i){return i*Fs}function Du(i){return i*Vs}function Lu(i){return(i&i-1)===0&&i!==0}function Iu(i){return Math.pow(2,Math.ceil(Math.log(i)/Math.LN2))}function Uu(i){return Math.pow(2,Math.floor(Math.log(i)/Math.LN2))}function Nu(i,t,e,n,s){const r=Math.cos,a=Math.sin,o=r(e/2),l=a(e/2),c=r((t+n)/2),h=a((t+n)/2),u=r((t-n)/2),d=a((t-n)/2),p=r((n-t)/2),g=a((n-t)/2);switch(s){case"XYX":i.set(o*h,l*u,l*d,o*c);break;case"YZY":i.set(l*d,o*h,l*u,o*c);break;case"ZXZ":i.set(l*u,l*d,o*h,o*c);break;case"XZX":i.set(o*h,l*g,l*p,o*c);break;case"YXY":i.set(l*p,o*h,l*g,o*c);break;case"ZYZ":i.set(l*g,l*p,o*h,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}}function Sn(i,t){switch(t.constructor){case Float32Array:return i;case Uint32Array:return i/4294967295;case Uint16Array:return i/65535;case Uint8Array:return i/255;case Int32Array:return Math.max(i/2147483647,-1);case Int16Array:return Math.max(i/32767,-1);case Int8Array:return Math.max(i/127,-1);default:throw new Error("Invalid component type.")}}function oe(i,t){switch(t.constructor){case Float32Array:return i;case Uint32Array:return Math.round(i*4294967295);case Uint16Array:return Math.round(i*65535);case Uint8Array:return Math.round(i*255);case Int32Array:return Math.round(i*2147483647);case Int16Array:return Math.round(i*32767);case Int8Array:return Math.round(i*127);default:throw new Error("Invalid component type.")}}const Ot={DEG2RAD:Fs,RAD2DEG:Vs,generateUUID:Yn,clamp:$t,euclideanModulo:qo,mapLinear:Mu,inverseLerp:yu,lerp:Os,damp:Su,pingpong:wu,smoothstep:Tu,smootherstep:Eu,randInt:bu,randFloat:Au,randFloatSpread:Ru,seededRandom:Cu,degToRad:Pu,radToDeg:Du,isPowerOfTwo:Lu,ceilPowerOfTwo:Iu,floorPowerOfTwo:Uu,setQuaternionFromProperEuler:Nu,normalize:oe,denormalize:Sn};class Dt{constructor(t=0,e=0){Dt.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,s=t.elements;return this.x=s[0]*e+s[3]*n+s[6],this.y=s[1]*e+s[4]*n+s[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=$t(this.x,t.x,e.x),this.y=$t(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=$t(this.x,t,e),this.y=$t(this.y,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar($t(n,t,e))}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(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.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(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const n=this.dot(t)/e;return Math.acos($t(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),s=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*n-a*s+t.x,this.y=r*s+a*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class ps{constructor(t=0,e=0,n=0,s=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=n,this._w=s}static slerpFlat(t,e,n,s,r,a,o){let l=n[s+0],c=n[s+1],h=n[s+2],u=n[s+3];const d=r[a+0],p=r[a+1],g=r[a+2],_=r[a+3];if(o===0){t[e+0]=l,t[e+1]=c,t[e+2]=h,t[e+3]=u;return}if(o===1){t[e+0]=d,t[e+1]=p,t[e+2]=g,t[e+3]=_;return}if(u!==_||l!==d||c!==p||h!==g){let m=1-o;const f=l*d+c*p+h*g+u*_,b=f>=0?1:-1,T=1-f*f;if(T>Number.EPSILON){const R=Math.sqrt(T),D=Math.atan2(R,f*b);m=Math.sin(m*D)/R,o=Math.sin(o*D)/R}const x=o*b;if(l=l*m+d*x,c=c*m+p*x,h=h*m+g*x,u=u*m+_*x,m===1-o){const R=1/Math.sqrt(l*l+c*c+h*h+u*u);l*=R,c*=R,h*=R,u*=R}}t[e]=l,t[e+1]=c,t[e+2]=h,t[e+3]=u}static multiplyQuaternionsFlat(t,e,n,s,r,a){const o=n[s],l=n[s+1],c=n[s+2],h=n[s+3],u=r[a],d=r[a+1],p=r[a+2],g=r[a+3];return t[e]=o*g+h*u+l*p-c*d,t[e+1]=l*g+h*d+c*u-o*p,t[e+2]=c*g+h*p+o*d-l*u,t[e+3]=h*g-o*u-l*d-c*p,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,s){return this._x=t,this._y=e,this._z=n,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const n=t._x,s=t._y,r=t._z,a=t._order,o=Math.cos,l=Math.sin,c=o(n/2),h=o(s/2),u=o(r/2),d=l(n/2),p=l(s/2),g=l(r/2);switch(a){case"XYZ":this._x=d*h*u+c*p*g,this._y=c*p*u-d*h*g,this._z=c*h*g+d*p*u,this._w=c*h*u-d*p*g;break;case"YXZ":this._x=d*h*u+c*p*g,this._y=c*p*u-d*h*g,this._z=c*h*g-d*p*u,this._w=c*h*u+d*p*g;break;case"ZXY":this._x=d*h*u-c*p*g,this._y=c*p*u+d*h*g,this._z=c*h*g+d*p*u,this._w=c*h*u-d*p*g;break;case"ZYX":this._x=d*h*u-c*p*g,this._y=c*p*u+d*h*g,this._z=c*h*g-d*p*u,this._w=c*h*u+d*p*g;break;case"YZX":this._x=d*h*u+c*p*g,this._y=c*p*u+d*h*g,this._z=c*h*g-d*p*u,this._w=c*h*u-d*p*g;break;case"XZY":this._x=d*h*u-c*p*g,this._y=c*p*u-d*h*g,this._z=c*h*g+d*p*u,this._w=c*h*u+d*p*g;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,s=Math.sin(n);return this._x=t.x*s,this._y=t.y*s,this._z=t.z*s,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],s=e[4],r=e[8],a=e[1],o=e[5],l=e[9],c=e[2],h=e[6],u=e[10],d=n+o+u;if(d>0){const p=.5/Math.sqrt(d+1);this._w=.25/p,this._x=(h-l)*p,this._y=(r-c)*p,this._z=(a-s)*p}else if(n>o&&n>u){const p=2*Math.sqrt(1+n-o-u);this._w=(h-l)/p,this._x=.25*p,this._y=(s+a)/p,this._z=(r+c)/p}else if(o>u){const p=2*Math.sqrt(1+o-n-u);this._w=(r-c)/p,this._x=(s+a)/p,this._y=.25*p,this._z=(l+h)/p}else{const p=2*Math.sqrt(1+u-n-o);this._w=(a-s)/p,this._x=(r+c)/p,this._y=(l+h)/p,this._z=.25*p}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-8?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs($t(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(n===0)return this;const s=Math.min(1,e/n);return this.slerp(t,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(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._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 t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,s=t._y,r=t._z,a=t._w,o=e._x,l=e._y,c=e._z,h=e._w;return this._x=n*h+a*o+s*c-r*l,this._y=s*h+a*l+r*o-n*c,this._z=r*h+a*c+n*l-s*o,this._w=a*h-n*o-s*l-r*c,this._onChangeCallback(),this}slerp(t,e){if(e===0)return this;if(e===1)return this.copy(t);const n=this._x,s=this._y,r=this._z,a=this._w;let o=a*t._w+n*t._x+s*t._y+r*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=n,this._y=s,this._z=r,this;const l=1-o*o;if(l<=Number.EPSILON){const p=1-e;return this._w=p*a+e*this._w,this._x=p*n+e*this._x,this._y=p*s+e*this._y,this._z=p*r+e*this._z,this.normalize(),this}const c=Math.sqrt(l),h=Math.atan2(c,o),u=Math.sin((1-e)*h)/c,d=Math.sin(e*h)/c;return this._w=a*u+this._w*d,this._x=n*u+this._x*d,this._y=s*u+this._y*d,this._z=r*u+this._z*d,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),n=Math.random(),s=Math.sqrt(1-n),r=Math.sqrt(n);return this.set(s*Math.sin(t),s*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class A{constructor(t=0,e=0,n=0){A.prototype.isVector3=!0,this.x=t,this.y=e,this.z=n}set(t,e,n){return n===void 0&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(vl.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(vl.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*s,this.y=r[1]*e+r[4]*n+r[7]*s,this.z=r[2]*e+r[5]*n+r[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,s=this.z,r=t.elements,a=1/(r[3]*e+r[7]*n+r[11]*s+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*s+r[12])*a,this.y=(r[1]*e+r[5]*n+r[9]*s+r[13])*a,this.z=(r[2]*e+r[6]*n+r[10]*s+r[14])*a,this}applyQuaternion(t){const e=this.x,n=this.y,s=this.z,r=t.x,a=t.y,o=t.z,l=t.w,c=2*(a*s-o*n),h=2*(o*e-r*s),u=2*(r*n-a*e);return this.x=e+l*c+a*u-o*h,this.y=n+l*h+o*c-r*u,this.z=s+l*u+r*h-a*c,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*s,this.y=r[1]*e+r[5]*n+r[9]*s,this.z=r[2]*e+r[6]*n+r[10]*s,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=$t(this.x,t.x,e.x),this.y=$t(this.y,t.y,e.y),this.z=$t(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=$t(this.x,t,e),this.y=$t(this.y,t,e),this.z=$t(this.z,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar($t(n,t,e))}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(t){return this.x*t.x+this.y*t.y+this.z*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,s=t.y,r=t.z,a=e.x,o=e.y,l=e.z;return this.x=s*l-r*o,this.y=r*a-n*l,this.z=n*o-s*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return ea.copy(this).projectOnVector(t),this.sub(ea)}reflect(t){return this.sub(ea.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const n=this.dot(t)/e;return Math.acos($t(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,s=this.z-t.z;return e*e+n*n+s*s}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const s=Math.sin(e)*t;return this.x=s*Math.sin(n),this.y=Math.cos(e)*t,this.z=s*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),s=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=s,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,n=Math.sqrt(1-e*e);return this.x=n*Math.cos(t),this.y=e,this.z=n*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const ea=new A,vl=new ps;class Yt{constructor(t,e,n,s,r,a,o,l,c){Yt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,n,s,r,a,o,l,c)}set(t,e,n,s,r,a,o,l,c){const h=this.elements;return h[0]=t,h[1]=s,h[2]=o,h[3]=e,h[4]=r,h[5]=l,h[6]=n,h[7]=a,h[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,s=e.elements,r=this.elements,a=n[0],o=n[3],l=n[6],c=n[1],h=n[4],u=n[7],d=n[2],p=n[5],g=n[8],_=s[0],m=s[3],f=s[6],b=s[1],T=s[4],x=s[7],R=s[2],D=s[5],I=s[8];return r[0]=a*_+o*b+l*R,r[3]=a*m+o*T+l*D,r[6]=a*f+o*x+l*I,r[1]=c*_+h*b+u*R,r[4]=c*m+h*T+u*D,r[7]=c*f+h*x+u*I,r[2]=d*_+p*b+g*R,r[5]=d*m+p*T+g*D,r[8]=d*f+p*x+g*I,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8];return e*a*h-e*o*c-n*r*h+n*o*l+s*r*c-s*a*l}invert(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],u=h*a-o*c,d=o*l-h*r,p=c*r-a*l,g=e*u+n*d+s*p;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);const _=1/g;return t[0]=u*_,t[1]=(s*c-h*n)*_,t[2]=(o*n-s*a)*_,t[3]=d*_,t[4]=(h*e-s*l)*_,t[5]=(s*r-o*e)*_,t[6]=p*_,t[7]=(n*l-c*e)*_,t[8]=(a*e-n*r)*_,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,s,r,a,o){const l=Math.cos(r),c=Math.sin(r);return this.set(n*l,n*c,-n*(l*a+c*o)+a+t,-s*c,s*l,-s*(-c*a+l*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(na.makeScale(t,e)),this}rotate(t){return this.premultiply(na.makeRotation(-t)),this}translate(t,e){return this.premultiply(na.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,n=t.elements;for(let s=0;s<9;s++)if(e[s]!==n[s])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const na=new Yt;function qc(i){for(let t=i.length-1;t>=0;--t)if(i[t]>=65535)return!0;return!1}function Gr(i){return document.createElementNS("http://www.w3.org/1999/xhtml",i)}function Fu(){const i=Gr("canvas");return i.style.display="block",i}const xl={};function Ws(i){i in xl||(xl[i]=!0,console.warn(i))}function Ou(i,t,e){return new Promise(function(n,s){function r(){switch(i.clientWaitSync(t,i.SYNC_FLUSH_COMMANDS_BIT,0)){case i.WAIT_FAILED:s();break;case i.TIMEOUT_EXPIRED:setTimeout(r,e);break;default:n()}}setTimeout(r,e)})}const Ml=new Yt().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),yl=new Yt().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Bu(){const i={enabled:!0,workingColorSpace:as,spaces:{},convert:function(s,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===ce&&(s.r=Zn(s.r),s.g=Zn(s.g),s.b=Zn(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===ce&&(s.r=ns(s.r),s.g=ns(s.g),s.b=ns(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===Gn?kr: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 Ws("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),i.workingToColorSpace(s,r)},toWorkingColorSpace:function(s,r){return Ws("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),i.colorSpaceToWorking(s,r)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],n=[.3127,.329];return i.define({[as]:{primaries:t,whitePoint:n,transfer:kr,toXYZ:Ml,fromXYZ:yl,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:Ze},outputColorSpaceConfig:{drawingBufferColorSpace:Ze}},[Ze]:{primaries:t,whitePoint:n,transfer:ce,toXYZ:Ml,fromXYZ:yl,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:Ze}}}),i}const ne=Bu();function Zn(i){return i<.04045?i*.0773993808:Math.pow(i*.9478672986+.0521327014,2.4)}function ns(i){return i<.0031308?i*12.92:1.055*Math.pow(i,.41666)-.055}let Ui;class zu{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let n;if(t instanceof HTMLCanvasElement)n=t;else{Ui===void 0&&(Ui=Gr("canvas")),Ui.width=t.width,Ui.height=t.height;const s=Ui.getContext("2d");t instanceof ImageData?s.putImageData(t,0,0):s.drawImage(t,0,0,t.width,t.height),n=Ui}return n.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=Gr("canvas");e.width=t.width,e.height=t.height;const n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);const s=n.getImageData(0,0,t.width,t.height),r=s.data;for(let a=0;a<r.length;a++)r[a]=Zn(r[a]/255)*255;return n.putImageData(s,0,0),e}else if(t.data){const e=t.data.slice(0);for(let n=0;n<e.length;n++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[n]=Math.floor(Zn(e[n]/255)*255):e[n]=Zn(e[n]);return{data:e,width:t.width,height:t.height}}else return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}}let ku=0;class Yo{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:ku++}),this.uuid=Yn(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){const e=this.data;return typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):e instanceof VideoFrame?t.set(e.displayHeight,e.displayWidth,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];const n={uuid:this.uuid,url:""},s=this.data;if(s!==null){let r;if(Array.isArray(s)){r=[];for(let a=0,o=s.length;a<o;a++)s[a].isDataTexture?r.push(ia(s[a].image)):r.push(ia(s[a]))}else r=ia(s);n.url=r}return e||(t.images[this.uuid]=n),n}}function ia(i){return typeof HTMLImageElement<"u"&&i instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&i instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&i instanceof ImageBitmap?zu.getDataURL(i):i.data?{data:Array.from(i.data),width:i.width,height:i.height,type:i.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let Hu=0;const sa=new A;class He extends fs{constructor(t=He.DEFAULT_IMAGE,e=He.DEFAULT_MAPPING,n=Vn,s=Vn,r=Rn,a=bi,o=wn,l=Ln,c=He.DEFAULT_ANISOTROPY,h=Gn){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Hu++}),this.uuid=Yn(),this.name="",this.source=new Yo(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=n,this.wrapT=s,this.magFilter=r,this.minFilter=a,this.anisotropy=c,this.format=o,this.internalFormat=null,this.type=l,this.offset=new Dt(0,0),this.repeat=new Dt(1,1),this.center=new Dt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Yt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=h,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0}get width(){return this.source.getSize(sa).x}get height(){return this.source.getSize(sa).y}get depth(){return this.source.getSize(sa).z}get image(){return this.source.data}set image(t=null){this.source.data=t}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(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const n=t[e];if(n===void 0){console.warn(`THREE.Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const s=this[e];if(s===void 0){console.warn(`THREE.Texture.setValues(): property '${e}' does not exist.`);continue}s&&n&&s.isVector2&&n.isVector2||s&&n&&s.isVector3&&n.isVector3||s&&n&&s.isMatrix3&&n.isMatrix3?s.copy(n):this[e]=n}}toJSON(t){const e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];const n={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).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,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&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Fc)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case Bs:t.x=t.x-Math.floor(t.x);break;case Vn:t.x=t.x<0?0:1;break;case Za:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case Bs:t.y=t.y-Math.floor(t.y);break;case Vn:t.y=t.y<0?0:1;break;case Za:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}He.DEFAULT_IMAGE=null;He.DEFAULT_MAPPING=Fc;He.DEFAULT_ANISOTROPY=1;class ue{constructor(t=0,e=0,n=0,s=1){ue.prototype.isVector4=!0,this.x=t,this.y=e,this.z=n,this.w=s}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,s){return this.x=t,this.y=e,this.z=n,this.w=s,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,s=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*s+a[12]*r,this.y=a[1]*e+a[5]*n+a[9]*s+a[13]*r,this.z=a[2]*e+a[6]*n+a[10]*s+a[14]*r,this.w=a[3]*e+a[7]*n+a[11]*s+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,s,r;const l=t.elements,c=l[0],h=l[4],u=l[8],d=l[1],p=l[5],g=l[9],_=l[2],m=l[6],f=l[10];if(Math.abs(h-d)<.01&&Math.abs(u-_)<.01&&Math.abs(g-m)<.01){if(Math.abs(h+d)<.1&&Math.abs(u+_)<.1&&Math.abs(g+m)<.1&&Math.abs(c+p+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const T=(c+1)/2,x=(p+1)/2,R=(f+1)/2,D=(h+d)/4,I=(u+_)/4,F=(g+m)/4;return T>x&&T>R?T<.01?(n=0,s=.707106781,r=.707106781):(n=Math.sqrt(T),s=D/n,r=I/n):x>R?x<.01?(n=.707106781,s=0,r=.707106781):(s=Math.sqrt(x),n=D/s,r=F/s):R<.01?(n=.707106781,s=.707106781,r=0):(r=Math.sqrt(R),n=I/r,s=F/r),this.set(n,s,r,e),this}let b=Math.sqrt((m-g)*(m-g)+(u-_)*(u-_)+(d-h)*(d-h));return Math.abs(b)<.001&&(b=1),this.x=(m-g)/b,this.y=(u-_)/b,this.z=(d-h)/b,this.w=Math.acos((c+p+f-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=$t(this.x,t.x,e.x),this.y=$t(this.y,t.y,e.y),this.z=$t(this.z,t.z,e.z),this.w=$t(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=$t(this.x,t,e),this.y=$t(this.y,t,e),this.z=$t(this.z,t,e),this.w=$t(this.w,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar($t(n,t,e))}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(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),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}}class Gu extends fs{constructor(t=1,e=1,n={}){super(),n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Rn,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},n),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=n.depth,this.scissor=new ue(0,0,t,e),this.scissorTest=!1,this.viewport=new ue(0,0,t,e);const s={width:t,height:e,depth:n.depth},r=new He(s);this.textures=[];const a=n.count;for(let o=0;o<a;o++)this.textures[o]=r.clone(),this.textures[o].isRenderTargetTexture=!0,this.textures[o].renderTarget=this;this._setTextureOptions(n),this.depthBuffer=n.depthBuffer,this.stencilBuffer=n.stencilBuffer,this.resolveDepthBuffer=n.resolveDepthBuffer,this.resolveStencilBuffer=n.resolveStencilBuffer,this._depthTexture=null,this.depthTexture=n.depthTexture,this.samples=n.samples,this.multiview=n.multiview}_setTextureOptions(t={}){const e={minFilter:Rn,generateMipmaps:!1,flipY:!1,internalFormat:null};t.mapping!==void 0&&(e.mapping=t.mapping),t.wrapS!==void 0&&(e.wrapS=t.wrapS),t.wrapT!==void 0&&(e.wrapT=t.wrapT),t.wrapR!==void 0&&(e.wrapR=t.wrapR),t.magFilter!==void 0&&(e.magFilter=t.magFilter),t.minFilter!==void 0&&(e.minFilter=t.minFilter),t.format!==void 0&&(e.format=t.format),t.type!==void 0&&(e.type=t.type),t.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t.colorSpace!==void 0&&(e.colorSpace=t.colorSpace),t.flipY!==void 0&&(e.flipY=t.flipY),t.generateMipmaps!==void 0&&(e.generateMipmaps=t.generateMipmaps),t.internalFormat!==void 0&&(e.internalFormat=t.internalFormat);for(let n=0;n<this.textures.length;n++)this.textures[n].setValues(e)}get texture(){return this.textures[0]}set texture(t){this.textures[0]=t}set depthTexture(t){this._depthTexture!==null&&(this._depthTexture.renderTarget=null),t!==null&&(t.renderTarget=this),this._depthTexture=t}get depthTexture(){return this._depthTexture}setSize(t,e,n=1){if(this.width!==t||this.height!==e||this.depth!==n){this.width=t,this.height=e,this.depth=n;for(let s=0,r=this.textures.length;s<r;s++)this.textures[s].image.width=t,this.textures[s].image.height=e,this.textures[s].image.depth=n,this.textures[s].isArrayTexture=this.textures[s].image.depth>1;this.dispose()}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return new this.constructor().copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,n=t.textures.length;e<n;e++){this.textures[e]=t.textures[e].clone(),this.textures[e].isRenderTargetTexture=!0,this.textures[e].renderTarget=this;const s=Object.assign({},t.textures[e].image);this.textures[e].source=new Yo(s)}return this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.resolveDepthBuffer=t.resolveDepthBuffer,this.resolveStencilBuffer=t.resolveStencilBuffer,t.depthTexture!==null&&(this.depthTexture=t.depthTexture.clone()),this.samples=t.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class Tn extends Gu{constructor(t=1,e=1,n={}){super(t,e,n),this.isWebGLRenderTarget=!0}}class Yc extends He{constructor(t=null,e=1,n=1,s=1){super(null),this.isDataArrayTexture=!0,this.image={data:t,width:e,height:n,depth:s},this.magFilter=ln,this.minFilter=ln,this.wrapR=Vn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(t){this.layerUpdates.add(t)}clearLayerUpdates(){this.layerUpdates.clear()}}class Vu extends He{constructor(t=null,e=1,n=1,s=1){super(null),this.isData3DTexture=!0,this.image={data:t,width:e,height:n,depth:s},this.magFilter=ln,this.minFilter=ln,this.wrapR=Vn,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class Ci{constructor(t=new A(1/0,1/0,1/0),e=new A(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e+=3)this.expandByPoint(vn.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,n=t.count;e<n;e++)this.expandByPoint(vn.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=vn.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const n=t.geometry;if(n!==void 0){const r=n.getAttribute("position");if(e===!0&&r!==void 0&&t.isInstancedMesh!==!0)for(let a=0,o=r.count;a<o;a++)t.isMesh===!0?t.getVertexPosition(a,vn):vn.fromBufferAttribute(r,a),vn.applyMatrix4(t.matrixWorld),this.expandByPoint(vn);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),ir.copy(t.boundingBox)):(n.boundingBox===null&&n.computeBoundingBox(),ir.copy(n.boundingBox)),ir.applyMatrix4(t.matrixWorld),this.union(ir)}const s=t.children;for(let r=0,a=s.length;r<a;r++)this.expandByObject(s[r],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,vn),vn.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Ts),sr.subVectors(this.max,Ts),Ni.subVectors(t.a,Ts),Fi.subVectors(t.b,Ts),Oi.subVectors(t.c,Ts),Qn.subVectors(Fi,Ni),ti.subVectors(Oi,Fi),pi.subVectors(Ni,Oi);let e=[0,-Qn.z,Qn.y,0,-ti.z,ti.y,0,-pi.z,pi.y,Qn.z,0,-Qn.x,ti.z,0,-ti.x,pi.z,0,-pi.x,-Qn.y,Qn.x,0,-ti.y,ti.x,0,-pi.y,pi.x,0];return!ra(e,Ni,Fi,Oi,sr)||(e=[1,0,0,0,1,0,0,0,1],!ra(e,Ni,Fi,Oi,sr))?!1:(rr.crossVectors(Qn,ti),e=[rr.x,rr.y,rr.z],ra(e,Ni,Fi,Oi,sr))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,vn).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(vn).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Nn[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Nn[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Nn[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Nn[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Nn[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Nn[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Nn[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Nn[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Nn),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Nn=[new A,new A,new A,new A,new A,new A,new A,new A],vn=new A,ir=new Ci,Ni=new A,Fi=new A,Oi=new A,Qn=new A,ti=new A,pi=new A,Ts=new A,sr=new A,rr=new A,mi=new A;function ra(i,t,e,n,s){for(let r=0,a=i.length-3;r<=a;r+=3){mi.fromArray(i,r);const o=s.x*Math.abs(mi.x)+s.y*Math.abs(mi.y)+s.z*Math.abs(mi.z),l=t.dot(mi),c=e.dot(mi),h=n.dot(mi);if(Math.max(-Math.max(l,c,h),Math.min(l,c,h))>o)return!1}return!0}const Wu=new Ci,Es=new A,aa=new A;class Pi{constructor(t=new A,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;e!==void 0?n.copy(e):Wu.setFromPoints(t).getCenter(n);let s=0;for(let r=0,a=t.length;r<a;r++)s=Math.max(s,n.distanceToSquared(t[r]));return this.radius=Math.sqrt(s),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Es.subVectors(t,this.center);const e=Es.lengthSq();if(e>this.radius*this.radius){const n=Math.sqrt(e),s=(n-this.radius)*.5;this.center.addScaledVector(Es,s/n),this.radius+=s}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(aa.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Es.copy(t.center).add(aa)),this.expandByPoint(Es.copy(t.center).sub(aa))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}const Fn=new A,oa=new A,ar=new A,ei=new A,la=new A,or=new A,ca=new A;class $r{constructor(t=new A,e=new A(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Fn)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Fn.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Fn.copy(this.origin).addScaledVector(this.direction,e),Fn.distanceToSquared(t))}distanceSqToSegment(t,e,n,s){oa.copy(t).add(e).multiplyScalar(.5),ar.copy(e).sub(t).normalize(),ei.copy(this.origin).sub(oa);const r=t.distanceTo(e)*.5,a=-this.direction.dot(ar),o=ei.dot(this.direction),l=-ei.dot(ar),c=ei.lengthSq(),h=Math.abs(1-a*a);let u,d,p,g;if(h>0)if(u=a*l-o,d=a*o-l,g=r*h,u>=0)if(d>=-g)if(d<=g){const _=1/h;u*=_,d*=_,p=u*(u+a*d+2*o)+d*(a*u+d+2*l)+c}else d=r,u=Math.max(0,-(a*d+o)),p=-u*u+d*(d+2*l)+c;else d=-r,u=Math.max(0,-(a*d+o)),p=-u*u+d*(d+2*l)+c;else d<=-g?(u=Math.max(0,-(-a*r+o)),d=u>0?-r:Math.min(Math.max(-r,-l),r),p=-u*u+d*(d+2*l)+c):d<=g?(u=0,d=Math.min(Math.max(-r,-l),r),p=d*(d+2*l)+c):(u=Math.max(0,-(a*r+o)),d=u>0?r:Math.min(Math.max(-r,-l),r),p=-u*u+d*(d+2*l)+c);else d=a>0?-r:r,u=Math.max(0,-(a*d+o)),p=-u*u+d*(d+2*l)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),s&&s.copy(oa).addScaledVector(ar,d),p}intersectSphere(t,e){Fn.subVectors(t.center,this.origin);const n=Fn.dot(this.direction),s=Fn.dot(Fn)-n*n,r=t.radius*t.radius;if(s>r)return null;const a=Math.sqrt(r-s),o=n-a,l=n+a;return l<0?null:o<0?this.at(l,e):this.at(o,e)}intersectsSphere(t){return t.radius<0?!1:this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return n===null?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,s,r,a,o,l;const c=1/this.direction.x,h=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(t.min.x-d.x)*c,s=(t.max.x-d.x)*c):(n=(t.max.x-d.x)*c,s=(t.min.x-d.x)*c),h>=0?(r=(t.min.y-d.y)*h,a=(t.max.y-d.y)*h):(r=(t.max.y-d.y)*h,a=(t.min.y-d.y)*h),n>a||r>s||((r>n||isNaN(n))&&(n=r),(a<s||isNaN(s))&&(s=a),u>=0?(o=(t.min.z-d.z)*u,l=(t.max.z-d.z)*u):(o=(t.max.z-d.z)*u,l=(t.min.z-d.z)*u),n>l||o>s)||((o>n||n!==n)&&(n=o),(l<s||s!==s)&&(s=l),s<0)?null:this.at(n>=0?n:s,e)}intersectsBox(t){return this.intersectBox(t,Fn)!==null}intersectTriangle(t,e,n,s,r){la.subVectors(e,t),or.subVectors(n,t),ca.crossVectors(la,or);let a=this.direction.dot(ca),o;if(a>0){if(s)return null;o=1}else if(a<0)o=-1,a=-a;else return null;ei.subVectors(this.origin,t);const l=o*this.direction.dot(or.crossVectors(ei,or));if(l<0)return null;const c=o*this.direction.dot(la.cross(ei));if(c<0||l+c>a)return null;const h=-o*ei.dot(ca);return h<0?null:this.at(h/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class se{constructor(t,e,n,s,r,a,o,l,c,h,u,d,p,g,_,m){se.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,n,s,r,a,o,l,c,h,u,d,p,g,_,m)}set(t,e,n,s,r,a,o,l,c,h,u,d,p,g,_,m){const f=this.elements;return f[0]=t,f[4]=e,f[8]=n,f[12]=s,f[1]=r,f[5]=a,f[9]=o,f[13]=l,f[2]=c,f[6]=h,f[10]=u,f[14]=d,f[3]=p,f[7]=g,f[11]=_,f[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new se().fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,s=1/Bi.setFromMatrixColumn(t,0).length(),r=1/Bi.setFromMatrixColumn(t,1).length(),a=1/Bi.setFromMatrixColumn(t,2).length();return e[0]=n[0]*s,e[1]=n[1]*s,e[2]=n[2]*s,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,n=t.x,s=t.y,r=t.z,a=Math.cos(n),o=Math.sin(n),l=Math.cos(s),c=Math.sin(s),h=Math.cos(r),u=Math.sin(r);if(t.order==="XYZ"){const d=a*h,p=a*u,g=o*h,_=o*u;e[0]=l*h,e[4]=-l*u,e[8]=c,e[1]=p+g*c,e[5]=d-_*c,e[9]=-o*l,e[2]=_-d*c,e[6]=g+p*c,e[10]=a*l}else if(t.order==="YXZ"){const d=l*h,p=l*u,g=c*h,_=c*u;e[0]=d+_*o,e[4]=g*o-p,e[8]=a*c,e[1]=a*u,e[5]=a*h,e[9]=-o,e[2]=p*o-g,e[6]=_+d*o,e[10]=a*l}else if(t.order==="ZXY"){const d=l*h,p=l*u,g=c*h,_=c*u;e[0]=d-_*o,e[4]=-a*u,e[8]=g+p*o,e[1]=p+g*o,e[5]=a*h,e[9]=_-d*o,e[2]=-a*c,e[6]=o,e[10]=a*l}else if(t.order==="ZYX"){const d=a*h,p=a*u,g=o*h,_=o*u;e[0]=l*h,e[4]=g*c-p,e[8]=d*c+_,e[1]=l*u,e[5]=_*c+d,e[9]=p*c-g,e[2]=-c,e[6]=o*l,e[10]=a*l}else if(t.order==="YZX"){const d=a*l,p=a*c,g=o*l,_=o*c;e[0]=l*h,e[4]=_-d*u,e[8]=g*u+p,e[1]=u,e[5]=a*h,e[9]=-o*h,e[2]=-c*h,e[6]=p*u+g,e[10]=d-_*u}else if(t.order==="XZY"){const d=a*l,p=a*c,g=o*l,_=o*c;e[0]=l*h,e[4]=-u,e[8]=c*h,e[1]=d*u+_,e[5]=a*h,e[9]=p*u-g,e[2]=g*u-p,e[6]=o*h,e[10]=_*u+d}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Xu,t,qu)}lookAt(t,e,n){const s=this.elements;return sn.subVectors(t,e),sn.lengthSq()===0&&(sn.z=1),sn.normalize(),ni.crossVectors(n,sn),ni.lengthSq()===0&&(Math.abs(n.z)===1?sn.x+=1e-4:sn.z+=1e-4,sn.normalize(),ni.crossVectors(n,sn)),ni.normalize(),lr.crossVectors(sn,ni),s[0]=ni.x,s[4]=lr.x,s[8]=sn.x,s[1]=ni.y,s[5]=lr.y,s[9]=sn.y,s[2]=ni.z,s[6]=lr.z,s[10]=sn.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,s=e.elements,r=this.elements,a=n[0],o=n[4],l=n[8],c=n[12],h=n[1],u=n[5],d=n[9],p=n[13],g=n[2],_=n[6],m=n[10],f=n[14],b=n[3],T=n[7],x=n[11],R=n[15],D=s[0],I=s[4],F=s[8],w=s[12],y=s[1],L=s[5],z=s[9],H=s[13],q=s[2],X=s[6],Z=s[10],et=s[14],V=s[3],gt=s[7],Mt=s[11],Lt=s[15];return r[0]=a*D+o*y+l*q+c*V,r[4]=a*I+o*L+l*X+c*gt,r[8]=a*F+o*z+l*Z+c*Mt,r[12]=a*w+o*H+l*et+c*Lt,r[1]=h*D+u*y+d*q+p*V,r[5]=h*I+u*L+d*X+p*gt,r[9]=h*F+u*z+d*Z+p*Mt,r[13]=h*w+u*H+d*et+p*Lt,r[2]=g*D+_*y+m*q+f*V,r[6]=g*I+_*L+m*X+f*gt,r[10]=g*F+_*z+m*Z+f*Mt,r[14]=g*w+_*H+m*et+f*Lt,r[3]=b*D+T*y+x*q+R*V,r[7]=b*I+T*L+x*X+R*gt,r[11]=b*F+T*z+x*Z+R*Mt,r[15]=b*w+T*H+x*et+R*Lt,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],s=t[8],r=t[12],a=t[1],o=t[5],l=t[9],c=t[13],h=t[2],u=t[6],d=t[10],p=t[14],g=t[3],_=t[7],m=t[11],f=t[15];return g*(+r*l*u-s*c*u-r*o*d+n*c*d+s*o*p-n*l*p)+_*(+e*l*p-e*c*d+r*a*d-s*a*p+s*c*h-r*l*h)+m*(+e*c*u-e*o*p-r*a*u+n*a*p+r*o*h-n*c*h)+f*(-s*o*h-e*l*u+e*o*d+s*a*u-n*a*d+n*l*h)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const s=this.elements;return t.isVector3?(s[12]=t.x,s[13]=t.y,s[14]=t.z):(s[12]=t,s[13]=e,s[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],u=t[9],d=t[10],p=t[11],g=t[12],_=t[13],m=t[14],f=t[15],b=u*m*c-_*d*c+_*l*p-o*m*p-u*l*f+o*d*f,T=g*d*c-h*m*c-g*l*p+a*m*p+h*l*f-a*d*f,x=h*_*c-g*u*c+g*o*p-a*_*p-h*o*f+a*u*f,R=g*u*l-h*_*l-g*o*d+a*_*d+h*o*m-a*u*m,D=e*b+n*T+s*x+r*R;if(D===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const I=1/D;return t[0]=b*I,t[1]=(_*d*r-u*m*r-_*s*p+n*m*p+u*s*f-n*d*f)*I,t[2]=(o*m*r-_*l*r+_*s*c-n*m*c-o*s*f+n*l*f)*I,t[3]=(u*l*r-o*d*r-u*s*c+n*d*c+o*s*p-n*l*p)*I,t[4]=T*I,t[5]=(h*m*r-g*d*r+g*s*p-e*m*p-h*s*f+e*d*f)*I,t[6]=(g*l*r-a*m*r-g*s*c+e*m*c+a*s*f-e*l*f)*I,t[7]=(a*d*r-h*l*r+h*s*c-e*d*c-a*s*p+e*l*p)*I,t[8]=x*I,t[9]=(g*u*r-h*_*r-g*n*p+e*_*p+h*n*f-e*u*f)*I,t[10]=(a*_*r-g*o*r+g*n*c-e*_*c-a*n*f+e*o*f)*I,t[11]=(h*o*r-a*u*r-h*n*c+e*u*c+a*n*p-e*o*p)*I,t[12]=R*I,t[13]=(h*_*s-g*u*s+g*n*d-e*_*d-h*n*m+e*u*m)*I,t[14]=(g*o*s-a*_*s-g*n*l+e*_*l+a*n*m-e*o*m)*I,t[15]=(a*u*s-h*o*s+h*n*l-e*u*l-a*n*d+e*o*d)*I,this}scale(t){const e=this.elements,n=t.x,s=t.y,r=t.z;return e[0]*=n,e[4]*=s,e[8]*=r,e[1]*=n,e[5]*=s,e[9]*=r,e[2]*=n,e[6]*=s,e[10]*=r,e[3]*=n,e[7]*=s,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],s=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,s))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),s=Math.sin(e),r=1-n,a=t.x,o=t.y,l=t.z,c=r*a,h=r*o;return this.set(c*a+n,c*o-s*l,c*l+s*o,0,c*o+s*l,h*o+n,h*l-s*a,0,c*l-s*o,h*l+s*a,r*l*l+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,s,r,a){return this.set(1,n,r,0,t,1,a,0,e,s,1,0,0,0,0,1),this}compose(t,e,n){const s=this.elements,r=e._x,a=e._y,o=e._z,l=e._w,c=r+r,h=a+a,u=o+o,d=r*c,p=r*h,g=r*u,_=a*h,m=a*u,f=o*u,b=l*c,T=l*h,x=l*u,R=n.x,D=n.y,I=n.z;return s[0]=(1-(_+f))*R,s[1]=(p+x)*R,s[2]=(g-T)*R,s[3]=0,s[4]=(p-x)*D,s[5]=(1-(d+f))*D,s[6]=(m+b)*D,s[7]=0,s[8]=(g+T)*I,s[9]=(m-b)*I,s[10]=(1-(d+_))*I,s[11]=0,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=1,this}decompose(t,e,n){const s=this.elements;let r=Bi.set(s[0],s[1],s[2]).length();const a=Bi.set(s[4],s[5],s[6]).length(),o=Bi.set(s[8],s[9],s[10]).length();this.determinant()<0&&(r=-r),t.x=s[12],t.y=s[13],t.z=s[14],xn.copy(this);const c=1/r,h=1/a,u=1/o;return xn.elements[0]*=c,xn.elements[1]*=c,xn.elements[2]*=c,xn.elements[4]*=h,xn.elements[5]*=h,xn.elements[6]*=h,xn.elements[8]*=u,xn.elements[9]*=u,xn.elements[10]*=u,e.setFromRotationMatrix(xn),n.x=r,n.y=a,n.z=o,this}makePerspective(t,e,n,s,r,a,o=Pn,l=!1){const c=this.elements,h=2*r/(e-t),u=2*r/(n-s),d=(e+t)/(e-t),p=(n+s)/(n-s);let g,_;if(l)g=r/(a-r),_=a*r/(a-r);else if(o===Pn)g=-(a+r)/(a-r),_=-2*a*r/(a-r);else if(o===Hr)g=-a/(a-r),_=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return c[0]=h,c[4]=0,c[8]=d,c[12]=0,c[1]=0,c[5]=u,c[9]=p,c[13]=0,c[2]=0,c[6]=0,c[10]=g,c[14]=_,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(t,e,n,s,r,a,o=Pn,l=!1){const c=this.elements,h=2/(e-t),u=2/(n-s),d=-(e+t)/(e-t),p=-(n+s)/(n-s);let g,_;if(l)g=1/(a-r),_=a/(a-r);else if(o===Pn)g=-2/(a-r),_=-(a+r)/(a-r);else if(o===Hr)g=-1/(a-r),_=-r/(a-r);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return c[0]=h,c[4]=0,c[8]=0,c[12]=d,c[1]=0,c[5]=u,c[9]=0,c[13]=p,c[2]=0,c[6]=0,c[10]=g,c[14]=_,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let s=0;s<16;s++)if(e[s]!==n[s])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const Bi=new A,xn=new se,Xu=new A(0,0,0),qu=new A(1,1,1),ni=new A,lr=new A,sn=new A,Sl=new se,wl=new ps;class In{constructor(t=0,e=0,n=0,s=In.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=s}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,s=this._order){return this._x=t,this._y=e,this._z=n,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const s=t.elements,r=s[0],a=s[4],o=s[8],l=s[1],c=s[5],h=s[9],u=s[2],d=s[6],p=s[10];switch(e){case"XYZ":this._y=Math.asin($t(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-$t(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(o,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-u,r),this._z=0);break;case"ZXY":this._x=Math.asin($t(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(l,r));break;case"ZYX":this._y=Math.asin(-$t(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,r)):(this._x=0,this._z=Math.atan2(-a,c));break;case"YZX":this._z=Math.asin($t(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(o,p));break;case"XZY":this._z=Math.asin(-$t(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,n===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Sl.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Sl,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return wl.setFromEuler(this),this.setFromQuaternion(wl,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}In.DEFAULT_ORDER="XYZ";class Zo{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}}let Yu=0;const Tl=new A,zi=new ps,On=new se,cr=new A,bs=new A,Zu=new A,Ku=new ps,El=new A(1,0,0),bl=new A(0,1,0),Al=new A(0,0,1),Rl={type:"added"},$u={type:"removed"},ki={type:"childadded",child:null},ha={type:"childremoved",child:null};class we extends fs{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Yu++}),this.uuid=Yn(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=we.DEFAULT_UP.clone();const t=new A,e=new In,n=new ps,s=new A(1,1,1);function r(){n.setFromEuler(e,!1)}function a(){e.setFromQuaternion(n,void 0,!1)}e._onChange(r),n._onChange(a),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:s},modelViewMatrix:{value:new se},normalMatrix:{value:new Yt}}),this.matrix=new se,this.matrixWorld=new se,this.matrixAutoUpdate=we.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=we.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new Zo,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.userData={}}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return zi.setFromAxisAngle(t,e),this.quaternion.multiply(zi),this}rotateOnWorldAxis(t,e){return zi.setFromAxisAngle(t,e),this.quaternion.premultiply(zi),this}rotateX(t){return this.rotateOnAxis(El,t)}rotateY(t){return this.rotateOnAxis(bl,t)}rotateZ(t){return this.rotateOnAxis(Al,t)}translateOnAxis(t,e){return Tl.copy(t).applyQuaternion(this.quaternion),this.position.add(Tl.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(El,t)}translateY(t){return this.translateOnAxis(bl,t)}translateZ(t){return this.translateOnAxis(Al,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(On.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?cr.copy(t):cr.set(t,e,n);const s=this.parent;this.updateWorldMatrix(!0,!1),bs.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?On.lookAt(bs,cr,this.up):On.lookAt(cr,bs,this.up),this.quaternion.setFromRotationMatrix(On),s&&(On.extractRotation(s.matrixWorld),zi.setFromRotationMatrix(On),this.quaternion.premultiply(zi.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(Rl),ki.child=t,this.dispatchEvent(ki),ki.child=null):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let n=0;n<arguments.length;n++)this.remove(arguments[n]);return this}const e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent($u),ha.child=t,this.dispatchEvent(ha),ha.child=null),this}removeFromParent(){const t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),On.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),On.multiply(t.parent.matrixWorld)),t.applyMatrix4(On),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(Rl),ki.child=t,this.dispatchEvent(ki),ki.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,s=this.children.length;n<s;n++){const a=this.children[n].getObjectByProperty(t,e);if(a!==void 0)return a}}getObjectsByProperty(t,e,n=[]){this[t]===e&&n.push(this);const s=this.children;for(let r=0,a=s.length;r<a;r++)s[r].getObjectsByProperty(t,e,n);return n}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(bs,t,Zu),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(bs,Ku,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,s=e.length;n<s;n++)e[n].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);const e=this.children;for(let n=0,s=e.length;n<s;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,s=e.length;n<s;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(t===!0&&n!==null&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){const s=this.children;for(let r=0,a=s.length;r<a;r++)s[r].updateWorldMatrix(!1,!0)}}toJSON(t){const e=t===void 0||typeof t=="string",n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});const s={};s.uuid=this.uuid,s.type=this.type,this.name!==""&&(s.name=this.name),this.castShadow===!0&&(s.castShadow=!0),this.receiveShadow===!0&&(s.receiveShadow=!0),this.visible===!1&&(s.visible=!1),this.frustumCulled===!1&&(s.frustumCulled=!1),this.renderOrder!==0&&(s.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),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(t),s.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(t)),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(t)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(t.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,h=l.length;c<h;c++){const u=l[c];r(t.shapes,u)}else r(t.shapes,l)}}if(this.isSkinnedMesh&&(s.bindMode=this.bindMode,s.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(t.skeletons,this.skeleton),s.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const o=[];for(let l=0,c=this.material.length;l<c;l++)o.push(r(t.materials,this.material[l]));s.material=o}else s.material=r(t.materials,this.material);if(this.children.length>0){s.children=[];for(let o=0;o<this.children.length;o++)s.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){s.animations=[];for(let o=0;o<this.animations.length;o++){const l=this.animations[o];s.animations.push(r(t.animations,l))}}if(e){const o=a(t.geometries),l=a(t.materials),c=a(t.textures),h=a(t.images),u=a(t.shapes),d=a(t.skeletons),p=a(t.animations),g=a(t.nodes);o.length>0&&(n.geometries=o),l.length>0&&(n.materials=l),c.length>0&&(n.textures=c),h.length>0&&(n.images=h),u.length>0&&(n.shapes=u),d.length>0&&(n.skeletons=d),p.length>0&&(n.animations=p),g.length>0&&(n.nodes=g)}return n.object=s,n;function a(o){const l=[];for(const c in o){const h=o[c];delete h.metadata,l.push(h)}return l}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let n=0;n<t.children.length;n++){const s=t.children[n];this.add(s.clone())}return this}}we.DEFAULT_UP=new A(0,1,0);we.DEFAULT_MATRIX_AUTO_UPDATE=!0;we.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const Mn=new A,Bn=new A,ua=new A,zn=new A,Hi=new A,Gi=new A,Cl=new A,da=new A,fa=new A,pa=new A,ma=new ue,ga=new ue,_a=new ue;class pn{constructor(t=new A,e=new A,n=new A){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,s){s.subVectors(n,e),Mn.subVectors(t,e),s.cross(Mn);const r=s.lengthSq();return r>0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(t,e,n,s,r){Mn.subVectors(s,e),Bn.subVectors(n,e),ua.subVectors(t,e);const a=Mn.dot(Mn),o=Mn.dot(Bn),l=Mn.dot(ua),c=Bn.dot(Bn),h=Bn.dot(ua),u=a*c-o*o;if(u===0)return r.set(0,0,0),null;const d=1/u,p=(c*l-o*h)*d,g=(a*h-o*l)*d;return r.set(1-p-g,g,p)}static containsPoint(t,e,n,s){return this.getBarycoord(t,e,n,s,zn)===null?!1:zn.x>=0&&zn.y>=0&&zn.x+zn.y<=1}static getInterpolation(t,e,n,s,r,a,o,l){return this.getBarycoord(t,e,n,s,zn)===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,zn.x),l.addScaledVector(a,zn.y),l.addScaledVector(o,zn.z),l)}static getInterpolatedAttribute(t,e,n,s,r,a){return ma.setScalar(0),ga.setScalar(0),_a.setScalar(0),ma.fromBufferAttribute(t,e),ga.fromBufferAttribute(t,n),_a.fromBufferAttribute(t,s),a.setScalar(0),a.addScaledVector(ma,r.x),a.addScaledVector(ga,r.y),a.addScaledVector(_a,r.z),a}static isFrontFacing(t,e,n,s){return Mn.subVectors(n,e),Bn.subVectors(t,e),Mn.cross(Bn).dot(s)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,s){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[s]),this}setFromAttributeAndIndices(t,e,n,s){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,s),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Mn.subVectors(this.c,this.b),Bn.subVectors(this.a,this.b),Mn.cross(Bn).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return pn.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return pn.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,n,s,r){return pn.getInterpolation(t,this.a,this.b,this.c,e,n,s,r)}containsPoint(t){return pn.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return pn.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,s=this.b,r=this.c;let a,o;Hi.subVectors(s,n),Gi.subVectors(r,n),da.subVectors(t,n);const l=Hi.dot(da),c=Gi.dot(da);if(l<=0&&c<=0)return e.copy(n);fa.subVectors(t,s);const h=Hi.dot(fa),u=Gi.dot(fa);if(h>=0&&u<=h)return e.copy(s);const d=l*u-h*c;if(d<=0&&l>=0&&h<=0)return a=l/(l-h),e.copy(n).addScaledVector(Hi,a);pa.subVectors(t,r);const p=Hi.dot(pa),g=Gi.dot(pa);if(g>=0&&p<=g)return e.copy(r);const _=p*c-l*g;if(_<=0&&c>=0&&g<=0)return o=c/(c-g),e.copy(n).addScaledVector(Gi,o);const m=h*g-p*u;if(m<=0&&u-h>=0&&p-g>=0)return Cl.subVectors(r,s),o=(u-h)/(u-h+(p-g)),e.copy(s).addScaledVector(Cl,o);const f=1/(m+_+d);return a=_*f,o=d*f,e.copy(n).addScaledVector(Hi,a).addScaledVector(Gi,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Zc={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},ii={h:0,s:0,l:0},hr={h:0,s:0,l:0};function va(i,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?i+(t-i)*6*e:e<1/2?t:e<2/3?i+(t-i)*6*(2/3-e):i}class ft{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(e===void 0&&n===void 0){const s=t;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Ze){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,ne.colorSpaceToWorking(this,e),this}setRGB(t,e,n,s=ne.workingColorSpace){return this.r=t,this.g=e,this.b=n,ne.colorSpaceToWorking(this,s),this}setHSL(t,e,n,s=ne.workingColorSpace){if(t=qo(t,1),e=$t(e,0,1),n=$t(n,0,1),e===0)this.r=this.g=this.b=n;else{const r=n<=.5?n*(1+e):n+e-n*e,a=2*n-r;this.r=va(a,r,t+1/3),this.g=va(a,r,t),this.b=va(a,r,t-1/3)}return ne.colorSpaceToWorking(this,s),this}setStyle(t,e=Ze){function n(r){r!==void 0&&parseFloat(r)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(t)){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 n(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,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(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,e);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 n(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(t)){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,e);if(a===6)return this.setHex(parseInt(r,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Ze){const n=Zc[t.toLowerCase()];return n!==void 0?this.setHex(n,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Zn(t.r),this.g=Zn(t.g),this.b=Zn(t.b),this}copyLinearToSRGB(t){return this.r=ns(t.r),this.g=ns(t.g),this.b=ns(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Ze){return ne.workingToColorSpace(Oe.copy(this),t),Math.round($t(Oe.r*255,0,255))*65536+Math.round($t(Oe.g*255,0,255))*256+Math.round($t(Oe.b*255,0,255))}getHexString(t=Ze){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=ne.workingColorSpace){ne.workingToColorSpace(Oe.copy(this),e);const n=Oe.r,s=Oe.g,r=Oe.b,a=Math.max(n,s,r),o=Math.min(n,s,r);let l,c;const h=(o+a)/2;if(o===a)l=0,c=0;else{const u=a-o;switch(c=h<=.5?u/(a+o):u/(2-a-o),a){case n:l=(s-r)/u+(s<r?6:0);break;case s:l=(r-n)/u+2;break;case r:l=(n-s)/u+4;break}l/=6}return t.h=l,t.s=c,t.l=h,t}getRGB(t,e=ne.workingColorSpace){return ne.workingToColorSpace(Oe.copy(this),e),t.r=Oe.r,t.g=Oe.g,t.b=Oe.b,t}getStyle(t=Ze){ne.workingToColorSpace(Oe.copy(this),t);const e=Oe.r,n=Oe.g,s=Oe.b;return t!==Ze?`color(${t} ${e.toFixed(3)} ${n.toFixed(3)} ${s.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(n*255)},${Math.round(s*255)})`}offsetHSL(t,e,n){return this.getHSL(ii),this.setHSL(ii.h+t,ii.s+e,ii.l+n)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(ii),t.getHSL(hr);const n=Os(ii.h,hr.h,e),s=Os(ii.s,hr.s,e),r=Os(ii.l,hr.l,e);return this.setHSL(n,s,r),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){const e=this.r,n=this.g,s=this.b,r=t.elements;return this.r=r[0]*e+r[3]*n+r[6]*s,this.g=r[1]*e+r[4]*n+r[7]*s,this.b=r[2]*e+r[5]*n+r[8]*s,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const Oe=new ft;ft.NAMES=Zc;let ju=0;class hi extends fs{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:ju++}),this.uuid=Yn(),this.name="",this.type="Material",this.blending=Ai,this.side=ai,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=Oa,this.blendDst=Ba,this.blendEquation=wi,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new ft(0,0,0),this.blendAlpha=0,this.depthFunc=is,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=ml,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=Ii,this.stencilZFail=Ii,this.stencilZPass=Ii,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const n=t[e];if(n===void 0){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const s=this[e];if(s===void 0){console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(n):s&&s.isVector3&&n&&n.isVector3?s.copy(n):this[e]=n}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const n={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(n.sheenColorMap=this.sheenColorMap.toJSON(t).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(n.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(t).uuid),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==Ai&&(n.blending=this.blending),this.side!==ai&&(n.side=this.side),this.vertexColors===!0&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=!0),this.blendSrc!==Oa&&(n.blendSrc=this.blendSrc),this.blendDst!==Ba&&(n.blendDst=this.blendDst),this.blendEquation!==wi&&(n.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(n.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(n.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(n.blendAlpha=this.blendAlpha),this.depthFunc!==is&&(n.depthFunc=this.depthFunc),this.depthTest===!1&&(n.depthTest=this.depthTest),this.depthWrite===!1&&(n.depthWrite=this.depthWrite),this.colorWrite===!1&&(n.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(n.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==ml&&(n.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(n.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Ii&&(n.stencilFail=this.stencilFail),this.stencilZFail!==Ii&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==Ii&&(n.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(n.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=!0),this.alphaToCoverage===!0&&(n.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=!0),this.forceSinglePass===!0&&(n.forceSinglePass=!0),this.wireframe===!0&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=!0),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.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(e){const r=s(t.textures),a=s(t.images);r.length>0&&(n.textures=r),a.length>0&&(n.images=a)}return n}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(e!==null){const s=e.length;n=new Array(s);for(let r=0;r!==s;++r)n[r]=e[r].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}}class Be extends hi{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ft(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 In,this.combine=Nc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const Ae=new A,ur=new Dt;let Ju=0;class ve{constructor(t,e,n=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Ju++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=n,this.usage=To,this.updateRanges=[],this.gpuType=Cn,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let s=0,r=this.itemSize;s<r;s++)this.array[t+s]=e.array[n+s];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,n=this.count;e<n;e++)ur.fromBufferAttribute(this,e),ur.applyMatrix3(t),this.setXY(e,ur.x,ur.y);else if(this.itemSize===3)for(let e=0,n=this.count;e<n;e++)Ae.fromBufferAttribute(this,e),Ae.applyMatrix3(t),this.setXYZ(e,Ae.x,Ae.y,Ae.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)Ae.fromBufferAttribute(this,e),Ae.applyMatrix4(t),this.setXYZ(e,Ae.x,Ae.y,Ae.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)Ae.fromBufferAttribute(this,e),Ae.applyNormalMatrix(t),this.setXYZ(e,Ae.x,Ae.y,Ae.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)Ae.fromBufferAttribute(this,e),Ae.transformDirection(t),this.setXYZ(e,Ae.x,Ae.y,Ae.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let n=this.array[t*this.itemSize+e];return this.normalized&&(n=Sn(n,this.array)),n}setComponent(t,e,n){return this.normalized&&(n=oe(n,this.array)),this.array[t*this.itemSize+e]=n,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Sn(e,this.array)),e}setX(t,e){return this.normalized&&(e=oe(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Sn(e,this.array)),e}setY(t,e){return this.normalized&&(e=oe(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Sn(e,this.array)),e}setZ(t,e){return this.normalized&&(e=oe(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Sn(e,this.array)),e}setW(t,e){return this.normalized&&(e=oe(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.normalized&&(e=oe(e,this.array),n=oe(n,this.array)),this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,s){return t*=this.itemSize,this.normalized&&(e=oe(e,this.array),n=oe(n,this.array),s=oe(s,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=s,this}setXYZW(t,e,n,s,r){return t*=this.itemSize,this.normalized&&(e=oe(e,this.array),n=oe(n,this.array),s=oe(s,this.array),r=oe(r,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=s,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==To&&(t.usage=this.usage),t}}class Kc extends ve{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class $c extends ve{constructor(t,e,n){super(new Uint32Array(t),e,n)}}class ge extends ve{constructor(t,e,n){super(new Float32Array(t),e,n)}}let Qu=0;const un=new se,xa=new we,Vi=new A,rn=new Ci,As=new Ci,Le=new A;class me extends fs{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Qu++}),this.uuid=Yn(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(qc(t)?$c:Kc)(t,1):this.index=t,this}setIndirect(t){return this.indirect=t,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(n!==void 0){const r=new Yt().getNormalMatrix(t);n.applyNormalMatrix(r),n.needsUpdate=!0}const s=this.attributes.tangent;return s!==void 0&&(s.transformDirection(t),s.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return un.makeRotationFromQuaternion(t),this.applyMatrix4(un),this}rotateX(t){return un.makeRotationX(t),this.applyMatrix4(un),this}rotateY(t){return un.makeRotationY(t),this.applyMatrix4(un),this}rotateZ(t){return un.makeRotationZ(t),this.applyMatrix4(un),this}translate(t,e,n){return un.makeTranslation(t,e,n),this.applyMatrix4(un),this}scale(t,e,n){return un.makeScale(t,e,n),this.applyMatrix4(un),this}lookAt(t){return xa.lookAt(t),xa.updateMatrix(),this.applyMatrix4(xa.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Vi).negate(),this.translate(Vi.x,Vi.y,Vi.z),this}setFromPoints(t){const e=this.getAttribute("position");if(e===void 0){const n=[];for(let s=0,r=t.length;s<r;s++){const a=t[s];n.push(a.x,a.y,a.z||0)}this.setAttribute("position",new ge(n,3))}else{const n=Math.min(t.length,e.count);for(let s=0;s<n;s++){const r=t[s];e.setXYZ(s,r.x,r.y,r.z||0)}t.length>e.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Ci);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new A(-1/0,-1/0,-1/0),new A(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let n=0,s=e.length;n<s;n++){const r=e[n];rn.setFromBufferAttribute(r),this.morphTargetsRelative?(Le.addVectors(this.boundingBox.min,rn.min),this.boundingBox.expandByPoint(Le),Le.addVectors(this.boundingBox.max,rn.max),this.boundingBox.expandByPoint(Le)):(this.boundingBox.expandByPoint(rn.min),this.boundingBox.expandByPoint(rn.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Pi);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new A,1/0);return}if(t){const n=this.boundingSphere.center;if(rn.setFromBufferAttribute(t),e)for(let r=0,a=e.length;r<a;r++){const o=e[r];As.setFromBufferAttribute(o),this.morphTargetsRelative?(Le.addVectors(rn.min,As.min),rn.expandByPoint(Le),Le.addVectors(rn.max,As.max),rn.expandByPoint(Le)):(rn.expandByPoint(As.min),rn.expandByPoint(As.max))}rn.getCenter(n);let s=0;for(let r=0,a=t.count;r<a;r++)Le.fromBufferAttribute(t,r),s=Math.max(s,n.distanceToSquared(Le));if(e)for(let r=0,a=e.length;r<a;r++){const o=e[r],l=this.morphTargetsRelative;for(let c=0,h=o.count;c<h;c++)Le.fromBufferAttribute(o,c),l&&(Vi.fromBufferAttribute(t,c),Le.add(Vi)),s=Math.max(s,n.distanceToSquared(Le))}this.boundingSphere.radius=Math.sqrt(s),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const n=e.position,s=e.normal,r=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new ve(new Float32Array(4*n.count),4));const a=this.getAttribute("tangent"),o=[],l=[];for(let F=0;F<n.count;F++)o[F]=new A,l[F]=new A;const c=new A,h=new A,u=new A,d=new Dt,p=new Dt,g=new Dt,_=new A,m=new A;function f(F,w,y){c.fromBufferAttribute(n,F),h.fromBufferAttribute(n,w),u.fromBufferAttribute(n,y),d.fromBufferAttribute(r,F),p.fromBufferAttribute(r,w),g.fromBufferAttribute(r,y),h.sub(c),u.sub(c),p.sub(d),g.sub(d);const L=1/(p.x*g.y-g.x*p.y);isFinite(L)&&(_.copy(h).multiplyScalar(g.y).addScaledVector(u,-p.y).multiplyScalar(L),m.copy(u).multiplyScalar(p.x).addScaledVector(h,-g.x).multiplyScalar(L),o[F].add(_),o[w].add(_),o[y].add(_),l[F].add(m),l[w].add(m),l[y].add(m))}let b=this.groups;b.length===0&&(b=[{start:0,count:t.count}]);for(let F=0,w=b.length;F<w;++F){const y=b[F],L=y.start,z=y.count;for(let H=L,q=L+z;H<q;H+=3)f(t.getX(H+0),t.getX(H+1),t.getX(H+2))}const T=new A,x=new A,R=new A,D=new A;function I(F){R.fromBufferAttribute(s,F),D.copy(R);const w=o[F];T.copy(w),T.sub(R.multiplyScalar(R.dot(w))).normalize(),x.crossVectors(D,w);const L=x.dot(l[F])<0?-1:1;a.setXYZW(F,T.x,T.y,T.z,L)}for(let F=0,w=b.length;F<w;++F){const y=b[F],L=y.start,z=y.count;for(let H=L,q=L+z;H<q;H+=3)I(t.getX(H+0)),I(t.getX(H+1)),I(t.getX(H+2))}}computeVertexNormals(){const t=this.index,e=this.getAttribute("position");if(e!==void 0){let n=this.getAttribute("normal");if(n===void 0)n=new ve(new Float32Array(e.count*3),3),this.setAttribute("normal",n);else for(let d=0,p=n.count;d<p;d++)n.setXYZ(d,0,0,0);const s=new A,r=new A,a=new A,o=new A,l=new A,c=new A,h=new A,u=new A;if(t)for(let d=0,p=t.count;d<p;d+=3){const g=t.getX(d+0),_=t.getX(d+1),m=t.getX(d+2);s.fromBufferAttribute(e,g),r.fromBufferAttribute(e,_),a.fromBufferAttribute(e,m),h.subVectors(a,r),u.subVectors(s,r),h.cross(u),o.fromBufferAttribute(n,g),l.fromBufferAttribute(n,_),c.fromBufferAttribute(n,m),o.add(h),l.add(h),c.add(h),n.setXYZ(g,o.x,o.y,o.z),n.setXYZ(_,l.x,l.y,l.z),n.setXYZ(m,c.x,c.y,c.z)}else for(let d=0,p=e.count;d<p;d+=3)s.fromBufferAttribute(e,d+0),r.fromBufferAttribute(e,d+1),a.fromBufferAttribute(e,d+2),h.subVectors(a,r),u.subVectors(s,r),h.cross(u),n.setXYZ(d+0,h.x,h.y,h.z),n.setXYZ(d+1,h.x,h.y,h.z),n.setXYZ(d+2,h.x,h.y,h.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)Le.fromBufferAttribute(t,e),Le.normalize(),t.setXYZ(e,Le.x,Le.y,Le.z)}toNonIndexed(){function t(o,l){const c=o.array,h=o.itemSize,u=o.normalized,d=new c.constructor(l.length*h);let p=0,g=0;for(let _=0,m=l.length;_<m;_++){o.isInterleavedBufferAttribute?p=l[_]*o.data.stride+o.offset:p=l[_]*h;for(let f=0;f<h;f++)d[g++]=c[p++]}return new ve(d,h,u)}if(this.index===null)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const e=new me,n=this.index.array,s=this.attributes;for(const o in s){const l=s[o],c=t(l,n);e.setAttribute(o,c)}const r=this.morphAttributes;for(const o in r){const l=[],c=r[o];for(let h=0,u=c.length;h<u;h++){const d=c[h],p=t(d,n);l.push(p)}e.morphAttributes[o]=l}e.morphTargetsRelative=this.morphTargetsRelative;const a=this.groups;for(let o=0,l=a.length;o<l;o++){const c=a[o];e.addGroup(c.start,c.count,c.materialIndex)}return e}toJSON(){const t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(t[c]=l[c]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const l in n){const c=n[l];t.data.attributes[l]=c.toJSON(t.data)}const s={};let r=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],h=[];for(let u=0,d=c.length;u<d;u++){const p=c[u];h.push(p.toJSON(t.data))}h.length>0&&(s[l]=h,r=!0)}r&&(t.data.morphAttributes=s,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;n!==null&&this.setIndex(n.clone());const s=t.attributes;for(const c in s){const h=s[c];this.setAttribute(c,h.clone(e))}const r=t.morphAttributes;for(const c in r){const h=[],u=r[c];for(let d=0,p=u.length;d<p;d++)h.push(u[d].clone(e));this.morphAttributes[c]=h}this.morphTargetsRelative=t.morphTargetsRelative;const a=t.groups;for(let c=0,h=a.length;c<h;c++){const u=a[c];this.addGroup(u.start,u.count,u.materialIndex)}const o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());const l=t.boundingSphere;return l!==null&&(this.boundingSphere=l.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}const Pl=new se,gi=new $r,dr=new Pi,Dl=new A,fr=new A,pr=new A,mr=new A,Ma=new A,gr=new A,Ll=new A,_r=new A;class xt extends we{constructor(t=new me,e=new Be){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const e=this.geometry.morphAttributes,n=Object.keys(e);if(n.length>0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;r<a;r++){const o=s[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[o]=r}}}}getVertexPosition(t,e){const n=this.geometry,s=n.attributes.position,r=n.morphAttributes.position,a=n.morphTargetsRelative;e.fromBufferAttribute(s,t);const o=this.morphTargetInfluences;if(r&&o){gr.set(0,0,0);for(let l=0,c=r.length;l<c;l++){const h=o[l],u=r[l];h!==0&&(Ma.fromBufferAttribute(u,t),a?gr.addScaledVector(Ma,h):gr.addScaledVector(Ma.sub(e),h))}e.add(gr)}return e}raycast(t,e){const n=this.geometry,s=this.material,r=this.matrixWorld;s!==void 0&&(n.boundingSphere===null&&n.computeBoundingSphere(),dr.copy(n.boundingSphere),dr.applyMatrix4(r),gi.copy(t.ray).recast(t.near),!(dr.containsPoint(gi.origin)===!1&&(gi.intersectSphere(dr,Dl)===null||gi.origin.distanceToSquared(Dl)>(t.far-t.near)**2))&&(Pl.copy(r).invert(),gi.copy(t.ray).applyMatrix4(Pl),!(n.boundingBox!==null&&gi.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(t,e,gi)))}_computeIntersections(t,e,n){let s;const r=this.geometry,a=this.material,o=r.index,l=r.attributes.position,c=r.attributes.uv,h=r.attributes.uv1,u=r.attributes.normal,d=r.groups,p=r.drawRange;if(o!==null)if(Array.isArray(a))for(let g=0,_=d.length;g<_;g++){const m=d[g],f=a[m.materialIndex],b=Math.max(m.start,p.start),T=Math.min(o.count,Math.min(m.start+m.count,p.start+p.count));for(let x=b,R=T;x<R;x+=3){const D=o.getX(x),I=o.getX(x+1),F=o.getX(x+2);s=vr(this,f,t,n,c,h,u,D,I,F),s&&(s.faceIndex=Math.floor(x/3),s.face.materialIndex=m.materialIndex,e.push(s))}}else{const g=Math.max(0,p.start),_=Math.min(o.count,p.start+p.count);for(let m=g,f=_;m<f;m+=3){const b=o.getX(m),T=o.getX(m+1),x=o.getX(m+2);s=vr(this,a,t,n,c,h,u,b,T,x),s&&(s.faceIndex=Math.floor(m/3),e.push(s))}}else if(l!==void 0)if(Array.isArray(a))for(let g=0,_=d.length;g<_;g++){const m=d[g],f=a[m.materialIndex],b=Math.max(m.start,p.start),T=Math.min(l.count,Math.min(m.start+m.count,p.start+p.count));for(let x=b,R=T;x<R;x+=3){const D=x,I=x+1,F=x+2;s=vr(this,f,t,n,c,h,u,D,I,F),s&&(s.faceIndex=Math.floor(x/3),s.face.materialIndex=m.materialIndex,e.push(s))}}else{const g=Math.max(0,p.start),_=Math.min(l.count,p.start+p.count);for(let m=g,f=_;m<f;m+=3){const b=m,T=m+1,x=m+2;s=vr(this,a,t,n,c,h,u,b,T,x),s&&(s.faceIndex=Math.floor(m/3),e.push(s))}}}}function td(i,t,e,n,s,r,a,o){let l;if(t.side===Ke?l=n.intersectTriangle(a,r,s,!0,o):l=n.intersectTriangle(s,r,a,t.side===ai,o),l===null)return null;_r.copy(o),_r.applyMatrix4(i.matrixWorld);const c=e.ray.origin.distanceTo(_r);return c<e.near||c>e.far?null:{distance:c,point:_r.clone(),object:i}}function vr(i,t,e,n,s,r,a,o,l,c){i.getVertexPosition(o,fr),i.getVertexPosition(l,pr),i.getVertexPosition(c,mr);const h=td(i,t,e,n,fr,pr,mr,Ll);if(h){const u=new A;pn.getBarycoord(Ll,fr,pr,mr,u),s&&(h.uv=pn.getInterpolatedAttribute(s,o,l,c,u,new Dt)),r&&(h.uv1=pn.getInterpolatedAttribute(r,o,l,c,u,new Dt)),a&&(h.normal=pn.getInterpolatedAttribute(a,o,l,c,u,new A),h.normal.dot(n.direction)>0&&h.normal.multiplyScalar(-1));const d={a:o,b:l,c,normal:new A,materialIndex:0};pn.getNormal(fr,pr,mr,d.normal),h.face=d,h.barycoord=u}return h}class he extends me{constructor(t=1,e=1,n=1,s=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:s,heightSegments:r,depthSegments:a};const o=this;s=Math.floor(s),r=Math.floor(r),a=Math.floor(a);const l=[],c=[],h=[],u=[];let d=0,p=0;g("z","y","x",-1,-1,n,e,t,a,r,0),g("z","y","x",1,-1,n,e,-t,a,r,1),g("x","z","y",1,1,t,n,e,s,a,2),g("x","z","y",1,-1,t,n,-e,s,a,3),g("x","y","z",1,-1,t,e,n,s,r,4),g("x","y","z",-1,-1,t,e,-n,s,r,5),this.setIndex(l),this.setAttribute("position",new ge(c,3)),this.setAttribute("normal",new ge(h,3)),this.setAttribute("uv",new ge(u,2));function g(_,m,f,b,T,x,R,D,I,F,w){const y=x/I,L=R/F,z=x/2,H=R/2,q=D/2,X=I+1,Z=F+1;let et=0,V=0;const gt=new A;for(let Mt=0;Mt<Z;Mt++){const Lt=Mt*L-H;for(let qt=0;qt<X;qt++){const re=qt*y-z;gt[_]=re*b,gt[m]=Lt*T,gt[f]=q,c.push(gt.x,gt.y,gt.z),gt[_]=0,gt[m]=0,gt[f]=D>0?1:-1,h.push(gt.x,gt.y,gt.z),u.push(qt/I),u.push(1-Mt/F),et+=1}}for(let Mt=0;Mt<F;Mt++)for(let Lt=0;Lt<I;Lt++){const qt=d+Lt+X*Mt,re=d+Lt+X*(Mt+1),de=d+(Lt+1)+X*(Mt+1),te=d+(Lt+1)+X*Mt;l.push(qt,re,te),l.push(re,de,te),V+=6}o.addGroup(p,V,w),p+=V,d+=et}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new he(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function os(i){const t={};for(const e in i){t[e]={};for(const n in i[e]){const s=i[e][n];s&&(s.isColor||s.isMatrix3||s.isMatrix4||s.isVector2||s.isVector3||s.isVector4||s.isTexture||s.isQuaternion)?s.isRenderTargetTexture?(console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][n]=null):t[e][n]=s.clone():Array.isArray(s)?t[e][n]=s.slice():t[e][n]=s}}return t}function Xe(i){const t={};for(let e=0;e<i.length;e++){const n=os(i[e]);for(const s in n)t[s]=n[s]}return t}function ed(i){const t=[];for(let e=0;e<i.length;e++)t.push(i[e].clone());return t}function jc(i){const t=i.getRenderTarget();return t===null?i.outputColorSpace:t.isXRRenderTarget===!0?t.texture.colorSpace:ne.workingColorSpace}const Vr={clone:os,merge:Xe};var nd=`void main() {
	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}`,id=`void main() {
	gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
}`;class ze extends hi{constructor(t){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=nd,this.fragmentShader=id,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,t!==void 0&&this.setValues(t)}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=os(t.uniforms),this.uniformsGroups=ed(t.uniformsGroups),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const s in this.uniforms){const a=this.uniforms[s].value;a&&a.isTexture?e.uniforms[s]={type:"t",value:a.toJSON(t).uuid}:a&&a.isColor?e.uniforms[s]={type:"c",value:a.getHex()}:a&&a.isVector2?e.uniforms[s]={type:"v2",value:a.toArray()}:a&&a.isVector3?e.uniforms[s]={type:"v3",value:a.toArray()}:a&&a.isVector4?e.uniforms[s]={type:"v4",value:a.toArray()}:a&&a.isMatrix3?e.uniforms[s]={type:"m3",value:a.toArray()}:a&&a.isMatrix4?e.uniforms[s]={type:"m4",value:a.toArray()}:e.uniforms[s]={value:a}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const n={};for(const s in this.extensions)this.extensions[s]===!0&&(n[s]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}class Jc extends we{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new se,this.projectionMatrix=new se,this.projectionMatrixInverse=new se,this.coordinateSystem=Pn,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const si=new A,Il=new Dt,Ul=new Dt;class on extends Jc{constructor(t=50,e=1,n=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=s,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=t.view===null?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=Vs*2*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(Fs*.5*this.fov);return .5*this.getFilmHeight()/t}getEffectiveFOV(){return Vs*2*Math.atan(Math.tan(Fs*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(t,e,n){si.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),e.set(si.x,si.y).multiplyScalar(-t/si.z),si.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(si.x,si.y).multiplyScalar(-t/si.z)}getViewSize(t,e){return this.getViewBounds(t,Il,Ul),e.subVectors(Ul,Il)}setViewOffset(t,e,n,s,r,a){this.aspect=t/e,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=t,this.view.fullHeight=e,this.view.offsetX=n,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 t=this.near;let e=t*Math.tan(Fs*.5*this.fov)/this.zoom,n=2*e,s=this.aspect*n,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,e-=a.offsetY*n/c,s*=a.width/l,n*=a.height/c}const o=this.filmOffset;o!==0&&(r+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+s,e,e-n,t,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,this.view!==null&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const Wi=-90,Xi=1;class sd extends we{constructor(t,e,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new on(Wi,Xi,t,e);s.layers=this.layers,this.add(s);const r=new on(Wi,Xi,t,e);r.layers=this.layers,this.add(r);const a=new on(Wi,Xi,t,e);a.layers=this.layers,this.add(a);const o=new on(Wi,Xi,t,e);o.layers=this.layers,this.add(o);const l=new on(Wi,Xi,t,e);l.layers=this.layers,this.add(l);const c=new on(Wi,Xi,t,e);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[n,s,r,a,o,l]=e;for(const c of e)this.remove(c);if(t===Pn)n.up.set(0,1,0),n.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(t===Hr)n.up.set(0,-1,0),n.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: "+t);for(const c of e)this.add(c),c.updateMatrixWorld()}update(t,e){this.parent===null&&this.updateMatrixWorld();const{renderTarget:n,activeMipmapLevel:s}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[r,a,o,l,c,h]=this.children,u=t.getRenderTarget(),d=t.getActiveCubeFace(),p=t.getActiveMipmapLevel(),g=t.xr.enabled;t.xr.enabled=!1;const _=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0,s),t.render(e,r),t.setRenderTarget(n,1,s),t.render(e,a),t.setRenderTarget(n,2,s),t.render(e,o),t.setRenderTarget(n,3,s),t.render(e,l),t.setRenderTarget(n,4,s),t.render(e,c),n.texture.generateMipmaps=_,t.setRenderTarget(n,5,s),t.render(e,h),t.setRenderTarget(u,d,p),t.xr.enabled=g,n.texture.needsPMREMUpdate=!0}}class Qc extends He{constructor(t=[],e=ss,n,s,r,a,o,l,c,h){super(t,e,n,s,r,a,o,l,c,h),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class rd extends Tn{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const n={width:t,height:t,depth:1},s=[n,n,n,n,n,n];this.texture=new Qc(s),this._setTextureOptions(e),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:`

				varying vec3 vWorldDirection;

				vec3 transformDirection( in vec3 dir, in mat4 matrix ) {

					return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );

				}

				void main() {

					vWorldDirection = transformDirection( position, modelMatrix );

					#include <begin_vertex>
					#include <project_vertex>

				}
			`,fragmentShader:`

				uniform sampler2D tEquirect;

				varying vec3 vWorldDirection;

				#include <common>

				void main() {

					vec3 direction = normalize( vWorldDirection );

					vec2 sampleUV = equirectUv( direction );

					gl_FragColor = texture2D( tEquirect, sampleUV );

				}
			`},s=new he(5,5,5),r=new ze({name:"CubemapFromEquirect",uniforms:os(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:Ke,blending:Wn});r.uniforms.tEquirect.value=e;const a=new xt(s,r),o=e.minFilter;return e.minFilter===bi&&(e.minFilter=Rn),new sd(1,10,this).update(t,a),e.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(t,e=!0,n=!0,s=!0){const r=t.getRenderTarget();for(let a=0;a<6;a++)t.setRenderTarget(this,a),t.clear(e,n,s);t.setRenderTarget(r)}}class tn extends we{constructor(){super(),this.isGroup=!0,this.type="Group"}}const ad={type:"move"};class ya{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new tn,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new tn,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new A,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new A),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new tn,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new A,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new A),this._grip}dispatchEvent(t){return this._targetRay!==null&&this._targetRay.dispatchEvent(t),this._grip!==null&&this._grip.dispatchEvent(t),this._hand!==null&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){const e=this._hand;if(e)for(const n of t.hand.values())this._getHandJoint(e,n)}return this.dispatchEvent({type:"connected",data:t}),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(t,e,n){let s=null,r=null,a=null;const o=this._targetRay,l=this._grip,c=this._hand;if(t&&e.session.visibilityState!=="visible-blurred"){if(c&&t.hand){a=!0;for(const _ of t.hand.values()){const m=e.getJointPose(_,n),f=this._getHandJoint(c,_);m!==null&&(f.matrix.fromArray(m.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale),f.matrixWorldNeedsUpdate=!0,f.jointRadius=m.radius),f.visible=m!==null}const h=c.joints["index-finger-tip"],u=c.joints["thumb-tip"],d=h.position.distanceTo(u.position),p=.02,g=.005;c.inputState.pinching&&d>p+g?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!c.inputState.pinching&&d<=p-g&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else l!==null&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),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));o!==null&&(s=e.getPose(t.targetRaySpace,n),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(ad)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=r!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(t,e){if(t.joints[e.jointName]===void 0){const n=new tn;n.matrixAutoUpdate=!1,n.visible=!1,t.joints[e.jointName]=n,t.add(n)}return t.joints[e.jointName]}}class Ko{constructor(t,e=25e-5){this.isFogExp2=!0,this.name="",this.color=new ft(t),this.density=e}clone(){return new Ko(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class th extends we{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new In,this.environmentIntensity=1,this.environmentRotation=new In,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),t.background!==null&&(this.background=t.background.clone()),t.environment!==null&&(this.environment=t.environment.clone()),t.fog!==null&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,this.backgroundRotation.copy(t.backgroundRotation),this.environmentIntensity=t.environmentIntensity,this.environmentRotation.copy(t.environmentRotation),t.overrideMaterial!==null&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return this.fog!==null&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}class od{constructor(t,e){this.isInterleavedBuffer=!0,this.array=t,this.stride=e,this.count=t!==void 0?t.length/e:0,this.usage=To,this.updateRanges=[],this.version=0,this.uuid=Yn()}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let s=0,r=this.stride;s<r;s++)this.array[t+s]=e.array[n+s];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){t.arrayBuffers===void 0&&(t.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=Yn()),t.arrayBuffers[this.array.buffer._uuid]===void 0&&(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return t.arrayBuffers===void 0&&(t.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=Yn()),t.arrayBuffers[this.array.buffer._uuid]===void 0&&(t.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}const We=new A;class Wr{constructor(t,e,n,s=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=t,this.itemSize=e,this.offset=n,this.normalized=s}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e<n;e++)We.fromBufferAttribute(this,e),We.applyMatrix4(t),this.setXYZ(e,We.x,We.y,We.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)We.fromBufferAttribute(this,e),We.applyNormalMatrix(t),this.setXYZ(e,We.x,We.y,We.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)We.fromBufferAttribute(this,e),We.transformDirection(t),this.setXYZ(e,We.x,We.y,We.z);return this}getComponent(t,e){let n=this.array[t*this.data.stride+this.offset+e];return this.normalized&&(n=Sn(n,this.array)),n}setComponent(t,e,n){return this.normalized&&(n=oe(n,this.array)),this.data.array[t*this.data.stride+this.offset+e]=n,this}setX(t,e){return this.normalized&&(e=oe(e,this.array)),this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.normalized&&(e=oe(e,this.array)),this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.normalized&&(e=oe(e,this.array)),this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.normalized&&(e=oe(e,this.array)),this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){let e=this.data.array[t*this.data.stride+this.offset];return this.normalized&&(e=Sn(e,this.array)),e}getY(t){let e=this.data.array[t*this.data.stride+this.offset+1];return this.normalized&&(e=Sn(e,this.array)),e}getZ(t){let e=this.data.array[t*this.data.stride+this.offset+2];return this.normalized&&(e=Sn(e,this.array)),e}getW(t){let e=this.data.array[t*this.data.stride+this.offset+3];return this.normalized&&(e=Sn(e,this.array)),e}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.normalized&&(e=oe(e,this.array),n=oe(n,this.array)),this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,s){return t=t*this.data.stride+this.offset,this.normalized&&(e=oe(e,this.array),n=oe(n,this.array),s=oe(s,this.array)),this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=s,this}setXYZW(t,e,n,s,r){return t=t*this.data.stride+this.offset,this.normalized&&(e=oe(e,this.array),n=oe(n,this.array),s=oe(s,this.array),r=oe(r,this.array)),this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=s,this.data.array[t+3]=r,this}clone(t){if(t===void 0){console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.");const e=[];for(let n=0;n<this.count;n++){const s=n*this.data.stride+this.offset;for(let r=0;r<this.itemSize;r++)e.push(this.data.array[s+r])}return new ve(new this.array.constructor(e),this.itemSize,this.normalized)}else return t.interleavedBuffers===void 0&&(t.interleavedBuffers={}),t.interleavedBuffers[this.data.uuid]===void 0&&(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new Wr(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(t===void 0){console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.");const e=[];for(let n=0;n<this.count;n++){const s=n*this.data.stride+this.offset;for(let r=0;r<this.itemSize;r++)e.push(this.data.array[s+r])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:e,normalized:this.normalized}}else return t.interleavedBuffers===void 0&&(t.interleavedBuffers={}),t.interleavedBuffers[this.data.uuid]===void 0&&(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}class oi extends hi{constructor(t){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new ft(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this.fog=t.fog,this}}let qi;const Rs=new A,Yi=new A,Zi=new A,Ki=new Dt,Cs=new Dt,eh=new se,xr=new A,Ps=new A,Mr=new A,Nl=new Dt,Sa=new Dt,Fl=new Dt;class li extends we{constructor(t=new oi){if(super(),this.isSprite=!0,this.type="Sprite",qi===void 0){qi=new me;const e=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),n=new od(e,5);qi.setIndex([0,1,2,0,2,3]),qi.setAttribute("position",new Wr(n,3,0,!1)),qi.setAttribute("uv",new Wr(n,2,3,!1))}this.geometry=qi,this.material=t,this.center=new Dt(.5,.5),this.count=1}raycast(t,e){t.camera===null&&console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),Yi.setFromMatrixScale(this.matrixWorld),eh.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),Zi.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&Yi.multiplyScalar(-Zi.z);const n=this.material.rotation;let s,r;n!==0&&(r=Math.cos(n),s=Math.sin(n));const a=this.center;yr(xr.set(-.5,-.5,0),Zi,a,Yi,s,r),yr(Ps.set(.5,-.5,0),Zi,a,Yi,s,r),yr(Mr.set(.5,.5,0),Zi,a,Yi,s,r),Nl.set(0,0),Sa.set(1,0),Fl.set(1,1);let o=t.ray.intersectTriangle(xr,Ps,Mr,!1,Rs);if(o===null&&(yr(Ps.set(-.5,.5,0),Zi,a,Yi,s,r),Sa.set(0,1),o=t.ray.intersectTriangle(xr,Mr,Ps,!1,Rs),o===null))return;const l=t.ray.origin.distanceTo(Rs);l<t.near||l>t.far||e.push({distance:l,point:Rs.clone(),uv:pn.getInterpolation(Rs,xr,Ps,Mr,Nl,Sa,Fl,new Dt),face:null,object:this})}copy(t,e){return super.copy(t,e),t.center!==void 0&&this.center.copy(t.center),this.material=t.material,this}}function yr(i,t,e,n,s,r){Ki.subVectors(i,e).addScalar(.5).multiply(n),s!==void 0?(Cs.x=r*Ki.x-s*Ki.y,Cs.y=s*Ki.x+r*Ki.y):Cs.copy(Ki),i.copy(t),i.x+=Cs.x,i.y+=Cs.y,i.applyMatrix4(eh)}class ld extends He{constructor(t=null,e=1,n=1,s,r,a,o,l,c=ln,h=ln,u,d){super(null,a,o,l,c,h,s,r,u,d),this.isDataTexture=!0,this.image={data:t,width:e,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class Ol extends ve{constructor(t,e,n,s=1){super(t,e,n),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=s}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}const $i=new se,Bl=new se,Sr=[],zl=new Ci,cd=new se,Ds=new xt,Ls=new Pi;class hd extends xt{constructor(t,e,n){super(t,e),this.isInstancedMesh=!0,this.instanceMatrix=new Ol(new Float32Array(n*16),16),this.instanceColor=null,this.morphTexture=null,this.count=n,this.boundingBox=null,this.boundingSphere=null;for(let s=0;s<n;s++)this.setMatrixAt(s,cd)}computeBoundingBox(){const t=this.geometry,e=this.count;this.boundingBox===null&&(this.boundingBox=new Ci),t.boundingBox===null&&t.computeBoundingBox(),this.boundingBox.makeEmpty();for(let n=0;n<e;n++)this.getMatrixAt(n,$i),zl.copy(t.boundingBox).applyMatrix4($i),this.boundingBox.union(zl)}computeBoundingSphere(){const t=this.geometry,e=this.count;this.boundingSphere===null&&(this.boundingSphere=new Pi),t.boundingSphere===null&&t.computeBoundingSphere(),this.boundingSphere.makeEmpty();for(let n=0;n<e;n++)this.getMatrixAt(n,$i),Ls.copy(t.boundingSphere).applyMatrix4($i),this.boundingSphere.union(Ls)}copy(t,e){return super.copy(t,e),this.instanceMatrix.copy(t.instanceMatrix),t.morphTexture!==null&&(this.morphTexture=t.morphTexture.clone()),t.instanceColor!==null&&(this.instanceColor=t.instanceColor.clone()),this.count=t.count,t.boundingBox!==null&&(this.boundingBox=t.boundingBox.clone()),t.boundingSphere!==null&&(this.boundingSphere=t.boundingSphere.clone()),this}getColorAt(t,e){e.fromArray(this.instanceColor.array,t*3)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,t*16)}getMorphAt(t,e){const n=e.morphTargetInfluences,s=this.morphTexture.source.data.data,r=n.length+1,a=t*r+1;for(let o=0;o<n.length;o++)n[o]=s[a+o]}raycast(t,e){const n=this.matrixWorld,s=this.count;if(Ds.geometry=this.geometry,Ds.material=this.material,Ds.material!==void 0&&(this.boundingSphere===null&&this.computeBoundingSphere(),Ls.copy(this.boundingSphere),Ls.applyMatrix4(n),t.ray.intersectsSphere(Ls)!==!1))for(let r=0;r<s;r++){this.getMatrixAt(r,$i),Bl.multiplyMatrices(n,$i),Ds.matrixWorld=Bl,Ds.raycast(t,Sr);for(let a=0,o=Sr.length;a<o;a++){const l=Sr[a];l.instanceId=r,l.object=this,e.push(l)}Sr.length=0}}setColorAt(t,e){this.instanceColor===null&&(this.instanceColor=new Ol(new Float32Array(this.instanceMatrix.count*3).fill(1),3)),e.toArray(this.instanceColor.array,t*3)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,t*16)}setMorphAt(t,e){const n=e.morphTargetInfluences,s=n.length+1;this.morphTexture===null&&(this.morphTexture=new ld(new Float32Array(s*this.count),s,this.count,Go,Cn));const r=this.morphTexture.source.data.data;let a=0;for(let c=0;c<n.length;c++)a+=n[c];const o=this.geometry.morphTargetsRelative?1:1-a,l=s*t;r[l]=o,r.set(n,l+1)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:"dispose"}),this.morphTexture!==null&&(this.morphTexture.dispose(),this.morphTexture=null)}}const wa=new A,ud=new A,dd=new Yt;class Mi{constructor(t=new A(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,s){return this.normal.set(t,e,n),this.constant=s,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const s=wa.subVectors(n,e).cross(ud.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(s,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const n=t.delta(wa),s=this.normal.dot(n);if(s===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/s;return r<0||r>1?null:e.copy(t.start).addScaledVector(n,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||dd.getNormalMatrix(t),s=this.coplanarPoint(wa).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-s.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}}const _i=new Pi,fd=new Dt(.5,.5),wr=new A;class $o{constructor(t=new Mi,e=new Mi,n=new Mi,s=new Mi,r=new Mi,a=new Mi){this.planes=[t,e,n,s,r,a]}set(t,e,n,s,r,a){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(s),o[4].copy(r),o[5].copy(a),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t,e=Pn,n=!1){const s=this.planes,r=t.elements,a=r[0],o=r[1],l=r[2],c=r[3],h=r[4],u=r[5],d=r[6],p=r[7],g=r[8],_=r[9],m=r[10],f=r[11],b=r[12],T=r[13],x=r[14],R=r[15];if(s[0].setComponents(c-a,p-h,f-g,R-b).normalize(),s[1].setComponents(c+a,p+h,f+g,R+b).normalize(),s[2].setComponents(c+o,p+u,f+_,R+T).normalize(),s[3].setComponents(c-o,p-u,f-_,R-T).normalize(),n)s[4].setComponents(l,d,m,x).normalize(),s[5].setComponents(c-l,p-d,f-m,R-x).normalize();else if(s[4].setComponents(c-l,p-d,f-m,R-x).normalize(),e===Pn)s[5].setComponents(c+l,p+d,f+m,R+x).normalize();else if(e===Hr)s[5].setComponents(l,d,m,x).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);return this}intersectsObject(t){if(t.boundingSphere!==void 0)t.boundingSphere===null&&t.computeBoundingSphere(),_i.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),_i.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(_i)}intersectsSprite(t){_i.center.set(0,0,0);const e=fd.distanceTo(t.center);return _i.radius=.7071067811865476+e,_i.applyMatrix4(t.matrixWorld),this.intersectsSphere(_i)}intersectsSphere(t){const e=this.planes,n=t.center,s=-t.radius;for(let r=0;r<6;r++)if(e[r].distanceToPoint(n)<s)return!1;return!0}intersectsBox(t){const e=this.planes;for(let n=0;n<6;n++){const s=e[n];if(wr.x=s.normal.x>0?t.max.x:t.min.x,wr.y=s.normal.y>0?t.max.y:t.min.y,wr.z=s.normal.z>0?t.max.z:t.min.z,s.distanceToPoint(wr)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class ls extends hi{constructor(t){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new ft(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this.fog=t.fog,this}}const Xr=new A,qr=new A,kl=new se,Is=new $r,Tr=new Pi,Ta=new A,Hl=new A;class ms extends we{constructor(t=new me,e=new ls){super(),this.isLine=!0,this.type="Line",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.index===null){const e=t.attributes.position,n=[0];for(let s=1,r=e.count;s<r;s++)Xr.fromBufferAttribute(e,s-1),qr.fromBufferAttribute(e,s),n[s]=n[s-1],n[s]+=Xr.distanceTo(qr);t.setAttribute("lineDistance",new ge(n,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}raycast(t,e){const n=this.geometry,s=this.matrixWorld,r=t.params.Line.threshold,a=n.drawRange;if(n.boundingSphere===null&&n.computeBoundingSphere(),Tr.copy(n.boundingSphere),Tr.applyMatrix4(s),Tr.radius+=r,t.ray.intersectsSphere(Tr)===!1)return;kl.copy(s).invert(),Is.copy(t.ray).applyMatrix4(kl);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,c=this.isLineSegments?2:1,h=n.index,d=n.attributes.position;if(h!==null){const p=Math.max(0,a.start),g=Math.min(h.count,a.start+a.count);for(let _=p,m=g-1;_<m;_+=c){const f=h.getX(_),b=h.getX(_+1),T=Er(this,t,Is,l,f,b,_);T&&e.push(T)}if(this.isLineLoop){const _=h.getX(g-1),m=h.getX(p),f=Er(this,t,Is,l,_,m,g-1);f&&e.push(f)}}else{const p=Math.max(0,a.start),g=Math.min(d.count,a.start+a.count);for(let _=p,m=g-1;_<m;_+=c){const f=Er(this,t,Is,l,_,_+1,_);f&&e.push(f)}if(this.isLineLoop){const _=Er(this,t,Is,l,g-1,p,g-1);_&&e.push(_)}}}updateMorphTargets(){const e=this.geometry.morphAttributes,n=Object.keys(e);if(n.length>0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;r<a;r++){const o=s[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[o]=r}}}}}function Er(i,t,e,n,s,r,a){const o=i.geometry.attributes.position;if(Xr.fromBufferAttribute(o,s),qr.fromBufferAttribute(o,r),e.distanceSqToSegment(Xr,qr,Ta,Hl)>n)return;Ta.applyMatrix4(i.matrixWorld);const c=t.ray.origin.distanceTo(Ta);if(!(c<t.near||c>t.far))return{distance:c,point:Hl.clone().applyMatrix4(i.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:i}}const Gl=new A,Vl=new A;class pd extends ms{constructor(t,e){super(t,e),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(t.index===null){const e=t.attributes.position,n=[];for(let s=0,r=e.count;s<r;s+=2)Gl.fromBufferAttribute(e,s),Vl.fromBufferAttribute(e,s+1),n[s]=s===0?0:n[s-1],n[s+1]=n[s]+Gl.distanceTo(Vl);t.setAttribute("lineDistance",new ge(n,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}}class Yr extends hi{constructor(t){super(),this.isPointsMaterial=!0,this.type="PointsMaterial",this.color=new ft(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this.fog=t.fog,this}}const Wl=new se,Eo=new $r,br=new Pi,Ar=new A;class Zr extends we{constructor(t=new me,e=new Yr){super(),this.isPoints=!0,this.type="Points",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,s=this.matrixWorld,r=t.params.Points.threshold,a=n.drawRange;if(n.boundingSphere===null&&n.computeBoundingSphere(),br.copy(n.boundingSphere),br.applyMatrix4(s),br.radius+=r,t.ray.intersectsSphere(br)===!1)return;Wl.copy(s).invert(),Eo.copy(t.ray).applyMatrix4(Wl);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,c=n.index,u=n.attributes.position;if(c!==null){const d=Math.max(0,a.start),p=Math.min(c.count,a.start+a.count);for(let g=d,_=p;g<_;g++){const m=c.getX(g);Ar.fromBufferAttribute(u,m),Xl(Ar,m,l,s,t,e,this)}}else{const d=Math.max(0,a.start),p=Math.min(u.count,a.start+a.count);for(let g=d,_=p;g<_;g++)Ar.fromBufferAttribute(u,g),Xl(Ar,g,l,s,t,e,this)}}updateMorphTargets(){const e=this.geometry.morphAttributes,n=Object.keys(e);if(n.length>0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;r<a;r++){const o=s[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[o]=r}}}}}function Xl(i,t,e,n,s,r,a){const o=Eo.distanceSqToPoint(i);if(o<e){const l=new A;Eo.closestPointToPoint(i,l),l.applyMatrix4(n);const c=s.ray.origin.distanceTo(l);if(c<s.near||c>s.far)return;r.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:t,face:null,faceIndex:null,barycoord:null,object:a})}}class nh extends He{constructor(t,e,n,s,r,a,o,l,c){super(t,e,n,s,r,a,o,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}}class ih extends He{constructor(t,e,n=Ri,s,r,a,o=ln,l=ln,c,h=Hs,u=1){if(h!==Hs&&h!==Gs)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const d={width:t,height:e,depth:u};super(d,s,r,a,o,l,h,n,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.source=new Yo(Object.assign({},t.image)),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return this.compareFunction!==null&&(e.compareFunction=this.compareFunction),e}}class sh extends He{constructor(t=null){super(),this.sourceTexture=t,this.isExternalTexture=!0}copy(t){return super.copy(t),this.sourceTexture=t.sourceTexture,this}}class Ji extends me{constructor(t=1,e=1,n=4,s=8,r=1){super(),this.type="CapsuleGeometry",this.parameters={radius:t,height:e,capSegments:n,radialSegments:s,heightSegments:r},e=Math.max(0,e),n=Math.max(1,Math.floor(n)),s=Math.max(3,Math.floor(s)),r=Math.max(1,Math.floor(r));const a=[],o=[],l=[],c=[],h=e/2,u=Math.PI/2*t,d=e,p=2*u+d,g=n*2+r,_=s+1,m=new A,f=new A;for(let b=0;b<=g;b++){let T=0,x=0,R=0,D=0;if(b<=n){const w=b/n,y=w*Math.PI/2;x=-h-t*Math.cos(y),R=t*Math.sin(y),D=-t*Math.cos(y),T=w*u}else if(b<=n+r){const w=(b-n)/r;x=-h+w*e,R=t,D=0,T=u+w*d}else{const w=(b-n-r)/n,y=w*Math.PI/2;x=h+t*Math.sin(y),R=t*Math.cos(y),D=t*Math.sin(y),T=u+d+w*u}const I=Math.max(0,Math.min(1,T/p));let F=0;b===0?F=.5/s:b===g&&(F=-.5/s);for(let w=0;w<=s;w++){const y=w/s,L=y*Math.PI*2,z=Math.sin(L),H=Math.cos(L);f.x=-R*H,f.y=x,f.z=R*z,o.push(f.x,f.y,f.z),m.set(-R*H,D,R*z),m.normalize(),l.push(m.x,m.y,m.z),c.push(y+F,I)}if(b>0){const w=(b-1)*_;for(let y=0;y<s;y++){const L=w+y,z=w+y+1,H=b*_+y,q=b*_+y+1;a.push(L,z,H),a.push(z,q,H)}}}this.setIndex(a),this.setAttribute("position",new ge(o,3)),this.setAttribute("normal",new ge(l,3)),this.setAttribute("uv",new ge(c,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Ji(t.radius,t.height,t.capSegments,t.radialSegments,t.heightSegments)}}class jo extends me{constructor(t=1,e=32,n=0,s=Math.PI*2){super(),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:s},e=Math.max(3,e);const r=[],a=[],o=[],l=[],c=new A,h=new Dt;a.push(0,0,0),o.push(0,0,1),l.push(.5,.5);for(let u=0,d=3;u<=e;u++,d+=3){const p=n+u/e*s;c.x=t*Math.cos(p),c.y=t*Math.sin(p),a.push(c.x,c.y,c.z),o.push(0,0,1),h.x=(a[d]/t+1)/2,h.y=(a[d+1]/t+1)/2,l.push(h.x,h.y)}for(let u=1;u<=e;u++)r.push(u,u+1,0);this.setIndex(r),this.setAttribute("position",new ge(a,3)),this.setAttribute("normal",new ge(o,3)),this.setAttribute("uv",new ge(l,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new jo(t.radius,t.segments,t.thetaStart,t.thetaLength)}}class ui extends me{constructor(t=1,e=1,n=1,s=32,r=1,a=!1,o=0,l=Math.PI*2){super(),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:s,heightSegments:r,openEnded:a,thetaStart:o,thetaLength:l};const c=this;s=Math.floor(s),r=Math.floor(r);const h=[],u=[],d=[],p=[];let g=0;const _=[],m=n/2;let f=0;b(),a===!1&&(t>0&&T(!0),e>0&&T(!1)),this.setIndex(h),this.setAttribute("position",new ge(u,3)),this.setAttribute("normal",new ge(d,3)),this.setAttribute("uv",new ge(p,2));function b(){const x=new A,R=new A;let D=0;const I=(e-t)/n;for(let F=0;F<=r;F++){const w=[],y=F/r,L=y*(e-t)+t;for(let z=0;z<=s;z++){const H=z/s,q=H*l+o,X=Math.sin(q),Z=Math.cos(q);R.x=L*X,R.y=-y*n+m,R.z=L*Z,u.push(R.x,R.y,R.z),x.set(X,I,Z).normalize(),d.push(x.x,x.y,x.z),p.push(H,1-y),w.push(g++)}_.push(w)}for(let F=0;F<s;F++)for(let w=0;w<r;w++){const y=_[w][F],L=_[w+1][F],z=_[w+1][F+1],H=_[w][F+1];(t>0||w!==0)&&(h.push(y,L,H),D+=3),(e>0||w!==r-1)&&(h.push(L,z,H),D+=3)}c.addGroup(f,D,0),f+=D}function T(x){const R=g,D=new Dt,I=new A;let F=0;const w=x===!0?t:e,y=x===!0?1:-1;for(let z=1;z<=s;z++)u.push(0,m*y,0),d.push(0,y,0),p.push(.5,.5),g++;const L=g;for(let z=0;z<=s;z++){const q=z/s*l+o,X=Math.cos(q),Z=Math.sin(q);I.x=w*Z,I.y=m*y,I.z=w*X,u.push(I.x,I.y,I.z),d.push(0,y,0),D.x=X*.5+.5,D.y=Z*.5*y+.5,p.push(D.x,D.y),g++}for(let z=0;z<s;z++){const H=R+z,q=L+z;x===!0?h.push(q,q+1,H):h.push(q+1,q,H),F+=3}c.addGroup(f,F,x===!0?1:2),f+=F}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new ui(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class Jo extends ui{constructor(t=1,e=1,n=32,s=1,r=!1,a=0,o=Math.PI*2){super(0,t,e,n,s,r,a,o),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:s,openEnded:r,thetaStart:a,thetaLength:o}}static fromJSON(t){return new Jo(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class Ye extends me{constructor(t=1,e=1,n=1,s=1){super(),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:n,heightSegments:s};const r=t/2,a=e/2,o=Math.floor(n),l=Math.floor(s),c=o+1,h=l+1,u=t/o,d=e/l,p=[],g=[],_=[],m=[];for(let f=0;f<h;f++){const b=f*d-a;for(let T=0;T<c;T++){const x=T*u-r;g.push(x,-b,0),_.push(0,0,1),m.push(T/o),m.push(1-f/l)}}for(let f=0;f<l;f++)for(let b=0;b<o;b++){const T=b+c*f,x=b+c*(f+1),R=b+1+c*(f+1),D=b+1+c*f;p.push(T,x,D),p.push(x,R,D)}this.setIndex(p),this.setAttribute("position",new ge(g,3)),this.setAttribute("normal",new ge(_,3)),this.setAttribute("uv",new ge(m,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Ye(t.width,t.height,t.widthSegments,t.heightSegments)}}class Kn extends me{constructor(t=1,e=32,n=16,s=0,r=Math.PI*2,a=0,o=Math.PI){super(),this.type="SphereGeometry",this.parameters={radius:t,widthSegments:e,heightSegments:n,phiStart:s,phiLength:r,thetaStart:a,thetaLength:o},e=Math.max(3,Math.floor(e)),n=Math.max(2,Math.floor(n));const l=Math.min(a+o,Math.PI);let c=0;const h=[],u=new A,d=new A,p=[],g=[],_=[],m=[];for(let f=0;f<=n;f++){const b=[],T=f/n;let x=0;f===0&&a===0?x=.5/e:f===n&&l===Math.PI&&(x=-.5/e);for(let R=0;R<=e;R++){const D=R/e;u.x=-t*Math.cos(s+D*r)*Math.sin(a+T*o),u.y=t*Math.cos(a+T*o),u.z=t*Math.sin(s+D*r)*Math.sin(a+T*o),g.push(u.x,u.y,u.z),d.copy(u).normalize(),_.push(d.x,d.y,d.z),m.push(D+x,1-T),b.push(c++)}h.push(b)}for(let f=0;f<n;f++)for(let b=0;b<e;b++){const T=h[f][b+1],x=h[f][b],R=h[f+1][b],D=h[f+1][b+1];(f!==0||a>0)&&p.push(T,x,D),(f!==n-1||l<Math.PI)&&p.push(x,R,D)}this.setIndex(p),this.setAttribute("position",new ge(g,3)),this.setAttribute("normal",new ge(_,3)),this.setAttribute("uv",new ge(m,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Kn(t.radius,t.widthSegments,t.heightSegments,t.phiStart,t.phiLength,t.thetaStart,t.thetaLength)}}class Qo extends me{constructor(t=1,e=.4,n=12,s=48,r=Math.PI*2){super(),this.type="TorusGeometry",this.parameters={radius:t,tube:e,radialSegments:n,tubularSegments:s,arc:r},n=Math.floor(n),s=Math.floor(s);const a=[],o=[],l=[],c=[],h=new A,u=new A,d=new A;for(let p=0;p<=n;p++)for(let g=0;g<=s;g++){const _=g/s*r,m=p/n*Math.PI*2;u.x=(t+e*Math.cos(m))*Math.cos(_),u.y=(t+e*Math.cos(m))*Math.sin(_),u.z=e*Math.sin(m),o.push(u.x,u.y,u.z),h.x=t*Math.cos(_),h.y=t*Math.sin(_),d.subVectors(u,h).normalize(),l.push(d.x,d.y,d.z),c.push(g/s),c.push(p/n)}for(let p=1;p<=n;p++)for(let g=1;g<=s;g++){const _=(s+1)*p+g-1,m=(s+1)*(p-1)+g-1,f=(s+1)*(p-1)+g,b=(s+1)*p+g;a.push(_,m,b),a.push(m,f,b)}this.setIndex(a),this.setAttribute("position",new ge(o,3)),this.setAttribute("normal",new ge(l,3)),this.setAttribute("uv",new ge(c,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Qo(t.radius,t.tube,t.radialSegments,t.tubularSegments,t.arc)}}class fe extends hi{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new ft(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ft(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Wc,this.normalScale=new Dt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new In,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class md extends fe{constructor(t){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new Dt(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return $t(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(e){this.ior=(1+.4*e)/(1-.4*e)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new ft(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new ft(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new ft(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(t)}get anisotropy(){return this._anisotropy}set anisotropy(t){this._anisotropy>0!=t>0&&this.version++,this._anisotropy=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get iridescence(){return this._iridescence}set iridescence(t){this._iridescence>0!=t>0&&this.version++,this._iridescence=t}get dispersion(){return this._dispersion}set dispersion(t){this._dispersion>0!=t>0&&this.version++,this._dispersion=t}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=t.anisotropy,this.anisotropyRotation=t.anisotropyRotation,this.anisotropyMap=t.anisotropyMap,this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.dispersion=t.dispersion,this.ior=t.ior,this.iridescence=t.iridescence,this.iridescenceMap=t.iridescenceMap,this.iridescenceIOR=t.iridescenceIOR,this.iridescenceThicknessRange=[...t.iridescenceThicknessRange],this.iridescenceThicknessMap=t.iridescenceThicknessMap,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}class gd extends hi{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=hu,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class _d extends hi{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}class tl extends we{constructor(t,e=1){super(),this.isLight=!0,this.type="Light",this.color=new ft(t),this.intensity=e}dispose(){}copy(t,e){return super.copy(t,e),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,this.groundColor!==void 0&&(e.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(e.object.distance=this.distance),this.angle!==void 0&&(e.object.angle=this.angle),this.decay!==void 0&&(e.object.decay=this.decay),this.penumbra!==void 0&&(e.object.penumbra=this.penumbra),this.shadow!==void 0&&(e.object.shadow=this.shadow.toJSON()),this.target!==void 0&&(e.object.target=this.target.uuid),e}}class vd extends tl{constructor(t,e,n){super(t,n),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(we.DEFAULT_UP),this.updateMatrix(),this.groundColor=new ft(e)}copy(t,e){return super.copy(t,e),this.groundColor.copy(t.groundColor),this}}const Ea=new se,ql=new A,Yl=new A;class rh{constructor(t){this.camera=t,this.intensity=1,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new Dt(512,512),this.mapType=Ln,this.map=null,this.mapPass=null,this.matrix=new se,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new $o,this._frameExtents=new Dt(1,1),this._viewportCount=1,this._viewports=[new ue(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;ql.setFromMatrixPosition(t.matrixWorld),e.position.copy(ql),Yl.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(Yl),e.updateMatrixWorld(),Ea.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Ea,e.coordinateSystem,e.reversedDepth),e.reversedDepth?n.set(.5,0,0,.5,0,.5,0,.5,0,0,1,0,0,0,0,1):n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(Ea)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.intensity=t.intensity,this.bias=t.bias,this.radius=t.radius,this.autoUpdate=t.autoUpdate,this.needsUpdate=t.needsUpdate,this.normalBias=t.normalBias,this.blurSamples=t.blurSamples,this.mapSize.copy(t.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){const t={};return this.intensity!==1&&(t.intensity=this.intensity),this.bias!==0&&(t.bias=this.bias),this.normalBias!==0&&(t.normalBias=this.normalBias),this.radius!==1&&(t.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}const Zl=new se,Us=new A,ba=new A;class xd extends rh{constructor(){super(new on(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new Dt(4,2),this._viewportCount=6,this._viewports=[new ue(2,1,1,1),new ue(0,1,1,1),new ue(3,1,1,1),new ue(1,1,1,1),new ue(3,0,1,1),new ue(1,0,1,1)],this._cubeDirections=[new A(1,0,0),new A(-1,0,0),new A(0,0,1),new A(0,0,-1),new A(0,1,0),new A(0,-1,0)],this._cubeUps=[new A(0,1,0),new A(0,1,0),new A(0,1,0),new A(0,1,0),new A(0,0,1),new A(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,s=this.matrix,r=t.distance||n.far;r!==n.far&&(n.far=r,n.updateProjectionMatrix()),Us.setFromMatrixPosition(t.matrixWorld),n.position.copy(Us),ba.copy(n.position),ba.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(ba),n.updateMatrixWorld(),s.makeTranslation(-Us.x,-Us.y,-Us.z),Zl.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Zl,n.coordinateSystem,n.reversedDepth)}}class qe extends tl{constructor(t,e,n=0,s=2){super(t,e),this.isPointLight=!0,this.type="PointLight",this.distance=n,this.decay=s,this.shadow=new xd}get power(){return this.intensity*4*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}class el extends Jc{constructor(t=-1,e=1,n=1,s=-1,r=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=s,this.near=r,this.far=a,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=t.view===null?null:Object.assign({},t.view),this}setViewOffset(t,e,n,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=t,this.view.fullHeight=e,this.view.offsetX=n,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 t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,s=(this.top+this.bottom)/2;let r=n-t,a=n+t,o=s+e,l=s-e;if(this.view!==null&&this.view.enabled){const c=(this.right-this.left)/this.view.fullWidth/this.zoom,h=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=c*this.view.offsetX,a=r+c*this.view.width,o-=h*this.view.offsetY,l=o-h*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(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,this.view!==null&&(e.object.view=Object.assign({},this.view)),e}}class Md extends rh{constructor(){super(new el(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class Aa extends tl{constructor(t,e){super(t,e),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(we.DEFAULT_UP),this.updateMatrix(),this.target=new we,this.shadow=new Md}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class yd extends on{constructor(t=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=t}}class ah{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const e=performance.now();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}const Kl=new se;class Sd{constructor(t,e,n=0,s=1/0){this.ray=new $r(t,e),this.near=n,this.far=s,this.camera=null,this.layers=new Zo,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(t,e){this.ray.set(t,e)}setFromCamera(t,e){e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(t.x,t.y,.5).unproject(e).sub(this.ray.origin).normalize(),this.camera=e):e.isOrthographicCamera?(this.ray.origin.set(t.x,t.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld),this.camera=e):console.error("THREE.Raycaster: Unsupported camera type: "+e.type)}setFromXRController(t){return Kl.identity().extractRotation(t.matrixWorld),this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(0,0,-1).applyMatrix4(Kl),this}intersectObject(t,e=!0,n=[]){return bo(t,this,n,e),n.sort($l),n}intersectObjects(t,e=!0,n=[]){for(let s=0,r=t.length;s<r;s++)bo(t[s],this,n,e);return n.sort($l),n}}function $l(i,t){return i.distance-t.distance}function bo(i,t,e,n){let s=!0;if(i.layers.test(t.layers)&&i.raycast(t,e)===!1&&(s=!1),s===!0&&n===!0){const r=i.children;for(let a=0,o=r.length;a<o;a++)bo(r[a],t,e,!0)}}function jl(i,t,e,n){const s=wd(n);switch(e){case Hc:return i*t;case Go:return i*t/s.components*s.byteLength;case Vo:return i*t/s.components*s.byteLength;case Vc:return i*t*2/s.components*s.byteLength;case Wo:return i*t*2/s.components*s.byteLength;case Gc:return i*t*3/s.components*s.byteLength;case wn:return i*t*4/s.components*s.byteLength;case Xo:return i*t*4/s.components*s.byteLength;case Lr:case Ir:return Math.floor((i+3)/4)*Math.floor((t+3)/4)*8;case Ur:case Nr:return Math.floor((i+3)/4)*Math.floor((t+3)/4)*16;case $a:case Ja:return Math.max(i,16)*Math.max(t,8)/4;case Ka:case ja:return Math.max(i,8)*Math.max(t,8)/2;case Qa:case to:return Math.floor((i+3)/4)*Math.floor((t+3)/4)*8;case eo:return Math.floor((i+3)/4)*Math.floor((t+3)/4)*16;case no:return Math.floor((i+3)/4)*Math.floor((t+3)/4)*16;case io:return Math.floor((i+4)/5)*Math.floor((t+3)/4)*16;case so:return Math.floor((i+4)/5)*Math.floor((t+4)/5)*16;case ro:return Math.floor((i+5)/6)*Math.floor((t+4)/5)*16;case ao:return Math.floor((i+5)/6)*Math.floor((t+5)/6)*16;case oo:return Math.floor((i+7)/8)*Math.floor((t+4)/5)*16;case lo:return Math.floor((i+7)/8)*Math.floor((t+5)/6)*16;case co:return Math.floor((i+7)/8)*Math.floor((t+7)/8)*16;case ho:return Math.floor((i+9)/10)*Math.floor((t+4)/5)*16;case uo:return Math.floor((i+9)/10)*Math.floor((t+5)/6)*16;case fo:return Math.floor((i+9)/10)*Math.floor((t+7)/8)*16;case po:return Math.floor((i+9)/10)*Math.floor((t+9)/10)*16;case mo:return Math.floor((i+11)/12)*Math.floor((t+9)/10)*16;case go:return Math.floor((i+11)/12)*Math.floor((t+11)/12)*16;case _o:case vo:case xo:return Math.ceil(i/4)*Math.ceil(t/4)*16;case Mo:case yo:return Math.ceil(i/4)*Math.ceil(t/4)*8;case So:case wo:return Math.ceil(i/4)*Math.ceil(t/4)*16}throw new Error(`Unable to determine texture byte length for ${e} format.`)}function wd(i){switch(i){case Ln:case Oc:return{byteLength:1,components:1};case zs:case Bc:case qn:return{byteLength:2,components:1};case ko:case Ho:return{byteLength:2,components:4};case Ri:case zo:case Cn:return{byteLength:4,components:1};case zc:case kc:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${i}.`)}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:Bo}}));typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=Bo);/**
 * @license
 * Copyright 2010-2025 Three.js Authors
 * SPDX-License-Identifier: MIT
 */function oh(){let i=null,t=!1,e=null,n=null;function s(r,a){e(r,a),n=i.requestAnimationFrame(s)}return{start:function(){t!==!0&&e!==null&&(n=i.requestAnimationFrame(s),t=!0)},stop:function(){i.cancelAnimationFrame(n),t=!1},setAnimationLoop:function(r){e=r},setContext:function(r){i=r}}}function Td(i){const t=new WeakMap;function e(o,l){const c=o.array,h=o.usage,u=c.byteLength,d=i.createBuffer();i.bindBuffer(l,d),i.bufferData(l,c,h),o.onUploadCallback();let p;if(c instanceof Float32Array)p=i.FLOAT;else if(typeof Float16Array<"u"&&c instanceof Float16Array)p=i.HALF_FLOAT;else if(c instanceof Uint16Array)o.isFloat16BufferAttribute?p=i.HALF_FLOAT:p=i.UNSIGNED_SHORT;else if(c instanceof Int16Array)p=i.SHORT;else if(c instanceof Uint32Array)p=i.UNSIGNED_INT;else if(c instanceof Int32Array)p=i.INT;else if(c instanceof Int8Array)p=i.BYTE;else if(c instanceof Uint8Array)p=i.UNSIGNED_BYTE;else if(c instanceof Uint8ClampedArray)p=i.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+c);return{buffer:d,type:p,bytesPerElement:c.BYTES_PER_ELEMENT,version:o.version,size:u}}function n(o,l,c){const h=l.array,u=l.updateRanges;if(i.bindBuffer(c,o),u.length===0)i.bufferSubData(c,0,h);else{u.sort((p,g)=>p.start-g.start);let d=0;for(let p=1;p<u.length;p++){const g=u[d],_=u[p];_.start<=g.start+g.count+1?g.count=Math.max(g.count,_.start+_.count-g.start):(++d,u[d]=_)}u.length=d+1;for(let p=0,g=u.length;p<g;p++){const _=u[p];i.bufferSubData(c,_.start*h.BYTES_PER_ELEMENT,h,_.start,_.count)}l.clearUpdateRanges()}l.onUploadCallback()}function s(o){return o.isInterleavedBufferAttribute&&(o=o.data),t.get(o)}function r(o){o.isInterleavedBufferAttribute&&(o=o.data);const l=t.get(o);l&&(i.deleteBuffer(l.buffer),t.delete(o))}function a(o,l){if(o.isInterleavedBufferAttribute&&(o=o.data),o.isGLBufferAttribute){const h=t.get(o);(!h||h.version<o.version)&&t.set(o,{buffer:o.buffer,type:o.type,bytesPerElement:o.elementSize,version:o.version});return}const c=t.get(o);if(c===void 0)t.set(o,e(o,l));else if(c.version<o.version){if(c.size!==o.array.byteLength)throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");n(c.buffer,o,l),c.version=o.version}}return{get:s,remove:r,update:a}}var Ed=`#ifdef USE_ALPHAHASH
	if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;
#endif`,bd=`#ifdef USE_ALPHAHASH
	const float ALPHA_HASH_SCALE = 0.05;
	float hash2D( vec2 value ) {
		return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );
	}
	float hash3D( vec3 value ) {
		return hash2D( vec2( hash2D( value.xy ), value.z ) );
	}
	float getAlphaHashThreshold( vec3 position ) {
		float maxDeriv = max(
			length( dFdx( position.xyz ) ),
			length( dFdy( position.xyz ) )
		);
		float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );
		vec2 pixScales = vec2(
			exp2( floor( log2( pixScale ) ) ),
			exp2( ceil( log2( pixScale ) ) )
		);
		vec2 alpha = vec2(
			hash3D( floor( pixScales.x * position.xyz ) ),
			hash3D( floor( pixScales.y * position.xyz ) )
		);
		float lerpFactor = fract( log2( pixScale ) );
		float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;
		float a = min( lerpFactor, 1.0 - lerpFactor );
		vec3 cases = vec3(
			x * x / ( 2.0 * a * ( 1.0 - a ) ),
			( x - 0.5 * a ) / ( 1.0 - a ),
			1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )
		);
		float threshold = ( x < ( 1.0 - a ) )
			? ( ( x < a ) ? cases.x : cases.y )
			: cases.z;
		return clamp( threshold , 1.0e-6, 1.0 );
	}
#endif`,Ad=`#ifdef USE_ALPHAMAP
	diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;
#endif`,Rd=`#ifdef USE_ALPHAMAP
	uniform sampler2D alphaMap;
#endif`,Cd=`#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`,Pd=`#ifdef USE_ALPHATEST
	uniform float alphaTest;
#endif`,Dd=`#ifdef USE_AOMAP
	float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;
	reflectedLight.indirectDiffuse *= ambientOcclusion;
	#if defined( USE_CLEARCOAT ) 
		clearcoatSpecularIndirect *= ambientOcclusion;
	#endif
	#if defined( USE_SHEEN ) 
		sheenSpecularIndirect *= ambientOcclusion;
	#endif
	#if defined( USE_ENVMAP ) && defined( STANDARD )
		float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
		reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );
	#endif
#endif`,Ld=`#ifdef USE_AOMAP
	uniform sampler2D aoMap;
	uniform float aoMapIntensity;
#endif`,Id=`#ifdef USE_BATCHING
	#if ! defined( GL_ANGLE_multi_draw )
	#define gl_DrawID _gl_DrawID
	uniform int _gl_DrawID;
	#endif
	uniform highp sampler2D batchingTexture;
	uniform highp usampler2D batchingIdTexture;
	mat4 getBatchingMatrix( const in float i ) {
		int size = textureSize( batchingTexture, 0 ).x;
		int j = int( i ) * 4;
		int x = j % size;
		int y = j / size;
		vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );
		vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );
		vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );
		vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );
		return mat4( v1, v2, v3, v4 );
	}
	float getIndirectIndex( const in int i ) {
		int size = textureSize( batchingIdTexture, 0 ).x;
		int x = i % size;
		int y = i / size;
		return float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );
	}
#endif
#ifdef USE_BATCHING_COLOR
	uniform sampler2D batchingColorTexture;
	vec3 getBatchingColor( const in float i ) {
		int size = textureSize( batchingColorTexture, 0 ).x;
		int j = int( i );
		int x = j % size;
		int y = j / size;
		return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;
	}
#endif`,Ud=`#ifdef USE_BATCHING
	mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );
#endif`,Nd=`vec3 transformed = vec3( position );
#ifdef USE_ALPHAHASH
	vPosition = vec3( position );
#endif`,Fd=`vec3 objectNormal = vec3( normal );
#ifdef USE_TANGENT
	vec3 objectTangent = vec3( tangent.xyz );
#endif`,Od=`float G_BlinnPhong_Implicit( ) {
	return 0.25;
}
float D_BlinnPhong( const in float shininess, const in float dotNH ) {
	return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );
}
vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {
	vec3 halfDir = normalize( lightDir + viewDir );
	float dotNH = saturate( dot( normal, halfDir ) );
	float dotVH = saturate( dot( viewDir, halfDir ) );
	vec3 F = F_Schlick( specularColor, 1.0, dotVH );
	float G = G_BlinnPhong_Implicit( );
	float D = D_BlinnPhong( shininess, dotNH );
	return F * ( G * D );
} // validated`,Bd=`#ifdef USE_IRIDESCENCE
	const mat3 XYZ_TO_REC709 = mat3(
		 3.2404542, -0.9692660,  0.0556434,
		-1.5371385,  1.8760108, -0.2040259,
		-0.4985314,  0.0415560,  1.0572252
	);
	vec3 Fresnel0ToIor( vec3 fresnel0 ) {
		vec3 sqrtF0 = sqrt( fresnel0 );
		return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );
	}
	vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {
		return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );
	}
	float IorToFresnel0( float transmittedIor, float incidentIor ) {
		return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));
	}
	vec3 evalSensitivity( float OPD, vec3 shift ) {
		float phase = 2.0 * PI * OPD * 1.0e-9;
		vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );
		vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );
		vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );
		vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );
		xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );
		xyz /= 1.0685e-7;
		vec3 rgb = XYZ_TO_REC709 * xyz;
		return rgb;
	}
	vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {
		vec3 I;
		float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );
		float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );
		float cosTheta2Sq = 1.0 - sinTheta2Sq;
		if ( cosTheta2Sq < 0.0 ) {
			return vec3( 1.0 );
		}
		float cosTheta2 = sqrt( cosTheta2Sq );
		float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );
		float R12 = F_Schlick( R0, 1.0, cosTheta1 );
		float T121 = 1.0 - R12;
		float phi12 = 0.0;
		if ( iridescenceIOR < outsideIOR ) phi12 = PI;
		float phi21 = PI - phi12;
		vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );		vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );
		vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );
		vec3 phi23 = vec3( 0.0 );
		if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;
		if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;
		if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;
		float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;
		vec3 phi = vec3( phi21 ) + phi23;
		vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );
		vec3 r123 = sqrt( R123 );
		vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );
		vec3 C0 = R12 + Rs;
		I = C0;
		vec3 Cm = Rs - T121;
		for ( int m = 1; m <= 2; ++ m ) {
			Cm *= r123;
			vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );
			I += Cm * Sm;
		}
		return max( I, vec3( 0.0 ) );
	}
#endif`,zd=`#ifdef USE_BUMPMAP
	uniform sampler2D bumpMap;
	uniform float bumpScale;
	vec2 dHdxy_fwd() {
		vec2 dSTdx = dFdx( vBumpMapUv );
		vec2 dSTdy = dFdy( vBumpMapUv );
		float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;
		float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;
		float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;
		return vec2( dBx, dBy );
	}
	vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {
		vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );
		vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );
		vec3 vN = surf_norm;
		vec3 R1 = cross( vSigmaY, vN );
		vec3 R2 = cross( vN, vSigmaX );
		float fDet = dot( vSigmaX, R1 ) * faceDirection;
		vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );
		return normalize( abs( fDet ) * surf_norm - vGrad );
	}
#endif`,kd=`#if NUM_CLIPPING_PLANES > 0
	vec4 plane;
	#ifdef ALPHA_TO_COVERAGE
		float distanceToPlane, distanceGradient;
		float clipOpacity = 1.0;
		#pragma unroll_loop_start
		for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {
			plane = clippingPlanes[ i ];
			distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;
			distanceGradient = fwidth( distanceToPlane ) / 2.0;
			clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );
			if ( clipOpacity == 0.0 ) discard;
		}
		#pragma unroll_loop_end
		#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES
			float unionClipOpacity = 1.0;
			#pragma unroll_loop_start
			for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {
				plane = clippingPlanes[ i ];
				distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;
				distanceGradient = fwidth( distanceToPlane ) / 2.0;
				unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );
			}
			#pragma unroll_loop_end
			clipOpacity *= 1.0 - unionClipOpacity;
		#endif
		diffuseColor.a *= clipOpacity;
		if ( diffuseColor.a == 0.0 ) discard;
	#else
		#pragma unroll_loop_start
		for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {
			plane = clippingPlanes[ i ];
			if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;
		}
		#pragma unroll_loop_end
		#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES
			bool clipped = true;
			#pragma unroll_loop_start
			for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {
				plane = clippingPlanes[ i ];
				clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;
			}
			#pragma unroll_loop_end
			if ( clipped ) discard;
		#endif
	#endif
#endif`,Hd=`#if NUM_CLIPPING_PLANES > 0
	varying vec3 vClipPosition;
	uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];
#endif`,Gd=`#if NUM_CLIPPING_PLANES > 0
	varying vec3 vClipPosition;
#endif`,Vd=`#if NUM_CLIPPING_PLANES > 0
	vClipPosition = - mvPosition.xyz;
#endif`,Wd=`#if defined( USE_COLOR_ALPHA )
	diffuseColor *= vColor;
#elif defined( USE_COLOR )
	diffuseColor.rgb *= vColor;
#endif`,Xd=`#if defined( USE_COLOR_ALPHA )
	varying vec4 vColor;
#elif defined( USE_COLOR )
	varying vec3 vColor;
#endif`,qd=`#if defined( USE_COLOR_ALPHA )
	varying vec4 vColor;
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
	varying vec3 vColor;
#endif`,Yd=`#if defined( USE_COLOR_ALPHA )
	vColor = vec4( 1.0 );
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
	vColor = vec3( 1.0 );
#endif
#ifdef USE_COLOR
	vColor *= color;
#endif
#ifdef USE_INSTANCING_COLOR
	vColor.xyz *= instanceColor.xyz;
#endif
#ifdef USE_BATCHING_COLOR
	vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );
	vColor.xyz *= batchingColor.xyz;
#endif`,Zd=`#define PI 3.141592653589793
#define PI2 6.283185307179586
#define PI_HALF 1.5707963267948966
#define RECIPROCAL_PI 0.3183098861837907
#define RECIPROCAL_PI2 0.15915494309189535
#define EPSILON 1e-6
#ifndef saturate
#define saturate( a ) clamp( a, 0.0, 1.0 )
#endif
#define whiteComplement( a ) ( 1.0 - saturate( a ) )
float pow2( const in float x ) { return x*x; }
vec3 pow2( const in vec3 x ) { return x*x; }
float pow3( const in float x ) { return x*x*x; }
float pow4( const in float x ) { float x2 = x*x; return x2*x2; }
float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }
float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }
highp float rand( const in vec2 uv ) {
	const highp float a = 12.9898, b = 78.233, c = 43758.5453;
	highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );
	return fract( sin( sn ) * c );
}
#ifdef HIGH_PRECISION
	float precisionSafeLength( vec3 v ) { return length( v ); }
#else
	float precisionSafeLength( vec3 v ) {
		float maxComponent = max3( abs( v ) );
		return length( v / maxComponent ) * maxComponent;
	}
#endif
struct IncidentLight {
	vec3 color;
	vec3 direction;
	bool visible;
};
struct ReflectedLight {
	vec3 directDiffuse;
	vec3 directSpecular;
	vec3 indirectDiffuse;
	vec3 indirectSpecular;
};
#ifdef USE_ALPHAHASH
	varying vec3 vPosition;
#endif
vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
	return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
}
vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {
	return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );
}
mat3 transposeMat3( const in mat3 m ) {
	mat3 tmp;
	tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );
	tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );
	tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );
	return tmp;
}
bool isPerspectiveMatrix( mat4 m ) {
	return m[ 2 ][ 3 ] == - 1.0;
}
vec2 equirectUv( in vec3 dir ) {
	float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;
	float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;
	return vec2( u, v );
}
vec3 BRDF_Lambert( const in vec3 diffuseColor ) {
	return RECIPROCAL_PI * diffuseColor;
}
vec3 F_Schlick( const in vec3 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 );
}
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`,Kd=`#ifdef ENVMAP_TYPE_CUBE_UV
	#define cubeUV_minMipLevel 4.0
	#define cubeUV_minTileSize 16.0
	float getFace( vec3 direction ) {
		vec3 absDirection = abs( direction );
		float face = - 1.0;
		if ( absDirection.x > absDirection.z ) {
			if ( absDirection.x > absDirection.y )
				face = direction.x > 0.0 ? 0.0 : 3.0;
			else
				face = direction.y > 0.0 ? 1.0 : 4.0;
		} else {
			if ( absDirection.z > absDirection.y )
				face = direction.z > 0.0 ? 2.0 : 5.0;
			else
				face = direction.y > 0.0 ? 1.0 : 4.0;
		}
		return face;
	}
	vec2 getUV( vec3 direction, float face ) {
		vec2 uv;
		if ( face == 0.0 ) {
			uv = vec2( direction.z, direction.y ) / abs( direction.x );
		} else if ( face == 1.0 ) {
			uv = vec2( - direction.x, - direction.z ) / abs( direction.y );
		} else if ( face == 2.0 ) {
			uv = vec2( - direction.x, direction.y ) / abs( direction.z );
		} else if ( face == 3.0 ) {
			uv = vec2( - direction.z, direction.y ) / abs( direction.x );
		} else if ( face == 4.0 ) {
			uv = vec2( - direction.x, direction.z ) / abs( direction.y );
		} else {
			uv = vec2( direction.x, direction.y ) / abs( direction.z );
		}
		return 0.5 * ( uv + 1.0 );
	}
	vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {
		float face = getFace( direction );
		float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );
		mipInt = max( mipInt, cubeUV_minMipLevel );
		float faceSize = exp2( mipInt );
		highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;
		if ( face > 2.0 ) {
			uv.y += faceSize;
			face -= 3.0;
		}
		uv.x += face * faceSize;
		uv.x += filterInt * 3.0 * cubeUV_minTileSize;
		uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );
		uv.x *= CUBEUV_TEXEL_WIDTH;
		uv.y *= CUBEUV_TEXEL_HEIGHT;
		#ifdef texture2DGradEXT
			return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;
		#else
			return texture2D( envMap, uv ).rgb;
		#endif
	}
	#define cubeUV_r0 1.0
	#define cubeUV_m0 - 2.0
	#define cubeUV_r1 0.8
	#define cubeUV_m1 - 1.0
	#define cubeUV_r4 0.4
	#define cubeUV_m4 2.0
	#define cubeUV_r5 0.305
	#define cubeUV_m5 3.0
	#define cubeUV_r6 0.21
	#define cubeUV_m6 4.0
	float roughnessToMip( float roughness ) {
		float mip = 0.0;
		if ( roughness >= cubeUV_r1 ) {
			mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;
		} else if ( roughness >= cubeUV_r4 ) {
			mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;
		} else if ( roughness >= cubeUV_r5 ) {
			mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;
		} else if ( roughness >= cubeUV_r6 ) {
			mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;
		} else {
			mip = - 2.0 * log2( 1.16 * roughness );		}
		return mip;
	}
	vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {
		float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );
		float mipF = fract( mip );
		float mipInt = floor( mip );
		vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );
		if ( mipF == 0.0 ) {
			return vec4( color0, 1.0 );
		} else {
			vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );
			return vec4( mix( color0, color1, mipF ), 1.0 );
		}
	}
#endif`,$d=`vec3 transformedNormal = objectNormal;
#ifdef USE_TANGENT
	vec3 transformedTangent = objectTangent;
#endif
#ifdef USE_BATCHING
	mat3 bm = mat3( batchingMatrix );
	transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );
	transformedNormal = bm * transformedNormal;
	#ifdef USE_TANGENT
		transformedTangent = bm * transformedTangent;
	#endif
#endif
#ifdef USE_INSTANCING
	mat3 im = mat3( instanceMatrix );
	transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );
	transformedNormal = im * transformedNormal;
	#ifdef USE_TANGENT
		transformedTangent = im * transformedTangent;
	#endif
#endif
transformedNormal = normalMatrix * transformedNormal;
#ifdef FLIP_SIDED
	transformedNormal = - transformedNormal;
#endif
#ifdef USE_TANGENT
	transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;
	#ifdef FLIP_SIDED
		transformedTangent = - transformedTangent;
	#endif
#endif`,jd=`#ifdef USE_DISPLACEMENTMAP
	uniform sampler2D displacementMap;
	uniform float displacementScale;
	uniform float displacementBias;
#endif`,Jd=`#ifdef USE_DISPLACEMENTMAP
	transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );
#endif`,Qd=`#ifdef USE_EMISSIVEMAP
	vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );
	#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE
		emissiveColor = sRGBTransferEOTF( emissiveColor );
	#endif
	totalEmissiveRadiance *= emissiveColor.rgb;
#endif`,tf=`#ifdef USE_EMISSIVEMAP
	uniform sampler2D emissiveMap;
#endif`,ef="gl_FragColor = linearToOutputTexel( gl_FragColor );",nf=`vec4 LinearTransferOETF( in vec4 value ) {
	return value;
}
vec4 sRGBTransferEOTF( in vec4 value ) {
	return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );
}
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 );
}`,sf=`#ifdef USE_ENVMAP
	#ifdef ENV_WORLDPOS
		vec3 cameraToFrag;
		if ( isOrthographic ) {
			cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
		} else {
			cameraToFrag = normalize( vWorldPosition - cameraPosition );
		}
		vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
		#ifdef ENVMAP_MODE_REFLECTION
			vec3 reflectVec = reflect( cameraToFrag, worldNormal );
		#else
			vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );
		#endif
	#else
		vec3 reflectVec = vReflect;
	#endif
	#ifdef ENVMAP_TYPE_CUBE
		vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
	#else
		vec4 envColor = vec4( 0.0 );
	#endif
	#ifdef ENVMAP_BLENDING_MULTIPLY
		outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );
	#elif defined( ENVMAP_BLENDING_MIX )
		outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );
	#elif defined( ENVMAP_BLENDING_ADD )
		outgoingLight += envColor.xyz * specularStrength * reflectivity;
	#endif
#endif`,rf=`#ifdef USE_ENVMAP
	uniform float envMapIntensity;
	uniform float flipEnvMap;
	uniform mat3 envMapRotation;
	#ifdef ENVMAP_TYPE_CUBE
		uniform samplerCube envMap;
	#else
		uniform sampler2D envMap;
	#endif
	
#endif`,af=`#ifdef USE_ENVMAP
	uniform float reflectivity;
	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
		#define ENV_WORLDPOS
	#endif
	#ifdef ENV_WORLDPOS
		varying vec3 vWorldPosition;
		uniform float refractionRatio;
	#else
		varying vec3 vReflect;
	#endif
#endif`,of=`#ifdef USE_ENVMAP
	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
		#define ENV_WORLDPOS
	#endif
	#ifdef ENV_WORLDPOS
		
		varying vec3 vWorldPosition;
	#else
		varying vec3 vReflect;
		uniform float refractionRatio;
	#endif
#endif`,lf=`#ifdef USE_ENVMAP
	#ifdef ENV_WORLDPOS
		vWorldPosition = worldPosition.xyz;
	#else
		vec3 cameraToVertex;
		if ( isOrthographic ) {
			cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
		} else {
			cameraToVertex = normalize( worldPosition.xyz - cameraPosition );
		}
		vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
		#ifdef ENVMAP_MODE_REFLECTION
			vReflect = reflect( cameraToVertex, worldNormal );
		#else
			vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
		#endif
	#endif
#endif`,cf=`#ifdef USE_FOG
	vFogDepth = - mvPosition.z;
#endif`,hf=`#ifdef USE_FOG
	varying float vFogDepth;
#endif`,uf=`#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`,df=`#ifdef USE_FOG
	uniform vec3 fogColor;
	varying float vFogDepth;
	#ifdef FOG_EXP2
		uniform float fogDensity;
	#else
		uniform float fogNear;
		uniform float fogFar;
	#endif
#endif`,ff=`#ifdef USE_GRADIENTMAP
	uniform sampler2D gradientMap;
#endif
vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
	float dotNL = dot( normal, lightDirection );
	vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );
	#ifdef USE_GRADIENTMAP
		return vec3( texture2D( gradientMap, coord ).r );
	#else
		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
}`,pf=`#ifdef USE_LIGHTMAP
	uniform sampler2D lightMap;
	uniform float lightMapIntensity;
#endif`,mf=`LambertMaterial material;
material.diffuseColor = diffuseColor.rgb;
material.specularStrength = specularStrength;`,gf=`varying vec3 vViewPosition;
struct LambertMaterial {
	vec3 diffuseColor;
	float specularStrength;
};
void RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {
	float dotNL = saturate( dot( geometryNormal, directLight.direction ) );
	vec3 irradiance = dotNL * directLight.color;
	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {
	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
#define RE_Direct				RE_Direct_Lambert
#define RE_IndirectDiffuse		RE_IndirectDiffuse_Lambert`,_f=`uniform bool receiveShadow;
uniform vec3 ambientLightColor;
#if defined( USE_LIGHT_PROBES )
	uniform vec3 lightProbe[ 9 ];
#endif
vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {
	float x = normal.x, y = normal.y, z = normal.z;
	vec3 result = shCoefficients[ 0 ] * 0.886227;
	result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;
	result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;
	result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;
	result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;
	result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;
	result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );
	result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;
	result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );
	return result;
}
vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {
	vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
	vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );
	return irradiance;
}
vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {
	vec3 irradiance = ambientLightColor;
	return irradiance;
}
float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {
	float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
	if ( cutoffDistance > 0.0 ) {
		distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );
	}
	return distanceFalloff;
}
float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {
	return smoothstep( coneCosine, penumbraCosine, angleCosine );
}
#if NUM_DIR_LIGHTS > 0
	struct DirectionalLight {
		vec3 direction;
		vec3 color;
	};
	uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];
	void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {
		light.color = directionalLight.color;
		light.direction = directionalLight.direction;
		light.visible = true;
	}
#endif
#if NUM_POINT_LIGHTS > 0
	struct PointLight {
		vec3 position;
		vec3 color;
		float distance;
		float decay;
	};
	uniform PointLight pointLights[ NUM_POINT_LIGHTS ];
	void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {
		vec3 lVector = pointLight.position - geometryPosition;
		light.direction = normalize( lVector );
		float lightDistance = length( lVector );
		light.color = pointLight.color;
		light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );
		light.visible = ( light.color != vec3( 0.0 ) );
	}
#endif
#if NUM_SPOT_LIGHTS > 0
	struct SpotLight {
		vec3 position;
		vec3 direction;
		vec3 color;
		float distance;
		float decay;
		float coneCos;
		float penumbraCos;
	};
	uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];
	void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {
		vec3 lVector = spotLight.position - geometryPosition;
		light.direction = normalize( lVector );
		float angleCos = dot( light.direction, spotLight.direction );
		float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );
		if ( spotAttenuation > 0.0 ) {
			float lightDistance = length( lVector );
			light.color = spotLight.color * spotAttenuation;
			light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );
			light.visible = ( light.color != vec3( 0.0 ) );
		} else {
			light.color = vec3( 0.0 );
			light.visible = false;
		}
	}
#endif
#if NUM_RECT_AREA_LIGHTS > 0
	struct RectAreaLight {
		vec3 color;
		vec3 position;
		vec3 halfWidth;
		vec3 halfHeight;
	};
	uniform sampler2D ltc_1;	uniform sampler2D ltc_2;
	uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];
#endif
#if NUM_HEMI_LIGHTS > 0
	struct HemisphereLight {
		vec3 direction;
		vec3 skyColor;
		vec3 groundColor;
	};
	uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];
	vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {
		float dotNL = dot( normal, hemiLight.direction );
		float hemiDiffuseWeight = 0.5 * dotNL + 0.5;
		vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
		return irradiance;
	}
#endif`,vf=`#ifdef USE_ENVMAP
	vec3 getIBLIrradiance( const in vec3 normal ) {
		#ifdef ENVMAP_TYPE_CUBE_UV
			vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
			vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );
			return PI * envMapColor.rgb * envMapIntensity;
		#else
			return vec3( 0.0 );
		#endif
	}
	vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {
		#ifdef ENVMAP_TYPE_CUBE_UV
			vec3 reflectVec = reflect( - viewDir, normal );
			reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );
			reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
			vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );
			return envMapColor.rgb * envMapIntensity;
		#else
			return vec3( 0.0 );
		#endif
	}
	#ifdef USE_ANISOTROPY
		vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {
			#ifdef ENVMAP_TYPE_CUBE_UV
				vec3 bentNormal = cross( bitangent, viewDir );
				bentNormal = normalize( cross( bentNormal, bitangent ) );
				bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );
				return getIBLRadiance( viewDir, bentNormal, roughness );
			#else
				return vec3( 0.0 );
			#endif
		}
	#endif
#endif`,xf=`ToonMaterial material;
material.diffuseColor = diffuseColor.rgb;`,Mf=`varying vec3 vViewPosition;
struct ToonMaterial {
	vec3 diffuseColor;
};
void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
	vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;
	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
#define RE_Direct				RE_Direct_Toon
#define RE_IndirectDiffuse		RE_IndirectDiffuse_Toon`,yf=`BlinnPhongMaterial material;
material.diffuseColor = diffuseColor.rgb;
material.specularColor = specular;
material.specularShininess = shininess;
material.specularStrength = specularStrength;`,Sf=`varying vec3 vViewPosition;
struct BlinnPhongMaterial {
	vec3 diffuseColor;
	vec3 specularColor;
	float specularShininess;
	float specularStrength;
};
void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
	float dotNL = saturate( dot( geometryNormal, directLight.direction ) );
	vec3 irradiance = dotNL * directLight.color;
	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
	reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;
}
void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
#define RE_Direct				RE_Direct_BlinnPhong
#define RE_IndirectDiffuse		RE_IndirectDiffuse_BlinnPhong`,wf=`PhysicalMaterial material;
material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );
vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );
float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;
material.roughness = min( material.roughness, 1.0 );
#ifdef IOR
	material.ior = ior;
	#ifdef USE_SPECULAR
		float specularIntensityFactor = specularIntensity;
		vec3 specularColorFactor = specularColor;
		#ifdef USE_SPECULAR_COLORMAP
			specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;
		#endif
		#ifdef USE_SPECULAR_INTENSITYMAP
			specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;
		#endif
		material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );
	#else
		float specularIntensityFactor = 1.0;
		vec3 specularColorFactor = vec3( 1.0 );
		material.specularF90 = 1.0;
	#endif
	material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );
#else
	material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );
	material.specularF90 = 1.0;
#endif
#ifdef USE_CLEARCOAT
	material.clearcoat = clearcoat;
	material.clearcoatRoughness = clearcoatRoughness;
	material.clearcoatF0 = vec3( 0.04 );
	material.clearcoatF90 = 1.0;
	#ifdef USE_CLEARCOATMAP
		material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;
	#endif
	#ifdef USE_CLEARCOAT_ROUGHNESSMAP
		material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;
	#endif
	material.clearcoat = saturate( material.clearcoat );	material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );
	material.clearcoatRoughness += geometryRoughness;
	material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );
#endif
#ifdef USE_DISPERSION
	material.dispersion = dispersion;
#endif
#ifdef USE_IRIDESCENCE
	material.iridescence = iridescence;
	material.iridescenceIOR = iridescenceIOR;
	#ifdef USE_IRIDESCENCEMAP
		material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;
	#endif
	#ifdef USE_IRIDESCENCE_THICKNESSMAP
		material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;
	#else
		material.iridescenceThickness = iridescenceThicknessMaximum;
	#endif
#endif
#ifdef USE_SHEEN
	material.sheenColor = sheenColor;
	#ifdef USE_SHEEN_COLORMAP
		material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;
	#endif
	material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );
	#ifdef USE_SHEEN_ROUGHNESSMAP
		material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;
	#endif
#endif
#ifdef USE_ANISOTROPY
	#ifdef USE_ANISOTROPYMAP
		mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );
		vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;
		vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;
	#else
		vec2 anisotropyV = anisotropyVector;
	#endif
	material.anisotropy = length( anisotropyV );
	if( material.anisotropy == 0.0 ) {
		anisotropyV = vec2( 1.0, 0.0 );
	} else {
		anisotropyV /= material.anisotropy;
		material.anisotropy = saturate( material.anisotropy );
	}
	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`,Tf=`struct PhysicalMaterial {
	vec3 diffuseColor;
	float roughness;
	vec3 specularColor;
	float specularF90;
	float dispersion;
	#ifdef USE_CLEARCOAT
		float clearcoat;
		float clearcoatRoughness;
		vec3 clearcoatF0;
		float clearcoatF90;
	#endif
	#ifdef USE_IRIDESCENCE
		float iridescence;
		float iridescenceIOR;
		float iridescenceThickness;
		vec3 iridescenceFresnel;
		vec3 iridescenceF0;
	#endif
	#ifdef USE_SHEEN
		vec3 sheenColor;
		float sheenRoughness;
	#endif
	#ifdef IOR
		float ior;
	#endif
	#ifdef USE_TRANSMISSION
		float transmission;
		float transmissionAlpha;
		float thickness;
		float attenuationDistance;
		vec3 attenuationColor;
	#endif
	#ifdef USE_ANISOTROPY
		float anisotropy;
		float alphaT;
		vec3 anisotropyT;
		vec3 anisotropyB;
	#endif
};
vec3 clearcoatSpecularDirect = vec3( 0.0 );
vec3 clearcoatSpecularIndirect = vec3( 0.0 );
vec3 sheenSpecularDirect = vec3( 0.0 );
vec3 sheenSpecularIndirect = vec3(0.0 );
vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {
    float x = clamp( 1.0 - dotVH, 0.0, 1.0 );
    float x2 = x * x;
    float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );
    return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );
}
float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {
	float a2 = pow2( alpha );
	float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );
	float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );
	return 0.5 / max( gv + gl, EPSILON );
}
float D_GGX( const in float alpha, const in float dotNH ) {
	float a2 = pow2( alpha );
	float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;
	return RECIPROCAL_PI * a2 / pow2( denom );
}
#ifdef USE_ANISOTROPY
	float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {
		float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );
		float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );
		float v = 0.5 / ( gv + gl );
		return saturate(v);
	}
	float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {
		float a2 = alphaT * alphaB;
		highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );
		highp float v2 = dot( v, v );
		float w2 = a2 / v2;
		return RECIPROCAL_PI * a2 * pow2 ( w2 );
	}
#endif
#ifdef USE_CLEARCOAT
	vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {
		vec3 f0 = material.clearcoatF0;
		float f90 = material.clearcoatF90;
		float roughness = material.clearcoatRoughness;
		float alpha = pow2( roughness );
		vec3 halfDir = normalize( lightDir + viewDir );
		float dotNL = saturate( dot( normal, lightDir ) );
		float dotNV = saturate( dot( normal, viewDir ) );
		float dotNH = saturate( dot( normal, halfDir ) );
		float dotVH = saturate( dot( viewDir, halfDir ) );
		vec3 F = F_Schlick( f0, f90, dotVH );
		float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );
		float D = D_GGX( alpha, dotNH );
		return F * ( V * D );
	}
#endif
vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {
	vec3 f0 = material.specularColor;
	float f90 = material.specularF90;
	float roughness = material.roughness;
	float alpha = pow2( roughness );
	vec3 halfDir = normalize( lightDir + viewDir );
	float dotNL = saturate( dot( normal, lightDir ) );
	float dotNV = saturate( dot( normal, viewDir ) );
	float dotNH = saturate( dot( normal, halfDir ) );
	float dotVH = saturate( dot( viewDir, halfDir ) );
	vec3 F = F_Schlick( f0, f90, dotVH );
	#ifdef USE_IRIDESCENCE
		F = mix( F, material.iridescenceFresnel, material.iridescence );
	#endif
	#ifdef USE_ANISOTROPY
		float dotTL = dot( material.anisotropyT, lightDir );
		float dotTV = dot( material.anisotropyT, viewDir );
		float dotTH = dot( material.anisotropyT, halfDir );
		float dotBL = dot( material.anisotropyB, lightDir );
		float dotBV = dot( material.anisotropyB, viewDir );
		float dotBH = dot( material.anisotropyB, halfDir );
		float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );
		float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );
	#else
		float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );
		float D = D_GGX( alpha, dotNH );
	#endif
	return F * ( V * D );
}
vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {
	const float LUT_SIZE = 64.0;
	const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;
	const float LUT_BIAS = 0.5 / LUT_SIZE;
	float dotNV = saturate( dot( N, V ) );
	vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );
	uv = uv * LUT_SCALE + LUT_BIAS;
	return uv;
}
float LTC_ClippedSphereFormFactor( const in vec3 f ) {
	float l = length( f );
	return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );
}
vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {
	float x = dot( v1, v2 );
	float y = abs( x );
	float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;
	float b = 3.4175940 + ( 4.1616724 + y ) * y;
	float v = a / b;
	float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;
	return cross( v1, v2 ) * theta_sintheta;
}
vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {
	vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];
	vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];
	vec3 lightNormal = cross( v1, v2 );
	if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );
	vec3 T1, T2;
	T1 = normalize( V - N * dot( V, N ) );
	T2 = - cross( N, T1 );
	mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );
	vec3 coords[ 4 ];
	coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );
	coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );
	coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );
	coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );
	coords[ 0 ] = normalize( coords[ 0 ] );
	coords[ 1 ] = normalize( coords[ 1 ] );
	coords[ 2 ] = normalize( coords[ 2 ] );
	coords[ 3 ] = normalize( coords[ 3 ] );
	vec3 vectorFormFactor = vec3( 0.0 );
	vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );
	vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );
	vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );
	vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );
	float result = LTC_ClippedSphereFormFactor( vectorFormFactor );
	return vec3( result );
}
#if defined( USE_SHEEN )
float D_Charlie( float roughness, float dotNH ) {
	float alpha = pow2( roughness );
	float invAlpha = 1.0 / alpha;
	float cos2h = dotNH * dotNH;
	float sin2h = max( 1.0 - cos2h, 0.0078125 );
	return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );
}
float V_Neubelt( float dotNV, float dotNL ) {
	return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );
}
vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {
	vec3 halfDir = normalize( lightDir + viewDir );
	float dotNL = saturate( dot( normal, lightDir ) );
	float dotNV = saturate( dot( normal, viewDir ) );
	float dotNH = saturate( dot( normal, halfDir ) );
	float D = D_Charlie( sheenRoughness, dotNH );
	float V = V_Neubelt( dotNV, dotNL );
	return sheenColor * ( D * V );
}
#endif
float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
	float dotNV = saturate( dot( normal, viewDir ) );
	float r2 = roughness * roughness;
	float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;
	float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;
	float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );
	return saturate( DG * RECIPROCAL_PI );
}
vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
	float dotNV = saturate( dot( normal, viewDir ) );
	const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );
	const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );
	vec4 r = roughness * c0 + c1;
	float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;
	vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;
	return fab;
}
vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {
	vec2 fab = DFGApprox( normal, viewDir, roughness );
	return specularColor * fab.x + specularF90 * fab.y;
}
#ifdef USE_IRIDESCENCE
void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {
#else
void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {
#endif
	vec2 fab = DFGApprox( normal, viewDir, roughness );
	#ifdef USE_IRIDESCENCE
		vec3 Fr = mix( specularColor, iridescenceF0, iridescence );
	#else
		vec3 Fr = specularColor;
	#endif
	vec3 FssEss = Fr * fab.x + specularF90 * fab.y;
	float Ess = fab.x + fab.y;
	float Ems = 1.0 - Ess;
	vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;	vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );
	singleScatter += FssEss;
	multiScatter += Fms * Ems;
}
#if NUM_RECT_AREA_LIGHTS > 0
	void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
		vec3 normal = geometryNormal;
		vec3 viewDir = geometryViewDir;
		vec3 position = geometryPosition;
		vec3 lightPos = rectAreaLight.position;
		vec3 halfWidth = rectAreaLight.halfWidth;
		vec3 halfHeight = rectAreaLight.halfHeight;
		vec3 lightColor = rectAreaLight.color;
		float roughness = material.roughness;
		vec3 rectCoords[ 4 ];
		rectCoords[ 0 ] = lightPos + halfWidth - halfHeight;		rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;
		rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;
		rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;
		vec2 uv = LTC_Uv( normal, viewDir, roughness );
		vec4 t1 = texture2D( ltc_1, uv );
		vec4 t2 = texture2D( ltc_2, uv );
		mat3 mInv = mat3(
			vec3( t1.x, 0, t1.y ),
			vec3(    0, 1,    0 ),
			vec3( t1.z, 0, t1.w )
		);
		vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );
		reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );
		reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );
	}
#endif
void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
	float dotNL = saturate( dot( geometryNormal, directLight.direction ) );
	vec3 irradiance = dotNL * directLight.color;
	#ifdef USE_CLEARCOAT
		float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );
		vec3 ccIrradiance = dotNLcc * directLight.color;
		clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );
	#endif
	#ifdef USE_SHEEN
		sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );
	#endif
	reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );
	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
	#ifdef USE_CLEARCOAT
		clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
	#endif
	#ifdef USE_SHEEN
		sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
	#endif
	vec3 singleScattering = vec3( 0.0 );
	vec3 multiScattering = vec3( 0.0 );
	vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
	#ifdef USE_IRIDESCENCE
		computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );
	#else
		computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );
	#endif
	vec3 totalScattering = singleScattering + multiScattering;
	vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );
	reflectedLight.indirectSpecular += radiance * singleScattering;
	reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;
	reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;
}
#define RE_Direct				RE_Direct_Physical
#define RE_Direct_RectArea		RE_Direct_RectArea_Physical
#define RE_IndirectDiffuse		RE_IndirectDiffuse_Physical
#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 );
}`,Ef=`
vec3 geometryPosition = - vViewPosition;
vec3 geometryNormal = normal;
vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );
vec3 geometryClearcoatNormal = vec3( 0.0 );
#ifdef USE_CLEARCOAT
	geometryClearcoatNormal = clearcoatNormal;
#endif
#ifdef USE_IRIDESCENCE
	float dotNVi = saturate( dot( normal, geometryViewDir ) );
	if ( material.iridescenceThickness == 0.0 ) {
		material.iridescence = 0.0;
	} else {
		material.iridescence = saturate( material.iridescence );
	}
	if ( material.iridescence > 0.0 ) {
		material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );
		material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );
	}
#endif
IncidentLight directLight;
#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )
	PointLight pointLight;
	#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0
	PointLightShadow pointLightShadow;
	#endif
	#pragma unroll_loop_start
	for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
		pointLight = pointLights[ i ];
		getPointLightInfo( pointLight, geometryPosition, directLight );
		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )
		pointLightShadow = pointLightShadows[ i ];
		directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
		#endif
		RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
	}
	#pragma unroll_loop_end
#endif
#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )
	SpotLight spotLight;
	vec4 spotColor;
	vec3 spotLightCoord;
	bool inSpotLightMap;
	#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0
	SpotLightShadow spotLightShadow;
	#endif
	#pragma unroll_loop_start
	for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
		spotLight = spotLights[ i ];
		getSpotLightInfo( spotLight, geometryPosition, directLight );
		#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )
		#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX
		#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
		#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS
		#else
		#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )
		#endif
		#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )
			spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;
			inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );
			spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );
			directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;
		#endif
		#undef SPOT_LIGHT_MAP_INDEX
		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
		spotLightShadow = spotLightShadows[ i ];
		directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
		#endif
		RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
	}
	#pragma unroll_loop_end
#endif
#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )
	DirectionalLight directionalLight;
	#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0
	DirectionalLightShadow directionalLightShadow;
	#endif
	#pragma unroll_loop_start
	for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
		directionalLight = directionalLights[ i ];
		getDirectionalLightInfo( directionalLight, directLight );
		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
		directionalLightShadow = directionalLightShadows[ i ];
		directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
		#endif
		RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
	}
	#pragma unroll_loop_end
#endif
#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )
	RectAreaLight rectAreaLight;
	#pragma unroll_loop_start
	for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {
		rectAreaLight = rectAreaLights[ i ];
		RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
	}
	#pragma unroll_loop_end
#endif
#if defined( RE_IndirectDiffuse )
	vec3 iblIrradiance = vec3( 0.0 );
	vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );
	#if defined( USE_LIGHT_PROBES )
		irradiance += getLightProbeIrradiance( lightProbe, geometryNormal );
	#endif
	#if ( NUM_HEMI_LIGHTS > 0 )
		#pragma unroll_loop_start
		for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );
		}
		#pragma unroll_loop_end
	#endif
#endif
#if defined( RE_IndirectSpecular )
	vec3 radiance = vec3( 0.0 );
	vec3 clearcoatRadiance = vec3( 0.0 );
#endif`,bf=`#if defined( RE_IndirectDiffuse )
	#ifdef USE_LIGHTMAP
		vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );
		vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;
		irradiance += lightMapIrradiance;
	#endif
	#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )
		iblIrradiance += getIBLIrradiance( geometryNormal );
	#endif
#endif
#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )
	#ifdef USE_ANISOTROPY
		radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );
	#else
		radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );
	#endif
	#ifdef USE_CLEARCOAT
		clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );
	#endif
#endif`,Af=`#if defined( RE_IndirectDiffuse )
	RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
#endif
#if defined( RE_IndirectSpecular )
	RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
#endif`,Rf=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )
	gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;
#endif`,Cf=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )
	uniform float logDepthBufFC;
	varying float vFragDepth;
	varying float vIsPerspective;
#endif`,Pf=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER
	varying float vFragDepth;
	varying float vIsPerspective;
#endif`,Df=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER
	vFragDepth = 1.0 + gl_Position.w;
	vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
#endif`,Lf=`#ifdef USE_MAP
	vec4 sampledDiffuseColor = texture2D( map, vMapUv );
	#ifdef DECODE_VIDEO_TEXTURE
		sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );
	#endif
	diffuseColor *= sampledDiffuseColor;
#endif`,If=`#ifdef USE_MAP
	uniform sampler2D map;
#endif`,Uf=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
	#if defined( USE_POINTS_UV )
		vec2 uv = vUv;
	#else
		vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;
	#endif
#endif
#ifdef USE_MAP
	diffuseColor *= texture2D( map, uv );
#endif
#ifdef USE_ALPHAMAP
	diffuseColor.a *= texture2D( alphaMap, uv ).g;
#endif`,Nf=`#if defined( USE_POINTS_UV )
	varying vec2 vUv;
#else
	#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
		uniform mat3 uvTransform;
	#endif
#endif
#ifdef USE_MAP
	uniform sampler2D map;
#endif
#ifdef USE_ALPHAMAP
	uniform sampler2D alphaMap;
#endif`,Ff=`float metalnessFactor = metalness;
#ifdef USE_METALNESSMAP
	vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );
	metalnessFactor *= texelMetalness.b;
#endif`,Of=`#ifdef USE_METALNESSMAP
	uniform sampler2D metalnessMap;
#endif`,Bf=`#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`,zf=`#if defined( USE_MORPHCOLORS )
	vColor *= morphTargetBaseInfluence;
	for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
		#if defined( USE_COLOR_ALPHA )
			if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];
		#elif defined( USE_COLOR )
			if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
		#endif
	}
#endif`,kf=`#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`,Hf=`#ifdef USE_MORPHTARGETS
	#ifndef USE_INSTANCING_MORPH
		uniform float morphTargetBaseInfluence;
		uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
	#endif
	uniform sampler2DArray morphTargetsTexture;
	uniform ivec2 morphTargetsTextureSize;
	vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {
		int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;
		int y = texelIndex / morphTargetsTextureSize.x;
		int x = texelIndex - y * morphTargetsTextureSize.x;
		ivec3 morphUV = ivec3( x, y, morphTargetIndex );
		return texelFetch( morphTargetsTexture, morphUV, 0 );
	}
#endif`,Gf=`#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`,Vf=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;
#ifdef FLAT_SHADED
	vec3 fdx = dFdx( vViewPosition );
	vec3 fdy = dFdy( vViewPosition );
	vec3 normal = normalize( cross( fdx, fdy ) );
#else
	vec3 normal = normalize( vNormal );
	#ifdef DOUBLE_SIDED
		normal *= faceDirection;
	#endif
#endif
#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )
	#ifdef USE_TANGENT
		mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );
	#else
		mat3 tbn = getTangentFrame( - vViewPosition, normal,
		#if defined( USE_NORMALMAP )
			vNormalMapUv
		#elif defined( USE_CLEARCOAT_NORMALMAP )
			vClearcoatNormalMapUv
		#else
			vUv
		#endif
		);
	#endif
	#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )
		tbn[0] *= faceDirection;
		tbn[1] *= faceDirection;
	#endif
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
	#ifdef USE_TANGENT
		mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );
	#else
		mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );
	#endif
	#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )
		tbn2[0] *= faceDirection;
		tbn2[1] *= faceDirection;
	#endif
#endif
vec3 nonPerturbedNormal = normal;`,Wf=`#ifdef USE_NORMALMAP_OBJECTSPACE
	normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;
	#ifdef FLIP_SIDED
		normal = - normal;
	#endif
	#ifdef DOUBLE_SIDED
		normal = normal * faceDirection;
	#endif
	normal = normalize( normalMatrix * normal );
#elif defined( USE_NORMALMAP_TANGENTSPACE )
	vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;
	mapN.xy *= normalScale;
	normal = normalize( tbn * mapN );
#elif defined( USE_BUMPMAP )
	normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );
#endif`,Xf=`#ifndef FLAT_SHADED
	varying vec3 vNormal;
	#ifdef USE_TANGENT
		varying vec3 vTangent;
		varying vec3 vBitangent;
	#endif
#endif`,qf=`#ifndef FLAT_SHADED
	varying vec3 vNormal;
	#ifdef USE_TANGENT
		varying vec3 vTangent;
		varying vec3 vBitangent;
	#endif
#endif`,Yf=`#ifndef FLAT_SHADED
	vNormal = normalize( transformedNormal );
	#ifdef USE_TANGENT
		vTangent = normalize( transformedTangent );
		vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );
	#endif
#endif`,Zf=`#ifdef USE_NORMALMAP
	uniform sampler2D normalMap;
	uniform vec2 normalScale;
#endif
#ifdef USE_NORMALMAP_OBJECTSPACE
	uniform mat3 normalMatrix;
#endif
#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )
	mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {
		vec3 q0 = dFdx( eye_pos.xyz );
		vec3 q1 = dFdy( eye_pos.xyz );
		vec2 st0 = dFdx( uv.st );
		vec2 st1 = dFdy( uv.st );
		vec3 N = surf_norm;
		vec3 q1perp = cross( q1, N );
		vec3 q0perp = cross( N, q0 );
		vec3 T = q1perp * st0.x + q0perp * st1.x;
		vec3 B = q1perp * st0.y + q0perp * st1.y;
		float det = max( dot( T, T ), dot( B, B ) );
		float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );
		return mat3( T * scale, B * scale, N );
	}
#endif`,Kf=`#ifdef USE_CLEARCOAT
	vec3 clearcoatNormal = nonPerturbedNormal;
#endif`,$f=`#ifdef USE_CLEARCOAT_NORMALMAP
	vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;
	clearcoatMapN.xy *= clearcoatNormalScale;
	clearcoatNormal = normalize( tbn2 * clearcoatMapN );
#endif`,jf=`#ifdef USE_CLEARCOATMAP
	uniform sampler2D clearcoatMap;
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
	uniform sampler2D clearcoatNormalMap;
	uniform vec2 clearcoatNormalScale;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
	uniform sampler2D clearcoatRoughnessMap;
#endif`,Jf=`#ifdef USE_IRIDESCENCEMAP
	uniform sampler2D iridescenceMap;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
	uniform sampler2D iridescenceThicknessMap;
#endif`,Qf=`#ifdef OPAQUE
diffuseColor.a = 1.0;
#endif
#ifdef USE_TRANSMISSION
diffuseColor.a *= material.transmissionAlpha;
#endif
gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,tp=`vec3 packNormalToRGB( const in vec3 normal ) {
	return normalize( normal ) * 0.5 + 0.5;
}
vec3 unpackRGBToNormal( const in vec3 rgb ) {
	return 2.0 * rgb.xyz - 1.0;
}
const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;
const float Inv255 = 1. / 255.;
const vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );
const vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );
const vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );
const vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );
vec4 packDepthToRGBA( const in float v ) {
	if( v <= 0.0 )
		return vec4( 0., 0., 0., 0. );
	if( v >= 1.0 )
		return vec4( 1., 1., 1., 1. );
	float vuf;
	float af = modf( v * PackFactors.a, vuf );
	float bf = modf( vuf * ShiftRight8, vuf );
	float gf = modf( vuf * ShiftRight8, vuf );
	return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );
}
vec3 packDepthToRGB( const in float v ) {
	if( v <= 0.0 )
		return vec3( 0., 0., 0. );
	if( v >= 1.0 )
		return vec3( 1., 1., 1. );
	float vuf;
	float bf = modf( v * PackFactors.b, vuf );
	float gf = modf( vuf * ShiftRight8, vuf );
	return vec3( vuf * Inv255, gf * PackUpscale, bf );
}
vec2 packDepthToRG( const in float v ) {
	if( v <= 0.0 )
		return vec2( 0., 0. );
	if( v >= 1.0 )
		return vec2( 1., 1. );
	float vuf;
	float gf = modf( v * 256., vuf );
	return vec2( vuf * Inv255, gf );
}
float unpackRGBAToDepth( const in vec4 v ) {
	return dot( v, UnpackFactors4 );
}
float unpackRGBToDepth( const in vec3 v ) {
	return dot( v, UnpackFactors3 );
}
float unpackRGToDepth( const in vec2 v ) {
	return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;
}
vec4 pack2HalfToRGBA( const in vec2 v ) {
	vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );
	return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );
}
vec2 unpackRGBATo2Half( const in vec4 v ) {
	return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );
}
float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {
	return ( viewZ + near ) / ( near - far );
}
float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {
	return depth * ( near - far ) - near;
}
float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {
	return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );
}
float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {
	return ( near * far ) / ( ( far - near ) * depth - far );
}`,ep=`#ifdef PREMULTIPLIED_ALPHA
	gl_FragColor.rgb *= gl_FragColor.a;
#endif`,np=`vec4 mvPosition = vec4( transformed, 1.0 );
#ifdef USE_BATCHING
	mvPosition = batchingMatrix * mvPosition;
#endif
#ifdef USE_INSTANCING
	mvPosition = instanceMatrix * mvPosition;
#endif
mvPosition = modelViewMatrix * mvPosition;
gl_Position = projectionMatrix * mvPosition;`,ip=`#ifdef DITHERING
	gl_FragColor.rgb = dithering( gl_FragColor.rgb );
#endif`,sp=`#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`,rp=`float roughnessFactor = roughness;
#ifdef USE_ROUGHNESSMAP
	vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );
	roughnessFactor *= texelRoughness.g;
#endif`,ap=`#ifdef USE_ROUGHNESSMAP
	uniform sampler2D roughnessMap;
#endif`,op=`#if NUM_SPOT_LIGHT_COORDS > 0
	varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
#endif
#if NUM_SPOT_LIGHT_MAPS > 0
	uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];
#endif
#ifdef USE_SHADOWMAP
	#if NUM_DIR_LIGHT_SHADOWS > 0
		uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];
		varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
		struct DirectionalLightShadow {
			float shadowIntensity;
			float shadowBias;
			float shadowNormalBias;
			float shadowRadius;
			vec2 shadowMapSize;
		};
		uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];
	#endif
	#if NUM_SPOT_LIGHT_SHADOWS > 0
		uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];
		struct SpotLightShadow {
			float shadowIntensity;
			float shadowBias;
			float shadowNormalBias;
			float shadowRadius;
			vec2 shadowMapSize;
		};
		uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];
	#endif
	#if NUM_POINT_LIGHT_SHADOWS > 0
		uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];
		varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
		struct PointLightShadow {
			float shadowIntensity;
			float shadowBias;
			float shadowNormalBias;
			float shadowRadius;
			vec2 shadowMapSize;
			float shadowCameraNear;
			float shadowCameraFar;
		};
		uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
	#endif
	float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {
		float depth = unpackRGBAToDepth( texture2D( depths, uv ) );
		#ifdef USE_REVERSED_DEPTH_BUFFER
			return step( depth, compare );
		#else
			return step( compare, depth );
		#endif
	}
	vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {
		return unpackRGBATo2Half( texture2D( shadow, uv ) );
	}
	float VSMShadow( sampler2D shadow, vec2 uv, float compare ) {
		float occlusion = 1.0;
		vec2 distribution = texture2DDistribution( shadow, uv );
		#ifdef USE_REVERSED_DEPTH_BUFFER
			float hard_shadow = step( distribution.x, compare );
		#else
			float hard_shadow = step( compare, distribution.x );
		#endif
		if ( hard_shadow != 1.0 ) {
			float distance = compare - distribution.x;
			float variance = max( 0.00000, distribution.y * distribution.y );
			float softness_probability = variance / (variance + distance * distance );			softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );			occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );
		}
		return occlusion;
	}
	float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
		float shadow = 1.0;
		shadowCoord.xyz /= shadowCoord.w;
		shadowCoord.z += shadowBias;
		bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;
		bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
		if ( frustumTest ) {
		#if defined( SHADOWMAP_TYPE_PCF )
			vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
			float dx0 = - texelSize.x * shadowRadius;
			float dy0 = - texelSize.y * shadowRadius;
			float dx1 = + texelSize.x * shadowRadius;
			float dy1 = + texelSize.y * shadowRadius;
			float dx2 = dx0 / 2.0;
			float dy2 = dy0 / 2.0;
			float dx3 = dx1 / 2.0;
			float dy3 = dy1 / 2.0;
			shadow = (
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )
			) * ( 1.0 / 17.0 );
		#elif defined( SHADOWMAP_TYPE_PCF_SOFT )
			vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
			float dx = texelSize.x;
			float dy = texelSize.y;
			vec2 uv = shadowCoord.xy;
			vec2 f = fract( uv * shadowMapSize + 0.5 );
			uv -= f * texelSize;
			shadow = (
				texture2DCompare( shadowMap, uv, shadowCoord.z ) +
				texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +
				texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +
				texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +
				mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),
					 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),
					 f.x ) +
				mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),
					 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),
					 f.x ) +
				mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),
					 texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),
					 f.y ) +
				mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),
					 texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),
					 f.y ) +
				mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),
						  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),
						  f.x ),
					 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),
						  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),
						  f.x ),
					 f.y )
			) * ( 1.0 / 9.0 );
		#elif defined( SHADOWMAP_TYPE_VSM )
			shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );
		#else
			shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );
		#endif
		}
		return mix( 1.0, shadow, shadowIntensity );
	}
	vec2 cubeToUV( vec3 v, float texelSizeY ) {
		vec3 absV = abs( v );
		float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );
		absV *= scaleToCube;
		v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );
		vec2 planar = v.xy;
		float almostATexel = 1.5 * texelSizeY;
		float almostOne = 1.0 - almostATexel;
		if ( absV.z >= almostOne ) {
			if ( v.z > 0.0 )
				planar.x = 4.0 - v.x;
		} else if ( absV.x >= almostOne ) {
			float signX = sign( v.x );
			planar.x = v.z * signX + 2.0 * signX;
		} else if ( absV.y >= almostOne ) {
			float signY = sign( v.y );
			planar.x = v.x + 2.0 * signY + 2.0;
			planar.y = v.z * signY - 2.0;
		}
		return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );
	}
	float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
		float shadow = 1.0;
		vec3 lightToPosition = shadowCoord.xyz;
		
		float lightToPositionLength = length( lightToPosition );
		if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {
			float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );			dp += shadowBias;
			vec3 bd3D = normalize( lightToPosition );
			vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );
			#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )
				vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;
				shadow = (
					texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +
					texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +
					texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +
					texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +
					texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +
					texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +
					texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +
					texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +
					texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )
				) * ( 1.0 / 9.0 );
			#else
				shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );
			#endif
		}
		return mix( 1.0, shadow, shadowIntensity );
	}
#endif`,lp=`#if NUM_SPOT_LIGHT_COORDS > 0
	uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];
	varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
#endif
#ifdef USE_SHADOWMAP
	#if NUM_DIR_LIGHT_SHADOWS > 0
		uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];
		varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
		struct DirectionalLightShadow {
			float shadowIntensity;
			float shadowBias;
			float shadowNormalBias;
			float shadowRadius;
			vec2 shadowMapSize;
		};
		uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];
	#endif
	#if NUM_SPOT_LIGHT_SHADOWS > 0
		struct SpotLightShadow {
			float shadowIntensity;
			float shadowBias;
			float shadowNormalBias;
			float shadowRadius;
			vec2 shadowMapSize;
		};
		uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];
	#endif
	#if NUM_POINT_LIGHT_SHADOWS > 0
		uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];
		varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
		struct PointLightShadow {
			float shadowIntensity;
			float shadowBias;
			float shadowNormalBias;
			float shadowRadius;
			vec2 shadowMapSize;
			float shadowCameraNear;
			float shadowCameraFar;
		};
		uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
	#endif
#endif`,cp=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )
	vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
	vec4 shadowWorldPosition;
#endif
#if defined( USE_SHADOWMAP )
	#if NUM_DIR_LIGHT_SHADOWS > 0
		#pragma unroll_loop_start
		for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
			shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );
			vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;
		}
		#pragma unroll_loop_end
	#endif
	#if NUM_POINT_LIGHT_SHADOWS > 0
		#pragma unroll_loop_start
		for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
			shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );
			vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;
		}
		#pragma unroll_loop_end
	#endif
#endif
#if NUM_SPOT_LIGHT_COORDS > 0
	#pragma unroll_loop_start
	for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {
		shadowWorldPosition = worldPosition;
		#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
			shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;
		#endif
		vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;
	}
	#pragma unroll_loop_end
#endif`,hp=`float getShadowMask() {
	float shadow = 1.0;
	#ifdef USE_SHADOWMAP
	#if NUM_DIR_LIGHT_SHADOWS > 0
	DirectionalLightShadow directionalLight;
	#pragma unroll_loop_start
	for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
		directionalLight = directionalLightShadows[ i ];
		shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
	}
	#pragma unroll_loop_end
	#endif
	#if NUM_SPOT_LIGHT_SHADOWS > 0
	SpotLightShadow spotLight;
	#pragma unroll_loop_start
	for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {
		spotLight = spotLightShadows[ i ];
		shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
	}
	#pragma unroll_loop_end
	#endif
	#if NUM_POINT_LIGHT_SHADOWS > 0
	PointLightShadow pointLight;
	#pragma unroll_loop_start
	for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
		pointLight = pointLightShadows[ i ];
		shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;
	}
	#pragma unroll_loop_end
	#endif
	#endif
	return shadow;
}`,up=`#ifdef USE_SKINNING
	mat4 boneMatX = getBoneMatrix( skinIndex.x );
	mat4 boneMatY = getBoneMatrix( skinIndex.y );
	mat4 boneMatZ = getBoneMatrix( skinIndex.z );
	mat4 boneMatW = getBoneMatrix( skinIndex.w );
#endif`,dp=`#ifdef USE_SKINNING
	uniform mat4 bindMatrix;
	uniform mat4 bindMatrixInverse;
	uniform highp sampler2D boneTexture;
	mat4 getBoneMatrix( const in float i ) {
		int size = textureSize( boneTexture, 0 ).x;
		int j = int( i ) * 4;
		int x = j % size;
		int y = j / size;
		vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );
		vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );
		vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );
		vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );
		return mat4( v1, v2, v3, v4 );
	}
#endif`,fp=`#ifdef USE_SKINNING
	vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
	vec4 skinned = vec4( 0.0 );
	skinned += boneMatX * skinVertex * skinWeight.x;
	skinned += boneMatY * skinVertex * skinWeight.y;
	skinned += boneMatZ * skinVertex * skinWeight.z;
	skinned += boneMatW * skinVertex * skinWeight.w;
	transformed = ( bindMatrixInverse * skinned ).xyz;
#endif`,pp=`#ifdef USE_SKINNING
	mat4 skinMatrix = mat4( 0.0 );
	skinMatrix += skinWeight.x * boneMatX;
	skinMatrix += skinWeight.y * boneMatY;
	skinMatrix += skinWeight.z * boneMatZ;
	skinMatrix += skinWeight.w * boneMatW;
	skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;
	objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;
	#ifdef USE_TANGENT
		objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;
	#endif
#endif`,mp=`float specularStrength;
#ifdef USE_SPECULARMAP
	vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );
	specularStrength = texelSpecular.r;
#else
	specularStrength = 1.0;
#endif`,gp=`#ifdef USE_SPECULARMAP
	uniform sampler2D specularMap;
#endif`,_p=`#if defined( TONE_MAPPING )
	gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );
#endif`,vp=`#ifndef saturate
#define saturate( a ) clamp( a, 0.0, 1.0 )
#endif
uniform float toneMappingExposure;
vec3 LinearToneMapping( vec3 color ) {
	return saturate( toneMappingExposure * color );
}
vec3 ReinhardToneMapping( vec3 color ) {
	color *= toneMappingExposure;
	return saturate( color / ( vec3( 1.0 ) + color ) );
}
vec3 CineonToneMapping( vec3 color ) {
	color *= toneMappingExposure;
	color = max( vec3( 0.0 ), color - 0.004 );
	return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );
}
vec3 RRTAndODTFit( vec3 v ) {
	vec3 a = v * ( v + 0.0245786 ) - 0.000090537;
	vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;
	return a / b;
}
vec3 ACESFilmicToneMapping( vec3 color ) {
	const mat3 ACESInputMat = mat3(
		vec3( 0.59719, 0.07600, 0.02840 ),		vec3( 0.35458, 0.90834, 0.13383 ),
		vec3( 0.04823, 0.01566, 0.83777 )
	);
	const mat3 ACESOutputMat = mat3(
		vec3(  1.60475, -0.10208, -0.00327 ),		vec3( -0.53108,  1.10813, -0.07276 ),
		vec3( -0.07367, -0.00605,  1.07602 )
	);
	color *= toneMappingExposure / 0.6;
	color = ACESInputMat * color;
	color = RRTAndODTFit( color );
	color = ACESOutputMat * color;
	return saturate( color );
}
const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(
	vec3( 1.6605, - 0.1246, - 0.0182 ),
	vec3( - 0.5876, 1.1329, - 0.1006 ),
	vec3( - 0.0728, - 0.0083, 1.1187 )
);
const mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(
	vec3( 0.6274, 0.0691, 0.0164 ),
	vec3( 0.3293, 0.9195, 0.0880 ),
	vec3( 0.0433, 0.0113, 0.8956 )
);
vec3 agxDefaultContrastApprox( vec3 x ) {
	vec3 x2 = x * x;
	vec3 x4 = x2 * x2;
	return + 15.5 * x4 * x2
		- 40.14 * x4 * x
		+ 31.96 * x4
		- 6.868 * x2 * x
		+ 0.4298 * x2
		+ 0.1191 * x
		- 0.00232;
}
vec3 AgXToneMapping( vec3 color ) {
	const mat3 AgXInsetMatrix = mat3(
		vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),
		vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),
		vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )
	);
	const mat3 AgXOutsetMatrix = mat3(
		vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),
		vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),
		vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )
	);
	const float AgxMinEv = - 12.47393;	const float AgxMaxEv = 4.026069;
	color *= toneMappingExposure;
	color = LINEAR_SRGB_TO_LINEAR_REC2020 * color;
	color = AgXInsetMatrix * color;
	color = max( color, 1e-10 );	color = log2( color );
	color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );
	color = clamp( color, 0.0, 1.0 );
	color = agxDefaultContrastApprox( color );
	color = AgXOutsetMatrix * color;
	color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );
	color = LINEAR_REC2020_TO_LINEAR_SRGB * color;
	color = clamp( color, 0.0, 1.0 );
	return color;
}
vec3 NeutralToneMapping( vec3 color ) {
	const float StartCompression = 0.8 - 0.04;
	const float Desaturation = 0.15;
	color *= toneMappingExposure;
	float x = min( color.r, min( color.g, color.b ) );
	float offset = x < 0.08 ? x - 6.25 * x * x : 0.04;
	color -= offset;
	float peak = max( color.r, max( color.g, color.b ) );
	if ( peak < StartCompression ) return color;
	float d = 1. - StartCompression;
	float newPeak = 1. - d * d / ( peak + d - StartCompression );
	color *= newPeak / peak;
	float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );
	return mix( color, vec3( newPeak ), g );
}
vec3 CustomToneMapping( vec3 color ) { return color; }`,xp=`#ifdef USE_TRANSMISSION
	material.transmission = transmission;
	material.transmissionAlpha = 1.0;
	material.thickness = thickness;
	material.attenuationDistance = attenuationDistance;
	material.attenuationColor = attenuationColor;
	#ifdef USE_TRANSMISSIONMAP
		material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;
	#endif
	#ifdef USE_THICKNESSMAP
		material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;
	#endif
	vec3 pos = vWorldPosition;
	vec3 v = normalize( cameraPosition - pos );
	vec3 n = inverseTransformDirection( normal, viewMatrix );
	vec4 transmitted = getIBLVolumeRefraction(
		n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
		pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,
		material.attenuationColor, material.attenuationDistance );
	material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );
	totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );
#endif`,Mp=`#ifdef USE_TRANSMISSION
	uniform float transmission;
	uniform float thickness;
	uniform float attenuationDistance;
	uniform vec3 attenuationColor;
	#ifdef USE_TRANSMISSIONMAP
		uniform sampler2D transmissionMap;
	#endif
	#ifdef USE_THICKNESSMAP
		uniform sampler2D thicknessMap;
	#endif
	uniform vec2 transmissionSamplerSize;
	uniform sampler2D transmissionSamplerMap;
	uniform mat4 modelMatrix;
	uniform mat4 projectionMatrix;
	varying vec3 vWorldPosition;
	float w0( float a ) {
		return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );
	}
	float w1( float a ) {
		return ( 1.0 / 6.0 ) * ( a *  a * ( 3.0 * a - 6.0 ) + 4.0 );
	}
	float w2( float a ){
		return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );
	}
	float w3( float a ) {
		return ( 1.0 / 6.0 ) * ( a * a * a );
	}
	float g0( float a ) {
		return w0( a ) + w1( a );
	}
	float g1( float a ) {
		return w2( a ) + w3( a );
	}
	float h0( float a ) {
		return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );
	}
	float h1( float a ) {
		return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );
	}
	vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {
		uv = uv * texelSize.zw + 0.5;
		vec2 iuv = floor( uv );
		vec2 fuv = fract( uv );
		float g0x = g0( fuv.x );
		float g1x = g1( fuv.x );
		float h0x = h0( fuv.x );
		float h1x = h1( fuv.x );
		float h0y = h0( fuv.y );
		float h1y = h1( fuv.y );
		vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;
		vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;
		vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;
		vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;
		return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +
			g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );
	}
	vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {
		vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );
		vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );
		vec2 fLodSizeInv = 1.0 / fLodSize;
		vec2 cLodSizeInv = 1.0 / cLodSize;
		vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );
		vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );
		return mix( fSample, cSample, fract( lod ) );
	}
	vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {
		vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
		vec3 modelScale;
		modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
		modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
		modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );
		return normalize( refractionVector ) * thickness * modelScale;
	}
	float applyIorToRoughness( const in float roughness, const in float ior ) {
		return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );
	}
	vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {
		float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
		return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );
	}
	vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {
		if ( isinf( attenuationDistance ) ) {
			return vec3( 1.0 );
		} else {
			vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;
			vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );			return transmittance;
		}
	}
	vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,
		const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,
		const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,
		const in vec3 attenuationColor, const in float attenuationDistance ) {
		vec4 transmittedLight;
		vec3 transmittance;
		#ifdef USE_DISPERSION
			float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;
			vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );
			for ( int i = 0; i < 3; i ++ ) {
				vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );
				vec3 refractedRayExit = position + transmissionRay;
				vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
				vec2 refractionCoords = ndcPos.xy / ndcPos.w;
				refractionCoords += 1.0;
				refractionCoords /= 2.0;
				vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );
				transmittedLight[ i ] = transmissionSample[ i ];
				transmittedLight.a += transmissionSample.a;
				transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];
			}
			transmittedLight.a /= 3.0;
		#else
			vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
			vec3 refractedRayExit = position + transmissionRay;
			vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
			vec2 refractionCoords = ndcPos.xy / ndcPos.w;
			refractionCoords += 1.0;
			refractionCoords /= 2.0;
			transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );
			transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );
		#endif
		vec3 attenuatedColor = transmittance * transmittedLight.rgb;
		vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );
		float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;
		return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );
	}
#endif`,yp=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
	varying vec2 vUv;
#endif
#ifdef USE_MAP
	varying vec2 vMapUv;
#endif
#ifdef USE_ALPHAMAP
	varying vec2 vAlphaMapUv;
#endif
#ifdef USE_LIGHTMAP
	varying vec2 vLightMapUv;
#endif
#ifdef USE_AOMAP
	varying vec2 vAoMapUv;
#endif
#ifdef USE_BUMPMAP
	varying vec2 vBumpMapUv;
#endif
#ifdef USE_NORMALMAP
	varying vec2 vNormalMapUv;
#endif
#ifdef USE_EMISSIVEMAP
	varying vec2 vEmissiveMapUv;
#endif
#ifdef USE_METALNESSMAP
	varying vec2 vMetalnessMapUv;
#endif
#ifdef USE_ROUGHNESSMAP
	varying vec2 vRoughnessMapUv;
#endif
#ifdef USE_ANISOTROPYMAP
	varying vec2 vAnisotropyMapUv;
#endif
#ifdef USE_CLEARCOATMAP
	varying vec2 vClearcoatMapUv;
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
	varying vec2 vClearcoatNormalMapUv;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
	varying vec2 vClearcoatRoughnessMapUv;
#endif
#ifdef USE_IRIDESCENCEMAP
	varying vec2 vIridescenceMapUv;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
	varying vec2 vIridescenceThicknessMapUv;
#endif
#ifdef USE_SHEEN_COLORMAP
	varying vec2 vSheenColorMapUv;
#endif
#ifdef USE_SHEEN_ROUGHNESSMAP
	varying vec2 vSheenRoughnessMapUv;
#endif
#ifdef USE_SPECULARMAP
	varying vec2 vSpecularMapUv;
#endif
#ifdef USE_SPECULAR_COLORMAP
	varying vec2 vSpecularColorMapUv;
#endif
#ifdef USE_SPECULAR_INTENSITYMAP
	varying vec2 vSpecularIntensityMapUv;
#endif
#ifdef USE_TRANSMISSIONMAP
	uniform mat3 transmissionMapTransform;
	varying vec2 vTransmissionMapUv;
#endif
#ifdef USE_THICKNESSMAP
	uniform mat3 thicknessMapTransform;
	varying vec2 vThicknessMapUv;
#endif`,Sp=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
	varying vec2 vUv;
#endif
#ifdef USE_MAP
	uniform mat3 mapTransform;
	varying vec2 vMapUv;
#endif
#ifdef USE_ALPHAMAP
	uniform mat3 alphaMapTransform;
	varying vec2 vAlphaMapUv;
#endif
#ifdef USE_LIGHTMAP
	uniform mat3 lightMapTransform;
	varying vec2 vLightMapUv;
#endif
#ifdef USE_AOMAP
	uniform mat3 aoMapTransform;
	varying vec2 vAoMapUv;
#endif
#ifdef USE_BUMPMAP
	uniform mat3 bumpMapTransform;
	varying vec2 vBumpMapUv;
#endif
#ifdef USE_NORMALMAP
	uniform mat3 normalMapTransform;
	varying vec2 vNormalMapUv;
#endif
#ifdef USE_DISPLACEMENTMAP
	uniform mat3 displacementMapTransform;
	varying vec2 vDisplacementMapUv;
#endif
#ifdef USE_EMISSIVEMAP
	uniform mat3 emissiveMapTransform;
	varying vec2 vEmissiveMapUv;
#endif
#ifdef USE_METALNESSMAP
	uniform mat3 metalnessMapTransform;
	varying vec2 vMetalnessMapUv;
#endif
#ifdef USE_ROUGHNESSMAP
	uniform mat3 roughnessMapTransform;
	varying vec2 vRoughnessMapUv;
#endif
#ifdef USE_ANISOTROPYMAP
	uniform mat3 anisotropyMapTransform;
	varying vec2 vAnisotropyMapUv;
#endif
#ifdef USE_CLEARCOATMAP
	uniform mat3 clearcoatMapTransform;
	varying vec2 vClearcoatMapUv;
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
	uniform mat3 clearcoatNormalMapTransform;
	varying vec2 vClearcoatNormalMapUv;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
	uniform mat3 clearcoatRoughnessMapTransform;
	varying vec2 vClearcoatRoughnessMapUv;
#endif
#ifdef USE_SHEEN_COLORMAP
	uniform mat3 sheenColorMapTransform;
	varying vec2 vSheenColorMapUv;
#endif
#ifdef USE_SHEEN_ROUGHNESSMAP
	uniform mat3 sheenRoughnessMapTransform;
	varying vec2 vSheenRoughnessMapUv;
#endif
#ifdef USE_IRIDESCENCEMAP
	uniform mat3 iridescenceMapTransform;
	varying vec2 vIridescenceMapUv;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
	uniform mat3 iridescenceThicknessMapTransform;
	varying vec2 vIridescenceThicknessMapUv;
#endif
#ifdef USE_SPECULARMAP
	uniform mat3 specularMapTransform;
	varying vec2 vSpecularMapUv;
#endif
#ifdef USE_SPECULAR_COLORMAP
	uniform mat3 specularColorMapTransform;
	varying vec2 vSpecularColorMapUv;
#endif
#ifdef USE_SPECULAR_INTENSITYMAP
	uniform mat3 specularIntensityMapTransform;
	varying vec2 vSpecularIntensityMapUv;
#endif
#ifdef USE_TRANSMISSIONMAP
	uniform mat3 transmissionMapTransform;
	varying vec2 vTransmissionMapUv;
#endif
#ifdef USE_THICKNESSMAP
	uniform mat3 thicknessMapTransform;
	varying vec2 vThicknessMapUv;
#endif`,wp=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
	vUv = vec3( uv, 1 ).xy;
#endif
#ifdef USE_MAP
	vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;
#endif
#ifdef USE_ALPHAMAP
	vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_LIGHTMAP
	vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_AOMAP
	vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_BUMPMAP
	vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_NORMALMAP
	vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_DISPLACEMENTMAP
	vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_EMISSIVEMAP
	vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_METALNESSMAP
	vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_ROUGHNESSMAP
	vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_ANISOTROPYMAP
	vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_CLEARCOATMAP
	vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
	vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
	vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_IRIDESCENCEMAP
	vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
	vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SHEEN_COLORMAP
	vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SHEEN_ROUGHNESSMAP
	vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SPECULARMAP
	vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SPECULAR_COLORMAP
	vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SPECULAR_INTENSITYMAP
	vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_TRANSMISSIONMAP
	vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_THICKNESSMAP
	vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;
#endif`,Tp=`#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;
	#endif
	#ifdef USE_INSTANCING
		worldPosition = instanceMatrix * worldPosition;
	#endif
	worldPosition = modelMatrix * worldPosition;
#endif`;const Ep=`varying vec2 vUv;
uniform mat3 uvTransform;
void main() {
	vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
	gl_Position = vec4( position.xy, 1.0, 1.0 );
}`,bp=`uniform sampler2D t2D;
uniform float backgroundIntensity;
varying vec2 vUv;
void main() {
	vec4 texColor = texture2D( t2D, vUv );
	#ifdef DECODE_VIDEO_TEXTURE
		texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );
	#endif
	texColor.rgb *= backgroundIntensity;
	gl_FragColor = texColor;
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
}`,Ap=`varying vec3 vWorldDirection;
#include <common>
void main() {
	vWorldDirection = transformDirection( position, modelMatrix );
	#include <begin_vertex>
	#include <project_vertex>
	gl_Position.z = gl_Position.w;
}`,Rp=`#ifdef ENVMAP_TYPE_CUBE
	uniform samplerCube envMap;
#elif defined( ENVMAP_TYPE_CUBE_UV )
	uniform sampler2D envMap;
#endif
uniform float flipEnvMap;
uniform float backgroundBlurriness;
uniform float backgroundIntensity;
uniform mat3 backgroundRotation;
varying vec3 vWorldDirection;
#include <cube_uv_reflection_fragment>
void main() {
	#ifdef ENVMAP_TYPE_CUBE
		vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );
	#elif defined( ENVMAP_TYPE_CUBE_UV )
		vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );
	#else
		vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );
	#endif
	texColor.rgb *= backgroundIntensity;
	gl_FragColor = texColor;
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
}`,Cp=`varying vec3 vWorldDirection;
#include <common>
void main() {
	vWorldDirection = transformDirection( position, modelMatrix );
	#include <begin_vertex>
	#include <project_vertex>
	gl_Position.z = gl_Position.w;
}`,Pp=`uniform samplerCube tCube;
uniform float tFlip;
uniform float opacity;
varying vec3 vWorldDirection;
void main() {
	vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );
	gl_FragColor = texColor;
	gl_FragColor.a *= opacity;
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
}`,Dp=`#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
varying vec2 vHighPrecisionZW;
void main() {
	#include <uv_vertex>
	#include <batching_vertex>
	#include <skinbase_vertex>
	#include <morphinstance_vertex>
	#ifdef USE_DISPLACEMENTMAP
		#include <beginnormal_vertex>
		#include <morphnormal_vertex>
		#include <skinnormal_vertex>
	#endif
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <displacementmap_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	vHighPrecisionZW = gl_Position.zw;
}`,Lp=`#if DEPTH_PACKING == 3200
	uniform float opacity;
#endif
#include <common>
#include <packing>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
varying vec2 vHighPrecisionZW;
void main() {
	vec4 diffuseColor = vec4( 1.0 );
	#include <clipping_planes_fragment>
	#if DEPTH_PACKING == 3200
		diffuseColor.a = opacity;
	#endif
	#include <map_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	#include <logdepthbuf_fragment>
	#ifdef USE_REVERSED_DEPTH_BUFFER
		float fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];
	#else
		float fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;
	#endif
	#if DEPTH_PACKING == 3200
		gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );
	#elif DEPTH_PACKING == 3201
		gl_FragColor = packDepthToRGBA( fragCoordZ );
	#elif DEPTH_PACKING == 3202
		gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );
	#elif DEPTH_PACKING == 3203
		gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );
	#endif
}`,Ip=`#define DISTANCE
varying vec3 vWorldPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	#include <batching_vertex>
	#include <skinbase_vertex>
	#include <morphinstance_vertex>
	#ifdef USE_DISPLACEMENTMAP
		#include <beginnormal_vertex>
		#include <morphnormal_vertex>
		#include <skinnormal_vertex>
	#endif
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <displacementmap_vertex>
	#include <project_vertex>
	#include <worldpos_vertex>
	#include <clipping_planes_vertex>
	vWorldPosition = worldPosition.xyz;
}`,Up=`#define DISTANCE
uniform vec3 referencePosition;
uniform float nearDistance;
uniform float farDistance;
varying vec3 vWorldPosition;
#include <common>
#include <packing>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <clipping_planes_pars_fragment>
void main () {
	vec4 diffuseColor = vec4( 1.0 );
	#include <clipping_planes_fragment>
	#include <map_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	float dist = length( vWorldPosition - referencePosition );
	dist = ( dist - nearDistance ) / ( farDistance - nearDistance );
	dist = saturate( dist );
	gl_FragColor = packDepthToRGBA( dist );
}`,Np=`varying vec3 vWorldDirection;
#include <common>
void main() {
	vWorldDirection = transformDirection( position, modelMatrix );
	#include <begin_vertex>
	#include <project_vertex>
}`,Fp=`uniform sampler2D tEquirect;
varying vec3 vWorldDirection;
#include <common>
void main() {
	vec3 direction = normalize( vWorldDirection );
	vec2 sampleUV = equirectUv( direction );
	gl_FragColor = texture2D( tEquirect, sampleUV );
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
}`,Op=`uniform float scale;
attribute float lineDistance;
varying float vLineDistance;
#include <common>
#include <uv_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	vLineDistance = scale * lineDistance;
	#include <uv_vertex>
	#include <color_vertex>
	#include <morphinstance_vertex>
	#include <morphcolor_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	#include <fog_vertex>
}`,Bp=`uniform vec3 diffuse;
uniform float opacity;
uniform float dashSize;
uniform float totalSize;
varying float vLineDistance;
#include <common>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <fog_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	if ( mod( vLineDistance, totalSize ) > dashSize ) {
		discard;
	}
	vec3 outgoingLight = vec3( 0.0 );
	#include <logdepthbuf_fragment>
	#include <map_fragment>
	#include <color_fragment>
	outgoingLight = diffuseColor.rgb;
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
	#include <premultiplied_alpha_fragment>
}`,zp=`#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <envmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	#include <color_vertex>
	#include <morphinstance_vertex>
	#include <morphcolor_vertex>
	#include <batching_vertex>
	#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )
		#include <beginnormal_vertex>
		#include <morphnormal_vertex>
		#include <skinbase_vertex>
		#include <skinnormal_vertex>
		#include <defaultnormal_vertex>
	#endif
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	#include <worldpos_vertex>
	#include <envmap_vertex>
	#include <fog_vertex>
}`,kp=`uniform vec3 diffuse;
uniform float opacity;
#ifndef FLAT_SHADED
	varying vec3 vNormal;
#endif
#include <common>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <envmap_common_pars_fragment>
#include <envmap_pars_fragment>
#include <fog_pars_fragment>
#include <specularmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	#include <logdepthbuf_fragment>
	#include <map_fragment>
	#include <color_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	#include <specularmap_fragment>
	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
	#ifdef USE_LIGHTMAP
		vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );
		reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;
	#else
		reflectedLight.indirectDiffuse += vec3( 1.0 );
	#endif
	#include <aomap_fragment>
	reflectedLight.indirectDiffuse *= diffuseColor.rgb;
	vec3 outgoingLight = reflectedLight.indirectDiffuse;
	#include <envmap_fragment>
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
	#include <premultiplied_alpha_fragment>
	#include <dithering_fragment>
}`,Hp=`#define LAMBERT
varying vec3 vViewPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <envmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	#include <color_vertex>
	#include <morphinstance_vertex>
	#include <morphcolor_vertex>
	#include <batching_vertex>
	#include <beginnormal_vertex>
	#include <morphnormal_vertex>
	#include <skinbase_vertex>
	#include <skinnormal_vertex>
	#include <defaultnormal_vertex>
	#include <normal_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <displacementmap_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	vViewPosition = - mvPosition.xyz;
	#include <worldpos_vertex>
	#include <envmap_vertex>
	#include <shadowmap_vertex>
	#include <fog_vertex>
}`,Gp=`#define LAMBERT
uniform vec3 diffuse;
uniform vec3 emissive;
uniform float opacity;
#include <common>
#include <packing>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <emissivemap_pars_fragment>
#include <envmap_common_pars_fragment>
#include <envmap_pars_fragment>
#include <fog_pars_fragment>
#include <bsdfs>
#include <lights_pars_begin>
#include <normal_pars_fragment>
#include <lights_lambert_pars_fragment>
#include <shadowmap_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <specularmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
	vec3 totalEmissiveRadiance = emissive;
	#include <logdepthbuf_fragment>
	#include <map_fragment>
	#include <color_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	#include <specularmap_fragment>
	#include <normal_fragment_begin>
	#include <normal_fragment_maps>
	#include <emissivemap_fragment>
	#include <lights_lambert_fragment>
	#include <lights_fragment_begin>
	#include <lights_fragment_maps>
	#include <lights_fragment_end>
	#include <aomap_fragment>
	vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;
	#include <envmap_fragment>
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
	#include <premultiplied_alpha_fragment>
	#include <dithering_fragment>
}`,Vp=`#define MATCAP
varying vec3 vViewPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <color_pars_vertex>
#include <displacementmap_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	#include <color_vertex>
	#include <morphinstance_vertex>
	#include <morphcolor_vertex>
	#include <batching_vertex>
	#include <beginnormal_vertex>
	#include <morphnormal_vertex>
	#include <skinbase_vertex>
	#include <skinnormal_vertex>
	#include <defaultnormal_vertex>
	#include <normal_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <displacementmap_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	#include <fog_vertex>
	vViewPosition = - mvPosition.xyz;
}`,Wp=`#define MATCAP
uniform vec3 diffuse;
uniform float opacity;
uniform sampler2D matcap;
varying vec3 vViewPosition;
#include <common>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <fog_pars_fragment>
#include <normal_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	#include <logdepthbuf_fragment>
	#include <map_fragment>
	#include <color_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	#include <normal_fragment_begin>
	#include <normal_fragment_maps>
	vec3 viewDir = normalize( vViewPosition );
	vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );
	vec3 y = cross( viewDir, x );
	vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;
	#ifdef USE_MATCAP
		vec4 matcapColor = texture2D( matcap, uv );
	#else
		vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );
	#endif
	vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
	#include <premultiplied_alpha_fragment>
	#include <dithering_fragment>
}`,Xp=`#define NORMAL
#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )
	varying vec3 vViewPosition;
#endif
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	#include <batching_vertex>
	#include <beginnormal_vertex>
	#include <morphinstance_vertex>
	#include <morphnormal_vertex>
	#include <skinbase_vertex>
	#include <skinnormal_vertex>
	#include <defaultnormal_vertex>
	#include <normal_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <displacementmap_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )
	vViewPosition = - mvPosition.xyz;
#endif
}`,qp=`#define NORMAL
uniform float opacity;
#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )
	varying vec3 vViewPosition;
#endif
#include <packing>
#include <uv_pars_fragment>
#include <normal_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );
	#include <clipping_planes_fragment>
	#include <logdepthbuf_fragment>
	#include <normal_fragment_begin>
	#include <normal_fragment_maps>
	gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );
	#ifdef OPAQUE
		gl_FragColor.a = 1.0;
	#endif
}`,Yp=`#define PHONG
varying vec3 vViewPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <envmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	#include <color_vertex>
	#include <morphcolor_vertex>
	#include <batching_vertex>
	#include <beginnormal_vertex>
	#include <morphinstance_vertex>
	#include <morphnormal_vertex>
	#include <skinbase_vertex>
	#include <skinnormal_vertex>
	#include <defaultnormal_vertex>
	#include <normal_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <displacementmap_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	vViewPosition = - mvPosition.xyz;
	#include <worldpos_vertex>
	#include <envmap_vertex>
	#include <shadowmap_vertex>
	#include <fog_vertex>
}`,Zp=`#define PHONG
uniform vec3 diffuse;
uniform vec3 emissive;
uniform vec3 specular;
uniform float shininess;
uniform float opacity;
#include <common>
#include <packing>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <emissivemap_pars_fragment>
#include <envmap_common_pars_fragment>
#include <envmap_pars_fragment>
#include <fog_pars_fragment>
#include <bsdfs>
#include <lights_pars_begin>
#include <normal_pars_fragment>
#include <lights_phong_pars_fragment>
#include <shadowmap_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <specularmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
	vec3 totalEmissiveRadiance = emissive;
	#include <logdepthbuf_fragment>
	#include <map_fragment>
	#include <color_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	#include <specularmap_fragment>
	#include <normal_fragment_begin>
	#include <normal_fragment_maps>
	#include <emissivemap_fragment>
	#include <lights_phong_fragment>
	#include <lights_fragment_begin>
	#include <lights_fragment_maps>
	#include <lights_fragment_end>
	#include <aomap_fragment>
	vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;
	#include <envmap_fragment>
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
	#include <premultiplied_alpha_fragment>
	#include <dithering_fragment>
}`,Kp=`#define STANDARD
varying vec3 vViewPosition;
#ifdef USE_TRANSMISSION
	varying vec3 vWorldPosition;
#endif
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	#include <color_vertex>
	#include <morphinstance_vertex>
	#include <morphcolor_vertex>
	#include <batching_vertex>
	#include <beginnormal_vertex>
	#include <morphnormal_vertex>
	#include <skinbase_vertex>
	#include <skinnormal_vertex>
	#include <defaultnormal_vertex>
	#include <normal_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <displacementmap_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	vViewPosition = - mvPosition.xyz;
	#include <worldpos_vertex>
	#include <shadowmap_vertex>
	#include <fog_vertex>
#ifdef USE_TRANSMISSION
	vWorldPosition = worldPosition.xyz;
#endif
}`,$p=`#define STANDARD
#ifdef PHYSICAL
	#define IOR
	#define USE_SPECULAR
#endif
uniform vec3 diffuse;
uniform vec3 emissive;
uniform float roughness;
uniform float metalness;
uniform float opacity;
#ifdef IOR
	uniform float ior;
#endif
#ifdef USE_SPECULAR
	uniform float specularIntensity;
	uniform vec3 specularColor;
	#ifdef USE_SPECULAR_COLORMAP
		uniform sampler2D specularColorMap;
	#endif
	#ifdef USE_SPECULAR_INTENSITYMAP
		uniform sampler2D specularIntensityMap;
	#endif
#endif
#ifdef USE_CLEARCOAT
	uniform float clearcoat;
	uniform float clearcoatRoughness;
#endif
#ifdef USE_DISPERSION
	uniform float dispersion;
#endif
#ifdef USE_IRIDESCENCE
	uniform float iridescence;
	uniform float iridescenceIOR;
	uniform float iridescenceThicknessMinimum;
	uniform float iridescenceThicknessMaximum;
#endif
#ifdef USE_SHEEN
	uniform vec3 sheenColor;
	uniform float sheenRoughness;
	#ifdef USE_SHEEN_COLORMAP
		uniform sampler2D sheenColorMap;
	#endif
	#ifdef USE_SHEEN_ROUGHNESSMAP
		uniform sampler2D sheenRoughnessMap;
	#endif
#endif
#ifdef USE_ANISOTROPY
	uniform vec2 anisotropyVector;
	#ifdef USE_ANISOTROPYMAP
		uniform sampler2D anisotropyMap;
	#endif
#endif
varying vec3 vViewPosition;
#include <common>
#include <packing>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <emissivemap_pars_fragment>
#include <iridescence_fragment>
#include <cube_uv_reflection_fragment>
#include <envmap_common_pars_fragment>
#include <envmap_physical_pars_fragment>
#include <fog_pars_fragment>
#include <lights_pars_begin>
#include <normal_pars_fragment>
#include <lights_physical_pars_fragment>
#include <transmission_pars_fragment>
#include <shadowmap_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <clearcoat_pars_fragment>
#include <iridescence_pars_fragment>
#include <roughnessmap_pars_fragment>
#include <metalnessmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
	vec3 totalEmissiveRadiance = emissive;
	#include <logdepthbuf_fragment>
	#include <map_fragment>
	#include <color_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	#include <roughnessmap_fragment>
	#include <metalnessmap_fragment>
	#include <normal_fragment_begin>
	#include <normal_fragment_maps>
	#include <clearcoat_normal_fragment_begin>
	#include <clearcoat_normal_fragment_maps>
	#include <emissivemap_fragment>
	#include <lights_physical_fragment>
	#include <lights_fragment_begin>
	#include <lights_fragment_maps>
	#include <lights_fragment_end>
	#include <aomap_fragment>
	vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;
	vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;
	#include <transmission_fragment>
	vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
	#ifdef USE_SHEEN
		float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
		outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;
	#endif
	#ifdef USE_CLEARCOAT
		float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );
		vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
		outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;
	#endif
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
	#include <premultiplied_alpha_fragment>
	#include <dithering_fragment>
}`,jp=`#define TOON
varying vec3 vViewPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	#include <color_vertex>
	#include <morphinstance_vertex>
	#include <morphcolor_vertex>
	#include <batching_vertex>
	#include <beginnormal_vertex>
	#include <morphnormal_vertex>
	#include <skinbase_vertex>
	#include <skinnormal_vertex>
	#include <defaultnormal_vertex>
	#include <normal_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <displacementmap_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	vViewPosition = - mvPosition.xyz;
	#include <worldpos_vertex>
	#include <shadowmap_vertex>
	#include <fog_vertex>
}`,Jp=`#define TOON
uniform vec3 diffuse;
uniform vec3 emissive;
uniform float opacity;
#include <common>
#include <packing>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <emissivemap_pars_fragment>
#include <gradientmap_pars_fragment>
#include <fog_pars_fragment>
#include <bsdfs>
#include <lights_pars_begin>
#include <normal_pars_fragment>
#include <lights_toon_pars_fragment>
#include <shadowmap_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
	vec3 totalEmissiveRadiance = emissive;
	#include <logdepthbuf_fragment>
	#include <map_fragment>
	#include <color_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	#include <normal_fragment_begin>
	#include <normal_fragment_maps>
	#include <emissivemap_fragment>
	#include <lights_toon_fragment>
	#include <lights_fragment_begin>
	#include <lights_fragment_maps>
	#include <lights_fragment_end>
	#include <aomap_fragment>
	vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
	#include <premultiplied_alpha_fragment>
	#include <dithering_fragment>
}`,Qp=`uniform float size;
uniform float scale;
#include <common>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
#ifdef USE_POINTS_UV
	varying vec2 vUv;
	uniform mat3 uvTransform;
#endif
void main() {
	#ifdef USE_POINTS_UV
		vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
	#endif
	#include <color_vertex>
	#include <morphinstance_vertex>
	#include <morphcolor_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <project_vertex>
	gl_PointSize = size;
	#ifdef USE_SIZEATTENUATION
		bool isPerspective = isPerspectiveMatrix( projectionMatrix );
		if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );
	#endif
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	#include <worldpos_vertex>
	#include <fog_vertex>
}`,tm=`uniform vec3 diffuse;
uniform float opacity;
#include <common>
#include <color_pars_fragment>
#include <map_particle_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <fog_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	vec3 outgoingLight = vec3( 0.0 );
	#include <logdepthbuf_fragment>
	#include <map_particle_fragment>
	#include <color_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	outgoingLight = diffuseColor.rgb;
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
	#include <premultiplied_alpha_fragment>
}`,em=`#include <common>
#include <batching_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <shadowmap_pars_vertex>
void main() {
	#include <batching_vertex>
	#include <beginnormal_vertex>
	#include <morphinstance_vertex>
	#include <morphnormal_vertex>
	#include <skinbase_vertex>
	#include <skinnormal_vertex>
	#include <defaultnormal_vertex>
	#include <begin_vertex>
	#include <morphtarget_vertex>
	#include <skinning_vertex>
	#include <project_vertex>
	#include <logdepthbuf_vertex>
	#include <worldpos_vertex>
	#include <shadowmap_vertex>
	#include <fog_vertex>
}`,nm=`uniform vec3 color;
uniform float opacity;
#include <common>
#include <packing>
#include <fog_pars_fragment>
#include <bsdfs>
#include <lights_pars_begin>
#include <logdepthbuf_pars_fragment>
#include <shadowmap_pars_fragment>
#include <shadowmask_pars_fragment>
void main() {
	#include <logdepthbuf_fragment>
	gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
}`,im=`uniform float rotation;
uniform vec2 center;
#include <common>
#include <uv_pars_vertex>
#include <fog_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
	#include <uv_vertex>
	vec4 mvPosition = modelViewMatrix[ 3 ];
	vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );
	#ifndef USE_SIZEATTENUATION
		bool isPerspective = isPerspectiveMatrix( projectionMatrix );
		if ( isPerspective ) scale *= - mvPosition.z;
	#endif
	vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;
	vec2 rotatedPosition;
	rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
	rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
	mvPosition.xy += rotatedPosition;
	gl_Position = projectionMatrix * mvPosition;
	#include <logdepthbuf_vertex>
	#include <clipping_planes_vertex>
	#include <fog_vertex>
}`,sm=`uniform vec3 diffuse;
uniform float opacity;
#include <common>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <fog_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
	vec4 diffuseColor = vec4( diffuse, opacity );
	#include <clipping_planes_fragment>
	vec3 outgoingLight = vec3( 0.0 );
	#include <logdepthbuf_fragment>
	#include <map_fragment>
	#include <alphamap_fragment>
	#include <alphatest_fragment>
	#include <alphahash_fragment>
	outgoingLight = diffuseColor.rgb;
	#include <opaque_fragment>
	#include <tonemapping_fragment>
	#include <colorspace_fragment>
	#include <fog_fragment>
}`,Zt={alphahash_fragment:Ed,alphahash_pars_fragment:bd,alphamap_fragment:Ad,alphamap_pars_fragment:Rd,alphatest_fragment:Cd,alphatest_pars_fragment:Pd,aomap_fragment:Dd,aomap_pars_fragment:Ld,batching_pars_vertex:Id,batching_vertex:Ud,begin_vertex:Nd,beginnormal_vertex:Fd,bsdfs:Od,iridescence_fragment:Bd,bumpmap_pars_fragment:zd,clipping_planes_fragment:kd,clipping_planes_pars_fragment:Hd,clipping_planes_pars_vertex:Gd,clipping_planes_vertex:Vd,color_fragment:Wd,color_pars_fragment:Xd,color_pars_vertex:qd,color_vertex:Yd,common:Zd,cube_uv_reflection_fragment:Kd,defaultnormal_vertex:$d,displacementmap_pars_vertex:jd,displacementmap_vertex:Jd,emissivemap_fragment:Qd,emissivemap_pars_fragment:tf,colorspace_fragment:ef,colorspace_pars_fragment:nf,envmap_fragment:sf,envmap_common_pars_fragment:rf,envmap_pars_fragment:af,envmap_pars_vertex:of,envmap_physical_pars_fragment:vf,envmap_vertex:lf,fog_vertex:cf,fog_pars_vertex:hf,fog_fragment:uf,fog_pars_fragment:df,gradientmap_pars_fragment:ff,lightmap_pars_fragment:pf,lights_lambert_fragment:mf,lights_lambert_pars_fragment:gf,lights_pars_begin:_f,lights_toon_fragment:xf,lights_toon_pars_fragment:Mf,lights_phong_fragment:yf,lights_phong_pars_fragment:Sf,lights_physical_fragment:wf,lights_physical_pars_fragment:Tf,lights_fragment_begin:Ef,lights_fragment_maps:bf,lights_fragment_end:Af,logdepthbuf_fragment:Rf,logdepthbuf_pars_fragment:Cf,logdepthbuf_pars_vertex:Pf,logdepthbuf_vertex:Df,map_fragment:Lf,map_pars_fragment:If,map_particle_fragment:Uf,map_particle_pars_fragment:Nf,metalnessmap_fragment:Ff,metalnessmap_pars_fragment:Of,morphinstance_vertex:Bf,morphcolor_vertex:zf,morphnormal_vertex:kf,morphtarget_pars_vertex:Hf,morphtarget_vertex:Gf,normal_fragment_begin:Vf,normal_fragment_maps:Wf,normal_pars_fragment:Xf,normal_pars_vertex:qf,normal_vertex:Yf,normalmap_pars_fragment:Zf,clearcoat_normal_fragment_begin:Kf,clearcoat_normal_fragment_maps:$f,clearcoat_pars_fragment:jf,iridescence_pars_fragment:Jf,opaque_fragment:Qf,packing:tp,premultiplied_alpha_fragment:ep,project_vertex:np,dithering_fragment:ip,dithering_pars_fragment:sp,roughnessmap_fragment:rp,roughnessmap_pars_fragment:ap,shadowmap_pars_fragment:op,shadowmap_pars_vertex:lp,shadowmap_vertex:cp,shadowmask_pars_fragment:hp,skinbase_vertex:up,skinning_pars_vertex:dp,skinning_vertex:fp,skinnormal_vertex:pp,specularmap_fragment:mp,specularmap_pars_fragment:gp,tonemapping_fragment:_p,tonemapping_pars_fragment:vp,transmission_fragment:xp,transmission_pars_fragment:Mp,uv_pars_fragment:yp,uv_pars_vertex:Sp,uv_vertex:wp,worldpos_vertex:Tp,background_vert:Ep,background_frag:bp,backgroundCube_vert:Ap,backgroundCube_frag:Rp,cube_vert:Cp,cube_frag:Pp,depth_vert:Dp,depth_frag:Lp,distanceRGBA_vert:Ip,distanceRGBA_frag:Up,equirect_vert:Np,equirect_frag:Fp,linedashed_vert:Op,linedashed_frag:Bp,meshbasic_vert:zp,meshbasic_frag:kp,meshlambert_vert:Hp,meshlambert_frag:Gp,meshmatcap_vert:Vp,meshmatcap_frag:Wp,meshnormal_vert:Xp,meshnormal_frag:qp,meshphong_vert:Yp,meshphong_frag:Zp,meshphysical_vert:Kp,meshphysical_frag:$p,meshtoon_vert:jp,meshtoon_frag:Jp,points_vert:Qp,points_frag:tm,shadow_vert:em,shadow_frag:nm,sprite_vert:im,sprite_frag:sm},_t={common:{diffuse:{value:new ft(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Yt},alphaMap:{value:null},alphaMapTransform:{value:new Yt},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Yt}},envmap:{envMap:{value:null},envMapRotation:{value:new Yt},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Yt}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Yt}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Yt},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Yt},normalScale:{value:new Dt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Yt},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Yt}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Yt}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Yt}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ft(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new ft(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Yt},alphaTest:{value:0},uvTransform:{value:new Yt}},sprite:{diffuse:{value:new ft(16777215)},opacity:{value:1},center:{value:new Dt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Yt},alphaMap:{value:null},alphaMapTransform:{value:new Yt},alphaTest:{value:0}}},An={basic:{uniforms:Xe([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.fog]),vertexShader:Zt.meshbasic_vert,fragmentShader:Zt.meshbasic_frag},lambert:{uniforms:Xe([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,_t.lights,{emissive:{value:new ft(0)}}]),vertexShader:Zt.meshlambert_vert,fragmentShader:Zt.meshlambert_frag},phong:{uniforms:Xe([_t.common,_t.specularmap,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,_t.lights,{emissive:{value:new ft(0)},specular:{value:new ft(1118481)},shininess:{value:30}}]),vertexShader:Zt.meshphong_vert,fragmentShader:Zt.meshphong_frag},standard:{uniforms:Xe([_t.common,_t.envmap,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.roughnessmap,_t.metalnessmap,_t.fog,_t.lights,{emissive:{value:new ft(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Zt.meshphysical_vert,fragmentShader:Zt.meshphysical_frag},toon:{uniforms:Xe([_t.common,_t.aomap,_t.lightmap,_t.emissivemap,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.gradientmap,_t.fog,_t.lights,{emissive:{value:new ft(0)}}]),vertexShader:Zt.meshtoon_vert,fragmentShader:Zt.meshtoon_frag},matcap:{uniforms:Xe([_t.common,_t.bumpmap,_t.normalmap,_t.displacementmap,_t.fog,{matcap:{value:null}}]),vertexShader:Zt.meshmatcap_vert,fragmentShader:Zt.meshmatcap_frag},points:{uniforms:Xe([_t.points,_t.fog]),vertexShader:Zt.points_vert,fragmentShader:Zt.points_frag},dashed:{uniforms:Xe([_t.common,_t.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Zt.linedashed_vert,fragmentShader:Zt.linedashed_frag},depth:{uniforms:Xe([_t.common,_t.displacementmap]),vertexShader:Zt.depth_vert,fragmentShader:Zt.depth_frag},normal:{uniforms:Xe([_t.common,_t.bumpmap,_t.normalmap,_t.displacementmap,{opacity:{value:1}}]),vertexShader:Zt.meshnormal_vert,fragmentShader:Zt.meshnormal_frag},sprite:{uniforms:Xe([_t.sprite,_t.fog]),vertexShader:Zt.sprite_vert,fragmentShader:Zt.sprite_frag},background:{uniforms:{uvTransform:{value:new Yt},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Zt.background_vert,fragmentShader:Zt.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Yt}},vertexShader:Zt.backgroundCube_vert,fragmentShader:Zt.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Zt.cube_vert,fragmentShader:Zt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Zt.equirect_vert,fragmentShader:Zt.equirect_frag},distanceRGBA:{uniforms:Xe([_t.common,_t.displacementmap,{referencePosition:{value:new A},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Zt.distanceRGBA_vert,fragmentShader:Zt.distanceRGBA_frag},shadow:{uniforms:Xe([_t.lights,_t.fog,{color:{value:new ft(0)},opacity:{value:1}}]),vertexShader:Zt.shadow_vert,fragmentShader:Zt.shadow_frag}};An.physical={uniforms:Xe([An.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Yt},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Yt},clearcoatNormalScale:{value:new Dt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Yt},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Yt},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Yt},sheen:{value:0},sheenColor:{value:new ft(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Yt},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Yt},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Yt},transmissionSamplerSize:{value:new Dt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Yt},attenuationDistance:{value:0},attenuationColor:{value:new ft(0)},specularColor:{value:new ft(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Yt},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Yt},anisotropyVector:{value:new Dt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Yt}}]),vertexShader:Zt.meshphysical_vert,fragmentShader:Zt.meshphysical_frag};const Rr={r:0,b:0,g:0},vi=new In,rm=new se;function am(i,t,e,n,s,r,a){const o=new ft(0);let l=r===!0?0:1,c,h,u=null,d=0,p=null;function g(T){let x=T.isScene===!0?T.background:null;return x&&x.isTexture&&(x=(T.backgroundBlurriness>0?e:t).get(x)),x}function _(T){let x=!1;const R=g(T);R===null?f(o,l):R&&R.isColor&&(f(R,1),x=!0);const D=i.xr.getEnvironmentBlendMode();D==="additive"?n.buffers.color.setClear(0,0,0,1,a):D==="alpha-blend"&&n.buffers.color.setClear(0,0,0,0,a),(i.autoClear||x)&&(n.buffers.depth.setTest(!0),n.buffers.depth.setMask(!0),n.buffers.color.setMask(!0),i.clear(i.autoClearColor,i.autoClearDepth,i.autoClearStencil))}function m(T,x){const R=g(x);R&&(R.isCubeTexture||R.mapping===Kr)?(h===void 0&&(h=new xt(new he(1,1,1),new ze({name:"BackgroundCubeMaterial",uniforms:os(An.backgroundCube.uniforms),vertexShader:An.backgroundCube.vertexShader,fragmentShader:An.backgroundCube.fragmentShader,side:Ke,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),h.geometry.deleteAttribute("normal"),h.geometry.deleteAttribute("uv"),h.onBeforeRender=function(D,I,F){this.matrixWorld.copyPosition(F.matrixWorld)},Object.defineProperty(h.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(h)),vi.copy(x.backgroundRotation),vi.x*=-1,vi.y*=-1,vi.z*=-1,R.isCubeTexture&&R.isRenderTargetTexture===!1&&(vi.y*=-1,vi.z*=-1),h.material.uniforms.envMap.value=R,h.material.uniforms.flipEnvMap.value=R.isCubeTexture&&R.isRenderTargetTexture===!1?-1:1,h.material.uniforms.backgroundBlurriness.value=x.backgroundBlurriness,h.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,h.material.uniforms.backgroundRotation.value.setFromMatrix4(rm.makeRotationFromEuler(vi)),h.material.toneMapped=ne.getTransfer(R.colorSpace)!==ce,(u!==R||d!==R.version||p!==i.toneMapping)&&(h.material.needsUpdate=!0,u=R,d=R.version,p=i.toneMapping),h.layers.enableAll(),T.unshift(h,h.geometry,h.material,0,0,null)):R&&R.isTexture&&(c===void 0&&(c=new xt(new Ye(2,2),new ze({name:"BackgroundMaterial",uniforms:os(An.background.uniforms),vertexShader:An.background.vertexShader,fragmentShader:An.background.fragmentShader,side:ai,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=R,c.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,c.material.toneMapped=ne.getTransfer(R.colorSpace)!==ce,R.matrixAutoUpdate===!0&&R.updateMatrix(),c.material.uniforms.uvTransform.value.copy(R.matrix),(u!==R||d!==R.version||p!==i.toneMapping)&&(c.material.needsUpdate=!0,u=R,d=R.version,p=i.toneMapping),c.layers.enableAll(),T.unshift(c,c.geometry,c.material,0,0,null))}function f(T,x){T.getRGB(Rr,jc(i)),n.buffers.color.setClear(Rr.r,Rr.g,Rr.b,x,a)}function b(){h!==void 0&&(h.geometry.dispose(),h.material.dispose(),h=void 0),c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0)}return{getClearColor:function(){return o},setClearColor:function(T,x=1){o.set(T),l=x,f(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(T){l=T,f(o,l)},render:_,addToRenderList:m,dispose:b}}function om(i,t){const e=i.getParameter(i.MAX_VERTEX_ATTRIBS),n={},s=d(null);let r=s,a=!1;function o(y,L,z,H,q){let X=!1;const Z=u(H,z,L);r!==Z&&(r=Z,c(r.object)),X=p(y,H,z,q),X&&g(y,H,z,q),q!==null&&t.update(q,i.ELEMENT_ARRAY_BUFFER),(X||a)&&(a=!1,x(y,L,z,H),q!==null&&i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,t.get(q).buffer))}function l(){return i.createVertexArray()}function c(y){return i.bindVertexArray(y)}function h(y){return i.deleteVertexArray(y)}function u(y,L,z){const H=z.wireframe===!0;let q=n[y.id];q===void 0&&(q={},n[y.id]=q);let X=q[L.id];X===void 0&&(X={},q[L.id]=X);let Z=X[H];return Z===void 0&&(Z=d(l()),X[H]=Z),Z}function d(y){const L=[],z=[],H=[];for(let q=0;q<e;q++)L[q]=0,z[q]=0,H[q]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:L,enabledAttributes:z,attributeDivisors:H,object:y,attributes:{},index:null}}function p(y,L,z,H){const q=r.attributes,X=L.attributes;let Z=0;const et=z.getAttributes();for(const V in et)if(et[V].location>=0){const Mt=q[V];let Lt=X[V];if(Lt===void 0&&(V==="instanceMatrix"&&y.instanceMatrix&&(Lt=y.instanceMatrix),V==="instanceColor"&&y.instanceColor&&(Lt=y.instanceColor)),Mt===void 0||Mt.attribute!==Lt||Lt&&Mt.data!==Lt.data)return!0;Z++}return r.attributesNum!==Z||r.index!==H}function g(y,L,z,H){const q={},X=L.attributes;let Z=0;const et=z.getAttributes();for(const V in et)if(et[V].location>=0){let Mt=X[V];Mt===void 0&&(V==="instanceMatrix"&&y.instanceMatrix&&(Mt=y.instanceMatrix),V==="instanceColor"&&y.instanceColor&&(Mt=y.instanceColor));const Lt={};Lt.attribute=Mt,Mt&&Mt.data&&(Lt.data=Mt.data),q[V]=Lt,Z++}r.attributes=q,r.attributesNum=Z,r.index=H}function _(){const y=r.newAttributes;for(let L=0,z=y.length;L<z;L++)y[L]=0}function m(y){f(y,0)}function f(y,L){const z=r.newAttributes,H=r.enabledAttributes,q=r.attributeDivisors;z[y]=1,H[y]===0&&(i.enableVertexAttribArray(y),H[y]=1),q[y]!==L&&(i.vertexAttribDivisor(y,L),q[y]=L)}function b(){const y=r.newAttributes,L=r.enabledAttributes;for(let z=0,H=L.length;z<H;z++)L[z]!==y[z]&&(i.disableVertexAttribArray(z),L[z]=0)}function T(y,L,z,H,q,X,Z){Z===!0?i.vertexAttribIPointer(y,L,z,q,X):i.vertexAttribPointer(y,L,z,H,q,X)}function x(y,L,z,H){_();const q=H.attributes,X=z.getAttributes(),Z=L.defaultAttributeValues;for(const et in X){const V=X[et];if(V.location>=0){let gt=q[et];if(gt===void 0&&(et==="instanceMatrix"&&y.instanceMatrix&&(gt=y.instanceMatrix),et==="instanceColor"&&y.instanceColor&&(gt=y.instanceColor)),gt!==void 0){const Mt=gt.normalized,Lt=gt.itemSize,qt=t.get(gt);if(qt===void 0)continue;const re=qt.buffer,de=qt.type,te=qt.bytesPerElement,tt=de===i.INT||de===i.UNSIGNED_INT||gt.gpuType===zo;if(gt.isInterleavedBufferAttribute){const rt=gt.data,wt=rt.stride,zt=gt.offset;if(rt.isInstancedInterleavedBuffer){for(let It=0;It<V.locationSize;It++)f(V.location+It,rt.meshPerAttribute);y.isInstancedMesh!==!0&&H._maxInstanceCount===void 0&&(H._maxInstanceCount=rt.meshPerAttribute*rt.count)}else for(let It=0;It<V.locationSize;It++)m(V.location+It);i.bindBuffer(i.ARRAY_BUFFER,re);for(let It=0;It<V.locationSize;It++)T(V.location+It,Lt/V.locationSize,de,Mt,wt*te,(zt+Lt/V.locationSize*It)*te,tt)}else{if(gt.isInstancedBufferAttribute){for(let rt=0;rt<V.locationSize;rt++)f(V.location+rt,gt.meshPerAttribute);y.isInstancedMesh!==!0&&H._maxInstanceCount===void 0&&(H._maxInstanceCount=gt.meshPerAttribute*gt.count)}else for(let rt=0;rt<V.locationSize;rt++)m(V.location+rt);i.bindBuffer(i.ARRAY_BUFFER,re);for(let rt=0;rt<V.locationSize;rt++)T(V.location+rt,Lt/V.locationSize,de,Mt,Lt*te,Lt/V.locationSize*rt*te,tt)}}else if(Z!==void 0){const Mt=Z[et];if(Mt!==void 0)switch(Mt.length){case 2:i.vertexAttrib2fv(V.location,Mt);break;case 3:i.vertexAttrib3fv(V.location,Mt);break;case 4:i.vertexAttrib4fv(V.location,Mt);break;default:i.vertexAttrib1fv(V.location,Mt)}}}}b()}function R(){F();for(const y in n){const L=n[y];for(const z in L){const H=L[z];for(const q in H)h(H[q].object),delete H[q];delete L[z]}delete n[y]}}function D(y){if(n[y.id]===void 0)return;const L=n[y.id];for(const z in L){const H=L[z];for(const q in H)h(H[q].object),delete H[q];delete L[z]}delete n[y.id]}function I(y){for(const L in n){const z=n[L];if(z[y.id]===void 0)continue;const H=z[y.id];for(const q in H)h(H[q].object),delete H[q];delete z[y.id]}}function F(){w(),a=!0,r!==s&&(r=s,c(r.object))}function w(){s.geometry=null,s.program=null,s.wireframe=!1}return{setup:o,reset:F,resetDefaultState:w,dispose:R,releaseStatesOfGeometry:D,releaseStatesOfProgram:I,initAttributes:_,enableAttribute:m,disableUnusedAttributes:b}}function lm(i,t,e){let n;function s(c){n=c}function r(c,h){i.drawArrays(n,c,h),e.update(h,n,1)}function a(c,h,u){u!==0&&(i.drawArraysInstanced(n,c,h,u),e.update(h,n,u))}function o(c,h,u){if(u===0)return;t.get("WEBGL_multi_draw").multiDrawArraysWEBGL(n,c,0,h,0,u);let p=0;for(let g=0;g<u;g++)p+=h[g];e.update(p,n,1)}function l(c,h,u,d){if(u===0)return;const p=t.get("WEBGL_multi_draw");if(p===null)for(let g=0;g<c.length;g++)a(c[g],h[g],d[g]);else{p.multiDrawArraysInstancedWEBGL(n,c,0,h,0,d,0,u);let g=0;for(let _=0;_<u;_++)g+=h[_]*d[_];e.update(g,n,1)}}this.setMode=s,this.render=r,this.renderInstances=a,this.renderMultiDraw=o,this.renderMultiDrawInstances=l}function cm(i,t,e,n){let s;function r(){if(s!==void 0)return s;if(t.has("EXT_texture_filter_anisotropic")===!0){const I=t.get("EXT_texture_filter_anisotropic");s=i.getParameter(I.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else s=0;return s}function a(I){return!(I!==wn&&n.convert(I)!==i.getParameter(i.IMPLEMENTATION_COLOR_READ_FORMAT))}function o(I){const F=I===qn&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(I!==Ln&&n.convert(I)!==i.getParameter(i.IMPLEMENTATION_COLOR_READ_TYPE)&&I!==Cn&&!F)}function l(I){if(I==="highp"){if(i.getShaderPrecisionFormat(i.VERTEX_SHADER,i.HIGH_FLOAT).precision>0&&i.getShaderPrecisionFormat(i.FRAGMENT_SHADER,i.HIGH_FLOAT).precision>0)return"highp";I="mediump"}return I==="mediump"&&i.getShaderPrecisionFormat(i.VERTEX_SHADER,i.MEDIUM_FLOAT).precision>0&&i.getShaderPrecisionFormat(i.FRAGMENT_SHADER,i.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=e.precision!==void 0?e.precision:"highp";const h=l(c);h!==c&&(console.warn("THREE.WebGLRenderer:",c,"not supported, using",h,"instead."),c=h);const u=e.logarithmicDepthBuffer===!0,d=e.reversedDepthBuffer===!0&&t.has("EXT_clip_control"),p=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS),g=i.getParameter(i.MAX_VERTEX_TEXTURE_IMAGE_UNITS),_=i.getParameter(i.MAX_TEXTURE_SIZE),m=i.getParameter(i.MAX_CUBE_MAP_TEXTURE_SIZE),f=i.getParameter(i.MAX_VERTEX_ATTRIBS),b=i.getParameter(i.MAX_VERTEX_UNIFORM_VECTORS),T=i.getParameter(i.MAX_VARYING_VECTORS),x=i.getParameter(i.MAX_FRAGMENT_UNIFORM_VECTORS),R=g>0,D=i.getParameter(i.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:u,reversedDepthBuffer:d,maxTextures:p,maxVertexTextures:g,maxTextureSize:_,maxCubemapSize:m,maxAttributes:f,maxVertexUniforms:b,maxVaryings:T,maxFragmentUniforms:x,vertexTextures:R,maxSamples:D}}function hm(i){const t=this;let e=null,n=0,s=!1,r=!1;const a=new Mi,o=new Yt,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(u,d){const p=u.length!==0||d||n!==0||s;return s=d,n=u.length,p},this.beginShadows=function(){r=!0,h(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(u,d){e=h(u,d,0)},this.setState=function(u,d,p){const g=u.clippingPlanes,_=u.clipIntersection,m=u.clipShadows,f=i.get(u);if(!s||g===null||g.length===0||r&&!m)r?h(null):c();else{const b=r?0:n,T=b*4;let x=f.clippingState||null;l.value=x,x=h(g,d,T,p);for(let R=0;R!==T;++R)x[R]=e[R];f.clippingState=x,this.numIntersection=_?this.numPlanes:0,this.numPlanes+=b}};function c(){l.value!==e&&(l.value=e,l.needsUpdate=n>0),t.numPlanes=n,t.numIntersection=0}function h(u,d,p,g){const _=u!==null?u.length:0;let m=null;if(_!==0){if(m=l.value,g!==!0||m===null){const f=p+_*4,b=d.matrixWorldInverse;o.getNormalMatrix(b),(m===null||m.length<f)&&(m=new Float32Array(f));for(let T=0,x=p;T!==_;++T,x+=4)a.copy(u[T]).applyMatrix4(b,o),a.normal.toArray(m,x),m[x+3]=a.constant}l.value=m,l.needsUpdate=!0}return t.numPlanes=_,t.numIntersection=0,m}}function um(i){let t=new WeakMap;function e(a,o){return o===qa?a.mapping=ss:o===Ya&&(a.mapping=rs),a}function n(a){if(a&&a.isTexture){const o=a.mapping;if(o===qa||o===Ya)if(t.has(a)){const l=t.get(a).texture;return e(l,a.mapping)}else{const l=a.image;if(l&&l.height>0){const c=new rd(l.height);return c.fromEquirectangularTexture(i,a),t.set(a,c),a.addEventListener("dispose",s),e(c.texture,a.mapping)}else return null}}return a}function s(a){const o=a.target;o.removeEventListener("dispose",s);const l=t.get(o);l!==void 0&&(t.delete(o),l.dispose())}function r(){t=new WeakMap}return{get:n,dispose:r}}const Qi=4,Jl=[.125,.215,.35,.446,.526,.582],Ti=20,Ra=new el,Ql=new ft;let Ca=null,Pa=0,Da=0,La=!1;const yi=(1+Math.sqrt(5))/2,ji=1/yi,tc=[new A(-yi,ji,0),new A(yi,ji,0),new A(-ji,0,yi),new A(ji,0,yi),new A(0,yi,-ji),new A(0,yi,ji),new A(-1,1,-1),new A(1,1,-1),new A(-1,1,1),new A(1,1,1)],dm=new A;class Ao{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,s=100,r={}){const{size:a=256,position:o=dm}=r;Ca=this._renderer.getRenderTarget(),Pa=this._renderer.getActiveCubeFace(),Da=this._renderer.getActiveMipmapLevel(),La=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);const l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(t,n,s,l,o),e>0&&this._blur(l,0,0,e),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=ic(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=nc(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let t=0;t<this._lodPlanes.length;t++)this._lodPlanes[t].dispose()}_cleanup(t){this._renderer.setRenderTarget(Ca,Pa,Da),this._renderer.xr.enabled=La,t.scissorTest=!1,Cr(t,0,0,t.width,t.height)}_fromTexture(t,e){t.mapping===ss||t.mapping===rs?this._setSize(t.image.length===0?16:t.image[0].width||t.image[0].image.width):this._setSize(t.image.width/4),Ca=this._renderer.getRenderTarget(),Pa=this._renderer.getActiveCubeFace(),Da=this._renderer.getActiveMipmapLevel(),La=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;const n=e||this._allocateTargets();return this._textureToCubeUV(t,n),this._applyPMREM(n),this._cleanup(n),n}_allocateTargets(){const t=3*Math.max(this._cubeSize,112),e=4*this._cubeSize,n={magFilter:Rn,minFilter:Rn,generateMipmaps:!1,type:qn,format:wn,colorSpace:as,depthBuffer:!1},s=ec(t,e,n);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==t||this._pingPongRenderTarget.height!==e){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=ec(t,e,n);const{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=fm(r)),this._blurMaterial=pm(r,t,e)}return s}_compileMaterial(t){const e=new xt(this._lodPlanes[0],t);this._renderer.compile(e,Ra)}_sceneToCubeUV(t,e,n,s,r){const l=new on(90,1,e,n),c=[1,-1,1,1,1,1],h=[1,1,1,-1,-1,-1],u=this._renderer,d=u.autoClear,p=u.toneMapping;u.getClearColor(Ql),u.toneMapping=Xn,u.autoClear=!1,u.state.buffers.depth.getReversed()&&(u.setRenderTarget(s),u.clearDepth(),u.setRenderTarget(null));const _=new Be({name:"PMREM.Background",side:Ke,depthWrite:!1,depthTest:!1}),m=new xt(new he,_);let f=!1;const b=t.background;b?b.isColor&&(_.color.copy(b),t.background=null,f=!0):(_.color.copy(Ql),f=!0);for(let T=0;T<6;T++){const x=T%3;x===0?(l.up.set(0,c[T],0),l.position.set(r.x,r.y,r.z),l.lookAt(r.x+h[T],r.y,r.z)):x===1?(l.up.set(0,0,c[T]),l.position.set(r.x,r.y,r.z),l.lookAt(r.x,r.y+h[T],r.z)):(l.up.set(0,c[T],0),l.position.set(r.x,r.y,r.z),l.lookAt(r.x,r.y,r.z+h[T]));const R=this._cubeSize;Cr(s,x*R,T>2?R:0,R,R),u.setRenderTarget(s),f&&u.render(m,l),u.render(t,l)}m.geometry.dispose(),m.material.dispose(),u.toneMapping=p,u.autoClear=d,t.background=b}_textureToCubeUV(t,e){const n=this._renderer,s=t.mapping===ss||t.mapping===rs;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=ic()),this._cubemapMaterial.uniforms.flipEnvMap.value=t.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=nc());const r=s?this._cubemapMaterial:this._equirectMaterial,a=new xt(this._lodPlanes[0],r),o=r.uniforms;o.envMap.value=t;const l=this._cubeSize;Cr(e,0,0,3*l,2*l),n.setRenderTarget(e),n.render(a,Ra)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;const s=this._lodPlanes.length;for(let r=1;r<s;r++){const a=Math.sqrt(this._sigmas[r]*this._sigmas[r]-this._sigmas[r-1]*this._sigmas[r-1]),o=tc[(s-r-1)%tc.length];this._blur(t,r-1,r,a,o)}e.autoClear=n}_blur(t,e,n,s,r){const a=this._pingPongRenderTarget;this._halfBlur(t,a,e,n,s,"latitudinal",r),this._halfBlur(a,t,n,n,s,"longitudinal",r)}_halfBlur(t,e,n,s,r,a,o){const l=this._renderer,c=this._blurMaterial;a!=="latitudinal"&&a!=="longitudinal"&&console.error("blur direction must be either latitudinal or longitudinal!");const h=3,u=new xt(this._lodPlanes[s],c),d=c.uniforms,p=this._sizeLods[n]-1,g=isFinite(r)?Math.PI/(2*p):2*Math.PI/(2*Ti-1),_=r/g,m=isFinite(r)?1+Math.floor(h*_):Ti;m>Ti&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Ti}`);const f=[];let b=0;for(let I=0;I<Ti;++I){const F=I/_,w=Math.exp(-F*F/2);f.push(w),I===0?b+=w:I<m&&(b+=2*w)}for(let I=0;I<f.length;I++)f[I]=f[I]/b;d.envMap.value=t.texture,d.samples.value=m,d.weights.value=f,d.latitudinal.value=a==="latitudinal",o&&(d.poleAxis.value=o);const{_lodMax:T}=this;d.dTheta.value=g,d.mipInt.value=T-n;const x=this._sizeLods[s],R=3*x*(s>T-Qi?s-T+Qi:0),D=4*(this._cubeSize-x);Cr(e,R,D,3*x,2*x),l.setRenderTarget(e),l.render(u,Ra)}}function fm(i){const t=[],e=[],n=[];let s=i;const r=i-Qi+1+Jl.length;for(let a=0;a<r;a++){const o=Math.pow(2,s);e.push(o);let l=1/o;a>i-Qi?l=Jl[a-i+Qi-1]:a===0&&(l=0),n.push(l);const c=1/(o-2),h=-c,u=1+c,d=[h,h,u,h,u,u,h,h,u,u,h,u],p=6,g=6,_=3,m=2,f=1,b=new Float32Array(_*g*p),T=new Float32Array(m*g*p),x=new Float32Array(f*g*p);for(let D=0;D<p;D++){const I=D%3*2/3-1,F=D>2?0:-1,w=[I,F,0,I+2/3,F,0,I+2/3,F+1,0,I,F,0,I+2/3,F+1,0,I,F+1,0];b.set(w,_*g*D),T.set(d,m*g*D);const y=[D,D,D,D,D,D];x.set(y,f*g*D)}const R=new me;R.setAttribute("position",new ve(b,_)),R.setAttribute("uv",new ve(T,m)),R.setAttribute("faceIndex",new ve(x,f)),t.push(R),s>Qi&&s--}return{lodPlanes:t,sizeLods:e,sigmas:n}}function ec(i,t,e){const n=new Tn(i,t,e);return n.texture.mapping=Kr,n.texture.name="PMREM.cubeUv",n.scissorTest=!0,n}function Cr(i,t,e,n,s){i.viewport.set(t,e,n,s),i.scissor.set(t,e,n,s)}function pm(i,t,e){const n=new Float32Array(Ti),s=new A(0,1,0);return new ze({name:"SphericalGaussianBlur",defines:{n:Ti,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/e,CUBEUV_MAX_MIP:`${i}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:n},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:nl(),fragmentShader:`

			precision mediump float;
			precision mediump int;

			varying vec3 vOutputDirection;

			uniform sampler2D envMap;
			uniform int samples;
			uniform float weights[ n ];
			uniform bool latitudinal;
			uniform float dTheta;
			uniform float mipInt;
			uniform vec3 poleAxis;

			#define ENVMAP_TYPE_CUBE_UV
			#include <cube_uv_reflection_fragment>

			vec3 getSample( float theta, vec3 axis ) {

				float cosTheta = cos( theta );
				// Rodrigues' axis-angle rotation
				vec3 sampleDirection = vOutputDirection * cosTheta
					+ cross( axis, vOutputDirection ) * sin( theta )
					+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );

				return bilinearCubeUV( envMap, sampleDirection, mipInt );

			}

			void main() {

				vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );

				if ( all( equal( axis, vec3( 0.0 ) ) ) ) {

					axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );

				}

				axis = normalize( axis );

				gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );
				gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );

				for ( int i = 1; i < n; i++ ) {

					if ( i >= samples ) {

						break;

					}

					float theta = dTheta * float( i );
					gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );
					gl_FragColor.rgb += weights[ i ] * getSample( theta, axis );

				}

			}
		`,blending:Wn,depthTest:!1,depthWrite:!1})}function nc(){return new ze({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:nl(),fragmentShader:`

			precision mediump float;
			precision mediump int;

			varying vec3 vOutputDirection;

			uniform sampler2D envMap;

			#include <common>

			void main() {

				vec3 outputDirection = normalize( vOutputDirection );
				vec2 uv = equirectUv( outputDirection );

				gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );

			}
		`,blending:Wn,depthTest:!1,depthWrite:!1})}function ic(){return new ze({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:nl(),fragmentShader:`

			precision mediump float;
			precision mediump int;

			uniform float flipEnvMap;

			varying vec3 vOutputDirection;

			uniform samplerCube envMap;

			void main() {

				gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );

			}
		`,blending:Wn,depthTest:!1,depthWrite:!1})}function nl(){return`

		precision mediump float;
		precision mediump int;

		attribute float faceIndex;

		varying vec3 vOutputDirection;

		// RH coordinate system; PMREM face-indexing convention
		vec3 getDirection( vec2 uv, float face ) {

			uv = 2.0 * uv - 1.0;

			vec3 direction = vec3( uv, 1.0 );

			if ( face == 0.0 ) {

				direction = direction.zyx; // ( 1, v, u ) pos x

			} else if ( face == 1.0 ) {

				direction = direction.xzy;
				direction.xz *= -1.0; // ( -u, 1, -v ) pos y

			} else if ( face == 2.0 ) {

				direction.x *= -1.0; // ( -u, v, 1 ) pos z

			} else if ( face == 3.0 ) {

				direction = direction.zyx;
				direction.xz *= -1.0; // ( -1, v, -u ) neg x

			} else if ( face == 4.0 ) {

				direction = direction.xzy;
				direction.xy *= -1.0; // ( -u, -1, v ) neg y

			} else if ( face == 5.0 ) {

				direction.z *= -1.0; // ( u, v, -1 ) neg z

			}

			return direction;

		}

		void main() {

			vOutputDirection = getDirection( uv, faceIndex );
			gl_Position = vec4( position, 1.0 );

		}
	`}function mm(i){let t=new WeakMap,e=null;function n(o){if(o&&o.isTexture){const l=o.mapping,c=l===qa||l===Ya,h=l===ss||l===rs;if(c||h){let u=t.get(o);const d=u!==void 0?u.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==d)return e===null&&(e=new Ao(i)),u=c?e.fromEquirectangular(o,u):e.fromCubemap(o,u),u.texture.pmremVersion=o.pmremVersion,t.set(o,u),u.texture;if(u!==void 0)return u.texture;{const p=o.image;return c&&p&&p.height>0||h&&p&&s(p)?(e===null&&(e=new Ao(i)),u=c?e.fromEquirectangular(o):e.fromCubemap(o),u.texture.pmremVersion=o.pmremVersion,t.set(o,u),o.addEventListener("dispose",r),u.texture):null}}}return o}function s(o){let l=0;const c=6;for(let h=0;h<c;h++)o[h]!==void 0&&l++;return l===c}function r(o){const l=o.target;l.removeEventListener("dispose",r);const c=t.get(l);c!==void 0&&(t.delete(l),c.dispose())}function a(){t=new WeakMap,e!==null&&(e.dispose(),e=null)}return{get:n,dispose:a}}function gm(i){const t={};function e(n){if(t[n]!==void 0)return t[n];let s;switch(n){case"WEBGL_depth_texture":s=i.getExtension("WEBGL_depth_texture")||i.getExtension("MOZ_WEBGL_depth_texture")||i.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":s=i.getExtension("EXT_texture_filter_anisotropic")||i.getExtension("MOZ_EXT_texture_filter_anisotropic")||i.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":s=i.getExtension("WEBGL_compressed_texture_s3tc")||i.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||i.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":s=i.getExtension("WEBGL_compressed_texture_pvrtc")||i.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:s=i.getExtension(n)}return t[n]=s,s}return{has:function(n){return e(n)!==null},init:function(){e("EXT_color_buffer_float"),e("WEBGL_clip_cull_distance"),e("OES_texture_float_linear"),e("EXT_color_buffer_half_float"),e("WEBGL_multisampled_render_to_texture"),e("WEBGL_render_shared_exponent")},get:function(n){const s=e(n);return s===null&&Ws("THREE.WebGLRenderer: "+n+" extension not supported."),s}}}function _m(i,t,e,n){const s={},r=new WeakMap;function a(u){const d=u.target;d.index!==null&&t.remove(d.index);for(const g in d.attributes)t.remove(d.attributes[g]);d.removeEventListener("dispose",a),delete s[d.id];const p=r.get(d);p&&(t.remove(p),r.delete(d)),n.releaseStatesOfGeometry(d),d.isInstancedBufferGeometry===!0&&delete d._maxInstanceCount,e.memory.geometries--}function o(u,d){return s[d.id]===!0||(d.addEventListener("dispose",a),s[d.id]=!0,e.memory.geometries++),d}function l(u){const d=u.attributes;for(const p in d)t.update(d[p],i.ARRAY_BUFFER)}function c(u){const d=[],p=u.index,g=u.attributes.position;let _=0;if(p!==null){const b=p.array;_=p.version;for(let T=0,x=b.length;T<x;T+=3){const R=b[T+0],D=b[T+1],I=b[T+2];d.push(R,D,D,I,I,R)}}else if(g!==void 0){const b=g.array;_=g.version;for(let T=0,x=b.length/3-1;T<x;T+=3){const R=T+0,D=T+1,I=T+2;d.push(R,D,D,I,I,R)}}else return;const m=new(qc(d)?$c:Kc)(d,1);m.version=_;const f=r.get(u);f&&t.remove(f),r.set(u,m)}function h(u){const d=r.get(u);if(d){const p=u.index;p!==null&&d.version<p.version&&c(u)}else c(u);return r.get(u)}return{get:o,update:l,getWireframeAttribute:h}}function vm(i,t,e){let n;function s(d){n=d}let r,a;function o(d){r=d.type,a=d.bytesPerElement}function l(d,p){i.drawElements(n,p,r,d*a),e.update(p,n,1)}function c(d,p,g){g!==0&&(i.drawElementsInstanced(n,p,r,d*a,g),e.update(p,n,g))}function h(d,p,g){if(g===0)return;t.get("WEBGL_multi_draw").multiDrawElementsWEBGL(n,p,0,r,d,0,g);let m=0;for(let f=0;f<g;f++)m+=p[f];e.update(m,n,1)}function u(d,p,g,_){if(g===0)return;const m=t.get("WEBGL_multi_draw");if(m===null)for(let f=0;f<d.length;f++)c(d[f]/a,p[f],_[f]);else{m.multiDrawElementsInstancedWEBGL(n,p,0,r,d,0,_,0,g);let f=0;for(let b=0;b<g;b++)f+=p[b]*_[b];e.update(f,n,1)}}this.setMode=s,this.setIndex=o,this.render=l,this.renderInstances=c,this.renderMultiDraw=h,this.renderMultiDrawInstances=u}function xm(i){const t={geometries:0,textures:0},e={frame:0,calls:0,triangles:0,points:0,lines:0};function n(r,a,o){switch(e.calls++,a){case i.TRIANGLES:e.triangles+=o*(r/3);break;case i.LINES:e.lines+=o*(r/2);break;case i.LINE_STRIP:e.lines+=o*(r-1);break;case i.LINE_LOOP:e.lines+=o*r;break;case i.POINTS:e.points+=o*r;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",a);break}}function s(){e.calls=0,e.triangles=0,e.points=0,e.lines=0}return{memory:t,render:e,programs:null,autoReset:!0,reset:s,update:n}}function Mm(i,t,e){const n=new WeakMap,s=new ue;function r(a,o,l){const c=a.morphTargetInfluences,h=o.morphAttributes.position||o.morphAttributes.normal||o.morphAttributes.color,u=h!==void 0?h.length:0;let d=n.get(o);if(d===void 0||d.count!==u){let y=function(){F.dispose(),n.delete(o),o.removeEventListener("dispose",y)};var p=y;d!==void 0&&d.texture.dispose();const g=o.morphAttributes.position!==void 0,_=o.morphAttributes.normal!==void 0,m=o.morphAttributes.color!==void 0,f=o.morphAttributes.position||[],b=o.morphAttributes.normal||[],T=o.morphAttributes.color||[];let x=0;g===!0&&(x=1),_===!0&&(x=2),m===!0&&(x=3);let R=o.attributes.position.count*x,D=1;R>t.maxTextureSize&&(D=Math.ceil(R/t.maxTextureSize),R=t.maxTextureSize);const I=new Float32Array(R*D*4*u),F=new Yc(I,R,D,u);F.type=Cn,F.needsUpdate=!0;const w=x*4;for(let L=0;L<u;L++){const z=f[L],H=b[L],q=T[L],X=R*D*4*L;for(let Z=0;Z<z.count;Z++){const et=Z*w;g===!0&&(s.fromBufferAttribute(z,Z),I[X+et+0]=s.x,I[X+et+1]=s.y,I[X+et+2]=s.z,I[X+et+3]=0),_===!0&&(s.fromBufferAttribute(H,Z),I[X+et+4]=s.x,I[X+et+5]=s.y,I[X+et+6]=s.z,I[X+et+7]=0),m===!0&&(s.fromBufferAttribute(q,Z),I[X+et+8]=s.x,I[X+et+9]=s.y,I[X+et+10]=s.z,I[X+et+11]=q.itemSize===4?s.w:1)}}d={count:u,texture:F,size:new Dt(R,D)},n.set(o,d),o.addEventListener("dispose",y)}if(a.isInstancedMesh===!0&&a.morphTexture!==null)l.getUniforms().setValue(i,"morphTexture",a.morphTexture,e);else{let g=0;for(let m=0;m<c.length;m++)g+=c[m];const _=o.morphTargetsRelative?1:1-g;l.getUniforms().setValue(i,"morphTargetBaseInfluence",_),l.getUniforms().setValue(i,"morphTargetInfluences",c)}l.getUniforms().setValue(i,"morphTargetsTexture",d.texture,e),l.getUniforms().setValue(i,"morphTargetsTextureSize",d.size)}return{update:r}}function ym(i,t,e,n){let s=new WeakMap;function r(l){const c=n.render.frame,h=l.geometry,u=t.get(l,h);if(s.get(u)!==c&&(t.update(u),s.set(u,c)),l.isInstancedMesh&&(l.hasEventListener("dispose",o)===!1&&l.addEventListener("dispose",o),s.get(l)!==c&&(e.update(l.instanceMatrix,i.ARRAY_BUFFER),l.instanceColor!==null&&e.update(l.instanceColor,i.ARRAY_BUFFER),s.set(l,c))),l.isSkinnedMesh){const d=l.skeleton;s.get(d)!==c&&(d.update(),s.set(d,c))}return u}function a(){s=new WeakMap}function o(l){const c=l.target;c.removeEventListener("dispose",o),e.remove(c.instanceMatrix),c.instanceColor!==null&&e.remove(c.instanceColor)}return{update:r,dispose:a}}const lh=new He,sc=new ih(1,1),ch=new Yc,hh=new Vu,uh=new Qc,rc=[],ac=[],oc=new Float32Array(16),lc=new Float32Array(9),cc=new Float32Array(4);function gs(i,t,e){const n=i[0];if(n<=0||n>0)return i;const s=t*e;let r=rc[s];if(r===void 0&&(r=new Float32Array(s),rc[s]=r),t!==0){n.toArray(r,0);for(let a=1,o=0;a!==t;++a)o+=e,i[a].toArray(r,o)}return r}function Pe(i,t){if(i.length!==t.length)return!1;for(let e=0,n=i.length;e<n;e++)if(i[e]!==t[e])return!1;return!0}function De(i,t){for(let e=0,n=t.length;e<n;e++)i[e]=t[e]}function jr(i,t){let e=ac[t];e===void 0&&(e=new Int32Array(t),ac[t]=e);for(let n=0;n!==t;++n)e[n]=i.allocateTextureUnit();return e}function Sm(i,t){const e=this.cache;e[0]!==t&&(i.uniform1f(this.addr,t),e[0]=t)}function wm(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(i.uniform2f(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Pe(e,t))return;i.uniform2fv(this.addr,t),De(e,t)}}function Tm(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(i.uniform3f(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else if(t.r!==void 0)(e[0]!==t.r||e[1]!==t.g||e[2]!==t.b)&&(i.uniform3f(this.addr,t.r,t.g,t.b),e[0]=t.r,e[1]=t.g,e[2]=t.b);else{if(Pe(e,t))return;i.uniform3fv(this.addr,t),De(e,t)}}function Em(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(i.uniform4f(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Pe(e,t))return;i.uniform4fv(this.addr,t),De(e,t)}}function bm(i,t){const e=this.cache,n=t.elements;if(n===void 0){if(Pe(e,t))return;i.uniformMatrix2fv(this.addr,!1,t),De(e,t)}else{if(Pe(e,n))return;cc.set(n),i.uniformMatrix2fv(this.addr,!1,cc),De(e,n)}}function Am(i,t){const e=this.cache,n=t.elements;if(n===void 0){if(Pe(e,t))return;i.uniformMatrix3fv(this.addr,!1,t),De(e,t)}else{if(Pe(e,n))return;lc.set(n),i.uniformMatrix3fv(this.addr,!1,lc),De(e,n)}}function Rm(i,t){const e=this.cache,n=t.elements;if(n===void 0){if(Pe(e,t))return;i.uniformMatrix4fv(this.addr,!1,t),De(e,t)}else{if(Pe(e,n))return;oc.set(n),i.uniformMatrix4fv(this.addr,!1,oc),De(e,n)}}function Cm(i,t){const e=this.cache;e[0]!==t&&(i.uniform1i(this.addr,t),e[0]=t)}function Pm(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(i.uniform2i(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Pe(e,t))return;i.uniform2iv(this.addr,t),De(e,t)}}function Dm(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(i.uniform3i(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(Pe(e,t))return;i.uniform3iv(this.addr,t),De(e,t)}}function Lm(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(i.uniform4i(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Pe(e,t))return;i.uniform4iv(this.addr,t),De(e,t)}}function Im(i,t){const e=this.cache;e[0]!==t&&(i.uniform1ui(this.addr,t),e[0]=t)}function Um(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(i.uniform2ui(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(Pe(e,t))return;i.uniform2uiv(this.addr,t),De(e,t)}}function Nm(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(i.uniform3ui(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(Pe(e,t))return;i.uniform3uiv(this.addr,t),De(e,t)}}function Fm(i,t){const e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(i.uniform4ui(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(Pe(e,t))return;i.uniform4uiv(this.addr,t),De(e,t)}}function Om(i,t,e){const n=this.cache,s=e.allocateTextureUnit();n[0]!==s&&(i.uniform1i(this.addr,s),n[0]=s);let r;this.type===i.SAMPLER_2D_SHADOW?(sc.compareFunction=Xc,r=sc):r=lh,e.setTexture2D(t||r,s)}function Bm(i,t,e){const n=this.cache,s=e.allocateTextureUnit();n[0]!==s&&(i.uniform1i(this.addr,s),n[0]=s),e.setTexture3D(t||hh,s)}function zm(i,t,e){const n=this.cache,s=e.allocateTextureUnit();n[0]!==s&&(i.uniform1i(this.addr,s),n[0]=s),e.setTextureCube(t||uh,s)}function km(i,t,e){const n=this.cache,s=e.allocateTextureUnit();n[0]!==s&&(i.uniform1i(this.addr,s),n[0]=s),e.setTexture2DArray(t||ch,s)}function Hm(i){switch(i){case 5126:return Sm;case 35664:return wm;case 35665:return Tm;case 35666:return Em;case 35674:return bm;case 35675:return Am;case 35676:return Rm;case 5124:case 35670:return Cm;case 35667:case 35671:return Pm;case 35668:case 35672:return Dm;case 35669:case 35673:return Lm;case 5125:return Im;case 36294:return Um;case 36295:return Nm;case 36296:return Fm;case 35678:case 36198:case 36298:case 36306:case 35682:return Om;case 35679:case 36299:case 36307:return Bm;case 35680:case 36300:case 36308:case 36293:return zm;case 36289:case 36303:case 36311:case 36292:return km}}function Gm(i,t){i.uniform1fv(this.addr,t)}function Vm(i,t){const e=gs(t,this.size,2);i.uniform2fv(this.addr,e)}function Wm(i,t){const e=gs(t,this.size,3);i.uniform3fv(this.addr,e)}function Xm(i,t){const e=gs(t,this.size,4);i.uniform4fv(this.addr,e)}function qm(i,t){const e=gs(t,this.size,4);i.uniformMatrix2fv(this.addr,!1,e)}function Ym(i,t){const e=gs(t,this.size,9);i.uniformMatrix3fv(this.addr,!1,e)}function Zm(i,t){const e=gs(t,this.size,16);i.uniformMatrix4fv(this.addr,!1,e)}function Km(i,t){i.uniform1iv(this.addr,t)}function $m(i,t){i.uniform2iv(this.addr,t)}function jm(i,t){i.uniform3iv(this.addr,t)}function Jm(i,t){i.uniform4iv(this.addr,t)}function Qm(i,t){i.uniform1uiv(this.addr,t)}function t0(i,t){i.uniform2uiv(this.addr,t)}function e0(i,t){i.uniform3uiv(this.addr,t)}function n0(i,t){i.uniform4uiv(this.addr,t)}function i0(i,t,e){const n=this.cache,s=t.length,r=jr(e,s);Pe(n,r)||(i.uniform1iv(this.addr,r),De(n,r));for(let a=0;a!==s;++a)e.setTexture2D(t[a]||lh,r[a])}function s0(i,t,e){const n=this.cache,s=t.length,r=jr(e,s);Pe(n,r)||(i.uniform1iv(this.addr,r),De(n,r));for(let a=0;a!==s;++a)e.setTexture3D(t[a]||hh,r[a])}function r0(i,t,e){const n=this.cache,s=t.length,r=jr(e,s);Pe(n,r)||(i.uniform1iv(this.addr,r),De(n,r));for(let a=0;a!==s;++a)e.setTextureCube(t[a]||uh,r[a])}function a0(i,t,e){const n=this.cache,s=t.length,r=jr(e,s);Pe(n,r)||(i.uniform1iv(this.addr,r),De(n,r));for(let a=0;a!==s;++a)e.setTexture2DArray(t[a]||ch,r[a])}function o0(i){switch(i){case 5126:return Gm;case 35664:return Vm;case 35665:return Wm;case 35666:return Xm;case 35674:return qm;case 35675:return Ym;case 35676:return Zm;case 5124:case 35670:return Km;case 35667:case 35671:return $m;case 35668:case 35672:return jm;case 35669:case 35673:return Jm;case 5125:return Qm;case 36294:return t0;case 36295:return e0;case 36296:return n0;case 35678:case 36198:case 36298:case 36306:case 35682:return i0;case 35679:case 36299:case 36307:return s0;case 35680:case 36300:case 36308:case 36293:return r0;case 36289:case 36303:case 36311:case 36292:return a0}}class l0{constructor(t,e,n){this.id=t,this.addr=n,this.cache=[],this.type=e.type,this.setValue=Hm(e.type)}}class c0{constructor(t,e,n){this.id=t,this.addr=n,this.cache=[],this.type=e.type,this.size=e.size,this.setValue=o0(e.type)}}class h0{constructor(t){this.id=t,this.seq=[],this.map={}}setValue(t,e,n){const s=this.seq;for(let r=0,a=s.length;r!==a;++r){const o=s[r];o.setValue(t,e[o.id],n)}}}const Ia=/(\w+)(\])?(\[|\.)?/g;function hc(i,t){i.seq.push(t),i.map[t.id]=t}function u0(i,t,e){const n=i.name,s=n.length;for(Ia.lastIndex=0;;){const r=Ia.exec(n),a=Ia.lastIndex;let o=r[1];const l=r[2]==="]",c=r[3];if(l&&(o=o|0),c===void 0||c==="["&&a+2===s){hc(e,c===void 0?new l0(o,i,t):new c0(o,i,t));break}else{let u=e.map[o];u===void 0&&(u=new h0(o),hc(e,u)),e=u}}}class Fr{constructor(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let s=0;s<n;++s){const r=t.getActiveUniform(e,s),a=t.getUniformLocation(e,r.name);u0(r,a,this)}}setValue(t,e,n,s){const r=this.map[e];r!==void 0&&r.setValue(t,n,s)}setOptional(t,e,n){const s=e[n];s!==void 0&&this.setValue(t,n,s)}static upload(t,e,n,s){for(let r=0,a=e.length;r!==a;++r){const o=e[r],l=n[o.id];l.needsUpdate!==!1&&o.setValue(t,l.value,s)}}static seqWithValue(t,e){const n=[];for(let s=0,r=t.length;s!==r;++s){const a=t[s];a.id in e&&n.push(a)}return n}}function uc(i,t,e){const n=i.createShader(t);return i.shaderSource(n,e),i.compileShader(n),n}const d0=37297;let f0=0;function p0(i,t){const e=i.split(`
`),n=[],s=Math.max(t-6,0),r=Math.min(t+6,e.length);for(let a=s;a<r;a++){const o=a+1;n.push(`${o===t?">":" "} ${o}: ${e[a]}`)}return n.join(`
`)}const dc=new Yt;function m0(i){ne._getMatrix(dc,ne.workingColorSpace,i);const t=`mat3( ${dc.elements.map(e=>e.toFixed(4))} )`;switch(ne.getTransfer(i)){case kr:return[t,"LinearTransferOETF"];case ce:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",i),[t,"LinearTransferOETF"]}}function fc(i,t,e){const n=i.getShaderParameter(t,i.COMPILE_STATUS),r=(i.getShaderInfoLog(t)||"").trim();if(n&&r==="")return"";const a=/ERROR: 0:(\d+)/.exec(r);if(a){const o=parseInt(a[1]);return e.toUpperCase()+`

`+r+`

`+p0(i.getShaderSource(t),o)}else return r}function g0(i,t){const e=m0(t);return[`vec4 ${i}( vec4 value ) {`,`	return ${e[1]}( vec4( value.rgb * ${e[0]}, value.a ) );`,"}"].join(`
`)}function _0(i,t){let e;switch(t){case nu:e="Linear";break;case iu:e="Reinhard";break;case su:e="Cineon";break;case ru:e="ACESFilmic";break;case ou:e="AgX";break;case lu:e="Neutral";break;case au:e="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),e="Linear"}return"vec3 "+i+"( vec3 color ) { return "+e+"ToneMapping( color ); }"}const Pr=new A;function v0(){ne.getLuminanceCoefficients(Pr);const i=Pr.x.toFixed(4),t=Pr.y.toFixed(4),e=Pr.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",`	const vec3 weights = vec3( ${i}, ${t}, ${e} );`,"	return dot( weights, rgb );","}"].join(`
`)}function x0(i){return[i.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",i.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(Ns).join(`
`)}function M0(i){const t=[];for(const e in i){const n=i[e];n!==!1&&t.push("#define "+e+" "+n)}return t.join(`
`)}function y0(i,t){const e={},n=i.getProgramParameter(t,i.ACTIVE_ATTRIBUTES);for(let s=0;s<n;s++){const r=i.getActiveAttrib(t,s),a=r.name;let o=1;r.type===i.FLOAT_MAT2&&(o=2),r.type===i.FLOAT_MAT3&&(o=3),r.type===i.FLOAT_MAT4&&(o=4),e[a]={type:r.type,location:i.getAttribLocation(t,a),locationSize:o}}return e}function Ns(i){return i!==""}function pc(i,t){const e=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return i.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,e).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function mc(i,t){return i.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}const S0=/^[ \t]*#include +<([\w\d./]+)>/gm;function Ro(i){return i.replace(S0,T0)}const w0=new Map;function T0(i,t){let e=Zt[t];if(e===void 0){const n=w0.get(t);if(n!==void 0)e=Zt[n],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,n);else throw new Error("Can not resolve #include <"+t+">")}return Ro(e)}const E0=/#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 gc(i){return i.replace(E0,b0)}function b0(i,t,e,n){let s="";for(let r=parseInt(t);r<parseInt(e);r++)s+=n.replace(/\[\s*i\s*\]/g,"[ "+r+" ]").replace(/UNROLLED_LOOP_INDEX/g,r);return s}function _c(i){let t=`precision ${i.precision} float;
	precision ${i.precision} int;
	precision ${i.precision} sampler2D;
	precision ${i.precision} samplerCube;
	precision ${i.precision} sampler3D;
	precision ${i.precision} sampler2DArray;
	precision ${i.precision} sampler2DShadow;
	precision ${i.precision} samplerCubeShadow;
	precision ${i.precision} sampler2DArrayShadow;
	precision ${i.precision} isampler2D;
	precision ${i.precision} isampler3D;
	precision ${i.precision} isamplerCube;
	precision ${i.precision} isampler2DArray;
	precision ${i.precision} usampler2D;
	precision ${i.precision} usampler3D;
	precision ${i.precision} usamplerCube;
	precision ${i.precision} usampler2DArray;
	`;return i.precision==="highp"?t+=`
#define HIGH_PRECISION`:i.precision==="mediump"?t+=`
#define MEDIUM_PRECISION`:i.precision==="lowp"&&(t+=`
#define LOW_PRECISION`),t}function A0(i){let t="SHADOWMAP_TYPE_BASIC";return i.shadowMapType===Ic?t="SHADOWMAP_TYPE_PCF":i.shadowMapType===Uc?t="SHADOWMAP_TYPE_PCF_SOFT":i.shadowMapType===kn&&(t="SHADOWMAP_TYPE_VSM"),t}function R0(i){let t="ENVMAP_TYPE_CUBE";if(i.envMap)switch(i.envMapMode){case ss:case rs:t="ENVMAP_TYPE_CUBE";break;case Kr:t="ENVMAP_TYPE_CUBE_UV";break}return t}function C0(i){let t="ENVMAP_MODE_REFLECTION";if(i.envMap)switch(i.envMapMode){case rs:t="ENVMAP_MODE_REFRACTION";break}return t}function P0(i){let t="ENVMAP_BLENDING_NONE";if(i.envMap)switch(i.combine){case Nc:t="ENVMAP_BLENDING_MULTIPLY";break;case tu:t="ENVMAP_BLENDING_MIX";break;case eu:t="ENVMAP_BLENDING_ADD";break}return t}function D0(i){const t=i.envMapCubeUVHeight;if(t===null)return null;const e=Math.log2(t)-2,n=1/t;return{texelWidth:1/(3*Math.max(Math.pow(2,e),112)),texelHeight:n,maxMip:e}}function L0(i,t,e,n){const s=i.getContext(),r=e.defines;let a=e.vertexShader,o=e.fragmentShader;const l=A0(e),c=R0(e),h=C0(e),u=P0(e),d=D0(e),p=x0(e),g=M0(r),_=s.createProgram();let m,f,b=e.glslVersion?"#version "+e.glslVersion+`
`:"";e.isRawShaderMaterial?(m=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g].filter(Ns).join(`
`),m.length>0&&(m+=`
`),f=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g].filter(Ns).join(`
`),f.length>0&&(f+=`
`)):(m=[_c(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g,e.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",e.batching?"#define USE_BATCHING":"",e.batchingColor?"#define USE_BATCHING_COLOR":"",e.instancing?"#define USE_INSTANCING":"",e.instancingColor?"#define USE_INSTANCING_COLOR":"",e.instancingMorph?"#define USE_INSTANCING_MORPH":"",e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.map?"#define USE_MAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+h:"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.displacementMap?"#define USE_DISPLACEMENTMAP":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.mapUv?"#define MAP_UV "+e.mapUv:"",e.alphaMapUv?"#define ALPHAMAP_UV "+e.alphaMapUv:"",e.lightMapUv?"#define LIGHTMAP_UV "+e.lightMapUv:"",e.aoMapUv?"#define AOMAP_UV "+e.aoMapUv:"",e.emissiveMapUv?"#define EMISSIVEMAP_UV "+e.emissiveMapUv:"",e.bumpMapUv?"#define BUMPMAP_UV "+e.bumpMapUv:"",e.normalMapUv?"#define NORMALMAP_UV "+e.normalMapUv:"",e.displacementMapUv?"#define DISPLACEMENTMAP_UV "+e.displacementMapUv:"",e.metalnessMapUv?"#define METALNESSMAP_UV "+e.metalnessMapUv:"",e.roughnessMapUv?"#define ROUGHNESSMAP_UV "+e.roughnessMapUv:"",e.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+e.anisotropyMapUv:"",e.clearcoatMapUv?"#define CLEARCOATMAP_UV "+e.clearcoatMapUv:"",e.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+e.clearcoatNormalMapUv:"",e.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+e.clearcoatRoughnessMapUv:"",e.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+e.iridescenceMapUv:"",e.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+e.iridescenceThicknessMapUv:"",e.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+e.sheenColorMapUv:"",e.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+e.sheenRoughnessMapUv:"",e.specularMapUv?"#define SPECULARMAP_UV "+e.specularMapUv:"",e.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+e.specularColorMapUv:"",e.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+e.specularIntensityMapUv:"",e.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+e.transmissionMapUv:"",e.thicknessMapUv?"#define THICKNESSMAP_UV "+e.thicknessMapUv:"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.flatShading?"#define FLAT_SHADED":"",e.skinning?"#define USE_SKINNING":"",e.morphTargets?"#define USE_MORPHTARGETS":"",e.morphNormals&&e.flatShading===!1?"#define USE_MORPHNORMALS":"",e.morphColors?"#define USE_MORPHCOLORS":"",e.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+e.morphTextureStride:"",e.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+e.morphTargetsCount:"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.sizeAttenuation?"#define USE_SIZEATTENUATION":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",e.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(Ns).join(`
`),f=[_c(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g,e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",e.map?"#define USE_MAP":"",e.matcap?"#define USE_MATCAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+c:"",e.envMap?"#define "+h:"",e.envMap?"#define "+u:"",d?"#define CUBEUV_TEXEL_WIDTH "+d.texelWidth:"",d?"#define CUBEUV_TEXEL_HEIGHT "+d.texelHeight:"",d?"#define CUBEUV_MAX_MIP "+d.maxMip+".0":"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoat?"#define USE_CLEARCOAT":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.dispersion?"#define USE_DISPERSION":"",e.iridescence?"#define USE_IRIDESCENCE":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaTest?"#define USE_ALPHATEST":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.sheen?"#define USE_SHEEN":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors||e.instancingColor||e.batchingColor?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.gradientMap?"#define USE_GRADIENTMAP":"",e.flatShading?"#define FLAT_SHADED":"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",e.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",e.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",e.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",e.toneMapping!==Xn?"#define TONE_MAPPING":"",e.toneMapping!==Xn?Zt.tonemapping_pars_fragment:"",e.toneMapping!==Xn?_0("toneMapping",e.toneMapping):"",e.dithering?"#define DITHERING":"",e.opaque?"#define OPAQUE":"",Zt.colorspace_pars_fragment,g0("linearToOutputTexel",e.outputColorSpace),v0(),e.useDepthPacking?"#define DEPTH_PACKING "+e.depthPacking:"",`
`].filter(Ns).join(`
`)),a=Ro(a),a=pc(a,e),a=mc(a,e),o=Ro(o),o=pc(o,e),o=mc(o,e),a=gc(a),o=gc(o),e.isRawShaderMaterial!==!0&&(b=`#version 300 es
`,m=[p,"#define attribute in","#define varying out","#define texture2D texture"].join(`
`)+`
`+m,f=["#define varying in",e.glslVersion===gl?"":"layout(location = 0) out highp vec4 pc_fragColor;",e.glslVersion===gl?"":"#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(`
`)+`
`+f);const T=b+m+a,x=b+f+o,R=uc(s,s.VERTEX_SHADER,T),D=uc(s,s.FRAGMENT_SHADER,x);s.attachShader(_,R),s.attachShader(_,D),e.index0AttributeName!==void 0?s.bindAttribLocation(_,0,e.index0AttributeName):e.morphTargets===!0&&s.bindAttribLocation(_,0,"position"),s.linkProgram(_);function I(L){if(i.debug.checkShaderErrors){const z=s.getProgramInfoLog(_)||"",H=s.getShaderInfoLog(R)||"",q=s.getShaderInfoLog(D)||"",X=z.trim(),Z=H.trim(),et=q.trim();let V=!0,gt=!0;if(s.getProgramParameter(_,s.LINK_STATUS)===!1)if(V=!1,typeof i.debug.onShaderError=="function")i.debug.onShaderError(s,_,R,D);else{const Mt=fc(s,R,"vertex"),Lt=fc(s,D,"fragment");console.error("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(_,s.VALIDATE_STATUS)+`

Material Name: `+L.name+`
Material Type: `+L.type+`

Program Info Log: `+X+`
`+Mt+`
`+Lt)}else X!==""?console.warn("THREE.WebGLProgram: Program Info Log:",X):(Z===""||et==="")&&(gt=!1);gt&&(L.diagnostics={runnable:V,programLog:X,vertexShader:{log:Z,prefix:m},fragmentShader:{log:et,prefix:f}})}s.deleteShader(R),s.deleteShader(D),F=new Fr(s,_),w=y0(s,_)}let F;this.getUniforms=function(){return F===void 0&&I(this),F};let w;this.getAttributes=function(){return w===void 0&&I(this),w};let y=e.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return y===!1&&(y=s.getProgramParameter(_,d0)),y},this.destroy=function(){n.releaseStatesOfProgram(this),s.deleteProgram(_),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=f0++,this.cacheKey=t,this.usedTimes=1,this.program=_,this.vertexShader=R,this.fragmentShader=D,this}let I0=0;class U0{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){const e=t.vertexShader,n=t.fragmentShader,s=this._getShaderStage(e),r=this._getShaderStage(n),a=this._getShaderCacheForMaterial(t);return a.has(s)===!1&&(a.add(s),s.usedTimes++),a.has(r)===!1&&(a.add(r),r.usedTimes++),this}remove(t){const e=this.materialCache.get(t);for(const n of e)n.usedTimes--,n.usedTimes===0&&this.shaderCache.delete(n.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){const e=this.materialCache;let n=e.get(t);return n===void 0&&(n=new Set,e.set(t,n)),n}_getShaderStage(t){const e=this.shaderCache;let n=e.get(t);return n===void 0&&(n=new N0(t),e.set(t,n)),n}}class N0{constructor(t){this.id=I0++,this.code=t,this.usedTimes=0}}function F0(i,t,e,n,s,r,a){const o=new Zo,l=new U0,c=new Set,h=[],u=s.logarithmicDepthBuffer,d=s.vertexTextures;let p=s.precision;const g={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",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 _(w){return c.add(w),w===0?"uv":`uv${w}`}function m(w,y,L,z,H){const q=z.fog,X=H.geometry,Z=w.isMeshStandardMaterial?z.environment:null,et=(w.isMeshStandardMaterial?e:t).get(w.envMap||Z),V=et&&et.mapping===Kr?et.image.height:null,gt=g[w.type];w.precision!==null&&(p=s.getMaxPrecision(w.precision),p!==w.precision&&console.warn("THREE.WebGLProgram.getParameters:",w.precision,"not supported, using",p,"instead."));const Mt=X.morphAttributes.position||X.morphAttributes.normal||X.morphAttributes.color,Lt=Mt!==void 0?Mt.length:0;let qt=0;X.morphAttributes.position!==void 0&&(qt=1),X.morphAttributes.normal!==void 0&&(qt=2),X.morphAttributes.color!==void 0&&(qt=3);let re,de,te,tt;if(gt){const ee=An[gt];re=ee.vertexShader,de=ee.fragmentShader}else re=w.vertexShader,de=w.fragmentShader,l.update(w),te=l.getVertexShaderID(w),tt=l.getFragmentShaderID(w);const rt=i.getRenderTarget(),wt=i.state.buffers.depth.getReversed(),zt=H.isInstancedMesh===!0,It=H.isBatchedMesh===!0,Kt=!!w.map,Re=!!w.matcap,C=!!et,le=!!w.aoMap,kt=!!w.lightMap,Ft=!!w.bumpMap,At=!!w.normalMap,pe=!!w.displacementMap,Et=!!w.emissiveMap,Vt=!!w.metalnessMap,be=!!w.roughnessMap,_e=w.anisotropy>0,E=w.clearcoat>0,v=w.dispersion>0,k=w.iridescence>0,j=w.sheen>0,st=w.transmission>0,$=_e&&!!w.anisotropyMap,Ut=E&&!!w.clearcoatMap,ut=E&&!!w.clearcoatNormalMap,Rt=E&&!!w.clearcoatRoughnessMap,Ct=k&&!!w.iridescenceMap,ct=k&&!!w.iridescenceThicknessMap,vt=j&&!!w.sheenColorMap,Nt=j&&!!w.sheenRoughnessMap,bt=!!w.specularMap,mt=!!w.specularColorMap,Wt=!!w.specularIntensityMap,N=st&&!!w.transmissionMap,lt=st&&!!w.thicknessMap,pt=!!w.gradientMap,yt=!!w.alphaMap,ot=w.alphaTest>0,nt=!!w.alphaHash,St=!!w.extensions;let Bt=Xn;w.toneMapped&&(rt===null||rt.isXRRenderTarget===!0)&&(Bt=i.toneMapping);const ie={shaderID:gt,shaderType:w.type,shaderName:w.name,vertexShader:re,fragmentShader:de,defines:w.defines,customVertexShaderID:te,customFragmentShaderID:tt,isRawShaderMaterial:w.isRawShaderMaterial===!0,glslVersion:w.glslVersion,precision:p,batching:It,batchingColor:It&&H._colorsTexture!==null,instancing:zt,instancingColor:zt&&H.instanceColor!==null,instancingMorph:zt&&H.morphTexture!==null,supportsVertexTextures:d,outputColorSpace:rt===null?i.outputColorSpace:rt.isXRRenderTarget===!0?rt.texture.colorSpace:as,alphaToCoverage:!!w.alphaToCoverage,map:Kt,matcap:Re,envMap:C,envMapMode:C&&et.mapping,envMapCubeUVHeight:V,aoMap:le,lightMap:kt,bumpMap:Ft,normalMap:At,displacementMap:d&&pe,emissiveMap:Et,normalMapObjectSpace:At&&w.normalMapType===du,normalMapTangentSpace:At&&w.normalMapType===Wc,metalnessMap:Vt,roughnessMap:be,anisotropy:_e,anisotropyMap:$,clearcoat:E,clearcoatMap:Ut,clearcoatNormalMap:ut,clearcoatRoughnessMap:Rt,dispersion:v,iridescence:k,iridescenceMap:Ct,iridescenceThicknessMap:ct,sheen:j,sheenColorMap:vt,sheenRoughnessMap:Nt,specularMap:bt,specularColorMap:mt,specularIntensityMap:Wt,transmission:st,transmissionMap:N,thicknessMap:lt,gradientMap:pt,opaque:w.transparent===!1&&w.blending===Ai&&w.alphaToCoverage===!1,alphaMap:yt,alphaTest:ot,alphaHash:nt,combine:w.combine,mapUv:Kt&&_(w.map.channel),aoMapUv:le&&_(w.aoMap.channel),lightMapUv:kt&&_(w.lightMap.channel),bumpMapUv:Ft&&_(w.bumpMap.channel),normalMapUv:At&&_(w.normalMap.channel),displacementMapUv:pe&&_(w.displacementMap.channel),emissiveMapUv:Et&&_(w.emissiveMap.channel),metalnessMapUv:Vt&&_(w.metalnessMap.channel),roughnessMapUv:be&&_(w.roughnessMap.channel),anisotropyMapUv:$&&_(w.anisotropyMap.channel),clearcoatMapUv:Ut&&_(w.clearcoatMap.channel),clearcoatNormalMapUv:ut&&_(w.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Rt&&_(w.clearcoatRoughnessMap.channel),iridescenceMapUv:Ct&&_(w.iridescenceMap.channel),iridescenceThicknessMapUv:ct&&_(w.iridescenceThicknessMap.channel),sheenColorMapUv:vt&&_(w.sheenColorMap.channel),sheenRoughnessMapUv:Nt&&_(w.sheenRoughnessMap.channel),specularMapUv:bt&&_(w.specularMap.channel),specularColorMapUv:mt&&_(w.specularColorMap.channel),specularIntensityMapUv:Wt&&_(w.specularIntensityMap.channel),transmissionMapUv:N&&_(w.transmissionMap.channel),thicknessMapUv:lt&&_(w.thicknessMap.channel),alphaMapUv:yt&&_(w.alphaMap.channel),vertexTangents:!!X.attributes.tangent&&(At||_e),vertexColors:w.vertexColors,vertexAlphas:w.vertexColors===!0&&!!X.attributes.color&&X.attributes.color.itemSize===4,pointsUvs:H.isPoints===!0&&!!X.attributes.uv&&(Kt||yt),fog:!!q,useFog:w.fog===!0,fogExp2:!!q&&q.isFogExp2,flatShading:w.flatShading===!0&&w.wireframe===!1,sizeAttenuation:w.sizeAttenuation===!0,logarithmicDepthBuffer:u,reversedDepthBuffer:wt,skinning:H.isSkinnedMesh===!0,morphTargets:X.morphAttributes.position!==void 0,morphNormals:X.morphAttributes.normal!==void 0,morphColors:X.morphAttributes.color!==void 0,morphTargetsCount:Lt,morphTextureStride:qt,numDirLights:y.directional.length,numPointLights:y.point.length,numSpotLights:y.spot.length,numSpotLightMaps:y.spotLightMap.length,numRectAreaLights:y.rectArea.length,numHemiLights:y.hemi.length,numDirLightShadows:y.directionalShadowMap.length,numPointLightShadows:y.pointShadowMap.length,numSpotLightShadows:y.spotShadowMap.length,numSpotLightShadowsWithMaps:y.numSpotLightShadowsWithMaps,numLightProbes:y.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:w.dithering,shadowMapEnabled:i.shadowMap.enabled&&L.length>0,shadowMapType:i.shadowMap.type,toneMapping:Bt,decodeVideoTexture:Kt&&w.map.isVideoTexture===!0&&ne.getTransfer(w.map.colorSpace)===ce,decodeVideoTextureEmissive:Et&&w.emissiveMap.isVideoTexture===!0&&ne.getTransfer(w.emissiveMap.colorSpace)===ce,premultipliedAlpha:w.premultipliedAlpha,doubleSided:w.side===fn,flipSided:w.side===Ke,useDepthPacking:w.depthPacking>=0,depthPacking:w.depthPacking||0,index0AttributeName:w.index0AttributeName,extensionClipCullDistance:St&&w.extensions.clipCullDistance===!0&&n.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(St&&w.extensions.multiDraw===!0||It)&&n.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:n.has("KHR_parallel_shader_compile"),customProgramCacheKey:w.customProgramCacheKey()};return ie.vertexUv1s=c.has(1),ie.vertexUv2s=c.has(2),ie.vertexUv3s=c.has(3),c.clear(),ie}function f(w){const y=[];if(w.shaderID?y.push(w.shaderID):(y.push(w.customVertexShaderID),y.push(w.customFragmentShaderID)),w.defines!==void 0)for(const L in w.defines)y.push(L),y.push(w.defines[L]);return w.isRawShaderMaterial===!1&&(b(y,w),T(y,w),y.push(i.outputColorSpace)),y.push(w.customProgramCacheKey),y.join()}function b(w,y){w.push(y.precision),w.push(y.outputColorSpace),w.push(y.envMapMode),w.push(y.envMapCubeUVHeight),w.push(y.mapUv),w.push(y.alphaMapUv),w.push(y.lightMapUv),w.push(y.aoMapUv),w.push(y.bumpMapUv),w.push(y.normalMapUv),w.push(y.displacementMapUv),w.push(y.emissiveMapUv),w.push(y.metalnessMapUv),w.push(y.roughnessMapUv),w.push(y.anisotropyMapUv),w.push(y.clearcoatMapUv),w.push(y.clearcoatNormalMapUv),w.push(y.clearcoatRoughnessMapUv),w.push(y.iridescenceMapUv),w.push(y.iridescenceThicknessMapUv),w.push(y.sheenColorMapUv),w.push(y.sheenRoughnessMapUv),w.push(y.specularMapUv),w.push(y.specularColorMapUv),w.push(y.specularIntensityMapUv),w.push(y.transmissionMapUv),w.push(y.thicknessMapUv),w.push(y.combine),w.push(y.fogExp2),w.push(y.sizeAttenuation),w.push(y.morphTargetsCount),w.push(y.morphAttributeCount),w.push(y.numDirLights),w.push(y.numPointLights),w.push(y.numSpotLights),w.push(y.numSpotLightMaps),w.push(y.numHemiLights),w.push(y.numRectAreaLights),w.push(y.numDirLightShadows),w.push(y.numPointLightShadows),w.push(y.numSpotLightShadows),w.push(y.numSpotLightShadowsWithMaps),w.push(y.numLightProbes),w.push(y.shadowMapType),w.push(y.toneMapping),w.push(y.numClippingPlanes),w.push(y.numClipIntersection),w.push(y.depthPacking)}function T(w,y){o.disableAll(),y.supportsVertexTextures&&o.enable(0),y.instancing&&o.enable(1),y.instancingColor&&o.enable(2),y.instancingMorph&&o.enable(3),y.matcap&&o.enable(4),y.envMap&&o.enable(5),y.normalMapObjectSpace&&o.enable(6),y.normalMapTangentSpace&&o.enable(7),y.clearcoat&&o.enable(8),y.iridescence&&o.enable(9),y.alphaTest&&o.enable(10),y.vertexColors&&o.enable(11),y.vertexAlphas&&o.enable(12),y.vertexUv1s&&o.enable(13),y.vertexUv2s&&o.enable(14),y.vertexUv3s&&o.enable(15),y.vertexTangents&&o.enable(16),y.anisotropy&&o.enable(17),y.alphaHash&&o.enable(18),y.batching&&o.enable(19),y.dispersion&&o.enable(20),y.batchingColor&&o.enable(21),y.gradientMap&&o.enable(22),w.push(o.mask),o.disableAll(),y.fog&&o.enable(0),y.useFog&&o.enable(1),y.flatShading&&o.enable(2),y.logarithmicDepthBuffer&&o.enable(3),y.reversedDepthBuffer&&o.enable(4),y.skinning&&o.enable(5),y.morphTargets&&o.enable(6),y.morphNormals&&o.enable(7),y.morphColors&&o.enable(8),y.premultipliedAlpha&&o.enable(9),y.shadowMapEnabled&&o.enable(10),y.doubleSided&&o.enable(11),y.flipSided&&o.enable(12),y.useDepthPacking&&o.enable(13),y.dithering&&o.enable(14),y.transmission&&o.enable(15),y.sheen&&o.enable(16),y.opaque&&o.enable(17),y.pointsUvs&&o.enable(18),y.decodeVideoTexture&&o.enable(19),y.decodeVideoTextureEmissive&&o.enable(20),y.alphaToCoverage&&o.enable(21),w.push(o.mask)}function x(w){const y=g[w.type];let L;if(y){const z=An[y];L=Vr.clone(z.uniforms)}else L=w.uniforms;return L}function R(w,y){let L;for(let z=0,H=h.length;z<H;z++){const q=h[z];if(q.cacheKey===y){L=q,++L.usedTimes;break}}return L===void 0&&(L=new L0(i,y,w,r),h.push(L)),L}function D(w){if(--w.usedTimes===0){const y=h.indexOf(w);h[y]=h[h.length-1],h.pop(),w.destroy()}}function I(w){l.remove(w)}function F(){l.dispose()}return{getParameters:m,getProgramCacheKey:f,getUniforms:x,acquireProgram:R,releaseProgram:D,releaseShaderCache:I,programs:h,dispose:F}}function O0(){let i=new WeakMap;function t(a){return i.has(a)}function e(a){let o=i.get(a);return o===void 0&&(o={},i.set(a,o)),o}function n(a){i.delete(a)}function s(a,o,l){i.get(a)[o]=l}function r(){i=new WeakMap}return{has:t,get:e,remove:n,update:s,dispose:r}}function B0(i,t){return i.groupOrder!==t.groupOrder?i.groupOrder-t.groupOrder:i.renderOrder!==t.renderOrder?i.renderOrder-t.renderOrder:i.material.id!==t.material.id?i.material.id-t.material.id:i.z!==t.z?i.z-t.z:i.id-t.id}function vc(i,t){return i.groupOrder!==t.groupOrder?i.groupOrder-t.groupOrder:i.renderOrder!==t.renderOrder?i.renderOrder-t.renderOrder:i.z!==t.z?t.z-i.z:i.id-t.id}function xc(){const i=[];let t=0;const e=[],n=[],s=[];function r(){t=0,e.length=0,n.length=0,s.length=0}function a(u,d,p,g,_,m){let f=i[t];return f===void 0?(f={id:u.id,object:u,geometry:d,material:p,groupOrder:g,renderOrder:u.renderOrder,z:_,group:m},i[t]=f):(f.id=u.id,f.object=u,f.geometry=d,f.material=p,f.groupOrder=g,f.renderOrder=u.renderOrder,f.z=_,f.group=m),t++,f}function o(u,d,p,g,_,m){const f=a(u,d,p,g,_,m);p.transmission>0?n.push(f):p.transparent===!0?s.push(f):e.push(f)}function l(u,d,p,g,_,m){const f=a(u,d,p,g,_,m);p.transmission>0?n.unshift(f):p.transparent===!0?s.unshift(f):e.unshift(f)}function c(u,d){e.length>1&&e.sort(u||B0),n.length>1&&n.sort(d||vc),s.length>1&&s.sort(d||vc)}function h(){for(let u=t,d=i.length;u<d;u++){const p=i[u];if(p.id===null)break;p.id=null,p.object=null,p.geometry=null,p.material=null,p.group=null}}return{opaque:e,transmissive:n,transparent:s,init:r,push:o,unshift:l,finish:h,sort:c}}function z0(){let i=new WeakMap;function t(n,s){const r=i.get(n);let a;return r===void 0?(a=new xc,i.set(n,[a])):s>=r.length?(a=new xc,r.push(a)):a=r[s],a}function e(){i=new WeakMap}return{get:t,dispose:e}}function k0(){const i={};return{get:function(t){if(i[t.id]!==void 0)return i[t.id];let e;switch(t.type){case"DirectionalLight":e={direction:new A,color:new ft};break;case"SpotLight":e={position:new A,direction:new A,color:new ft,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":e={position:new A,color:new ft,distance:0,decay:0};break;case"HemisphereLight":e={direction:new A,skyColor:new ft,groundColor:new ft};break;case"RectAreaLight":e={color:new ft,position:new A,halfWidth:new A,halfHeight:new A};break}return i[t.id]=e,e}}}function H0(){const i={};return{get:function(t){if(i[t.id]!==void 0)return i[t.id];let e;switch(t.type){case"DirectionalLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Dt};break;case"SpotLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Dt};break;case"PointLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Dt,shadowCameraNear:1,shadowCameraFar:1e3};break}return i[t.id]=e,e}}}let G0=0;function V0(i,t){return(t.castShadow?2:0)-(i.castShadow?2:0)+(t.map?1:0)-(i.map?1:0)}function W0(i){const t=new k0,e=H0(),n={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++)n.probe.push(new A);const s=new A,r=new se,a=new se;function o(c){let h=0,u=0,d=0;for(let w=0;w<9;w++)n.probe[w].set(0,0,0);let p=0,g=0,_=0,m=0,f=0,b=0,T=0,x=0,R=0,D=0,I=0;c.sort(V0);for(let w=0,y=c.length;w<y;w++){const L=c[w],z=L.color,H=L.intensity,q=L.distance,X=L.shadow&&L.shadow.map?L.shadow.map.texture:null;if(L.isAmbientLight)h+=z.r*H,u+=z.g*H,d+=z.b*H;else if(L.isLightProbe){for(let Z=0;Z<9;Z++)n.probe[Z].addScaledVector(L.sh.coefficients[Z],H);I++}else if(L.isDirectionalLight){const Z=t.get(L);if(Z.color.copy(L.color).multiplyScalar(L.intensity),L.castShadow){const et=L.shadow,V=e.get(L);V.shadowIntensity=et.intensity,V.shadowBias=et.bias,V.shadowNormalBias=et.normalBias,V.shadowRadius=et.radius,V.shadowMapSize=et.mapSize,n.directionalShadow[p]=V,n.directionalShadowMap[p]=X,n.directionalShadowMatrix[p]=L.shadow.matrix,b++}n.directional[p]=Z,p++}else if(L.isSpotLight){const Z=t.get(L);Z.position.setFromMatrixPosition(L.matrixWorld),Z.color.copy(z).multiplyScalar(H),Z.distance=q,Z.coneCos=Math.cos(L.angle),Z.penumbraCos=Math.cos(L.angle*(1-L.penumbra)),Z.decay=L.decay,n.spot[_]=Z;const et=L.shadow;if(L.map&&(n.spotLightMap[R]=L.map,R++,et.updateMatrices(L),L.castShadow&&D++),n.spotLightMatrix[_]=et.matrix,L.castShadow){const V=e.get(L);V.shadowIntensity=et.intensity,V.shadowBias=et.bias,V.shadowNormalBias=et.normalBias,V.shadowRadius=et.radius,V.shadowMapSize=et.mapSize,n.spotShadow[_]=V,n.spotShadowMap[_]=X,x++}_++}else if(L.isRectAreaLight){const Z=t.get(L);Z.color.copy(z).multiplyScalar(H),Z.halfWidth.set(L.width*.5,0,0),Z.halfHeight.set(0,L.height*.5,0),n.rectArea[m]=Z,m++}else if(L.isPointLight){const Z=t.get(L);if(Z.color.copy(L.color).multiplyScalar(L.intensity),Z.distance=L.distance,Z.decay=L.decay,L.castShadow){const et=L.shadow,V=e.get(L);V.shadowIntensity=et.intensity,V.shadowBias=et.bias,V.shadowNormalBias=et.normalBias,V.shadowRadius=et.radius,V.shadowMapSize=et.mapSize,V.shadowCameraNear=et.camera.near,V.shadowCameraFar=et.camera.far,n.pointShadow[g]=V,n.pointShadowMap[g]=X,n.pointShadowMatrix[g]=L.shadow.matrix,T++}n.point[g]=Z,g++}else if(L.isHemisphereLight){const Z=t.get(L);Z.skyColor.copy(L.color).multiplyScalar(H),Z.groundColor.copy(L.groundColor).multiplyScalar(H),n.hemi[f]=Z,f++}}m>0&&(i.has("OES_texture_float_linear")===!0?(n.rectAreaLTC1=_t.LTC_FLOAT_1,n.rectAreaLTC2=_t.LTC_FLOAT_2):(n.rectAreaLTC1=_t.LTC_HALF_1,n.rectAreaLTC2=_t.LTC_HALF_2)),n.ambient[0]=h,n.ambient[1]=u,n.ambient[2]=d;const F=n.hash;(F.directionalLength!==p||F.pointLength!==g||F.spotLength!==_||F.rectAreaLength!==m||F.hemiLength!==f||F.numDirectionalShadows!==b||F.numPointShadows!==T||F.numSpotShadows!==x||F.numSpotMaps!==R||F.numLightProbes!==I)&&(n.directional.length=p,n.spot.length=_,n.rectArea.length=m,n.point.length=g,n.hemi.length=f,n.directionalShadow.length=b,n.directionalShadowMap.length=b,n.pointShadow.length=T,n.pointShadowMap.length=T,n.spotShadow.length=x,n.spotShadowMap.length=x,n.directionalShadowMatrix.length=b,n.pointShadowMatrix.length=T,n.spotLightMatrix.length=x+R-D,n.spotLightMap.length=R,n.numSpotLightShadowsWithMaps=D,n.numLightProbes=I,F.directionalLength=p,F.pointLength=g,F.spotLength=_,F.rectAreaLength=m,F.hemiLength=f,F.numDirectionalShadows=b,F.numPointShadows=T,F.numSpotShadows=x,F.numSpotMaps=R,F.numLightProbes=I,n.version=G0++)}function l(c,h){let u=0,d=0,p=0,g=0,_=0;const m=h.matrixWorldInverse;for(let f=0,b=c.length;f<b;f++){const T=c[f];if(T.isDirectionalLight){const x=n.directional[u];x.direction.setFromMatrixPosition(T.matrixWorld),s.setFromMatrixPosition(T.target.matrixWorld),x.direction.sub(s),x.direction.transformDirection(m),u++}else if(T.isSpotLight){const x=n.spot[p];x.position.setFromMatrixPosition(T.matrixWorld),x.position.applyMatrix4(m),x.direction.setFromMatrixPosition(T.matrixWorld),s.setFromMatrixPosition(T.target.matrixWorld),x.direction.sub(s),x.direction.transformDirection(m),p++}else if(T.isRectAreaLight){const x=n.rectArea[g];x.position.setFromMatrixPosition(T.matrixWorld),x.position.applyMatrix4(m),a.identity(),r.copy(T.matrixWorld),r.premultiply(m),a.extractRotation(r),x.halfWidth.set(T.width*.5,0,0),x.halfHeight.set(0,T.height*.5,0),x.halfWidth.applyMatrix4(a),x.halfHeight.applyMatrix4(a),g++}else if(T.isPointLight){const x=n.point[d];x.position.setFromMatrixPosition(T.matrixWorld),x.position.applyMatrix4(m),d++}else if(T.isHemisphereLight){const x=n.hemi[_];x.direction.setFromMatrixPosition(T.matrixWorld),x.direction.transformDirection(m),_++}}}return{setup:o,setupView:l,state:n}}function Mc(i){const t=new W0(i),e=[],n=[];function s(h){c.camera=h,e.length=0,n.length=0}function r(h){e.push(h)}function a(h){n.push(h)}function o(){t.setup(e)}function l(h){t.setupView(e,h)}const c={lightsArray:e,shadowsArray:n,camera:null,lights:t,transmissionRenderTarget:{}};return{init:s,state:c,setupLights:o,setupLightsView:l,pushLight:r,pushShadow:a}}function X0(i){let t=new WeakMap;function e(s,r=0){const a=t.get(s);let o;return a===void 0?(o=new Mc(i),t.set(s,[o])):r>=a.length?(o=new Mc(i),a.push(o)):o=a[r],o}function n(){t=new WeakMap}return{get:e,dispose:n}}const q0=`void main() {
	gl_Position = vec4( position, 1.0 );
}`,Y0=`uniform sampler2D shadow_pass;
uniform vec2 resolution;
uniform float radius;
#include <packing>
void main() {
	const float samples = float( VSM_SAMPLES );
	float mean = 0.0;
	float squared_mean = 0.0;
	float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );
	float uvStart = samples <= 1.0 ? 0.0 : - 1.0;
	for ( float i = 0.0; i < samples; i ++ ) {
		float uvOffset = uvStart + i * uvStride;
		#ifdef HORIZONTAL_PASS
			vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );
			mean += distribution.x;
			squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;
		#else
			float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );
			mean += depth;
			squared_mean += depth * depth;
		#endif
	}
	mean = mean / samples;
	squared_mean = squared_mean / samples;
	float std_dev = sqrt( squared_mean - mean * mean );
	gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
}`;function Z0(i,t,e){let n=new $o;const s=new Dt,r=new Dt,a=new ue,o=new gd({depthPacking:uu}),l=new _d,c={},h=e.maxTextureSize,u={[ai]:Ke,[Ke]:ai,[fn]:fn},d=new ze({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Dt},radius:{value:4}},vertexShader:q0,fragmentShader:Y0}),p=d.clone();p.defines.HORIZONTAL_PASS=1;const g=new me;g.setAttribute("position",new ve(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const _=new xt(g,d),m=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=Ic;let f=this.type;this.render=function(D,I,F){if(m.enabled===!1||m.autoUpdate===!1&&m.needsUpdate===!1||D.length===0)return;const w=i.getRenderTarget(),y=i.getActiveCubeFace(),L=i.getActiveMipmapLevel(),z=i.state;z.setBlending(Wn),z.buffers.depth.getReversed()===!0?z.buffers.color.setClear(0,0,0,0):z.buffers.color.setClear(1,1,1,1),z.buffers.depth.setTest(!0),z.setScissorTest(!1);const H=f!==kn&&this.type===kn,q=f===kn&&this.type!==kn;for(let X=0,Z=D.length;X<Z;X++){const et=D[X],V=et.shadow;if(V===void 0){console.warn("THREE.WebGLShadowMap:",et,"has no shadow.");continue}if(V.autoUpdate===!1&&V.needsUpdate===!1)continue;s.copy(V.mapSize);const gt=V.getFrameExtents();if(s.multiply(gt),r.copy(V.mapSize),(s.x>h||s.y>h)&&(s.x>h&&(r.x=Math.floor(h/gt.x),s.x=r.x*gt.x,V.mapSize.x=r.x),s.y>h&&(r.y=Math.floor(h/gt.y),s.y=r.y*gt.y,V.mapSize.y=r.y)),V.map===null||H===!0||q===!0){const Lt=this.type!==kn?{minFilter:ln,magFilter:ln}:{};V.map!==null&&V.map.dispose(),V.map=new Tn(s.x,s.y,Lt),V.map.texture.name=et.name+".shadowMap",V.camera.updateProjectionMatrix()}i.setRenderTarget(V.map),i.clear();const Mt=V.getViewportCount();for(let Lt=0;Lt<Mt;Lt++){const qt=V.getViewport(Lt);a.set(r.x*qt.x,r.y*qt.y,r.x*qt.z,r.y*qt.w),z.viewport(a),V.updateMatrices(et,Lt),n=V.getFrustum(),x(I,F,V.camera,et,this.type)}V.isPointLightShadow!==!0&&this.type===kn&&b(V,F),V.needsUpdate=!1}f=this.type,m.needsUpdate=!1,i.setRenderTarget(w,y,L)};function b(D,I){const F=t.update(_);d.defines.VSM_SAMPLES!==D.blurSamples&&(d.defines.VSM_SAMPLES=D.blurSamples,p.defines.VSM_SAMPLES=D.blurSamples,d.needsUpdate=!0,p.needsUpdate=!0),D.mapPass===null&&(D.mapPass=new Tn(s.x,s.y)),d.uniforms.shadow_pass.value=D.map.texture,d.uniforms.resolution.value=D.mapSize,d.uniforms.radius.value=D.radius,i.setRenderTarget(D.mapPass),i.clear(),i.renderBufferDirect(I,null,F,d,_,null),p.uniforms.shadow_pass.value=D.mapPass.texture,p.uniforms.resolution.value=D.mapSize,p.uniforms.radius.value=D.radius,i.setRenderTarget(D.map),i.clear(),i.renderBufferDirect(I,null,F,p,_,null)}function T(D,I,F,w){let y=null;const L=F.isPointLight===!0?D.customDistanceMaterial:D.customDepthMaterial;if(L!==void 0)y=L;else if(y=F.isPointLight===!0?l:o,i.localClippingEnabled&&I.clipShadows===!0&&Array.isArray(I.clippingPlanes)&&I.clippingPlanes.length!==0||I.displacementMap&&I.displacementScale!==0||I.alphaMap&&I.alphaTest>0||I.map&&I.alphaTest>0||I.alphaToCoverage===!0){const z=y.uuid,H=I.uuid;let q=c[z];q===void 0&&(q={},c[z]=q);let X=q[H];X===void 0&&(X=y.clone(),q[H]=X,I.addEventListener("dispose",R)),y=X}if(y.visible=I.visible,y.wireframe=I.wireframe,w===kn?y.side=I.shadowSide!==null?I.shadowSide:I.side:y.side=I.shadowSide!==null?I.shadowSide:u[I.side],y.alphaMap=I.alphaMap,y.alphaTest=I.alphaToCoverage===!0?.5:I.alphaTest,y.map=I.map,y.clipShadows=I.clipShadows,y.clippingPlanes=I.clippingPlanes,y.clipIntersection=I.clipIntersection,y.displacementMap=I.displacementMap,y.displacementScale=I.displacementScale,y.displacementBias=I.displacementBias,y.wireframeLinewidth=I.wireframeLinewidth,y.linewidth=I.linewidth,F.isPointLight===!0&&y.isMeshDistanceMaterial===!0){const z=i.properties.get(y);z.light=F}return y}function x(D,I,F,w,y){if(D.visible===!1)return;if(D.layers.test(I.layers)&&(D.isMesh||D.isLine||D.isPoints)&&(D.castShadow||D.receiveShadow&&y===kn)&&(!D.frustumCulled||n.intersectsObject(D))){D.modelViewMatrix.multiplyMatrices(F.matrixWorldInverse,D.matrixWorld);const H=t.update(D),q=D.material;if(Array.isArray(q)){const X=H.groups;for(let Z=0,et=X.length;Z<et;Z++){const V=X[Z],gt=q[V.materialIndex];if(gt&&gt.visible){const Mt=T(D,gt,w,y);D.onBeforeShadow(i,D,I,F,H,Mt,V),i.renderBufferDirect(F,null,H,Mt,D,V),D.onAfterShadow(i,D,I,F,H,Mt,V)}}}else if(q.visible){const X=T(D,q,w,y);D.onBeforeShadow(i,D,I,F,H,X,null),i.renderBufferDirect(F,null,H,X,D,null),D.onAfterShadow(i,D,I,F,H,X,null)}}const z=D.children;for(let H=0,q=z.length;H<q;H++)x(z[H],I,F,w,y)}function R(D){D.target.removeEventListener("dispose",R);for(const F in c){const w=c[F],y=D.target.uuid;y in w&&(w[y].dispose(),delete w[y])}}}const K0={[za]:ka,[Ha]:Wa,[Ga]:Xa,[is]:Va,[ka]:za,[Wa]:Ha,[Xa]:Ga,[Va]:is};function $0(i,t){function e(){let N=!1;const lt=new ue;let pt=null;const yt=new ue(0,0,0,0);return{setMask:function(ot){pt!==ot&&!N&&(i.colorMask(ot,ot,ot,ot),pt=ot)},setLocked:function(ot){N=ot},setClear:function(ot,nt,St,Bt,ie){ie===!0&&(ot*=Bt,nt*=Bt,St*=Bt),lt.set(ot,nt,St,Bt),yt.equals(lt)===!1&&(i.clearColor(ot,nt,St,Bt),yt.copy(lt))},reset:function(){N=!1,pt=null,yt.set(-1,0,0,0)}}}function n(){let N=!1,lt=!1,pt=null,yt=null,ot=null;return{setReversed:function(nt){if(lt!==nt){const St=t.get("EXT_clip_control");nt?St.clipControlEXT(St.LOWER_LEFT_EXT,St.ZERO_TO_ONE_EXT):St.clipControlEXT(St.LOWER_LEFT_EXT,St.NEGATIVE_ONE_TO_ONE_EXT),lt=nt;const Bt=ot;ot=null,this.setClear(Bt)}},getReversed:function(){return lt},setTest:function(nt){nt?rt(i.DEPTH_TEST):wt(i.DEPTH_TEST)},setMask:function(nt){pt!==nt&&!N&&(i.depthMask(nt),pt=nt)},setFunc:function(nt){if(lt&&(nt=K0[nt]),yt!==nt){switch(nt){case za:i.depthFunc(i.NEVER);break;case ka:i.depthFunc(i.ALWAYS);break;case Ha:i.depthFunc(i.LESS);break;case is:i.depthFunc(i.LEQUAL);break;case Ga:i.depthFunc(i.EQUAL);break;case Va:i.depthFunc(i.GEQUAL);break;case Wa:i.depthFunc(i.GREATER);break;case Xa:i.depthFunc(i.NOTEQUAL);break;default:i.depthFunc(i.LEQUAL)}yt=nt}},setLocked:function(nt){N=nt},setClear:function(nt){ot!==nt&&(lt&&(nt=1-nt),i.clearDepth(nt),ot=nt)},reset:function(){N=!1,pt=null,yt=null,ot=null,lt=!1}}}function s(){let N=!1,lt=null,pt=null,yt=null,ot=null,nt=null,St=null,Bt=null,ie=null;return{setTest:function(ee){N||(ee?rt(i.STENCIL_TEST):wt(i.STENCIL_TEST))},setMask:function(ee){lt!==ee&&!N&&(i.stencilMask(ee),lt=ee)},setFunc:function(ee,_n,Je){(pt!==ee||yt!==_n||ot!==Je)&&(i.stencilFunc(ee,_n,Je),pt=ee,yt=_n,ot=Je)},setOp:function(ee,_n,Je){(nt!==ee||St!==_n||Bt!==Je)&&(i.stencilOp(ee,_n,Je),nt=ee,St=_n,Bt=Je)},setLocked:function(ee){N=ee},setClear:function(ee){ie!==ee&&(i.clearStencil(ee),ie=ee)},reset:function(){N=!1,lt=null,pt=null,yt=null,ot=null,nt=null,St=null,Bt=null,ie=null}}}const r=new e,a=new n,o=new s,l=new WeakMap,c=new WeakMap;let h={},u={},d=new WeakMap,p=[],g=null,_=!1,m=null,f=null,b=null,T=null,x=null,R=null,D=null,I=new ft(0,0,0),F=0,w=!1,y=null,L=null,z=null,H=null,q=null;const X=i.getParameter(i.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let Z=!1,et=0;const V=i.getParameter(i.VERSION);V.indexOf("WebGL")!==-1?(et=parseFloat(/^WebGL (\d)/.exec(V)[1]),Z=et>=1):V.indexOf("OpenGL ES")!==-1&&(et=parseFloat(/^OpenGL ES (\d)/.exec(V)[1]),Z=et>=2);let gt=null,Mt={};const Lt=i.getParameter(i.SCISSOR_BOX),qt=i.getParameter(i.VIEWPORT),re=new ue().fromArray(Lt),de=new ue().fromArray(qt);function te(N,lt,pt,yt){const ot=new Uint8Array(4),nt=i.createTexture();i.bindTexture(N,nt),i.texParameteri(N,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(N,i.TEXTURE_MAG_FILTER,i.NEAREST);for(let St=0;St<pt;St++)N===i.TEXTURE_3D||N===i.TEXTURE_2D_ARRAY?i.texImage3D(lt,0,i.RGBA,1,1,yt,0,i.RGBA,i.UNSIGNED_BYTE,ot):i.texImage2D(lt+St,0,i.RGBA,1,1,0,i.RGBA,i.UNSIGNED_BYTE,ot);return nt}const tt={};tt[i.TEXTURE_2D]=te(i.TEXTURE_2D,i.TEXTURE_2D,1),tt[i.TEXTURE_CUBE_MAP]=te(i.TEXTURE_CUBE_MAP,i.TEXTURE_CUBE_MAP_POSITIVE_X,6),tt[i.TEXTURE_2D_ARRAY]=te(i.TEXTURE_2D_ARRAY,i.TEXTURE_2D_ARRAY,1,1),tt[i.TEXTURE_3D]=te(i.TEXTURE_3D,i.TEXTURE_3D,1,1),r.setClear(0,0,0,1),a.setClear(1),o.setClear(0),rt(i.DEPTH_TEST),a.setFunc(is),Ft(!1),At(dl),rt(i.CULL_FACE),le(Wn);function rt(N){h[N]!==!0&&(i.enable(N),h[N]=!0)}function wt(N){h[N]!==!1&&(i.disable(N),h[N]=!1)}function zt(N,lt){return u[N]!==lt?(i.bindFramebuffer(N,lt),u[N]=lt,N===i.DRAW_FRAMEBUFFER&&(u[i.FRAMEBUFFER]=lt),N===i.FRAMEBUFFER&&(u[i.DRAW_FRAMEBUFFER]=lt),!0):!1}function It(N,lt){let pt=p,yt=!1;if(N){pt=d.get(lt),pt===void 0&&(pt=[],d.set(lt,pt));const ot=N.textures;if(pt.length!==ot.length||pt[0]!==i.COLOR_ATTACHMENT0){for(let nt=0,St=ot.length;nt<St;nt++)pt[nt]=i.COLOR_ATTACHMENT0+nt;pt.length=ot.length,yt=!0}}else pt[0]!==i.BACK&&(pt[0]=i.BACK,yt=!0);yt&&i.drawBuffers(pt)}function Kt(N){return g!==N?(i.useProgram(N),g=N,!0):!1}const Re={[wi]:i.FUNC_ADD,[Oh]:i.FUNC_SUBTRACT,[Bh]:i.FUNC_REVERSE_SUBTRACT};Re[zh]=i.MIN,Re[kh]=i.MAX;const C={[Hh]:i.ZERO,[Gh]:i.ONE,[Vh]:i.SRC_COLOR,[Oa]:i.SRC_ALPHA,[Kh]:i.SRC_ALPHA_SATURATE,[Yh]:i.DST_COLOR,[Xh]:i.DST_ALPHA,[Wh]:i.ONE_MINUS_SRC_COLOR,[Ba]:i.ONE_MINUS_SRC_ALPHA,[Zh]:i.ONE_MINUS_DST_COLOR,[qh]:i.ONE_MINUS_DST_ALPHA,[$h]:i.CONSTANT_COLOR,[jh]:i.ONE_MINUS_CONSTANT_COLOR,[Jh]:i.CONSTANT_ALPHA,[Qh]:i.ONE_MINUS_CONSTANT_ALPHA};function le(N,lt,pt,yt,ot,nt,St,Bt,ie,ee){if(N===Wn){_===!0&&(wt(i.BLEND),_=!1);return}if(_===!1&&(rt(i.BLEND),_=!0),N!==Fh){if(N!==m||ee!==w){if((f!==wi||x!==wi)&&(i.blendEquation(i.FUNC_ADD),f=wi,x=wi),ee)switch(N){case Ai:i.blendFuncSeparate(i.ONE,i.ONE_MINUS_SRC_ALPHA,i.ONE,i.ONE_MINUS_SRC_ALPHA);break;case Ee:i.blendFunc(i.ONE,i.ONE);break;case fl:i.blendFuncSeparate(i.ZERO,i.ONE_MINUS_SRC_COLOR,i.ZERO,i.ONE);break;case pl:i.blendFuncSeparate(i.DST_COLOR,i.ONE_MINUS_SRC_ALPHA,i.ZERO,i.ONE);break;default:console.error("THREE.WebGLState: Invalid blending: ",N);break}else switch(N){case Ai:i.blendFuncSeparate(i.SRC_ALPHA,i.ONE_MINUS_SRC_ALPHA,i.ONE,i.ONE_MINUS_SRC_ALPHA);break;case Ee:i.blendFuncSeparate(i.SRC_ALPHA,i.ONE,i.ONE,i.ONE);break;case fl:console.error("THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true");break;case pl:console.error("THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true");break;default:console.error("THREE.WebGLState: Invalid blending: ",N);break}b=null,T=null,R=null,D=null,I.set(0,0,0),F=0,m=N,w=ee}return}ot=ot||lt,nt=nt||pt,St=St||yt,(lt!==f||ot!==x)&&(i.blendEquationSeparate(Re[lt],Re[ot]),f=lt,x=ot),(pt!==b||yt!==T||nt!==R||St!==D)&&(i.blendFuncSeparate(C[pt],C[yt],C[nt],C[St]),b=pt,T=yt,R=nt,D=St),(Bt.equals(I)===!1||ie!==F)&&(i.blendColor(Bt.r,Bt.g,Bt.b,ie),I.copy(Bt),F=ie),m=N,w=!1}function kt(N,lt){N.side===fn?wt(i.CULL_FACE):rt(i.CULL_FACE);let pt=N.side===Ke;lt&&(pt=!pt),Ft(pt),N.blending===Ai&&N.transparent===!1?le(Wn):le(N.blending,N.blendEquation,N.blendSrc,N.blendDst,N.blendEquationAlpha,N.blendSrcAlpha,N.blendDstAlpha,N.blendColor,N.blendAlpha,N.premultipliedAlpha),a.setFunc(N.depthFunc),a.setTest(N.depthTest),a.setMask(N.depthWrite),r.setMask(N.colorWrite);const yt=N.stencilWrite;o.setTest(yt),yt&&(o.setMask(N.stencilWriteMask),o.setFunc(N.stencilFunc,N.stencilRef,N.stencilFuncMask),o.setOp(N.stencilFail,N.stencilZFail,N.stencilZPass)),Et(N.polygonOffset,N.polygonOffsetFactor,N.polygonOffsetUnits),N.alphaToCoverage===!0?rt(i.SAMPLE_ALPHA_TO_COVERAGE):wt(i.SAMPLE_ALPHA_TO_COVERAGE)}function Ft(N){y!==N&&(N?i.frontFace(i.CW):i.frontFace(i.CCW),y=N)}function At(N){N!==Uh?(rt(i.CULL_FACE),N!==L&&(N===dl?i.cullFace(i.BACK):N===Nh?i.cullFace(i.FRONT):i.cullFace(i.FRONT_AND_BACK))):wt(i.CULL_FACE),L=N}function pe(N){N!==z&&(Z&&i.lineWidth(N),z=N)}function Et(N,lt,pt){N?(rt(i.POLYGON_OFFSET_FILL),(H!==lt||q!==pt)&&(i.polygonOffset(lt,pt),H=lt,q=pt)):wt(i.POLYGON_OFFSET_FILL)}function Vt(N){N?rt(i.SCISSOR_TEST):wt(i.SCISSOR_TEST)}function be(N){N===void 0&&(N=i.TEXTURE0+X-1),gt!==N&&(i.activeTexture(N),gt=N)}function _e(N,lt,pt){pt===void 0&&(gt===null?pt=i.TEXTURE0+X-1:pt=gt);let yt=Mt[pt];yt===void 0&&(yt={type:void 0,texture:void 0},Mt[pt]=yt),(yt.type!==N||yt.texture!==lt)&&(gt!==pt&&(i.activeTexture(pt),gt=pt),i.bindTexture(N,lt||tt[N]),yt.type=N,yt.texture=lt)}function E(){const N=Mt[gt];N!==void 0&&N.type!==void 0&&(i.bindTexture(N.type,null),N.type=void 0,N.texture=void 0)}function v(){try{i.compressedTexImage2D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function k(){try{i.compressedTexImage3D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function j(){try{i.texSubImage2D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function st(){try{i.texSubImage3D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function $(){try{i.compressedTexSubImage2D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function Ut(){try{i.compressedTexSubImage3D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function ut(){try{i.texStorage2D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function Rt(){try{i.texStorage3D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function Ct(){try{i.texImage2D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function ct(){try{i.texImage3D(...arguments)}catch(N){console.error("THREE.WebGLState:",N)}}function vt(N){re.equals(N)===!1&&(i.scissor(N.x,N.y,N.z,N.w),re.copy(N))}function Nt(N){de.equals(N)===!1&&(i.viewport(N.x,N.y,N.z,N.w),de.copy(N))}function bt(N,lt){let pt=c.get(lt);pt===void 0&&(pt=new WeakMap,c.set(lt,pt));let yt=pt.get(N);yt===void 0&&(yt=i.getUniformBlockIndex(lt,N.name),pt.set(N,yt))}function mt(N,lt){const yt=c.get(lt).get(N);l.get(lt)!==yt&&(i.uniformBlockBinding(lt,yt,N.__bindingPointIndex),l.set(lt,yt))}function Wt(){i.disable(i.BLEND),i.disable(i.CULL_FACE),i.disable(i.DEPTH_TEST),i.disable(i.POLYGON_OFFSET_FILL),i.disable(i.SCISSOR_TEST),i.disable(i.STENCIL_TEST),i.disable(i.SAMPLE_ALPHA_TO_COVERAGE),i.blendEquation(i.FUNC_ADD),i.blendFunc(i.ONE,i.ZERO),i.blendFuncSeparate(i.ONE,i.ZERO,i.ONE,i.ZERO),i.blendColor(0,0,0,0),i.colorMask(!0,!0,!0,!0),i.clearColor(0,0,0,0),i.depthMask(!0),i.depthFunc(i.LESS),a.setReversed(!1),i.clearDepth(1),i.stencilMask(4294967295),i.stencilFunc(i.ALWAYS,0,4294967295),i.stencilOp(i.KEEP,i.KEEP,i.KEEP),i.clearStencil(0),i.cullFace(i.BACK),i.frontFace(i.CCW),i.polygonOffset(0,0),i.activeTexture(i.TEXTURE0),i.bindFramebuffer(i.FRAMEBUFFER,null),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,null),i.bindFramebuffer(i.READ_FRAMEBUFFER,null),i.useProgram(null),i.lineWidth(1),i.scissor(0,0,i.canvas.width,i.canvas.height),i.viewport(0,0,i.canvas.width,i.canvas.height),h={},gt=null,Mt={},u={},d=new WeakMap,p=[],g=null,_=!1,m=null,f=null,b=null,T=null,x=null,R=null,D=null,I=new ft(0,0,0),F=0,w=!1,y=null,L=null,z=null,H=null,q=null,re.set(0,0,i.canvas.width,i.canvas.height),de.set(0,0,i.canvas.width,i.canvas.height),r.reset(),a.reset(),o.reset()}return{buffers:{color:r,depth:a,stencil:o},enable:rt,disable:wt,bindFramebuffer:zt,drawBuffers:It,useProgram:Kt,setBlending:le,setMaterial:kt,setFlipSided:Ft,setCullFace:At,setLineWidth:pe,setPolygonOffset:Et,setScissorTest:Vt,activeTexture:be,bindTexture:_e,unbindTexture:E,compressedTexImage2D:v,compressedTexImage3D:k,texImage2D:Ct,texImage3D:ct,updateUBOMapping:bt,uniformBlockBinding:mt,texStorage2D:ut,texStorage3D:Rt,texSubImage2D:j,texSubImage3D:st,compressedTexSubImage2D:$,compressedTexSubImage3D:Ut,scissor:vt,viewport:Nt,reset:Wt}}function j0(i,t,e,n,s,r,a){const o=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,l=typeof navigator>"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new Dt,h=new WeakMap;let u;const d=new WeakMap;let p=!1;try{p=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function g(E,v){return p?new OffscreenCanvas(E,v):Gr("canvas")}function _(E,v,k){let j=1;const st=_e(E);if((st.width>k||st.height>k)&&(j=k/Math.max(st.width,st.height)),j<1)if(typeof HTMLImageElement<"u"&&E instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&E instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&E instanceof ImageBitmap||typeof VideoFrame<"u"&&E instanceof VideoFrame){const $=Math.floor(j*st.width),Ut=Math.floor(j*st.height);u===void 0&&(u=g($,Ut));const ut=v?g($,Ut):u;return ut.width=$,ut.height=Ut,ut.getContext("2d").drawImage(E,0,0,$,Ut),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+st.width+"x"+st.height+") to ("+$+"x"+Ut+")."),ut}else return"data"in E&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+st.width+"x"+st.height+")."),E;return E}function m(E){return E.generateMipmaps}function f(E){i.generateMipmap(E)}function b(E){return E.isWebGLCubeRenderTarget?i.TEXTURE_CUBE_MAP:E.isWebGL3DRenderTarget?i.TEXTURE_3D:E.isWebGLArrayRenderTarget||E.isCompressedArrayTexture?i.TEXTURE_2D_ARRAY:i.TEXTURE_2D}function T(E,v,k,j,st=!1){if(E!==null){if(i[E]!==void 0)return i[E];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+E+"'")}let $=v;if(v===i.RED&&(k===i.FLOAT&&($=i.R32F),k===i.HALF_FLOAT&&($=i.R16F),k===i.UNSIGNED_BYTE&&($=i.R8)),v===i.RED_INTEGER&&(k===i.UNSIGNED_BYTE&&($=i.R8UI),k===i.UNSIGNED_SHORT&&($=i.R16UI),k===i.UNSIGNED_INT&&($=i.R32UI),k===i.BYTE&&($=i.R8I),k===i.SHORT&&($=i.R16I),k===i.INT&&($=i.R32I)),v===i.RG&&(k===i.FLOAT&&($=i.RG32F),k===i.HALF_FLOAT&&($=i.RG16F),k===i.UNSIGNED_BYTE&&($=i.RG8)),v===i.RG_INTEGER&&(k===i.UNSIGNED_BYTE&&($=i.RG8UI),k===i.UNSIGNED_SHORT&&($=i.RG16UI),k===i.UNSIGNED_INT&&($=i.RG32UI),k===i.BYTE&&($=i.RG8I),k===i.SHORT&&($=i.RG16I),k===i.INT&&($=i.RG32I)),v===i.RGB_INTEGER&&(k===i.UNSIGNED_BYTE&&($=i.RGB8UI),k===i.UNSIGNED_SHORT&&($=i.RGB16UI),k===i.UNSIGNED_INT&&($=i.RGB32UI),k===i.BYTE&&($=i.RGB8I),k===i.SHORT&&($=i.RGB16I),k===i.INT&&($=i.RGB32I)),v===i.RGBA_INTEGER&&(k===i.UNSIGNED_BYTE&&($=i.RGBA8UI),k===i.UNSIGNED_SHORT&&($=i.RGBA16UI),k===i.UNSIGNED_INT&&($=i.RGBA32UI),k===i.BYTE&&($=i.RGBA8I),k===i.SHORT&&($=i.RGBA16I),k===i.INT&&($=i.RGBA32I)),v===i.RGB&&(k===i.UNSIGNED_INT_5_9_9_9_REV&&($=i.RGB9_E5),k===i.UNSIGNED_INT_10F_11F_11F_REV&&($=i.R11F_G11F_B10F)),v===i.RGBA){const Ut=st?kr:ne.getTransfer(j);k===i.FLOAT&&($=i.RGBA32F),k===i.HALF_FLOAT&&($=i.RGBA16F),k===i.UNSIGNED_BYTE&&($=Ut===ce?i.SRGB8_ALPHA8:i.RGBA8),k===i.UNSIGNED_SHORT_4_4_4_4&&($=i.RGBA4),k===i.UNSIGNED_SHORT_5_5_5_1&&($=i.RGB5_A1)}return($===i.R16F||$===i.R32F||$===i.RG16F||$===i.RG32F||$===i.RGBA16F||$===i.RGBA32F)&&t.get("EXT_color_buffer_float"),$}function x(E,v){let k;return E?v===null||v===Ri||v===ks?k=i.DEPTH24_STENCIL8:v===Cn?k=i.DEPTH32F_STENCIL8:v===zs&&(k=i.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):v===null||v===Ri||v===ks?k=i.DEPTH_COMPONENT24:v===Cn?k=i.DEPTH_COMPONENT32F:v===zs&&(k=i.DEPTH_COMPONENT16),k}function R(E,v){return m(E)===!0||E.isFramebufferTexture&&E.minFilter!==ln&&E.minFilter!==Rn?Math.log2(Math.max(v.width,v.height))+1:E.mipmaps!==void 0&&E.mipmaps.length>0?E.mipmaps.length:E.isCompressedTexture&&Array.isArray(E.image)?v.mipmaps.length:1}function D(E){const v=E.target;v.removeEventListener("dispose",D),F(v),v.isVideoTexture&&h.delete(v)}function I(E){const v=E.target;v.removeEventListener("dispose",I),y(v)}function F(E){const v=n.get(E);if(v.__webglInit===void 0)return;const k=E.source,j=d.get(k);if(j){const st=j[v.__cacheKey];st.usedTimes--,st.usedTimes===0&&w(E),Object.keys(j).length===0&&d.delete(k)}n.remove(E)}function w(E){const v=n.get(E);i.deleteTexture(v.__webglTexture);const k=E.source,j=d.get(k);delete j[v.__cacheKey],a.memory.textures--}function y(E){const v=n.get(E);if(E.depthTexture&&(E.depthTexture.dispose(),n.remove(E.depthTexture)),E.isWebGLCubeRenderTarget)for(let j=0;j<6;j++){if(Array.isArray(v.__webglFramebuffer[j]))for(let st=0;st<v.__webglFramebuffer[j].length;st++)i.deleteFramebuffer(v.__webglFramebuffer[j][st]);else i.deleteFramebuffer(v.__webglFramebuffer[j]);v.__webglDepthbuffer&&i.deleteRenderbuffer(v.__webglDepthbuffer[j])}else{if(Array.isArray(v.__webglFramebuffer))for(let j=0;j<v.__webglFramebuffer.length;j++)i.deleteFramebuffer(v.__webglFramebuffer[j]);else i.deleteFramebuffer(v.__webglFramebuffer);if(v.__webglDepthbuffer&&i.deleteRenderbuffer(v.__webglDepthbuffer),v.__webglMultisampledFramebuffer&&i.deleteFramebuffer(v.__webglMultisampledFramebuffer),v.__webglColorRenderbuffer)for(let j=0;j<v.__webglColorRenderbuffer.length;j++)v.__webglColorRenderbuffer[j]&&i.deleteRenderbuffer(v.__webglColorRenderbuffer[j]);v.__webglDepthRenderbuffer&&i.deleteRenderbuffer(v.__webglDepthRenderbuffer)}const k=E.textures;for(let j=0,st=k.length;j<st;j++){const $=n.get(k[j]);$.__webglTexture&&(i.deleteTexture($.__webglTexture),a.memory.textures--),n.remove(k[j])}n.remove(E)}let L=0;function z(){L=0}function H(){const E=L;return E>=s.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+E+" texture units while this GPU supports only "+s.maxTextures),L+=1,E}function q(E){const v=[];return v.push(E.wrapS),v.push(E.wrapT),v.push(E.wrapR||0),v.push(E.magFilter),v.push(E.minFilter),v.push(E.anisotropy),v.push(E.internalFormat),v.push(E.format),v.push(E.type),v.push(E.generateMipmaps),v.push(E.premultiplyAlpha),v.push(E.flipY),v.push(E.unpackAlignment),v.push(E.colorSpace),v.join()}function X(E,v){const k=n.get(E);if(E.isVideoTexture&&Vt(E),E.isRenderTargetTexture===!1&&E.isExternalTexture!==!0&&E.version>0&&k.__version!==E.version){const j=E.image;if(j===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(j.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{tt(k,E,v);return}}else E.isExternalTexture&&(k.__webglTexture=E.sourceTexture?E.sourceTexture:null);e.bindTexture(i.TEXTURE_2D,k.__webglTexture,i.TEXTURE0+v)}function Z(E,v){const k=n.get(E);if(E.isRenderTargetTexture===!1&&E.version>0&&k.__version!==E.version){tt(k,E,v);return}e.bindTexture(i.TEXTURE_2D_ARRAY,k.__webglTexture,i.TEXTURE0+v)}function et(E,v){const k=n.get(E);if(E.isRenderTargetTexture===!1&&E.version>0&&k.__version!==E.version){tt(k,E,v);return}e.bindTexture(i.TEXTURE_3D,k.__webglTexture,i.TEXTURE0+v)}function V(E,v){const k=n.get(E);if(E.version>0&&k.__version!==E.version){rt(k,E,v);return}e.bindTexture(i.TEXTURE_CUBE_MAP,k.__webglTexture,i.TEXTURE0+v)}const gt={[Bs]:i.REPEAT,[Vn]:i.CLAMP_TO_EDGE,[Za]:i.MIRRORED_REPEAT},Mt={[ln]:i.NEAREST,[cu]:i.NEAREST_MIPMAP_NEAREST,[nr]:i.NEAREST_MIPMAP_LINEAR,[Rn]:i.LINEAR,[ta]:i.LINEAR_MIPMAP_NEAREST,[bi]:i.LINEAR_MIPMAP_LINEAR},Lt={[fu]:i.NEVER,[xu]:i.ALWAYS,[pu]:i.LESS,[Xc]:i.LEQUAL,[mu]:i.EQUAL,[vu]:i.GEQUAL,[gu]:i.GREATER,[_u]:i.NOTEQUAL};function qt(E,v){if(v.type===Cn&&t.has("OES_texture_float_linear")===!1&&(v.magFilter===Rn||v.magFilter===ta||v.magFilter===nr||v.magFilter===bi||v.minFilter===Rn||v.minFilter===ta||v.minFilter===nr||v.minFilter===bi)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),i.texParameteri(E,i.TEXTURE_WRAP_S,gt[v.wrapS]),i.texParameteri(E,i.TEXTURE_WRAP_T,gt[v.wrapT]),(E===i.TEXTURE_3D||E===i.TEXTURE_2D_ARRAY)&&i.texParameteri(E,i.TEXTURE_WRAP_R,gt[v.wrapR]),i.texParameteri(E,i.TEXTURE_MAG_FILTER,Mt[v.magFilter]),i.texParameteri(E,i.TEXTURE_MIN_FILTER,Mt[v.minFilter]),v.compareFunction&&(i.texParameteri(E,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE),i.texParameteri(E,i.TEXTURE_COMPARE_FUNC,Lt[v.compareFunction])),t.has("EXT_texture_filter_anisotropic")===!0){if(v.magFilter===ln||v.minFilter!==nr&&v.minFilter!==bi||v.type===Cn&&t.has("OES_texture_float_linear")===!1)return;if(v.anisotropy>1||n.get(v).__currentAnisotropy){const k=t.get("EXT_texture_filter_anisotropic");i.texParameterf(E,k.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(v.anisotropy,s.getMaxAnisotropy())),n.get(v).__currentAnisotropy=v.anisotropy}}}function re(E,v){let k=!1;E.__webglInit===void 0&&(E.__webglInit=!0,v.addEventListener("dispose",D));const j=v.source;let st=d.get(j);st===void 0&&(st={},d.set(j,st));const $=q(v);if($!==E.__cacheKey){st[$]===void 0&&(st[$]={texture:i.createTexture(),usedTimes:0},a.memory.textures++,k=!0),st[$].usedTimes++;const Ut=st[E.__cacheKey];Ut!==void 0&&(st[E.__cacheKey].usedTimes--,Ut.usedTimes===0&&w(v)),E.__cacheKey=$,E.__webglTexture=st[$].texture}return k}function de(E,v,k){return Math.floor(Math.floor(E/k)/v)}function te(E,v,k,j){const $=E.updateRanges;if($.length===0)e.texSubImage2D(i.TEXTURE_2D,0,0,0,v.width,v.height,k,j,v.data);else{$.sort((ct,vt)=>ct.start-vt.start);let Ut=0;for(let ct=1;ct<$.length;ct++){const vt=$[Ut],Nt=$[ct],bt=vt.start+vt.count,mt=de(Nt.start,v.width,4),Wt=de(vt.start,v.width,4);Nt.start<=bt+1&&mt===Wt&&de(Nt.start+Nt.count-1,v.width,4)===mt?vt.count=Math.max(vt.count,Nt.start+Nt.count-vt.start):(++Ut,$[Ut]=Nt)}$.length=Ut+1;const ut=i.getParameter(i.UNPACK_ROW_LENGTH),Rt=i.getParameter(i.UNPACK_SKIP_PIXELS),Ct=i.getParameter(i.UNPACK_SKIP_ROWS);i.pixelStorei(i.UNPACK_ROW_LENGTH,v.width);for(let ct=0,vt=$.length;ct<vt;ct++){const Nt=$[ct],bt=Math.floor(Nt.start/4),mt=Math.ceil(Nt.count/4),Wt=bt%v.width,N=Math.floor(bt/v.width),lt=mt,pt=1;i.pixelStorei(i.UNPACK_SKIP_PIXELS,Wt),i.pixelStorei(i.UNPACK_SKIP_ROWS,N),e.texSubImage2D(i.TEXTURE_2D,0,Wt,N,lt,pt,k,j,v.data)}E.clearUpdateRanges(),i.pixelStorei(i.UNPACK_ROW_LENGTH,ut),i.pixelStorei(i.UNPACK_SKIP_PIXELS,Rt),i.pixelStorei(i.UNPACK_SKIP_ROWS,Ct)}}function tt(E,v,k){let j=i.TEXTURE_2D;(v.isDataArrayTexture||v.isCompressedArrayTexture)&&(j=i.TEXTURE_2D_ARRAY),v.isData3DTexture&&(j=i.TEXTURE_3D);const st=re(E,v),$=v.source;e.bindTexture(j,E.__webglTexture,i.TEXTURE0+k);const Ut=n.get($);if($.version!==Ut.__version||st===!0){e.activeTexture(i.TEXTURE0+k);const ut=ne.getPrimaries(ne.workingColorSpace),Rt=v.colorSpace===Gn?null:ne.getPrimaries(v.colorSpace),Ct=v.colorSpace===Gn||ut===Rt?i.NONE:i.BROWSER_DEFAULT_WEBGL;i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,v.flipY),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,v.premultiplyAlpha),i.pixelStorei(i.UNPACK_ALIGNMENT,v.unpackAlignment),i.pixelStorei(i.UNPACK_COLORSPACE_CONVERSION_WEBGL,Ct);let ct=_(v.image,!1,s.maxTextureSize);ct=be(v,ct);const vt=r.convert(v.format,v.colorSpace),Nt=r.convert(v.type);let bt=T(v.internalFormat,vt,Nt,v.colorSpace,v.isVideoTexture);qt(j,v);let mt;const Wt=v.mipmaps,N=v.isVideoTexture!==!0,lt=Ut.__version===void 0||st===!0,pt=$.dataReady,yt=R(v,ct);if(v.isDepthTexture)bt=x(v.format===Gs,v.type),lt&&(N?e.texStorage2D(i.TEXTURE_2D,1,bt,ct.width,ct.height):e.texImage2D(i.TEXTURE_2D,0,bt,ct.width,ct.height,0,vt,Nt,null));else if(v.isDataTexture)if(Wt.length>0){N&&lt&&e.texStorage2D(i.TEXTURE_2D,yt,bt,Wt[0].width,Wt[0].height);for(let ot=0,nt=Wt.length;ot<nt;ot++)mt=Wt[ot],N?pt&&e.texSubImage2D(i.TEXTURE_2D,ot,0,0,mt.width,mt.height,vt,Nt,mt.data):e.texImage2D(i.TEXTURE_2D,ot,bt,mt.width,mt.height,0,vt,Nt,mt.data);v.generateMipmaps=!1}else N?(lt&&e.texStorage2D(i.TEXTURE_2D,yt,bt,ct.width,ct.height),pt&&te(v,ct,vt,Nt)):e.texImage2D(i.TEXTURE_2D,0,bt,ct.width,ct.height,0,vt,Nt,ct.data);else if(v.isCompressedTexture)if(v.isCompressedArrayTexture){N&&lt&&e.texStorage3D(i.TEXTURE_2D_ARRAY,yt,bt,Wt[0].width,Wt[0].height,ct.depth);for(let ot=0,nt=Wt.length;ot<nt;ot++)if(mt=Wt[ot],v.format!==wn)if(vt!==null)if(N){if(pt)if(v.layerUpdates.size>0){const St=jl(mt.width,mt.height,v.format,v.type);for(const Bt of v.layerUpdates){const ie=mt.data.subarray(Bt*St/mt.data.BYTES_PER_ELEMENT,(Bt+1)*St/mt.data.BYTES_PER_ELEMENT);e.compressedTexSubImage3D(i.TEXTURE_2D_ARRAY,ot,0,0,Bt,mt.width,mt.height,1,vt,ie)}v.clearLayerUpdates()}else e.compressedTexSubImage3D(i.TEXTURE_2D_ARRAY,ot,0,0,0,mt.width,mt.height,ct.depth,vt,mt.data)}else e.compressedTexImage3D(i.TEXTURE_2D_ARRAY,ot,bt,mt.width,mt.height,ct.depth,0,mt.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else N?pt&&e.texSubImage3D(i.TEXTURE_2D_ARRAY,ot,0,0,0,mt.width,mt.height,ct.depth,vt,Nt,mt.data):e.texImage3D(i.TEXTURE_2D_ARRAY,ot,bt,mt.width,mt.height,ct.depth,0,vt,Nt,mt.data)}else{N&&lt&&e.texStorage2D(i.TEXTURE_2D,yt,bt,Wt[0].width,Wt[0].height);for(let ot=0,nt=Wt.length;ot<nt;ot++)mt=Wt[ot],v.format!==wn?vt!==null?N?pt&&e.compressedTexSubImage2D(i.TEXTURE_2D,ot,0,0,mt.width,mt.height,vt,mt.data):e.compressedTexImage2D(i.TEXTURE_2D,ot,bt,mt.width,mt.height,0,mt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):N?pt&&e.texSubImage2D(i.TEXTURE_2D,ot,0,0,mt.width,mt.height,vt,Nt,mt.data):e.texImage2D(i.TEXTURE_2D,ot,bt,mt.width,mt.height,0,vt,Nt,mt.data)}else if(v.isDataArrayTexture)if(N){if(lt&&e.texStorage3D(i.TEXTURE_2D_ARRAY,yt,bt,ct.width,ct.height,ct.depth),pt)if(v.layerUpdates.size>0){const ot=jl(ct.width,ct.height,v.format,v.type);for(const nt of v.layerUpdates){const St=ct.data.subarray(nt*ot/ct.data.BYTES_PER_ELEMENT,(nt+1)*ot/ct.data.BYTES_PER_ELEMENT);e.texSubImage3D(i.TEXTURE_2D_ARRAY,0,0,0,nt,ct.width,ct.height,1,vt,Nt,St)}v.clearLayerUpdates()}else e.texSubImage3D(i.TEXTURE_2D_ARRAY,0,0,0,0,ct.width,ct.height,ct.depth,vt,Nt,ct.data)}else e.texImage3D(i.TEXTURE_2D_ARRAY,0,bt,ct.width,ct.height,ct.depth,0,vt,Nt,ct.data);else if(v.isData3DTexture)N?(lt&&e.texStorage3D(i.TEXTURE_3D,yt,bt,ct.width,ct.height,ct.depth),pt&&e.texSubImage3D(i.TEXTURE_3D,0,0,0,0,ct.width,ct.height,ct.depth,vt,Nt,ct.data)):e.texImage3D(i.TEXTURE_3D,0,bt,ct.width,ct.height,ct.depth,0,vt,Nt,ct.data);else if(v.isFramebufferTexture){if(lt)if(N)e.texStorage2D(i.TEXTURE_2D,yt,bt,ct.width,ct.height);else{let ot=ct.width,nt=ct.height;for(let St=0;St<yt;St++)e.texImage2D(i.TEXTURE_2D,St,bt,ot,nt,0,vt,Nt,null),ot>>=1,nt>>=1}}else if(Wt.length>0){if(N&&lt){const ot=_e(Wt[0]);e.texStorage2D(i.TEXTURE_2D,yt,bt,ot.width,ot.height)}for(let ot=0,nt=Wt.length;ot<nt;ot++)mt=Wt[ot],N?pt&&e.texSubImage2D(i.TEXTURE_2D,ot,0,0,vt,Nt,mt):e.texImage2D(i.TEXTURE_2D,ot,bt,vt,Nt,mt);v.generateMipmaps=!1}else if(N){if(lt){const ot=_e(ct);e.texStorage2D(i.TEXTURE_2D,yt,bt,ot.width,ot.height)}pt&&e.texSubImage2D(i.TEXTURE_2D,0,0,0,vt,Nt,ct)}else e.texImage2D(i.TEXTURE_2D,0,bt,vt,Nt,ct);m(v)&&f(j),Ut.__version=$.version,v.onUpdate&&v.onUpdate(v)}E.__version=v.version}function rt(E,v,k){if(v.image.length!==6)return;const j=re(E,v),st=v.source;e.bindTexture(i.TEXTURE_CUBE_MAP,E.__webglTexture,i.TEXTURE0+k);const $=n.get(st);if(st.version!==$.__version||j===!0){e.activeTexture(i.TEXTURE0+k);const Ut=ne.getPrimaries(ne.workingColorSpace),ut=v.colorSpace===Gn?null:ne.getPrimaries(v.colorSpace),Rt=v.colorSpace===Gn||Ut===ut?i.NONE:i.BROWSER_DEFAULT_WEBGL;i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,v.flipY),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,v.premultiplyAlpha),i.pixelStorei(i.UNPACK_ALIGNMENT,v.unpackAlignment),i.pixelStorei(i.UNPACK_COLORSPACE_CONVERSION_WEBGL,Rt);const Ct=v.isCompressedTexture||v.image[0].isCompressedTexture,ct=v.image[0]&&v.image[0].isDataTexture,vt=[];for(let nt=0;nt<6;nt++)!Ct&&!ct?vt[nt]=_(v.image[nt],!0,s.maxCubemapSize):vt[nt]=ct?v.image[nt].image:v.image[nt],vt[nt]=be(v,vt[nt]);const Nt=vt[0],bt=r.convert(v.format,v.colorSpace),mt=r.convert(v.type),Wt=T(v.internalFormat,bt,mt,v.colorSpace),N=v.isVideoTexture!==!0,lt=$.__version===void 0||j===!0,pt=st.dataReady;let yt=R(v,Nt);qt(i.TEXTURE_CUBE_MAP,v);let ot;if(Ct){N&&lt&&e.texStorage2D(i.TEXTURE_CUBE_MAP,yt,Wt,Nt.width,Nt.height);for(let nt=0;nt<6;nt++){ot=vt[nt].mipmaps;for(let St=0;St<ot.length;St++){const Bt=ot[St];v.format!==wn?bt!==null?N?pt&&e.compressedTexSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,St,0,0,Bt.width,Bt.height,bt,Bt.data):e.compressedTexImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,St,Wt,Bt.width,Bt.height,0,Bt.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):N?pt&&e.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,St,0,0,Bt.width,Bt.height,bt,mt,Bt.data):e.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,St,Wt,Bt.width,Bt.height,0,bt,mt,Bt.data)}}}else{if(ot=v.mipmaps,N&&lt){ot.length>0&&yt++;const nt=_e(vt[0]);e.texStorage2D(i.TEXTURE_CUBE_MAP,yt,Wt,nt.width,nt.height)}for(let nt=0;nt<6;nt++)if(ct){N?pt&&e.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,0,0,0,vt[nt].width,vt[nt].height,bt,mt,vt[nt].data):e.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,0,Wt,vt[nt].width,vt[nt].height,0,bt,mt,vt[nt].data);for(let St=0;St<ot.length;St++){const ie=ot[St].image[nt].image;N?pt&&e.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,St+1,0,0,ie.width,ie.height,bt,mt,ie.data):e.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,St+1,Wt,ie.width,ie.height,0,bt,mt,ie.data)}}else{N?pt&&e.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,0,0,0,bt,mt,vt[nt]):e.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,0,Wt,bt,mt,vt[nt]);for(let St=0;St<ot.length;St++){const Bt=ot[St];N?pt&&e.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,St+1,0,0,bt,mt,Bt.image[nt]):e.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+nt,St+1,Wt,bt,mt,Bt.image[nt])}}}m(v)&&f(i.TEXTURE_CUBE_MAP),$.__version=st.version,v.onUpdate&&v.onUpdate(v)}E.__version=v.version}function wt(E,v,k,j,st,$){const Ut=r.convert(k.format,k.colorSpace),ut=r.convert(k.type),Rt=T(k.internalFormat,Ut,ut,k.colorSpace),Ct=n.get(v),ct=n.get(k);if(ct.__renderTarget=v,!Ct.__hasExternalTextures){const vt=Math.max(1,v.width>>$),Nt=Math.max(1,v.height>>$);st===i.TEXTURE_3D||st===i.TEXTURE_2D_ARRAY?e.texImage3D(st,$,Rt,vt,Nt,v.depth,0,Ut,ut,null):e.texImage2D(st,$,Rt,vt,Nt,0,Ut,ut,null)}e.bindFramebuffer(i.FRAMEBUFFER,E),Et(v)?o.framebufferTexture2DMultisampleEXT(i.FRAMEBUFFER,j,st,ct.__webglTexture,0,pe(v)):(st===i.TEXTURE_2D||st>=i.TEXTURE_CUBE_MAP_POSITIVE_X&&st<=i.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&i.framebufferTexture2D(i.FRAMEBUFFER,j,st,ct.__webglTexture,$),e.bindFramebuffer(i.FRAMEBUFFER,null)}function zt(E,v,k){if(i.bindRenderbuffer(i.RENDERBUFFER,E),v.depthBuffer){const j=v.depthTexture,st=j&&j.isDepthTexture?j.type:null,$=x(v.stencilBuffer,st),Ut=v.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,ut=pe(v);Et(v)?o.renderbufferStorageMultisampleEXT(i.RENDERBUFFER,ut,$,v.width,v.height):k?i.renderbufferStorageMultisample(i.RENDERBUFFER,ut,$,v.width,v.height):i.renderbufferStorage(i.RENDERBUFFER,$,v.width,v.height),i.framebufferRenderbuffer(i.FRAMEBUFFER,Ut,i.RENDERBUFFER,E)}else{const j=v.textures;for(let st=0;st<j.length;st++){const $=j[st],Ut=r.convert($.format,$.colorSpace),ut=r.convert($.type),Rt=T($.internalFormat,Ut,ut,$.colorSpace),Ct=pe(v);k&&Et(v)===!1?i.renderbufferStorageMultisample(i.RENDERBUFFER,Ct,Rt,v.width,v.height):Et(v)?o.renderbufferStorageMultisampleEXT(i.RENDERBUFFER,Ct,Rt,v.width,v.height):i.renderbufferStorage(i.RENDERBUFFER,Rt,v.width,v.height)}}i.bindRenderbuffer(i.RENDERBUFFER,null)}function It(E,v){if(v&&v.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(e.bindFramebuffer(i.FRAMEBUFFER,E),!(v.depthTexture&&v.depthTexture.isDepthTexture))throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");const j=n.get(v.depthTexture);j.__renderTarget=v,(!j.__webglTexture||v.depthTexture.image.width!==v.width||v.depthTexture.image.height!==v.height)&&(v.depthTexture.image.width=v.width,v.depthTexture.image.height=v.height,v.depthTexture.needsUpdate=!0),X(v.depthTexture,0);const st=j.__webglTexture,$=pe(v);if(v.depthTexture.format===Hs)Et(v)?o.framebufferTexture2DMultisampleEXT(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,st,0,$):i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,st,0);else if(v.depthTexture.format===Gs)Et(v)?o.framebufferTexture2DMultisampleEXT(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.TEXTURE_2D,st,0,$):i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.TEXTURE_2D,st,0);else throw new Error("Unknown depthTexture format")}function Kt(E){const v=n.get(E),k=E.isWebGLCubeRenderTarget===!0;if(v.__boundDepthTexture!==E.depthTexture){const j=E.depthTexture;if(v.__depthDisposeCallback&&v.__depthDisposeCallback(),j){const st=()=>{delete v.__boundDepthTexture,delete v.__depthDisposeCallback,j.removeEventListener("dispose",st)};j.addEventListener("dispose",st),v.__depthDisposeCallback=st}v.__boundDepthTexture=j}if(E.depthTexture&&!v.__autoAllocateDepthBuffer){if(k)throw new Error("target.depthTexture not supported in Cube render targets");const j=E.texture.mipmaps;j&&j.length>0?It(v.__webglFramebuffer[0],E):It(v.__webglFramebuffer,E)}else if(k){v.__webglDepthbuffer=[];for(let j=0;j<6;j++)if(e.bindFramebuffer(i.FRAMEBUFFER,v.__webglFramebuffer[j]),v.__webglDepthbuffer[j]===void 0)v.__webglDepthbuffer[j]=i.createRenderbuffer(),zt(v.__webglDepthbuffer[j],E,!1);else{const st=E.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,$=v.__webglDepthbuffer[j];i.bindRenderbuffer(i.RENDERBUFFER,$),i.framebufferRenderbuffer(i.FRAMEBUFFER,st,i.RENDERBUFFER,$)}}else{const j=E.texture.mipmaps;if(j&&j.length>0?e.bindFramebuffer(i.FRAMEBUFFER,v.__webglFramebuffer[0]):e.bindFramebuffer(i.FRAMEBUFFER,v.__webglFramebuffer),v.__webglDepthbuffer===void 0)v.__webglDepthbuffer=i.createRenderbuffer(),zt(v.__webglDepthbuffer,E,!1);else{const st=E.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,$=v.__webglDepthbuffer;i.bindRenderbuffer(i.RENDERBUFFER,$),i.framebufferRenderbuffer(i.FRAMEBUFFER,st,i.RENDERBUFFER,$)}}e.bindFramebuffer(i.FRAMEBUFFER,null)}function Re(E,v,k){const j=n.get(E);v!==void 0&&wt(j.__webglFramebuffer,E,E.texture,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,0),k!==void 0&&Kt(E)}function C(E){const v=E.texture,k=n.get(E),j=n.get(v);E.addEventListener("dispose",I);const st=E.textures,$=E.isWebGLCubeRenderTarget===!0,Ut=st.length>1;if(Ut||(j.__webglTexture===void 0&&(j.__webglTexture=i.createTexture()),j.__version=v.version,a.memory.textures++),$){k.__webglFramebuffer=[];for(let ut=0;ut<6;ut++)if(v.mipmaps&&v.mipmaps.length>0){k.__webglFramebuffer[ut]=[];for(let Rt=0;Rt<v.mipmaps.length;Rt++)k.__webglFramebuffer[ut][Rt]=i.createFramebuffer()}else k.__webglFramebuffer[ut]=i.createFramebuffer()}else{if(v.mipmaps&&v.mipmaps.length>0){k.__webglFramebuffer=[];for(let ut=0;ut<v.mipmaps.length;ut++)k.__webglFramebuffer[ut]=i.createFramebuffer()}else k.__webglFramebuffer=i.createFramebuffer();if(Ut)for(let ut=0,Rt=st.length;ut<Rt;ut++){const Ct=n.get(st[ut]);Ct.__webglTexture===void 0&&(Ct.__webglTexture=i.createTexture(),a.memory.textures++)}if(E.samples>0&&Et(E)===!1){k.__webglMultisampledFramebuffer=i.createFramebuffer(),k.__webglColorRenderbuffer=[],e.bindFramebuffer(i.FRAMEBUFFER,k.__webglMultisampledFramebuffer);for(let ut=0;ut<st.length;ut++){const Rt=st[ut];k.__webglColorRenderbuffer[ut]=i.createRenderbuffer(),i.bindRenderbuffer(i.RENDERBUFFER,k.__webglColorRenderbuffer[ut]);const Ct=r.convert(Rt.format,Rt.colorSpace),ct=r.convert(Rt.type),vt=T(Rt.internalFormat,Ct,ct,Rt.colorSpace,E.isXRRenderTarget===!0),Nt=pe(E);i.renderbufferStorageMultisample(i.RENDERBUFFER,Nt,vt,E.width,E.height),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+ut,i.RENDERBUFFER,k.__webglColorRenderbuffer[ut])}i.bindRenderbuffer(i.RENDERBUFFER,null),E.depthBuffer&&(k.__webglDepthRenderbuffer=i.createRenderbuffer(),zt(k.__webglDepthRenderbuffer,E,!0)),e.bindFramebuffer(i.FRAMEBUFFER,null)}}if($){e.bindTexture(i.TEXTURE_CUBE_MAP,j.__webglTexture),qt(i.TEXTURE_CUBE_MAP,v);for(let ut=0;ut<6;ut++)if(v.mipmaps&&v.mipmaps.length>0)for(let Rt=0;Rt<v.mipmaps.length;Rt++)wt(k.__webglFramebuffer[ut][Rt],E,v,i.COLOR_ATTACHMENT0,i.TEXTURE_CUBE_MAP_POSITIVE_X+ut,Rt);else wt(k.__webglFramebuffer[ut],E,v,i.COLOR_ATTACHMENT0,i.TEXTURE_CUBE_MAP_POSITIVE_X+ut,0);m(v)&&f(i.TEXTURE_CUBE_MAP),e.unbindTexture()}else if(Ut){for(let ut=0,Rt=st.length;ut<Rt;ut++){const Ct=st[ut],ct=n.get(Ct);let vt=i.TEXTURE_2D;(E.isWebGL3DRenderTarget||E.isWebGLArrayRenderTarget)&&(vt=E.isWebGL3DRenderTarget?i.TEXTURE_3D:i.TEXTURE_2D_ARRAY),e.bindTexture(vt,ct.__webglTexture),qt(vt,Ct),wt(k.__webglFramebuffer,E,Ct,i.COLOR_ATTACHMENT0+ut,vt,0),m(Ct)&&f(vt)}e.unbindTexture()}else{let ut=i.TEXTURE_2D;if((E.isWebGL3DRenderTarget||E.isWebGLArrayRenderTarget)&&(ut=E.isWebGL3DRenderTarget?i.TEXTURE_3D:i.TEXTURE_2D_ARRAY),e.bindTexture(ut,j.__webglTexture),qt(ut,v),v.mipmaps&&v.mipmaps.length>0)for(let Rt=0;Rt<v.mipmaps.length;Rt++)wt(k.__webglFramebuffer[Rt],E,v,i.COLOR_ATTACHMENT0,ut,Rt);else wt(k.__webglFramebuffer,E,v,i.COLOR_ATTACHMENT0,ut,0);m(v)&&f(ut),e.unbindTexture()}E.depthBuffer&&Kt(E)}function le(E){const v=E.textures;for(let k=0,j=v.length;k<j;k++){const st=v[k];if(m(st)){const $=b(E),Ut=n.get(st).__webglTexture;e.bindTexture($,Ut),f($),e.unbindTexture()}}}const kt=[],Ft=[];function At(E){if(E.samples>0){if(Et(E)===!1){const v=E.textures,k=E.width,j=E.height;let st=i.COLOR_BUFFER_BIT;const $=E.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,Ut=n.get(E),ut=v.length>1;if(ut)for(let Ct=0;Ct<v.length;Ct++)e.bindFramebuffer(i.FRAMEBUFFER,Ut.__webglMultisampledFramebuffer),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+Ct,i.RENDERBUFFER,null),e.bindFramebuffer(i.FRAMEBUFFER,Ut.__webglFramebuffer),i.framebufferTexture2D(i.DRAW_FRAMEBUFFER,i.COLOR_ATTACHMENT0+Ct,i.TEXTURE_2D,null,0);e.bindFramebuffer(i.READ_FRAMEBUFFER,Ut.__webglMultisampledFramebuffer);const Rt=E.texture.mipmaps;Rt&&Rt.length>0?e.bindFramebuffer(i.DRAW_FRAMEBUFFER,Ut.__webglFramebuffer[0]):e.bindFramebuffer(i.DRAW_FRAMEBUFFER,Ut.__webglFramebuffer);for(let Ct=0;Ct<v.length;Ct++){if(E.resolveDepthBuffer&&(E.depthBuffer&&(st|=i.DEPTH_BUFFER_BIT),E.stencilBuffer&&E.resolveStencilBuffer&&(st|=i.STENCIL_BUFFER_BIT)),ut){i.framebufferRenderbuffer(i.READ_FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.RENDERBUFFER,Ut.__webglColorRenderbuffer[Ct]);const ct=n.get(v[Ct]).__webglTexture;i.framebufferTexture2D(i.DRAW_FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,ct,0)}i.blitFramebuffer(0,0,k,j,0,0,k,j,st,i.NEAREST),l===!0&&(kt.length=0,Ft.length=0,kt.push(i.COLOR_ATTACHMENT0+Ct),E.depthBuffer&&E.resolveDepthBuffer===!1&&(kt.push($),Ft.push($),i.invalidateFramebuffer(i.DRAW_FRAMEBUFFER,Ft)),i.invalidateFramebuffer(i.READ_FRAMEBUFFER,kt))}if(e.bindFramebuffer(i.READ_FRAMEBUFFER,null),e.bindFramebuffer(i.DRAW_FRAMEBUFFER,null),ut)for(let Ct=0;Ct<v.length;Ct++){e.bindFramebuffer(i.FRAMEBUFFER,Ut.__webglMultisampledFramebuffer),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+Ct,i.RENDERBUFFER,Ut.__webglColorRenderbuffer[Ct]);const ct=n.get(v[Ct]).__webglTexture;e.bindFramebuffer(i.FRAMEBUFFER,Ut.__webglFramebuffer),i.framebufferTexture2D(i.DRAW_FRAMEBUFFER,i.COLOR_ATTACHMENT0+Ct,i.TEXTURE_2D,ct,0)}e.bindFramebuffer(i.DRAW_FRAMEBUFFER,Ut.__webglMultisampledFramebuffer)}else if(E.depthBuffer&&E.resolveDepthBuffer===!1&&l){const v=E.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT;i.invalidateFramebuffer(i.DRAW_FRAMEBUFFER,[v])}}}function pe(E){return Math.min(s.maxSamples,E.samples)}function Et(E){const v=n.get(E);return E.samples>0&&t.has("WEBGL_multisampled_render_to_texture")===!0&&v.__useRenderToTexture!==!1}function Vt(E){const v=a.render.frame;h.get(E)!==v&&(h.set(E,v),E.update())}function be(E,v){const k=E.colorSpace,j=E.format,st=E.type;return E.isCompressedTexture===!0||E.isVideoTexture===!0||k!==as&&k!==Gn&&(ne.getTransfer(k)===ce?(j!==wn||st!==Ln)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",k)),v}function _e(E){return typeof HTMLImageElement<"u"&&E instanceof HTMLImageElement?(c.width=E.naturalWidth||E.width,c.height=E.naturalHeight||E.height):typeof VideoFrame<"u"&&E instanceof VideoFrame?(c.width=E.displayWidth,c.height=E.displayHeight):(c.width=E.width,c.height=E.height),c}this.allocateTextureUnit=H,this.resetTextureUnits=z,this.setTexture2D=X,this.setTexture2DArray=Z,this.setTexture3D=et,this.setTextureCube=V,this.rebindTextures=Re,this.setupRenderTarget=C,this.updateRenderTargetMipmap=le,this.updateMultisampleRenderTarget=At,this.setupDepthRenderbuffer=Kt,this.setupFrameBufferTexture=wt,this.useMultisampledRTT=Et}function J0(i,t){function e(n,s=Gn){let r;const a=ne.getTransfer(s);if(n===Ln)return i.UNSIGNED_BYTE;if(n===ko)return i.UNSIGNED_SHORT_4_4_4_4;if(n===Ho)return i.UNSIGNED_SHORT_5_5_5_1;if(n===zc)return i.UNSIGNED_INT_5_9_9_9_REV;if(n===kc)return i.UNSIGNED_INT_10F_11F_11F_REV;if(n===Oc)return i.BYTE;if(n===Bc)return i.SHORT;if(n===zs)return i.UNSIGNED_SHORT;if(n===zo)return i.INT;if(n===Ri)return i.UNSIGNED_INT;if(n===Cn)return i.FLOAT;if(n===qn)return i.HALF_FLOAT;if(n===Hc)return i.ALPHA;if(n===Gc)return i.RGB;if(n===wn)return i.RGBA;if(n===Hs)return i.DEPTH_COMPONENT;if(n===Gs)return i.DEPTH_STENCIL;if(n===Go)return i.RED;if(n===Vo)return i.RED_INTEGER;if(n===Vc)return i.RG;if(n===Wo)return i.RG_INTEGER;if(n===Xo)return i.RGBA_INTEGER;if(n===Lr||n===Ir||n===Ur||n===Nr)if(a===ce)if(r=t.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(n===Lr)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===Ir)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===Ur)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===Nr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=t.get("WEBGL_compressed_texture_s3tc"),r!==null){if(n===Lr)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===Ir)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===Ur)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===Nr)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(n===Ka||n===$a||n===ja||n===Ja)if(r=t.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(n===Ka)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===$a)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===ja)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===Ja)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(n===Qa||n===to||n===eo)if(r=t.get("WEBGL_compressed_texture_etc"),r!==null){if(n===Qa||n===to)return a===ce?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(n===eo)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(n===no||n===io||n===so||n===ro||n===ao||n===oo||n===lo||n===co||n===ho||n===uo||n===fo||n===po||n===mo||n===go)if(r=t.get("WEBGL_compressed_texture_astc"),r!==null){if(n===no)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===io)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===so)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===ro)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===ao)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===oo)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===lo)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===co)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===ho)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===uo)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===fo)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===po)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===mo)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===go)return a===ce?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(n===_o||n===vo||n===xo)if(r=t.get("EXT_texture_compression_bptc"),r!==null){if(n===_o)return a===ce?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(n===vo)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(n===xo)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(n===Mo||n===yo||n===So||n===wo)if(r=t.get("EXT_texture_compression_rgtc"),r!==null){if(n===Mo)return r.COMPRESSED_RED_RGTC1_EXT;if(n===yo)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(n===So)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(n===wo)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return n===ks?i.UNSIGNED_INT_24_8:i[n]!==void 0?i[n]:null}return{convert:e}}const Q0=`
void main() {

	gl_Position = vec4( position, 1.0 );

}`,tg=`
uniform sampler2DArray depthColor;
uniform float depthWidth;
uniform float depthHeight;

void main() {

	vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );

	if ( coord.x >= 1.0 ) {

		gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;

	} else {

		gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;

	}

}`;class eg{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(t,e){if(this.texture===null){const n=new sh(t.texture);(t.depthNear!==e.depthNear||t.depthFar!==e.depthFar)&&(this.depthNear=t.depthNear,this.depthFar=t.depthFar),this.texture=n}}getMesh(t){if(this.texture!==null&&this.mesh===null){const e=t.cameras[0].viewport,n=new ze({vertexShader:Q0,fragmentShader:tg,uniforms:{depthColor:{value:this.texture},depthWidth:{value:e.z},depthHeight:{value:e.w}}});this.mesh=new xt(new Ye(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class ng extends fs{constructor(t,e){super();const n=this;let s=null,r=1,a=null,o="local-floor",l=1,c=null,h=null,u=null,d=null,p=null,g=null;const _=typeof XRWebGLBinding<"u",m=new eg,f={},b=e.getContextAttributes();let T=null,x=null;const R=[],D=[],I=new Dt;let F=null;const w=new on;w.viewport=new ue;const y=new on;y.viewport=new ue;const L=[w,y],z=new yd;let H=null,q=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(tt){let rt=R[tt];return rt===void 0&&(rt=new ya,R[tt]=rt),rt.getTargetRaySpace()},this.getControllerGrip=function(tt){let rt=R[tt];return rt===void 0&&(rt=new ya,R[tt]=rt),rt.getGripSpace()},this.getHand=function(tt){let rt=R[tt];return rt===void 0&&(rt=new ya,R[tt]=rt),rt.getHandSpace()};function X(tt){const rt=D.indexOf(tt.inputSource);if(rt===-1)return;const wt=R[rt];wt!==void 0&&(wt.update(tt.inputSource,tt.frame,c||a),wt.dispatchEvent({type:tt.type,data:tt.inputSource}))}function Z(){s.removeEventListener("select",X),s.removeEventListener("selectstart",X),s.removeEventListener("selectend",X),s.removeEventListener("squeeze",X),s.removeEventListener("squeezestart",X),s.removeEventListener("squeezeend",X),s.removeEventListener("end",Z),s.removeEventListener("inputsourceschange",et);for(let tt=0;tt<R.length;tt++){const rt=D[tt];rt!==null&&(D[tt]=null,R[tt].disconnect(rt))}H=null,q=null,m.reset();for(const tt in f)delete f[tt];t.setRenderTarget(T),p=null,d=null,u=null,s=null,x=null,te.stop(),n.isPresenting=!1,t.setPixelRatio(F),t.setSize(I.width,I.height,!1),n.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(tt){r=tt,n.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(tt){o=tt,n.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return c||a},this.setReferenceSpace=function(tt){c=tt},this.getBaseLayer=function(){return d!==null?d:p},this.getBinding=function(){return u===null&&_&&(u=new XRWebGLBinding(s,e)),u},this.getFrame=function(){return g},this.getSession=function(){return s},this.setSession=async function(tt){if(s=tt,s!==null){if(T=t.getRenderTarget(),s.addEventListener("select",X),s.addEventListener("selectstart",X),s.addEventListener("selectend",X),s.addEventListener("squeeze",X),s.addEventListener("squeezestart",X),s.addEventListener("squeezeend",X),s.addEventListener("end",Z),s.addEventListener("inputsourceschange",et),b.xrCompatible!==!0&&await e.makeXRCompatible(),F=t.getPixelRatio(),t.getSize(I),_&&"createProjectionLayer"in XRWebGLBinding.prototype){let wt=null,zt=null,It=null;b.depth&&(It=b.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24,wt=b.stencil?Gs:Hs,zt=b.stencil?ks:Ri);const Kt={colorFormat:e.RGBA8,depthFormat:It,scaleFactor:r};u=this.getBinding(),d=u.createProjectionLayer(Kt),s.updateRenderState({layers:[d]}),t.setPixelRatio(1),t.setSize(d.textureWidth,d.textureHeight,!1),x=new Tn(d.textureWidth,d.textureHeight,{format:wn,type:Ln,depthTexture:new ih(d.textureWidth,d.textureHeight,zt,void 0,void 0,void 0,void 0,void 0,void 0,wt),stencilBuffer:b.stencil,colorSpace:t.outputColorSpace,samples:b.antialias?4:0,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}else{const wt={antialias:b.antialias,alpha:!0,depth:b.depth,stencil:b.stencil,framebufferScaleFactor:r};p=new XRWebGLLayer(s,e,wt),s.updateRenderState({baseLayer:p}),t.setPixelRatio(1),t.setSize(p.framebufferWidth,p.framebufferHeight,!1),x=new Tn(p.framebufferWidth,p.framebufferHeight,{format:wn,type:Ln,colorSpace:t.outputColorSpace,stencilBuffer:b.stencil,resolveDepthBuffer:p.ignoreDepthValues===!1,resolveStencilBuffer:p.ignoreDepthValues===!1})}x.isXRRenderTarget=!0,this.setFoveation(l),c=null,a=await s.requestReferenceSpace(o),te.setContext(s),te.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(s!==null)return s.environmentBlendMode},this.getDepthTexture=function(){return m.getDepthTexture()};function et(tt){for(let rt=0;rt<tt.removed.length;rt++){const wt=tt.removed[rt],zt=D.indexOf(wt);zt>=0&&(D[zt]=null,R[zt].disconnect(wt))}for(let rt=0;rt<tt.added.length;rt++){const wt=tt.added[rt];let zt=D.indexOf(wt);if(zt===-1){for(let Kt=0;Kt<R.length;Kt++)if(Kt>=D.length){D.push(wt),zt=Kt;break}else if(D[Kt]===null){D[Kt]=wt,zt=Kt;break}if(zt===-1)break}const It=R[zt];It&&It.connect(wt)}}const V=new A,gt=new A;function Mt(tt,rt,wt){V.setFromMatrixPosition(rt.matrixWorld),gt.setFromMatrixPosition(wt.matrixWorld);const zt=V.distanceTo(gt),It=rt.projectionMatrix.elements,Kt=wt.projectionMatrix.elements,Re=It[14]/(It[10]-1),C=It[14]/(It[10]+1),le=(It[9]+1)/It[5],kt=(It[9]-1)/It[5],Ft=(It[8]-1)/It[0],At=(Kt[8]+1)/Kt[0],pe=Re*Ft,Et=Re*At,Vt=zt/(-Ft+At),be=Vt*-Ft;if(rt.matrixWorld.decompose(tt.position,tt.quaternion,tt.scale),tt.translateX(be),tt.translateZ(Vt),tt.matrixWorld.compose(tt.position,tt.quaternion,tt.scale),tt.matrixWorldInverse.copy(tt.matrixWorld).invert(),It[10]===-1)tt.projectionMatrix.copy(rt.projectionMatrix),tt.projectionMatrixInverse.copy(rt.projectionMatrixInverse);else{const _e=Re+Vt,E=C+Vt,v=pe-be,k=Et+(zt-be),j=le*C/E*_e,st=kt*C/E*_e;tt.projectionMatrix.makePerspective(v,k,j,st,_e,E),tt.projectionMatrixInverse.copy(tt.projectionMatrix).invert()}}function Lt(tt,rt){rt===null?tt.matrixWorld.copy(tt.matrix):tt.matrixWorld.multiplyMatrices(rt.matrixWorld,tt.matrix),tt.matrixWorldInverse.copy(tt.matrixWorld).invert()}this.updateCamera=function(tt){if(s===null)return;let rt=tt.near,wt=tt.far;m.texture!==null&&(m.depthNear>0&&(rt=m.depthNear),m.depthFar>0&&(wt=m.depthFar)),z.near=y.near=w.near=rt,z.far=y.far=w.far=wt,(H!==z.near||q!==z.far)&&(s.updateRenderState({depthNear:z.near,depthFar:z.far}),H=z.near,q=z.far),z.layers.mask=tt.layers.mask|6,w.layers.mask=z.layers.mask&3,y.layers.mask=z.layers.mask&5;const zt=tt.parent,It=z.cameras;Lt(z,zt);for(let Kt=0;Kt<It.length;Kt++)Lt(It[Kt],zt);It.length===2?Mt(z,w,y):z.projectionMatrix.copy(w.projectionMatrix),qt(tt,z,zt)};function qt(tt,rt,wt){wt===null?tt.matrix.copy(rt.matrixWorld):(tt.matrix.copy(wt.matrixWorld),tt.matrix.invert(),tt.matrix.multiply(rt.matrixWorld)),tt.matrix.decompose(tt.position,tt.quaternion,tt.scale),tt.updateMatrixWorld(!0),tt.projectionMatrix.copy(rt.projectionMatrix),tt.projectionMatrixInverse.copy(rt.projectionMatrixInverse),tt.isPerspectiveCamera&&(tt.fov=Vs*2*Math.atan(1/tt.projectionMatrix.elements[5]),tt.zoom=1)}this.getCamera=function(){return z},this.getFoveation=function(){if(!(d===null&&p===null))return l},this.setFoveation=function(tt){l=tt,d!==null&&(d.fixedFoveation=tt),p!==null&&p.fixedFoveation!==void 0&&(p.fixedFoveation=tt)},this.hasDepthSensing=function(){return m.texture!==null},this.getDepthSensingMesh=function(){return m.getMesh(z)},this.getCameraTexture=function(tt){return f[tt]};let re=null;function de(tt,rt){if(h=rt.getViewerPose(c||a),g=rt,h!==null){const wt=h.views;p!==null&&(t.setRenderTargetFramebuffer(x,p.framebuffer),t.setRenderTarget(x));let zt=!1;wt.length!==z.cameras.length&&(z.cameras.length=0,zt=!0);for(let C=0;C<wt.length;C++){const le=wt[C];let kt=null;if(p!==null)kt=p.getViewport(le);else{const At=u.getViewSubImage(d,le);kt=At.viewport,C===0&&(t.setRenderTargetTextures(x,At.colorTexture,At.depthStencilTexture),t.setRenderTarget(x))}let Ft=L[C];Ft===void 0&&(Ft=new on,Ft.layers.enable(C),Ft.viewport=new ue,L[C]=Ft),Ft.matrix.fromArray(le.transform.matrix),Ft.matrix.decompose(Ft.position,Ft.quaternion,Ft.scale),Ft.projectionMatrix.fromArray(le.projectionMatrix),Ft.projectionMatrixInverse.copy(Ft.projectionMatrix).invert(),Ft.viewport.set(kt.x,kt.y,kt.width,kt.height),C===0&&(z.matrix.copy(Ft.matrix),z.matrix.decompose(z.position,z.quaternion,z.scale)),zt===!0&&z.cameras.push(Ft)}const It=s.enabledFeatures;if(It&&It.includes("depth-sensing")&&s.depthUsage=="gpu-optimized"&&_){u=n.getBinding();const C=u.getDepthInformation(wt[0]);C&&C.isValid&&C.texture&&m.init(C,s.renderState)}if(It&&It.includes("camera-access")&&_){t.state.unbindTexture(),u=n.getBinding();for(let C=0;C<wt.length;C++){const le=wt[C].camera;if(le){let kt=f[le];kt||(kt=new sh,f[le]=kt);const Ft=u.getCameraImage(le);kt.sourceTexture=Ft}}}}for(let wt=0;wt<R.length;wt++){const zt=D[wt],It=R[wt];zt!==null&&It!==void 0&&It.update(zt,rt,c||a)}re&&re(tt,rt),rt.detectedPlanes&&n.dispatchEvent({type:"planesdetected",data:rt}),g=null}const te=new oh;te.setAnimationLoop(de),this.setAnimationLoop=function(tt){re=tt},this.dispose=function(){}}}const xi=new In,ig=new se;function sg(i,t){function e(m,f){m.matrixAutoUpdate===!0&&m.updateMatrix(),f.value.copy(m.matrix)}function n(m,f){f.color.getRGB(m.fogColor.value,jc(i)),f.isFog?(m.fogNear.value=f.near,m.fogFar.value=f.far):f.isFogExp2&&(m.fogDensity.value=f.density)}function s(m,f,b,T,x){f.isMeshBasicMaterial||f.isMeshLambertMaterial?r(m,f):f.isMeshToonMaterial?(r(m,f),u(m,f)):f.isMeshPhongMaterial?(r(m,f),h(m,f)):f.isMeshStandardMaterial?(r(m,f),d(m,f),f.isMeshPhysicalMaterial&&p(m,f,x)):f.isMeshMatcapMaterial?(r(m,f),g(m,f)):f.isMeshDepthMaterial?r(m,f):f.isMeshDistanceMaterial?(r(m,f),_(m,f)):f.isMeshNormalMaterial?r(m,f):f.isLineBasicMaterial?(a(m,f),f.isLineDashedMaterial&&o(m,f)):f.isPointsMaterial?l(m,f,b,T):f.isSpriteMaterial?c(m,f):f.isShadowMaterial?(m.color.value.copy(f.color),m.opacity.value=f.opacity):f.isShaderMaterial&&(f.uniformsNeedUpdate=!1)}function r(m,f){m.opacity.value=f.opacity,f.color&&m.diffuse.value.copy(f.color),f.emissive&&m.emissive.value.copy(f.emissive).multiplyScalar(f.emissiveIntensity),f.map&&(m.map.value=f.map,e(f.map,m.mapTransform)),f.alphaMap&&(m.alphaMap.value=f.alphaMap,e(f.alphaMap,m.alphaMapTransform)),f.bumpMap&&(m.bumpMap.value=f.bumpMap,e(f.bumpMap,m.bumpMapTransform),m.bumpScale.value=f.bumpScale,f.side===Ke&&(m.bumpScale.value*=-1)),f.normalMap&&(m.normalMap.value=f.normalMap,e(f.normalMap,m.normalMapTransform),m.normalScale.value.copy(f.normalScale),f.side===Ke&&m.normalScale.value.negate()),f.displacementMap&&(m.displacementMap.value=f.displacementMap,e(f.displacementMap,m.displacementMapTransform),m.displacementScale.value=f.displacementScale,m.displacementBias.value=f.displacementBias),f.emissiveMap&&(m.emissiveMap.value=f.emissiveMap,e(f.emissiveMap,m.emissiveMapTransform)),f.specularMap&&(m.specularMap.value=f.specularMap,e(f.specularMap,m.specularMapTransform)),f.alphaTest>0&&(m.alphaTest.value=f.alphaTest);const b=t.get(f),T=b.envMap,x=b.envMapRotation;T&&(m.envMap.value=T,xi.copy(x),xi.x*=-1,xi.y*=-1,xi.z*=-1,T.isCubeTexture&&T.isRenderTargetTexture===!1&&(xi.y*=-1,xi.z*=-1),m.envMapRotation.value.setFromMatrix4(ig.makeRotationFromEuler(xi)),m.flipEnvMap.value=T.isCubeTexture&&T.isRenderTargetTexture===!1?-1:1,m.reflectivity.value=f.reflectivity,m.ior.value=f.ior,m.refractionRatio.value=f.refractionRatio),f.lightMap&&(m.lightMap.value=f.lightMap,m.lightMapIntensity.value=f.lightMapIntensity,e(f.lightMap,m.lightMapTransform)),f.aoMap&&(m.aoMap.value=f.aoMap,m.aoMapIntensity.value=f.aoMapIntensity,e(f.aoMap,m.aoMapTransform))}function a(m,f){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,f.map&&(m.map.value=f.map,e(f.map,m.mapTransform))}function o(m,f){m.dashSize.value=f.dashSize,m.totalSize.value=f.dashSize+f.gapSize,m.scale.value=f.scale}function l(m,f,b,T){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,m.size.value=f.size*b,m.scale.value=T*.5,f.map&&(m.map.value=f.map,e(f.map,m.uvTransform)),f.alphaMap&&(m.alphaMap.value=f.alphaMap,e(f.alphaMap,m.alphaMapTransform)),f.alphaTest>0&&(m.alphaTest.value=f.alphaTest)}function c(m,f){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,m.rotation.value=f.rotation,f.map&&(m.map.value=f.map,e(f.map,m.mapTransform)),f.alphaMap&&(m.alphaMap.value=f.alphaMap,e(f.alphaMap,m.alphaMapTransform)),f.alphaTest>0&&(m.alphaTest.value=f.alphaTest)}function h(m,f){m.specular.value.copy(f.specular),m.shininess.value=Math.max(f.shininess,1e-4)}function u(m,f){f.gradientMap&&(m.gradientMap.value=f.gradientMap)}function d(m,f){m.metalness.value=f.metalness,f.metalnessMap&&(m.metalnessMap.value=f.metalnessMap,e(f.metalnessMap,m.metalnessMapTransform)),m.roughness.value=f.roughness,f.roughnessMap&&(m.roughnessMap.value=f.roughnessMap,e(f.roughnessMap,m.roughnessMapTransform)),f.envMap&&(m.envMapIntensity.value=f.envMapIntensity)}function p(m,f,b){m.ior.value=f.ior,f.sheen>0&&(m.sheenColor.value.copy(f.sheenColor).multiplyScalar(f.sheen),m.sheenRoughness.value=f.sheenRoughness,f.sheenColorMap&&(m.sheenColorMap.value=f.sheenColorMap,e(f.sheenColorMap,m.sheenColorMapTransform)),f.sheenRoughnessMap&&(m.sheenRoughnessMap.value=f.sheenRoughnessMap,e(f.sheenRoughnessMap,m.sheenRoughnessMapTransform))),f.clearcoat>0&&(m.clearcoat.value=f.clearcoat,m.clearcoatRoughness.value=f.clearcoatRoughness,f.clearcoatMap&&(m.clearcoatMap.value=f.clearcoatMap,e(f.clearcoatMap,m.clearcoatMapTransform)),f.clearcoatRoughnessMap&&(m.clearcoatRoughnessMap.value=f.clearcoatRoughnessMap,e(f.clearcoatRoughnessMap,m.clearcoatRoughnessMapTransform)),f.clearcoatNormalMap&&(m.clearcoatNormalMap.value=f.clearcoatNormalMap,e(f.clearcoatNormalMap,m.clearcoatNormalMapTransform),m.clearcoatNormalScale.value.copy(f.clearcoatNormalScale),f.side===Ke&&m.clearcoatNormalScale.value.negate())),f.dispersion>0&&(m.dispersion.value=f.dispersion),f.iridescence>0&&(m.iridescence.value=f.iridescence,m.iridescenceIOR.value=f.iridescenceIOR,m.iridescenceThicknessMinimum.value=f.iridescenceThicknessRange[0],m.iridescenceThicknessMaximum.value=f.iridescenceThicknessRange[1],f.iridescenceMap&&(m.iridescenceMap.value=f.iridescenceMap,e(f.iridescenceMap,m.iridescenceMapTransform)),f.iridescenceThicknessMap&&(m.iridescenceThicknessMap.value=f.iridescenceThicknessMap,e(f.iridescenceThicknessMap,m.iridescenceThicknessMapTransform))),f.transmission>0&&(m.transmission.value=f.transmission,m.transmissionSamplerMap.value=b.texture,m.transmissionSamplerSize.value.set(b.width,b.height),f.transmissionMap&&(m.transmissionMap.value=f.transmissionMap,e(f.transmissionMap,m.transmissionMapTransform)),m.thickness.value=f.thickness,f.thicknessMap&&(m.thicknessMap.value=f.thicknessMap,e(f.thicknessMap,m.thicknessMapTransform)),m.attenuationDistance.value=f.attenuationDistance,m.attenuationColor.value.copy(f.attenuationColor)),f.anisotropy>0&&(m.anisotropyVector.value.set(f.anisotropy*Math.cos(f.anisotropyRotation),f.anisotropy*Math.sin(f.anisotropyRotation)),f.anisotropyMap&&(m.anisotropyMap.value=f.anisotropyMap,e(f.anisotropyMap,m.anisotropyMapTransform))),m.specularIntensity.value=f.specularIntensity,m.specularColor.value.copy(f.specularColor),f.specularColorMap&&(m.specularColorMap.value=f.specularColorMap,e(f.specularColorMap,m.specularColorMapTransform)),f.specularIntensityMap&&(m.specularIntensityMap.value=f.specularIntensityMap,e(f.specularIntensityMap,m.specularIntensityMapTransform))}function g(m,f){f.matcap&&(m.matcap.value=f.matcap)}function _(m,f){const b=t.get(f).light;m.referencePosition.value.setFromMatrixPosition(b.matrixWorld),m.nearDistance.value=b.shadow.camera.near,m.farDistance.value=b.shadow.camera.far}return{refreshFogUniforms:n,refreshMaterialUniforms:s}}function rg(i,t,e,n){let s={},r={},a=[];const o=i.getParameter(i.MAX_UNIFORM_BUFFER_BINDINGS);function l(b,T){const x=T.program;n.uniformBlockBinding(b,x)}function c(b,T){let x=s[b.id];x===void 0&&(g(b),x=h(b),s[b.id]=x,b.addEventListener("dispose",m));const R=T.program;n.updateUBOMapping(b,R);const D=t.render.frame;r[b.id]!==D&&(d(b),r[b.id]=D)}function h(b){const T=u();b.__bindingPointIndex=T;const x=i.createBuffer(),R=b.__size,D=b.usage;return i.bindBuffer(i.UNIFORM_BUFFER,x),i.bufferData(i.UNIFORM_BUFFER,R,D),i.bindBuffer(i.UNIFORM_BUFFER,null),i.bindBufferBase(i.UNIFORM_BUFFER,T,x),x}function u(){for(let b=0;b<o;b++)if(a.indexOf(b)===-1)return a.push(b),b;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function d(b){const T=s[b.id],x=b.uniforms,R=b.__cache;i.bindBuffer(i.UNIFORM_BUFFER,T);for(let D=0,I=x.length;D<I;D++){const F=Array.isArray(x[D])?x[D]:[x[D]];for(let w=0,y=F.length;w<y;w++){const L=F[w];if(p(L,D,w,R)===!0){const z=L.__offset,H=Array.isArray(L.value)?L.value:[L.value];let q=0;for(let X=0;X<H.length;X++){const Z=H[X],et=_(Z);typeof Z=="number"||typeof Z=="boolean"?(L.__data[0]=Z,i.bufferSubData(i.UNIFORM_BUFFER,z+q,L.__data)):Z.isMatrix3?(L.__data[0]=Z.elements[0],L.__data[1]=Z.elements[1],L.__data[2]=Z.elements[2],L.__data[3]=0,L.__data[4]=Z.elements[3],L.__data[5]=Z.elements[4],L.__data[6]=Z.elements[5],L.__data[7]=0,L.__data[8]=Z.elements[6],L.__data[9]=Z.elements[7],L.__data[10]=Z.elements[8],L.__data[11]=0):(Z.toArray(L.__data,q),q+=et.storage/Float32Array.BYTES_PER_ELEMENT)}i.bufferSubData(i.UNIFORM_BUFFER,z,L.__data)}}}i.bindBuffer(i.UNIFORM_BUFFER,null)}function p(b,T,x,R){const D=b.value,I=T+"_"+x;if(R[I]===void 0)return typeof D=="number"||typeof D=="boolean"?R[I]=D:R[I]=D.clone(),!0;{const F=R[I];if(typeof D=="number"||typeof D=="boolean"){if(F!==D)return R[I]=D,!0}else if(F.equals(D)===!1)return F.copy(D),!0}return!1}function g(b){const T=b.uniforms;let x=0;const R=16;for(let I=0,F=T.length;I<F;I++){const w=Array.isArray(T[I])?T[I]:[T[I]];for(let y=0,L=w.length;y<L;y++){const z=w[y],H=Array.isArray(z.value)?z.value:[z.value];for(let q=0,X=H.length;q<X;q++){const Z=H[q],et=_(Z),V=x%R,gt=V%et.boundary,Mt=V+gt;x+=gt,Mt!==0&&R-Mt<et.storage&&(x+=R-Mt),z.__data=new Float32Array(et.storage/Float32Array.BYTES_PER_ELEMENT),z.__offset=x,x+=et.storage}}}const D=x%R;return D>0&&(x+=R-D),b.__size=x,b.__cache={},this}function _(b){const T={boundary:0,storage:0};return typeof b=="number"||typeof b=="boolean"?(T.boundary=4,T.storage=4):b.isVector2?(T.boundary=8,T.storage=8):b.isVector3||b.isColor?(T.boundary=16,T.storage=12):b.isVector4?(T.boundary=16,T.storage=16):b.isMatrix3?(T.boundary=48,T.storage=48):b.isMatrix4?(T.boundary=64,T.storage=64):b.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",b),T}function m(b){const T=b.target;T.removeEventListener("dispose",m);const x=a.indexOf(T.__bindingPointIndex);a.splice(x,1),i.deleteBuffer(s[T.id]),delete s[T.id],delete r[T.id]}function f(){for(const b in s)i.deleteBuffer(s[b]);a=[],s={},r={}}return{bind:l,update:c,dispose:f}}class ag{constructor(t={}){const{canvas:e=Fu(),context:n=null,depth:s=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:d=!1}=t;this.isWebGLRenderer=!0;let p;if(n!==null){if(typeof WebGLRenderingContext<"u"&&n instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");p=n.getContextAttributes().alpha}else p=a;const g=new Uint32Array(4),_=new Int32Array(4);let m=null,f=null;const b=[],T=[];this.domElement=e,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=Xn,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const x=this;let R=!1;this._outputColorSpace=Ze;let D=0,I=0,F=null,w=-1,y=null;const L=new ue,z=new ue;let H=null;const q=new ft(0);let X=0,Z=e.width,et=e.height,V=1,gt=null,Mt=null;const Lt=new ue(0,0,Z,et),qt=new ue(0,0,Z,et);let re=!1;const de=new $o;let te=!1,tt=!1;const rt=new se,wt=new A,zt=new ue,It={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let Kt=!1;function Re(){return F===null?V:1}let C=n;function le(M,O){return e.getContext(M,O)}try{const M={alpha:!0,depth:s,stencil:r,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:h,failIfMajorPerformanceCaveat:u};if("setAttribute"in e&&e.setAttribute("data-engine",`three.js r${Bo}`),e.addEventListener("webglcontextlost",pt,!1),e.addEventListener("webglcontextrestored",yt,!1),e.addEventListener("webglcontextcreationerror",ot,!1),C===null){const O="webgl2";if(C=le(O,M),C===null)throw le(O)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(M){throw console.error("THREE.WebGLRenderer: "+M.message),M}let kt,Ft,At,pe,Et,Vt,be,_e,E,v,k,j,st,$,Ut,ut,Rt,Ct,ct,vt,Nt,bt,mt,Wt;function N(){kt=new gm(C),kt.init(),bt=new J0(C,kt),Ft=new cm(C,kt,t,bt),At=new $0(C,kt),Ft.reversedDepthBuffer&&d&&At.buffers.depth.setReversed(!0),pe=new xm(C),Et=new O0,Vt=new j0(C,kt,At,Et,Ft,bt,pe),be=new um(x),_e=new mm(x),E=new Td(C),mt=new om(C,E),v=new _m(C,E,pe,mt),k=new ym(C,v,E,pe),ct=new Mm(C,Ft,Vt),ut=new hm(Et),j=new F0(x,be,_e,kt,Ft,mt,ut),st=new sg(x,Et),$=new z0,Ut=new X0(kt),Ct=new am(x,be,_e,At,k,p,l),Rt=new Z0(x,k,Ft),Wt=new rg(C,pe,Ft,At),vt=new lm(C,kt,pe),Nt=new vm(C,kt,pe),pe.programs=j.programs,x.capabilities=Ft,x.extensions=kt,x.properties=Et,x.renderLists=$,x.shadowMap=Rt,x.state=At,x.info=pe}N();const lt=new ng(x,C);this.xr=lt,this.getContext=function(){return C},this.getContextAttributes=function(){return C.getContextAttributes()},this.forceContextLoss=function(){const M=kt.get("WEBGL_lose_context");M&&M.loseContext()},this.forceContextRestore=function(){const M=kt.get("WEBGL_lose_context");M&&M.restoreContext()},this.getPixelRatio=function(){return V},this.setPixelRatio=function(M){M!==void 0&&(V=M,this.setSize(Z,et,!1))},this.getSize=function(M){return M.set(Z,et)},this.setSize=function(M,O,G=!0){if(lt.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}Z=M,et=O,e.width=Math.floor(M*V),e.height=Math.floor(O*V),G===!0&&(e.style.width=M+"px",e.style.height=O+"px"),this.setViewport(0,0,M,O)},this.getDrawingBufferSize=function(M){return M.set(Z*V,et*V).floor()},this.setDrawingBufferSize=function(M,O,G){Z=M,et=O,V=G,e.width=Math.floor(M*G),e.height=Math.floor(O*G),this.setViewport(0,0,M,O)},this.getCurrentViewport=function(M){return M.copy(L)},this.getViewport=function(M){return M.copy(Lt)},this.setViewport=function(M,O,G,W){M.isVector4?Lt.set(M.x,M.y,M.z,M.w):Lt.set(M,O,G,W),At.viewport(L.copy(Lt).multiplyScalar(V).round())},this.getScissor=function(M){return M.copy(qt)},this.setScissor=function(M,O,G,W){M.isVector4?qt.set(M.x,M.y,M.z,M.w):qt.set(M,O,G,W),At.scissor(z.copy(qt).multiplyScalar(V).round())},this.getScissorTest=function(){return re},this.setScissorTest=function(M){At.setScissorTest(re=M)},this.setOpaqueSort=function(M){gt=M},this.setTransparentSort=function(M){Mt=M},this.getClearColor=function(M){return M.copy(Ct.getClearColor())},this.setClearColor=function(){Ct.setClearColor(...arguments)},this.getClearAlpha=function(){return Ct.getClearAlpha()},this.setClearAlpha=function(){Ct.setClearAlpha(...arguments)},this.clear=function(M=!0,O=!0,G=!0){let W=0;if(M){let S=!1;if(F!==null){const B=F.texture.format;S=B===Xo||B===Wo||B===Vo}if(S){const B=F.texture.type,Y=B===Ln||B===Ri||B===zs||B===ks||B===ko||B===Ho,K=Ct.getClearColor(),J=Ct.getClearAlpha(),at=K.r,Q=K.g,it=K.b;Y?(g[0]=at,g[1]=Q,g[2]=it,g[3]=J,C.clearBufferuiv(C.COLOR,0,g)):(_[0]=at,_[1]=Q,_[2]=it,_[3]=J,C.clearBufferiv(C.COLOR,0,_))}else W|=C.COLOR_BUFFER_BIT}O&&(W|=C.DEPTH_BUFFER_BIT),G&&(W|=C.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),C.clear(W)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener("webglcontextlost",pt,!1),e.removeEventListener("webglcontextrestored",yt,!1),e.removeEventListener("webglcontextcreationerror",ot,!1),Ct.dispose(),$.dispose(),Ut.dispose(),Et.dispose(),be.dispose(),_e.dispose(),k.dispose(),mt.dispose(),Wt.dispose(),j.dispose(),lt.dispose(),lt.removeEventListener("sessionstart",Je),lt.removeEventListener("sessionend",xs),Ue.stop()};function pt(M){M.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),R=!0}function yt(){console.log("THREE.WebGLRenderer: Context Restored."),R=!1;const M=pe.autoReset,O=Rt.enabled,G=Rt.autoUpdate,W=Rt.needsUpdate,S=Rt.type;N(),pe.autoReset=M,Rt.enabled=O,Rt.autoUpdate=G,Rt.needsUpdate=W,Rt.type=S}function ot(M){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",M.statusMessage)}function nt(M){const O=M.target;O.removeEventListener("dispose",nt),St(O)}function St(M){Bt(M),Et.remove(M)}function Bt(M){const O=Et.get(M).programs;O!==void 0&&(O.forEach(function(G){j.releaseProgram(G)}),M.isShaderMaterial&&j.releaseShaderCache(M))}this.renderBufferDirect=function(M,O,G,W,S,B){O===null&&(O=It);const Y=S.isMesh&&S.matrixWorld.determinant()<0,K=$s(M,O,G,W,S);At.setMaterial(W,Y);let J=G.index,at=1;if(W.wireframe===!0){if(J=v.getWireframeAttribute(G),J===void 0)return;at=2}const Q=G.drawRange,it=G.attributes.position;let Pt=Q.start*at,Xt=(Q.start+Q.count)*at;B!==null&&(Pt=Math.max(Pt,B.start*at),Xt=Math.min(Xt,(B.start+B.count)*at)),J!==null?(Pt=Math.max(Pt,0),Xt=Math.min(Xt,J.count)):it!=null&&(Pt=Math.max(Pt,0),Xt=Math.min(Xt,it.count));const jt=Xt-Pt;if(jt<0||jt===1/0)return;mt.setup(S,W,K,G,J);let Ht,Gt=vt;if(J!==null&&(Ht=E.get(J),Gt=Nt,Gt.setIndex(Ht)),S.isMesh)W.wireframe===!0?(At.setLineWidth(W.wireframeLinewidth*Re()),Gt.setMode(C.LINES)):Gt.setMode(C.TRIANGLES);else if(S.isLine){let Tt=W.linewidth;Tt===void 0&&(Tt=1),At.setLineWidth(Tt*Re()),S.isLineSegments?Gt.setMode(C.LINES):S.isLineLoop?Gt.setMode(C.LINE_LOOP):Gt.setMode(C.LINE_STRIP)}else S.isPoints?Gt.setMode(C.POINTS):S.isSprite&&Gt.setMode(C.TRIANGLES);if(S.isBatchedMesh)if(S._multiDrawInstances!==null)Ws("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),Gt.renderMultiDrawInstances(S._multiDrawStarts,S._multiDrawCounts,S._multiDrawCount,S._multiDrawInstances);else if(kt.get("WEBGL_multi_draw"))Gt.renderMultiDraw(S._multiDrawStarts,S._multiDrawCounts,S._multiDrawCount);else{const Tt=S._multiDrawStarts,ae=S._multiDrawCounts,Jt=S._multiDrawCount,Ne=J?E.get(J).bytesPerElement:1,Un=Et.get(W).currentProgram.getUniforms();for(let Ge=0;Ge<Jt;Ge++)Un.setValue(C,"_gl_DrawID",Ge),Gt.render(Tt[Ge]/Ne,ae[Ge])}else if(S.isInstancedMesh)Gt.renderInstances(Pt,jt,S.count);else if(G.isInstancedBufferGeometry){const Tt=G._maxInstanceCount!==void 0?G._maxInstanceCount:1/0,ae=Math.min(G.instanceCount,Tt);Gt.renderInstances(Pt,jt,ae)}else Gt.render(Pt,jt)};function ie(M,O,G){M.transparent===!0&&M.side===fn&&M.forceSinglePass===!1?(M.side=Ke,M.needsUpdate=!0,xe(M,O,G),M.side=ai,M.needsUpdate=!0,xe(M,O,G),M.side=fn):xe(M,O,G)}this.compile=function(M,O,G=null){G===null&&(G=M),f=Ut.get(G),f.init(O),T.push(f),G.traverseVisible(function(S){S.isLight&&S.layers.test(O.layers)&&(f.pushLight(S),S.castShadow&&f.pushShadow(S))}),M!==G&&M.traverseVisible(function(S){S.isLight&&S.layers.test(O.layers)&&(f.pushLight(S),S.castShadow&&f.pushShadow(S))}),f.setupLights();const W=new Set;return M.traverse(function(S){if(!(S.isMesh||S.isPoints||S.isLine||S.isSprite))return;const B=S.material;if(B)if(Array.isArray(B))for(let Y=0;Y<B.length;Y++){const K=B[Y];ie(K,G,S),W.add(K)}else ie(B,G,S),W.add(B)}),f=T.pop(),W},this.compileAsync=function(M,O,G=null){const W=this.compile(M,O,G);return new Promise(S=>{function B(){if(W.forEach(function(Y){Et.get(Y).currentProgram.isReady()&&W.delete(Y)}),W.size===0){S(M);return}setTimeout(B,10)}kt.get("KHR_parallel_shader_compile")!==null?B():setTimeout(B,10)})};let ee=null;function _n(M){ee&&ee(M)}function Je(){Ue.stop()}function xs(){Ue.start()}const Ue=new oh;Ue.setAnimationLoop(_n),typeof self<"u"&&Ue.setContext(self),this.setAnimationLoop=function(M){ee=M,lt.setAnimationLoop(M),M===null?Ue.stop():Ue.start()},lt.addEventListener("sessionstart",Je),lt.addEventListener("sessionend",xs),this.render=function(M,O){if(O!==void 0&&O.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(R===!0)return;if(M.matrixWorldAutoUpdate===!0&&M.updateMatrixWorld(),O.parent===null&&O.matrixWorldAutoUpdate===!0&&O.updateMatrixWorld(),lt.enabled===!0&&lt.isPresenting===!0&&(lt.cameraAutoUpdate===!0&&lt.updateCamera(O),O=lt.getCamera()),M.isScene===!0&&M.onBeforeRender(x,M,O,F),f=Ut.get(M,T.length),f.init(O),T.push(f),rt.multiplyMatrices(O.projectionMatrix,O.matrixWorldInverse),de.setFromProjectionMatrix(rt,Pn,O.reversedDepth),tt=this.localClippingEnabled,te=ut.init(this.clippingPlanes,tt),m=$.get(M,b.length),m.init(),b.push(m),lt.enabled===!0&&lt.isPresenting===!0){const B=x.xr.getDepthSensingMesh();B!==null&&Li(B,O,-1/0,x.sortObjects)}Li(M,O,0,x.sortObjects),m.finish(),x.sortObjects===!0&&m.sort(gt,Mt),Kt=lt.enabled===!1||lt.isPresenting===!1||lt.hasDepthSensing()===!1,Kt&&Ct.addToRenderList(m,M),this.info.render.frame++,te===!0&&ut.beginShadows();const G=f.state.shadowsArray;Rt.render(G,M,O),te===!0&&ut.endShadows(),this.info.autoReset===!0&&this.info.reset();const W=m.opaque,S=m.transmissive;if(f.setupLights(),O.isArrayCamera){const B=O.cameras;if(S.length>0)for(let Y=0,K=B.length;Y<K;Y++){const J=B[Y];Ks(W,S,M,J)}Kt&&Ct.render(M);for(let Y=0,K=B.length;Y<K;Y++){const J=B[Y];Ms(m,M,J,J.viewport)}}else S.length>0&&Ks(W,S,M,O),Kt&&Ct.render(M),Ms(m,M,O);F!==null&&I===0&&(Vt.updateMultisampleRenderTarget(F),Vt.updateRenderTargetMipmap(F)),M.isScene===!0&&M.onAfterRender(x,M,O),mt.resetDefaultState(),w=-1,y=null,T.pop(),T.length>0?(f=T[T.length-1],te===!0&&ut.setGlobalState(x.clippingPlanes,f.state.camera)):f=null,b.pop(),b.length>0?m=b[b.length-1]:m=null};function Li(M,O,G,W){if(M.visible===!1)return;if(M.layers.test(O.layers)){if(M.isGroup)G=M.renderOrder;else if(M.isLOD)M.autoUpdate===!0&&M.update(O);else if(M.isLight)f.pushLight(M),M.castShadow&&f.pushShadow(M);else if(M.isSprite){if(!M.frustumCulled||de.intersectsSprite(M)){W&&zt.setFromMatrixPosition(M.matrixWorld).applyMatrix4(rt);const Y=k.update(M),K=M.material;K.visible&&m.push(M,Y,K,G,zt.z,null)}}else if((M.isMesh||M.isLine||M.isPoints)&&(!M.frustumCulled||de.intersectsObject(M))){const Y=k.update(M),K=M.material;if(W&&(M.boundingSphere!==void 0?(M.boundingSphere===null&&M.computeBoundingSphere(),zt.copy(M.boundingSphere.center)):(Y.boundingSphere===null&&Y.computeBoundingSphere(),zt.copy(Y.boundingSphere.center)),zt.applyMatrix4(M.matrixWorld).applyMatrix4(rt)),Array.isArray(K)){const J=Y.groups;for(let at=0,Q=J.length;at<Q;at++){const it=J[at],Pt=K[it.materialIndex];Pt&&Pt.visible&&m.push(M,Y,Pt,G,zt.z,it)}}else K.visible&&m.push(M,Y,K,G,zt.z,null)}}const B=M.children;for(let Y=0,K=B.length;Y<K;Y++)Li(B[Y],O,G,W)}function Ms(M,O,G,W){const S=M.opaque,B=M.transmissive,Y=M.transparent;f.setupLightsView(G),te===!0&&ut.setGlobalState(x.clippingPlanes,G),W&&At.viewport(L.copy(W)),S.length>0&&Jn(S,O,G),B.length>0&&Jn(B,O,G),Y.length>0&&Jn(Y,O,G),At.buffers.depth.setTest(!0),At.buffers.depth.setMask(!0),At.buffers.color.setMask(!0),At.setPolygonOffset(!1)}function Ks(M,O,G,W){if((G.isScene===!0?G.overrideMaterial:null)!==null)return;f.state.transmissionRenderTarget[W.id]===void 0&&(f.state.transmissionRenderTarget[W.id]=new Tn(1,1,{generateMipmaps:!0,type:kt.has("EXT_color_buffer_half_float")||kt.has("EXT_color_buffer_float")?qn:Ln,minFilter:bi,samples:4,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:ne.workingColorSpace}));const B=f.state.transmissionRenderTarget[W.id],Y=W.viewport||L;B.setSize(Y.z*x.transmissionResolutionScale,Y.w*x.transmissionResolutionScale);const K=x.getRenderTarget(),J=x.getActiveCubeFace(),at=x.getActiveMipmapLevel();x.setRenderTarget(B),x.getClearColor(q),X=x.getClearAlpha(),X<1&&x.setClearColor(16777215,.5),x.clear(),Kt&&Ct.render(G);const Q=x.toneMapping;x.toneMapping=Xn;const it=W.viewport;if(W.viewport!==void 0&&(W.viewport=void 0),f.setupLightsView(W),te===!0&&ut.setGlobalState(x.clippingPlanes,W),Jn(M,G,W),Vt.updateMultisampleRenderTarget(B),Vt.updateRenderTargetMipmap(B),kt.has("WEBGL_multisampled_render_to_texture")===!1){let Pt=!1;for(let Xt=0,jt=O.length;Xt<jt;Xt++){const Ht=O[Xt],Gt=Ht.object,Tt=Ht.geometry,ae=Ht.material,Jt=Ht.group;if(ae.side===fn&&Gt.layers.test(W.layers)){const Ne=ae.side;ae.side=Ke,ae.needsUpdate=!0,ys(Gt,G,W,Tt,ae,Jt),ae.side=Ne,ae.needsUpdate=!0,Pt=!0}}Pt===!0&&(Vt.updateMultisampleRenderTarget(B),Vt.updateRenderTargetMipmap(B))}x.setRenderTarget(K,J,at),x.setClearColor(q,X),it!==void 0&&(W.viewport=it),x.toneMapping=Q}function Jn(M,O,G){const W=O.isScene===!0?O.overrideMaterial:null;for(let S=0,B=M.length;S<B;S++){const Y=M[S],K=Y.object,J=Y.geometry,at=Y.group;let Q=Y.material;Q.allowOverride===!0&&W!==null&&(Q=W),K.layers.test(G.layers)&&ys(K,O,G,J,Q,at)}}function ys(M,O,G,W,S,B){M.onBeforeRender(x,O,G,W,S,B),M.modelViewMatrix.multiplyMatrices(G.matrixWorldInverse,M.matrixWorld),M.normalMatrix.getNormalMatrix(M.modelViewMatrix),S.onBeforeRender(x,O,G,W,M,B),S.transparent===!0&&S.side===fn&&S.forceSinglePass===!1?(S.side=Ke,S.needsUpdate=!0,x.renderBufferDirect(G,O,W,S,M,B),S.side=ai,S.needsUpdate=!0,x.renderBufferDirect(G,O,W,S,M,B),S.side=fn):x.renderBufferDirect(G,O,W,S,M,B),M.onAfterRender(x,O,G,W,S,B)}function xe(M,O,G){O.isScene!==!0&&(O=It);const W=Et.get(M),S=f.state.lights,B=f.state.shadowsArray,Y=S.state.version,K=j.getParameters(M,S.state,B,O,G),J=j.getProgramCacheKey(K);let at=W.programs;W.environment=M.isMeshStandardMaterial?O.environment:null,W.fog=O.fog,W.envMap=(M.isMeshStandardMaterial?_e:be).get(M.envMap||W.environment),W.envMapRotation=W.environment!==null&&M.envMap===null?O.environmentRotation:M.envMapRotation,at===void 0&&(M.addEventListener("dispose",nt),at=new Map,W.programs=at);let Q=at.get(J);if(Q!==void 0){if(W.currentProgram===Q&&W.lightsStateVersion===Y)return di(M,K),Q}else K.uniforms=j.getUniforms(M),M.onBeforeCompile(K,x),Q=j.acquireProgram(K,J),at.set(J,Q),W.uniforms=K.uniforms;const it=W.uniforms;return(!M.isShaderMaterial&&!M.isRawShaderMaterial||M.clipping===!0)&&(it.clippingPlanes=ut.uniform),di(M,K),W.needsLights=Js(M),W.lightsStateVersion=Y,W.needsLights&&(it.ambientLightColor.value=S.state.ambient,it.lightProbe.value=S.state.probe,it.directionalLights.value=S.state.directional,it.directionalLightShadows.value=S.state.directionalShadow,it.spotLights.value=S.state.spot,it.spotLightShadows.value=S.state.spotShadow,it.rectAreaLights.value=S.state.rectArea,it.ltc_1.value=S.state.rectAreaLTC1,it.ltc_2.value=S.state.rectAreaLTC2,it.pointLights.value=S.state.point,it.pointLightShadows.value=S.state.pointShadow,it.hemisphereLights.value=S.state.hemi,it.directionalShadowMap.value=S.state.directionalShadowMap,it.directionalShadowMatrix.value=S.state.directionalShadowMatrix,it.spotShadowMap.value=S.state.spotShadowMap,it.spotLightMatrix.value=S.state.spotLightMatrix,it.spotLightMap.value=S.state.spotLightMap,it.pointShadowMap.value=S.state.pointShadowMap,it.pointShadowMatrix.value=S.state.pointShadowMatrix),W.currentProgram=Q,W.uniformsList=null,Q}function Ss(M){if(M.uniformsList===null){const O=M.currentProgram.getUniforms();M.uniformsList=Fr.seqWithValue(O.seq,M.uniforms)}return M.uniformsList}function di(M,O){const G=Et.get(M);G.outputColorSpace=O.outputColorSpace,G.batching=O.batching,G.batchingColor=O.batchingColor,G.instancing=O.instancing,G.instancingColor=O.instancingColor,G.instancingMorph=O.instancingMorph,G.skinning=O.skinning,G.morphTargets=O.morphTargets,G.morphNormals=O.morphNormals,G.morphColors=O.morphColors,G.morphTargetsCount=O.morphTargetsCount,G.numClippingPlanes=O.numClippingPlanes,G.numIntersection=O.numClipIntersection,G.vertexAlphas=O.vertexAlphas,G.vertexTangents=O.vertexTangents,G.toneMapping=O.toneMapping}function $s(M,O,G,W,S){O.isScene!==!0&&(O=It),Vt.resetTextureUnits();const B=O.fog,Y=W.isMeshStandardMaterial?O.environment:null,K=F===null?x.outputColorSpace:F.isXRRenderTarget===!0?F.texture.colorSpace:as,J=(W.isMeshStandardMaterial?_e:be).get(W.envMap||Y),at=W.vertexColors===!0&&!!G.attributes.color&&G.attributes.color.itemSize===4,Q=!!G.attributes.tangent&&(!!W.normalMap||W.anisotropy>0),it=!!G.morphAttributes.position,Pt=!!G.morphAttributes.normal,Xt=!!G.morphAttributes.color;let jt=Xn;W.toneMapped&&(F===null||F.isXRRenderTarget===!0)&&(jt=x.toneMapping);const Ht=G.morphAttributes.position||G.morphAttributes.normal||G.morphAttributes.color,Gt=Ht!==void 0?Ht.length:0,Tt=Et.get(W),ae=f.state.lights;if(te===!0&&(tt===!0||M!==y)){const Ve=M===y&&W.id===w;ut.setState(W,M,Ve)}let Jt=!1;W.version===Tt.__version?(Tt.needsLights&&Tt.lightsStateVersion!==ae.state.version||Tt.outputColorSpace!==K||S.isBatchedMesh&&Tt.batching===!1||!S.isBatchedMesh&&Tt.batching===!0||S.isBatchedMesh&&Tt.batchingColor===!0&&S.colorTexture===null||S.isBatchedMesh&&Tt.batchingColor===!1&&S.colorTexture!==null||S.isInstancedMesh&&Tt.instancing===!1||!S.isInstancedMesh&&Tt.instancing===!0||S.isSkinnedMesh&&Tt.skinning===!1||!S.isSkinnedMesh&&Tt.skinning===!0||S.isInstancedMesh&&Tt.instancingColor===!0&&S.instanceColor===null||S.isInstancedMesh&&Tt.instancingColor===!1&&S.instanceColor!==null||S.isInstancedMesh&&Tt.instancingMorph===!0&&S.morphTexture===null||S.isInstancedMesh&&Tt.instancingMorph===!1&&S.morphTexture!==null||Tt.envMap!==J||W.fog===!0&&Tt.fog!==B||Tt.numClippingPlanes!==void 0&&(Tt.numClippingPlanes!==ut.numPlanes||Tt.numIntersection!==ut.numIntersection)||Tt.vertexAlphas!==at||Tt.vertexTangents!==Q||Tt.morphTargets!==it||Tt.morphNormals!==Pt||Tt.morphColors!==Xt||Tt.toneMapping!==jt||Tt.morphTargetsCount!==Gt)&&(Jt=!0):(Jt=!0,Tt.__version=W.version);let Ne=Tt.currentProgram;Jt===!0&&(Ne=xe(W,O,S));let Un=!1,Ge=!1,ws=!1;const Me=Ne.getUniforms(),cn=Tt.uniforms;if(At.useProgram(Ne.program)&&(Un=!0,Ge=!0,ws=!0),W.id!==w&&(w=W.id,Ge=!0),Un||y!==M){At.buffers.depth.getReversed()&&M.reversedDepth!==!0&&(M._reversedDepth=!0,M.updateProjectionMatrix()),Me.setValue(C,"projectionMatrix",M.projectionMatrix),Me.setValue(C,"viewMatrix",M.matrixWorldInverse);const Qe=Me.map.cameraPosition;Qe!==void 0&&Qe.setValue(C,wt.setFromMatrixPosition(M.matrixWorld)),Ft.logarithmicDepthBuffer&&Me.setValue(C,"logDepthBufFC",2/(Math.log(M.far+1)/Math.LN2)),(W.isMeshPhongMaterial||W.isMeshToonMaterial||W.isMeshLambertMaterial||W.isMeshBasicMaterial||W.isMeshStandardMaterial||W.isShaderMaterial)&&Me.setValue(C,"isOrthographic",M.isOrthographicCamera===!0),y!==M&&(y=M,Ge=!0,ws=!0)}if(S.isSkinnedMesh){Me.setOptional(C,S,"bindMatrix"),Me.setOptional(C,S,"bindMatrixInverse");const Ve=S.skeleton;Ve&&(Ve.boneTexture===null&&Ve.computeBoneTexture(),Me.setValue(C,"boneTexture",Ve.boneTexture,Vt))}S.isBatchedMesh&&(Me.setOptional(C,S,"batchingTexture"),Me.setValue(C,"batchingTexture",S._matricesTexture,Vt),Me.setOptional(C,S,"batchingIdTexture"),Me.setValue(C,"batchingIdTexture",S._indirectTexture,Vt),Me.setOptional(C,S,"batchingColorTexture"),S._colorsTexture!==null&&Me.setValue(C,"batchingColorTexture",S._colorsTexture,Vt));const hn=G.morphAttributes;if((hn.position!==void 0||hn.normal!==void 0||hn.color!==void 0)&&ct.update(S,G,Ne),(Ge||Tt.receiveShadow!==S.receiveShadow)&&(Tt.receiveShadow=S.receiveShadow,Me.setValue(C,"receiveShadow",S.receiveShadow)),W.isMeshGouraudMaterial&&W.envMap!==null&&(cn.envMap.value=J,cn.flipEnvMap.value=J.isCubeTexture&&J.isRenderTargetTexture===!1?-1:1),W.isMeshStandardMaterial&&W.envMap===null&&O.environment!==null&&(cn.envMapIntensity.value=O.environmentIntensity),Ge&&(Me.setValue(C,"toneMappingExposure",x.toneMappingExposure),Tt.needsLights&&js(cn,ws),B&&W.fog===!0&&st.refreshFogUniforms(cn,B),st.refreshMaterialUniforms(cn,W,V,et,f.state.transmissionRenderTarget[M.id]),Fr.upload(C,Ss(Tt),cn,Vt)),W.isShaderMaterial&&W.uniformsNeedUpdate===!0&&(Fr.upload(C,Ss(Tt),cn,Vt),W.uniformsNeedUpdate=!1),W.isSpriteMaterial&&Me.setValue(C,"center",S.center),Me.setValue(C,"modelViewMatrix",S.modelViewMatrix),Me.setValue(C,"normalMatrix",S.normalMatrix),Me.setValue(C,"modelMatrix",S.matrixWorld),W.isShaderMaterial||W.isRawShaderMaterial){const Ve=W.uniformsGroups;for(let Qe=0,Qr=Ve.length;Qe<Qr;Qe++){const fi=Ve[Qe];Wt.update(fi,Ne),Wt.bind(fi,Ne)}}return Ne}function js(M,O){M.ambientLightColor.needsUpdate=O,M.lightProbe.needsUpdate=O,M.directionalLights.needsUpdate=O,M.directionalLightShadows.needsUpdate=O,M.pointLights.needsUpdate=O,M.pointLightShadows.needsUpdate=O,M.spotLights.needsUpdate=O,M.spotLightShadows.needsUpdate=O,M.rectAreaLights.needsUpdate=O,M.hemisphereLights.needsUpdate=O}function Js(M){return M.isMeshLambertMaterial||M.isMeshToonMaterial||M.isMeshPhongMaterial||M.isMeshStandardMaterial||M.isShadowMaterial||M.isShaderMaterial&&M.lights===!0}this.getActiveCubeFace=function(){return D},this.getActiveMipmapLevel=function(){return I},this.getRenderTarget=function(){return F},this.setRenderTargetTextures=function(M,O,G){const W=Et.get(M);W.__autoAllocateDepthBuffer=M.resolveDepthBuffer===!1,W.__autoAllocateDepthBuffer===!1&&(W.__useRenderToTexture=!1),Et.get(M.texture).__webglTexture=O,Et.get(M.depthTexture).__webglTexture=W.__autoAllocateDepthBuffer?void 0:G,W.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(M,O){const G=Et.get(M);G.__webglFramebuffer=O,G.__useDefaultFramebuffer=O===void 0};const Qs=C.createFramebuffer();this.setRenderTarget=function(M,O=0,G=0){F=M,D=O,I=G;let W=!0,S=null,B=!1,Y=!1;if(M){const J=Et.get(M);if(J.__useDefaultFramebuffer!==void 0)At.bindFramebuffer(C.FRAMEBUFFER,null),W=!1;else if(J.__webglFramebuffer===void 0)Vt.setupRenderTarget(M);else if(J.__hasExternalTextures)Vt.rebindTextures(M,Et.get(M.texture).__webglTexture,Et.get(M.depthTexture).__webglTexture);else if(M.depthBuffer){const it=M.depthTexture;if(J.__boundDepthTexture!==it){if(it!==null&&Et.has(it)&&(M.width!==it.image.width||M.height!==it.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");Vt.setupDepthRenderbuffer(M)}}const at=M.texture;(at.isData3DTexture||at.isDataArrayTexture||at.isCompressedArrayTexture)&&(Y=!0);const Q=Et.get(M).__webglFramebuffer;M.isWebGLCubeRenderTarget?(Array.isArray(Q[O])?S=Q[O][G]:S=Q[O],B=!0):M.samples>0&&Vt.useMultisampledRTT(M)===!1?S=Et.get(M).__webglMultisampledFramebuffer:Array.isArray(Q)?S=Q[G]:S=Q,L.copy(M.viewport),z.copy(M.scissor),H=M.scissorTest}else L.copy(Lt).multiplyScalar(V).floor(),z.copy(qt).multiplyScalar(V).floor(),H=re;if(G!==0&&(S=Qs),At.bindFramebuffer(C.FRAMEBUFFER,S)&&W&&At.drawBuffers(M,S),At.viewport(L),At.scissor(z),At.setScissorTest(H),B){const J=Et.get(M.texture);C.framebufferTexture2D(C.FRAMEBUFFER,C.COLOR_ATTACHMENT0,C.TEXTURE_CUBE_MAP_POSITIVE_X+O,J.__webglTexture,G)}else if(Y){const J=O;for(let at=0;at<M.textures.length;at++){const Q=Et.get(M.textures[at]);C.framebufferTextureLayer(C.FRAMEBUFFER,C.COLOR_ATTACHMENT0+at,Q.__webglTexture,G,J)}}else if(M!==null&&G!==0){const J=Et.get(M.texture);C.framebufferTexture2D(C.FRAMEBUFFER,C.COLOR_ATTACHMENT0,C.TEXTURE_2D,J.__webglTexture,G)}w=-1},this.readRenderTargetPixels=function(M,O,G,W,S,B,Y,K=0){if(!(M&&M.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let J=Et.get(M).__webglFramebuffer;if(M.isWebGLCubeRenderTarget&&Y!==void 0&&(J=J[Y]),J){At.bindFramebuffer(C.FRAMEBUFFER,J);try{const at=M.textures[K],Q=at.format,it=at.type;if(!Ft.textureFormatReadable(Q)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!Ft.textureTypeReadable(it)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}O>=0&&O<=M.width-W&&G>=0&&G<=M.height-S&&(M.textures.length>1&&C.readBuffer(C.COLOR_ATTACHMENT0+K),C.readPixels(O,G,W,S,bt.convert(Q),bt.convert(it),B))}finally{const at=F!==null?Et.get(F).__webglFramebuffer:null;At.bindFramebuffer(C.FRAMEBUFFER,at)}}},this.readRenderTargetPixelsAsync=async function(M,O,G,W,S,B,Y,K=0){if(!(M&&M.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let J=Et.get(M).__webglFramebuffer;if(M.isWebGLCubeRenderTarget&&Y!==void 0&&(J=J[Y]),J)if(O>=0&&O<=M.width-W&&G>=0&&G<=M.height-S){At.bindFramebuffer(C.FRAMEBUFFER,J);const at=M.textures[K],Q=at.format,it=at.type;if(!Ft.textureFormatReadable(Q))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Ft.textureTypeReadable(it))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const Pt=C.createBuffer();C.bindBuffer(C.PIXEL_PACK_BUFFER,Pt),C.bufferData(C.PIXEL_PACK_BUFFER,B.byteLength,C.STREAM_READ),M.textures.length>1&&C.readBuffer(C.COLOR_ATTACHMENT0+K),C.readPixels(O,G,W,S,bt.convert(Q),bt.convert(it),0);const Xt=F!==null?Et.get(F).__webglFramebuffer:null;At.bindFramebuffer(C.FRAMEBUFFER,Xt);const jt=C.fenceSync(C.SYNC_GPU_COMMANDS_COMPLETE,0);return C.flush(),await Ou(C,jt,4),C.bindBuffer(C.PIXEL_PACK_BUFFER,Pt),C.getBufferSubData(C.PIXEL_PACK_BUFFER,0,B),C.deleteBuffer(Pt),C.deleteSync(jt),B}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(M,O=null,G=0){const W=Math.pow(2,-G),S=Math.floor(M.image.width*W),B=Math.floor(M.image.height*W),Y=O!==null?O.x:0,K=O!==null?O.y:0;Vt.setTexture2D(M,0),C.copyTexSubImage2D(C.TEXTURE_2D,G,0,0,Y,K,S,B),At.unbindTexture()};const tr=C.createFramebuffer(),er=C.createFramebuffer();this.copyTextureToTexture=function(M,O,G=null,W=null,S=0,B=null){B===null&&(S!==0?(Ws("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),B=S,S=0):B=0);let Y,K,J,at,Q,it,Pt,Xt,jt;const Ht=M.isCompressedTexture?M.mipmaps[B]:M.image;if(G!==null)Y=G.max.x-G.min.x,K=G.max.y-G.min.y,J=G.isBox3?G.max.z-G.min.z:1,at=G.min.x,Q=G.min.y,it=G.isBox3?G.min.z:0;else{const hn=Math.pow(2,-S);Y=Math.floor(Ht.width*hn),K=Math.floor(Ht.height*hn),M.isDataArrayTexture?J=Ht.depth:M.isData3DTexture?J=Math.floor(Ht.depth*hn):J=1,at=0,Q=0,it=0}W!==null?(Pt=W.x,Xt=W.y,jt=W.z):(Pt=0,Xt=0,jt=0);const Gt=bt.convert(O.format),Tt=bt.convert(O.type);let ae;O.isData3DTexture?(Vt.setTexture3D(O,0),ae=C.TEXTURE_3D):O.isDataArrayTexture||O.isCompressedArrayTexture?(Vt.setTexture2DArray(O,0),ae=C.TEXTURE_2D_ARRAY):(Vt.setTexture2D(O,0),ae=C.TEXTURE_2D),C.pixelStorei(C.UNPACK_FLIP_Y_WEBGL,O.flipY),C.pixelStorei(C.UNPACK_PREMULTIPLY_ALPHA_WEBGL,O.premultiplyAlpha),C.pixelStorei(C.UNPACK_ALIGNMENT,O.unpackAlignment);const Jt=C.getParameter(C.UNPACK_ROW_LENGTH),Ne=C.getParameter(C.UNPACK_IMAGE_HEIGHT),Un=C.getParameter(C.UNPACK_SKIP_PIXELS),Ge=C.getParameter(C.UNPACK_SKIP_ROWS),ws=C.getParameter(C.UNPACK_SKIP_IMAGES);C.pixelStorei(C.UNPACK_ROW_LENGTH,Ht.width),C.pixelStorei(C.UNPACK_IMAGE_HEIGHT,Ht.height),C.pixelStorei(C.UNPACK_SKIP_PIXELS,at),C.pixelStorei(C.UNPACK_SKIP_ROWS,Q),C.pixelStorei(C.UNPACK_SKIP_IMAGES,it);const Me=M.isDataArrayTexture||M.isData3DTexture,cn=O.isDataArrayTexture||O.isData3DTexture;if(M.isDepthTexture){const hn=Et.get(M),Ve=Et.get(O),Qe=Et.get(hn.__renderTarget),Qr=Et.get(Ve.__renderTarget);At.bindFramebuffer(C.READ_FRAMEBUFFER,Qe.__webglFramebuffer),At.bindFramebuffer(C.DRAW_FRAMEBUFFER,Qr.__webglFramebuffer);for(let fi=0;fi<J;fi++)Me&&(C.framebufferTextureLayer(C.READ_FRAMEBUFFER,C.COLOR_ATTACHMENT0,Et.get(M).__webglTexture,S,it+fi),C.framebufferTextureLayer(C.DRAW_FRAMEBUFFER,C.COLOR_ATTACHMENT0,Et.get(O).__webglTexture,B,jt+fi)),C.blitFramebuffer(at,Q,Y,K,Pt,Xt,Y,K,C.DEPTH_BUFFER_BIT,C.NEAREST);At.bindFramebuffer(C.READ_FRAMEBUFFER,null),At.bindFramebuffer(C.DRAW_FRAMEBUFFER,null)}else if(S!==0||M.isRenderTargetTexture||Et.has(M)){const hn=Et.get(M),Ve=Et.get(O);At.bindFramebuffer(C.READ_FRAMEBUFFER,tr),At.bindFramebuffer(C.DRAW_FRAMEBUFFER,er);for(let Qe=0;Qe<J;Qe++)Me?C.framebufferTextureLayer(C.READ_FRAMEBUFFER,C.COLOR_ATTACHMENT0,hn.__webglTexture,S,it+Qe):C.framebufferTexture2D(C.READ_FRAMEBUFFER,C.COLOR_ATTACHMENT0,C.TEXTURE_2D,hn.__webglTexture,S),cn?C.framebufferTextureLayer(C.DRAW_FRAMEBUFFER,C.COLOR_ATTACHMENT0,Ve.__webglTexture,B,jt+Qe):C.framebufferTexture2D(C.DRAW_FRAMEBUFFER,C.COLOR_ATTACHMENT0,C.TEXTURE_2D,Ve.__webglTexture,B),S!==0?C.blitFramebuffer(at,Q,Y,K,Pt,Xt,Y,K,C.COLOR_BUFFER_BIT,C.NEAREST):cn?C.copyTexSubImage3D(ae,B,Pt,Xt,jt+Qe,at,Q,Y,K):C.copyTexSubImage2D(ae,B,Pt,Xt,at,Q,Y,K);At.bindFramebuffer(C.READ_FRAMEBUFFER,null),At.bindFramebuffer(C.DRAW_FRAMEBUFFER,null)}else cn?M.isDataTexture||M.isData3DTexture?C.texSubImage3D(ae,B,Pt,Xt,jt,Y,K,J,Gt,Tt,Ht.data):O.isCompressedArrayTexture?C.compressedTexSubImage3D(ae,B,Pt,Xt,jt,Y,K,J,Gt,Ht.data):C.texSubImage3D(ae,B,Pt,Xt,jt,Y,K,J,Gt,Tt,Ht):M.isDataTexture?C.texSubImage2D(C.TEXTURE_2D,B,Pt,Xt,Y,K,Gt,Tt,Ht.data):M.isCompressedTexture?C.compressedTexSubImage2D(C.TEXTURE_2D,B,Pt,Xt,Ht.width,Ht.height,Gt,Ht.data):C.texSubImage2D(C.TEXTURE_2D,B,Pt,Xt,Y,K,Gt,Tt,Ht);C.pixelStorei(C.UNPACK_ROW_LENGTH,Jt),C.pixelStorei(C.UNPACK_IMAGE_HEIGHT,Ne),C.pixelStorei(C.UNPACK_SKIP_PIXELS,Un),C.pixelStorei(C.UNPACK_SKIP_ROWS,Ge),C.pixelStorei(C.UNPACK_SKIP_IMAGES,ws),B===0&&O.generateMipmaps&&C.generateMipmap(ae),At.unbindTexture()},this.initRenderTarget=function(M){Et.get(M).__webglFramebuffer===void 0&&Vt.setupRenderTarget(M)},this.initTexture=function(M){M.isCubeTexture?Vt.setTextureCube(M,0):M.isData3DTexture?Vt.setTexture3D(M,0):M.isDataArrayTexture||M.isCompressedArrayTexture?Vt.setTexture2DArray(M,0):Vt.setTexture2D(M,0),At.unbindTexture()},this.resetState=function(){D=0,I=0,F=null,At.reset(),mt.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return Pn}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(t){this._outputColorSpace=t;const e=this.getContext();e.drawingBufferColorSpace=ne._getDrawingBufferColorSpace(t),e.unpackColorSpace=ne._getUnpackColorSpace()}}const Or={name:"CopyShader",uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:`

		varying vec2 vUv;

		void main() {

			vUv = uv;
			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );

		}`,fragmentShader:`

		uniform float opacity;

		uniform sampler2D tDiffuse;

		varying vec2 vUv;

		void main() {

			vec4 texel = texture2D( tDiffuse, vUv );
			gl_FragColor = opacity * texel;


		}`};class Ys{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}dispose(){}}const og=new el(-1,1,1,-1,0,1);class lg extends me{constructor(){super(),this.setAttribute("position",new ge([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new ge([0,2,0,0,2,0],2))}}const cg=new lg;class dh{constructor(t){this._mesh=new xt(cg,t)}dispose(){this._mesh.geometry.dispose()}render(t){t.render(this._mesh,og)}get material(){return this._mesh.material}set material(t){this._mesh.material=t}}class fh extends Ys{constructor(t,e="tDiffuse"){super(),this.textureID=e,this.uniforms=null,this.material=null,t instanceof ze?(this.uniforms=t.uniforms,this.material=t):t&&(this.uniforms=Vr.clone(t.uniforms),this.material=new ze({name:t.name!==void 0?t.name:"unspecified",defines:Object.assign({},t.defines),uniforms:this.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})),this._fsQuad=new dh(this.material)}render(t,e,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=n.texture),this._fsQuad.material=this.material,this.renderToScreen?(t.setRenderTarget(null),this._fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this._fsQuad.render(t))}dispose(){this.material.dispose(),this._fsQuad.dispose()}}class yc extends Ys{constructor(t,e){super(),this.scene=t,this.camera=e,this.clear=!0,this.needsSwap=!1,this.inverse=!1}render(t,e,n){const s=t.getContext(),r=t.state;r.buffers.color.setMask(!1),r.buffers.depth.setMask(!1),r.buffers.color.setLocked(!0),r.buffers.depth.setLocked(!0);let a,o;this.inverse?(a=0,o=1):(a=1,o=0),r.buffers.stencil.setTest(!0),r.buffers.stencil.setOp(s.REPLACE,s.REPLACE,s.REPLACE),r.buffers.stencil.setFunc(s.ALWAYS,a,4294967295),r.buffers.stencil.setClear(o),r.buffers.stencil.setLocked(!0),t.setRenderTarget(n),this.clear&&t.clear(),t.render(this.scene,this.camera),t.setRenderTarget(e),this.clear&&t.clear(),t.render(this.scene,this.camera),r.buffers.color.setLocked(!1),r.buffers.depth.setLocked(!1),r.buffers.color.setMask(!0),r.buffers.depth.setMask(!0),r.buffers.stencil.setLocked(!1),r.buffers.stencil.setFunc(s.EQUAL,1,4294967295),r.buffers.stencil.setOp(s.KEEP,s.KEEP,s.KEEP),r.buffers.stencil.setLocked(!0)}}class hg extends Ys{constructor(){super(),this.needsSwap=!1}render(t){t.state.buffers.stencil.setLocked(!1),t.state.buffers.stencil.setTest(!1)}}class ug{constructor(t,e){if(this.renderer=t,this._pixelRatio=t.getPixelRatio(),e===void 0){const n=t.getSize(new Dt);this._width=n.width,this._height=n.height,e=new Tn(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:qn}),e.texture.name="EffectComposer.rt1"}else this._width=e.width,this._height=e.height;this.renderTarget1=e,this.renderTarget2=e.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],this.copyPass=new fh(Or),this.copyPass.material.blending=Wn,this.clock=new ah}swapBuffers(){const t=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=t}addPass(t){this.passes.push(t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}insertPass(t,e){this.passes.splice(e,0,t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}removePass(t){const e=this.passes.indexOf(t);e!==-1&&this.passes.splice(e,1)}isLastEnabledPass(t){for(let e=t+1;e<this.passes.length;e++)if(this.passes[e].enabled)return!1;return!0}render(t){t===void 0&&(t=this.clock.getDelta());const e=this.renderer.getRenderTarget();let n=!1;for(let s=0,r=this.passes.length;s<r;s++){const a=this.passes[s];if(a.enabled!==!1){if(a.renderToScreen=this.renderToScreen&&this.isLastEnabledPass(s),a.render(this.renderer,this.writeBuffer,this.readBuffer,t,n),a.needsSwap){if(n){const o=this.renderer.getContext(),l=this.renderer.state.buffers.stencil;l.setFunc(o.NOTEQUAL,1,4294967295),this.copyPass.render(this.renderer,this.writeBuffer,this.readBuffer,t),l.setFunc(o.EQUAL,1,4294967295)}this.swapBuffers()}yc!==void 0&&(a instanceof yc?n=!0:a instanceof hg&&(n=!1))}}this.renderer.setRenderTarget(e)}reset(t){if(t===void 0){const e=this.renderer.getSize(new Dt);this._pixelRatio=this.renderer.getPixelRatio(),this._width=e.width,this._height=e.height,t=this.renderTarget1.clone(),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}this.renderTarget1.dispose(),this.renderTarget2.dispose(),this.renderTarget1=t,this.renderTarget2=t.clone(),this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2}setSize(t,e){this._width=t,this._height=e;const n=this._width*this._pixelRatio,s=this._height*this._pixelRatio;this.renderTarget1.setSize(n,s),this.renderTarget2.setSize(n,s);for(let r=0;r<this.passes.length;r++)this.passes[r].setSize(n,s)}setPixelRatio(t){this._pixelRatio=t,this.setSize(this._width,this._height)}dispose(){this.renderTarget1.dispose(),this.renderTarget2.dispose(),this.copyPass.dispose()}}class dg extends Ys{constructor(t,e,n=null,s=null,r=null){super(),this.scene=t,this.camera=e,this.overrideMaterial=n,this.clearColor=s,this.clearAlpha=r,this.clear=!0,this.clearDepth=!1,this.needsSwap=!1,this._oldClearColor=new ft}render(t,e,n){const s=t.autoClear;t.autoClear=!1;let r,a;this.overrideMaterial!==null&&(a=this.scene.overrideMaterial,this.scene.overrideMaterial=this.overrideMaterial),this.clearColor!==null&&(t.getClearColor(this._oldClearColor),t.setClearColor(this.clearColor,t.getClearAlpha())),this.clearAlpha!==null&&(r=t.getClearAlpha(),t.setClearAlpha(this.clearAlpha)),this.clearDepth==!0&&t.clearDepth(),t.setRenderTarget(this.renderToScreen?null:n),this.clear===!0&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),t.render(this.scene,this.camera),this.clearColor!==null&&t.setClearColor(this._oldClearColor),this.clearAlpha!==null&&t.setClearAlpha(r),this.overrideMaterial!==null&&(this.scene.overrideMaterial=a),t.autoClear=s}}const fg={uniforms:{tDiffuse:{value:null},luminosityThreshold:{value:1},smoothWidth:{value:1},defaultColor:{value:new ft(0)},defaultOpacity:{value:0}},vertexShader:`

		varying vec2 vUv;

		void main() {

			vUv = uv;

			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );

		}`,fragmentShader:`

		uniform sampler2D tDiffuse;
		uniform vec3 defaultColor;
		uniform float defaultOpacity;
		uniform float luminosityThreshold;
		uniform float smoothWidth;

		varying vec2 vUv;

		void main() {

			vec4 texel = texture2D( tDiffuse, vUv );

			float v = luminance( texel.xyz );

			vec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );

			float alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );

			gl_FragColor = mix( outputColor, texel, alpha );

		}`};class cs extends Ys{constructor(t,e=1,n,s){super(),this.strength=e,this.radius=n,this.threshold=s,this.resolution=t!==void 0?new Dt(t.x,t.y):new Dt(256,256),this.clearColor=new ft(0,0,0),this.needsSwap=!1,this.renderTargetsHorizontal=[],this.renderTargetsVertical=[],this.nMips=5;let r=Math.round(this.resolution.x/2),a=Math.round(this.resolution.y/2);this.renderTargetBright=new Tn(r,a,{type:qn}),this.renderTargetBright.texture.name="UnrealBloomPass.bright",this.renderTargetBright.texture.generateMipmaps=!1;for(let h=0;h<this.nMips;h++){const u=new Tn(r,a,{type:qn});u.texture.name="UnrealBloomPass.h"+h,u.texture.generateMipmaps=!1,this.renderTargetsHorizontal.push(u);const d=new Tn(r,a,{type:qn});d.texture.name="UnrealBloomPass.v"+h,d.texture.generateMipmaps=!1,this.renderTargetsVertical.push(d),r=Math.round(r/2),a=Math.round(a/2)}const o=fg;this.highPassUniforms=Vr.clone(o.uniforms),this.highPassUniforms.luminosityThreshold.value=s,this.highPassUniforms.smoothWidth.value=.01,this.materialHighPassFilter=new ze({uniforms:this.highPassUniforms,vertexShader:o.vertexShader,fragmentShader:o.fragmentShader}),this.separableBlurMaterials=[];const l=[3,5,7,9,11];r=Math.round(this.resolution.x/2),a=Math.round(this.resolution.y/2);for(let h=0;h<this.nMips;h++)this.separableBlurMaterials.push(this._getSeparableBlurMaterial(l[h])),this.separableBlurMaterials[h].uniforms.invSize.value=new Dt(1/r,1/a),r=Math.round(r/2),a=Math.round(a/2);this.compositeMaterial=this._getCompositeMaterial(this.nMips),this.compositeMaterial.uniforms.blurTexture1.value=this.renderTargetsVertical[0].texture,this.compositeMaterial.uniforms.blurTexture2.value=this.renderTargetsVertical[1].texture,this.compositeMaterial.uniforms.blurTexture3.value=this.renderTargetsVertical[2].texture,this.compositeMaterial.uniforms.blurTexture4.value=this.renderTargetsVertical[3].texture,this.compositeMaterial.uniforms.blurTexture5.value=this.renderTargetsVertical[4].texture,this.compositeMaterial.uniforms.bloomStrength.value=e,this.compositeMaterial.uniforms.bloomRadius.value=.1;const c=[1,.8,.6,.4,.2];this.compositeMaterial.uniforms.bloomFactors.value=c,this.bloomTintColors=[new A(1,1,1),new A(1,1,1),new A(1,1,1),new A(1,1,1),new A(1,1,1)],this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors,this.copyUniforms=Vr.clone(Or.uniforms),this.blendMaterial=new ze({uniforms:this.copyUniforms,vertexShader:Or.vertexShader,fragmentShader:Or.fragmentShader,blending:Ee,depthTest:!1,depthWrite:!1,transparent:!0}),this._oldClearColor=new ft,this._oldClearAlpha=1,this._basic=new Be,this._fsQuad=new dh(null)}dispose(){for(let t=0;t<this.renderTargetsHorizontal.length;t++)this.renderTargetsHorizontal[t].dispose();for(let t=0;t<this.renderTargetsVertical.length;t++)this.renderTargetsVertical[t].dispose();this.renderTargetBright.dispose();for(let t=0;t<this.separableBlurMaterials.length;t++)this.separableBlurMaterials[t].dispose();this.compositeMaterial.dispose(),this.blendMaterial.dispose(),this._basic.dispose(),this._fsQuad.dispose()}setSize(t,e){let n=Math.round(t/2),s=Math.round(e/2);this.renderTargetBright.setSize(n,s);for(let r=0;r<this.nMips;r++)this.renderTargetsHorizontal[r].setSize(n,s),this.renderTargetsVertical[r].setSize(n,s),this.separableBlurMaterials[r].uniforms.invSize.value=new Dt(1/n,1/s),n=Math.round(n/2),s=Math.round(s/2)}render(t,e,n,s,r){t.getClearColor(this._oldClearColor),this._oldClearAlpha=t.getClearAlpha();const a=t.autoClear;t.autoClear=!1,t.setClearColor(this.clearColor,0),r&&t.state.buffers.stencil.setTest(!1),this.renderToScreen&&(this._fsQuad.material=this._basic,this._basic.map=n.texture,t.setRenderTarget(null),t.clear(),this._fsQuad.render(t)),this.highPassUniforms.tDiffuse.value=n.texture,this.highPassUniforms.luminosityThreshold.value=this.threshold,this._fsQuad.material=this.materialHighPassFilter,t.setRenderTarget(this.renderTargetBright),t.clear(),this._fsQuad.render(t);let o=this.renderTargetBright;for(let l=0;l<this.nMips;l++)this._fsQuad.material=this.separableBlurMaterials[l],this.separableBlurMaterials[l].uniforms.colorTexture.value=o.texture,this.separableBlurMaterials[l].uniforms.direction.value=cs.BlurDirectionX,t.setRenderTarget(this.renderTargetsHorizontal[l]),t.clear(),this._fsQuad.render(t),this.separableBlurMaterials[l].uniforms.colorTexture.value=this.renderTargetsHorizontal[l].texture,this.separableBlurMaterials[l].uniforms.direction.value=cs.BlurDirectionY,t.setRenderTarget(this.renderTargetsVertical[l]),t.clear(),this._fsQuad.render(t),o=this.renderTargetsVertical[l];this._fsQuad.material=this.compositeMaterial,this.compositeMaterial.uniforms.bloomStrength.value=this.strength,this.compositeMaterial.uniforms.bloomRadius.value=this.radius,this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors,t.setRenderTarget(this.renderTargetsHorizontal[0]),t.clear(),this._fsQuad.render(t),this._fsQuad.material=this.blendMaterial,this.copyUniforms.tDiffuse.value=this.renderTargetsHorizontal[0].texture,r&&t.state.buffers.stencil.setTest(!0),this.renderToScreen?(t.setRenderTarget(null),this._fsQuad.render(t)):(t.setRenderTarget(n),this._fsQuad.render(t)),t.setClearColor(this._oldClearColor,this._oldClearAlpha),t.autoClear=a}_getSeparableBlurMaterial(t){const e=[];for(let n=0;n<t;n++)e.push(.39894*Math.exp(-.5*n*n/(t*t))/t);return new ze({defines:{KERNEL_RADIUS:t},uniforms:{colorTexture:{value:null},invSize:{value:new Dt(.5,.5)},direction:{value:new Dt(.5,.5)},gaussianCoefficients:{value:e}},vertexShader:`varying vec2 vUv;
				void main() {
					vUv = uv;
					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
				}`,fragmentShader:`#include <common>
				varying vec2 vUv;
				uniform sampler2D colorTexture;
				uniform vec2 invSize;
				uniform vec2 direction;
				uniform float gaussianCoefficients[KERNEL_RADIUS];

				void main() {
					float weightSum = gaussianCoefficients[0];
					vec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;
					for( int i = 1; i < KERNEL_RADIUS; i ++ ) {
						float x = float(i);
						float w = gaussianCoefficients[i];
						vec2 uvOffset = direction * invSize * x;
						vec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;
						vec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;
						diffuseSum += (sample1 + sample2) * w;
						weightSum += 2.0 * w;
					}
					gl_FragColor = vec4(diffuseSum/weightSum, 1.0);
				}`})}_getCompositeMaterial(t){return new ze({defines:{NUM_MIPS:t},uniforms:{blurTexture1:{value:null},blurTexture2:{value:null},blurTexture3:{value:null},blurTexture4:{value:null},blurTexture5:{value:null},bloomStrength:{value:1},bloomFactors:{value:null},bloomTintColors:{value:null},bloomRadius:{value:0}},vertexShader:`varying vec2 vUv;
				void main() {
					vUv = uv;
					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
				}`,fragmentShader:`varying vec2 vUv;
				uniform sampler2D blurTexture1;
				uniform sampler2D blurTexture2;
				uniform sampler2D blurTexture3;
				uniform sampler2D blurTexture4;
				uniform sampler2D blurTexture5;
				uniform float bloomStrength;
				uniform float bloomRadius;
				uniform float bloomFactors[NUM_MIPS];
				uniform vec3 bloomTintColors[NUM_MIPS];

				float lerpBloomFactor(const in float factor) {
					float mirrorFactor = 1.2 - factor;
					return mix(factor, mirrorFactor, bloomRadius);
				}

				void main() {
					gl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +
						lerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +
						lerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +
						lerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +
						lerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );
				}`})}}cs.BlurDirectionX=new Dt(1,0);cs.BlurDirectionY=new Dt(0,1);function _s(i){let t=i>>>0;return function(){t|=0,t=t+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}}function bn(i,t){const e=document.createElement("canvas");return e.width=i,e.height=t,e}function nn(i,{srgb:t=!1,repeat:e=null,anisotropy:n=8}={}){const s=new nh(i);return s.wrapS=s.wrapT=Bs,s.colorSpace=t?Ze:Gn,s.anisotropy=n,e&&s.repeat.set(e[0],e[1]),s.needsUpdate=!0,s}function pg(i=7,t=512){const e=_s(i),n=bn(t,t),s=bn(t,t),r=n.getContext("2d"),a=s.getContext("2d");r.fillStyle="#3b3d42",r.fillRect(0,0,t,t),a.fillStyle="#b9b9b9",a.fillRect(0,0,t,t);const o=r.getImageData(0,0,t,t),l=o.data;for(let d=0;d<l.length;d+=4){const p=(e()-.5)*24;l[d]=Math.max(0,l[d]+p),l[d+1]=Math.max(0,l[d+1]+p),l[d+2]=Math.max(0,l[d+2]+p)}r.putImageData(o,0,0);for(let d=0;d<24;d++){const p=e()*t,g=e()*t,_=20+e()*105,m=r.createRadialGradient(p,g,0,p,g,_);m.addColorStop(0,`rgba(12,15,19,${.04+e()*.12})`),m.addColorStop(1,"rgba(12,15,19,0)"),r.fillStyle=m,r.fillRect(p-_,g-_,_*2,_*2);const f=a.createRadialGradient(p,g,0,p,g,_);f.addColorStop(0,`rgba(20,20,20,${.25+e()*.3})`),f.addColorStop(1,"rgba(20,20,20,0)"),a.fillStyle=f,a.fillRect(p-_,g-_,_*2,_*2)}r.lineCap="round";for(let d=0;d<15;d++){let p=e()*t,g=e()*t;r.beginPath(),r.moveTo(p,g);for(let _=0;_<7;_++)p+=(e()-.5)*36,g+=e()*26,r.lineTo(p,g);r.strokeStyle=`rgba(8,9,12,${.18+e()*.2})`,r.lineWidth=.6+e()*1.4,r.stroke()}r.strokeStyle="rgba(8, 10, 13, .55)",r.lineWidth=2,a.strokeStyle="rgba(55, 55, 55, .5)",a.lineWidth=4;for(let d=1;d<3;d++){const p=t/3*d;r.beginPath(),r.moveTo(p,0),r.lineTo(p,t),r.stroke(),r.beginPath(),r.moveTo(0,p),r.lineTo(t,p),r.stroke(),a.beginPath(),a.moveTo(p,0),a.lineTo(p,t),a.stroke(),a.beginPath(),a.moveTo(0,p),a.lineTo(t,p),a.stroke()}for(let d=0;d<900;d++){const p=e()*t,g=e()*t,_=e()*1.8;r.fillStyle=e()>.5?"rgba(155,155,150,.10)":"rgba(7,8,10,.16)",r.fillRect(p,g,_,_)}const c=nn(n,{srgb:!0,repeat:[5,5]}),h=nn(s,{repeat:[5,5]}),u=nn(s,{repeat:[5,5]});return{map:c,roughnessMap:h,bumpMap:u}}function mg(i=19,t=1024){const e=_s(i),n=bn(t,t),s=bn(t,t),r=n.getContext("2d"),a=s.getContext("2d");r.fillStyle="#2d3035",r.fillRect(0,0,t,t),a.fillStyle="#c2c2c2",a.fillRect(0,0,t,t);const o=r.getImageData(0,0,t,t),l=o.data;for(let c=0;c<l.length;c+=4){const h=(e()-.5)*18;l[c]+=h,l[c+1]+=h,l[c+2]+=h}r.putImageData(o,0,0);for(let c=0;c<22;c++){const h=e()*t,u=e()*t,d=45+e()*200,p=20+e()*100;r.save(),r.translate(h,u),r.rotate(e()*Math.PI),r.scale(1,p/d);const g=r.createRadialGradient(0,0,0,0,0,d);g.addColorStop(0,"rgba(8,12,18,.36)"),g.addColorStop(.55,"rgba(10,13,18,.18)"),g.addColorStop(1,"rgba(10,13,18,0)"),r.fillStyle=g,r.beginPath(),r.arc(0,0,d,0,Math.PI*2),r.fill(),r.restore(),a.save(),a.translate(h,u),a.rotate(e()*Math.PI),a.scale(1,p/d);const _=a.createRadialGradient(0,0,0,0,0,d);_.addColorStop(0,"rgba(3,3,3,.96)"),_.addColorStop(.7,"rgba(30,30,30,.8)"),_.addColorStop(1,"rgba(120,120,120,0)"),a.fillStyle=_,a.beginPath(),a.arc(0,0,d,0,Math.PI*2),a.fill(),a.restore()}r.strokeStyle="rgba(5,7,10,.7)",r.lineWidth=3,a.strokeStyle="rgba(60,60,60,.8)",a.lineWidth=5;for(let c=0;c<=4;c++){const h=t/4*c;r.beginPath(),r.moveTo(h,0),r.lineTo(h,t),r.stroke(),r.beginPath(),r.moveTo(0,h),r.lineTo(t,h),r.stroke(),a.beginPath(),a.moveTo(h,0),a.lineTo(h,t),a.stroke(),a.beginPath(),a.moveTo(0,h),a.lineTo(t,h),a.stroke()}for(let c=0;c<70;c++)r.fillStyle=`rgba(4,5,7,${.1+e()*.2})`,r.fillRect(e()*t,e()*t,1+e()*5,1+e()*3);return{map:nn(n,{srgb:!0,repeat:[7,7]}),roughnessMap:nn(s,{repeat:[7,7]}),bumpMap:nn(s,{repeat:[7,7]})}}function gg(i=33,t=512){const e=_s(i),n=bn(t,t),s=bn(t,t),r=n.getContext("2d"),a=s.getContext("2d");r.fillStyle="#24262a",r.fillRect(0,0,t,t),a.fillStyle="#6d6d6d",a.fillRect(0,0,t,t);for(let o=0;o<t;o++){const l=e()*t;r.fillStyle=`rgba(255,255,255,${e()*.035})`,r.fillRect(0,l,t,.5+e()*1.5)}for(let o=0;o<45;o++){const l=e()*t,c=e()*t,h=3+e()*36,u=r.createRadialGradient(l,c,0,l,c,h);u.addColorStop(0,`rgba(100,60,28,${e()*.22})`),u.addColorStop(1,"rgba(100,60,28,0)"),r.fillStyle=u,r.fillRect(l-h,c-h,h*2,h*2)}return{map:nn(n,{srgb:!0,repeat:[2,2]}),roughnessMap:nn(s,{repeat:[2,2]}),bumpMap:nn(s,{repeat:[2,2]})}}function vs(i=128,t="rgba(255,255,255,1)",e="rgba(255,255,255,0)"){const n=bn(i,i),s=n.getContext("2d"),r=s.createRadialGradient(i/2,i/2,0,i/2,i/2,i/2);return r.addColorStop(0,t),r.addColorStop(.16,t),r.addColorStop(.45,"rgba(255,255,255,.28)"),r.addColorStop(1,e),s.fillStyle=r,s.fillRect(0,0,i,i),nn(n,{srgb:!0})}function ph(i=3){const t=_s(i),e=128,n=bn(e,e),s=n.getContext("2d");for(let r=0;r<22;r++){const a=e*(.25+t()*.5),o=e*(.25+t()*.5),l=10+t()*32,c=s.createRadialGradient(a,o,0,a,o,l);c.addColorStop(0,`rgba(255,255,255,${.04+t()*.1})`),c.addColorStop(1,"rgba(255,255,255,0)"),s.fillStyle=c,s.fillRect(0,0,e,e)}return nn(n,{srgb:!0})}function Ua({title:i="NIGHT SHIFT",sub:t="OPEN LATE  /  24 H",accent:e="#ff6b2d",accent2:n="#8de8ff",width:s=1024,height:r=512,vertical:a=!1}={}){const o=bn(s,r),l=o.getContext("2d");l.fillStyle="#05070a",l.fillRect(0,0,s,r);const c=l.createRadialGradient(s/2,r/2,0,s/2,r/2,s*.7);c.addColorStop(0,"rgba(20,25,30,.25)"),c.addColorStop(1,"rgba(0,0,0,.7)"),l.fillStyle=c,l.fillRect(0,0,s,r);const h=_s(i.length*31+s);for(let d=0;d<80;d++)l.fillStyle=`rgba(255,255,255,${h()*.018})`,l.fillRect(h()*s,h()*r,1+h()*3,1+h()*3);if(l.strokeStyle=e,l.lineWidth=Math.max(4,s*.008),l.shadowColor=e,l.shadowBlur=30,l.strokeRect(s*.045,r*.08,s*.91,r*.84),l.textAlign="center",l.textBaseline="middle",a){const d=i.split(""),p=r*.72/Math.max(d.length,1);l.font=`900 ${Math.min(s*.62,p*.92)}px "Arial Narrow", "Helvetica Neue", sans-serif`,l.fillStyle=e,l.shadowColor=e,l.shadowBlur=46,d.forEach((g,_)=>{l.fillText(g,s/2,r*.15+p*(_+.5))})}else{const d=Math.min(s*.105,r*.23);l.font=`900 ${d}px "Arial Narrow", "Helvetica Neue", sans-serif`,l.fillStyle=e,l.shadowColor=e,l.shadowBlur=54,l.fillText(i,s/2,r*.43),l.font=`600 ${Math.max(14,d*.22)}px ui-monospace, "SFMono-Regular", monospace`,l.fillStyle=n,l.shadowColor=n,l.shadowBlur=26,l.fillText(t,s/2,r*.68),l.shadowBlur=0,l.fillStyle=e,l.fillRect(s*.45,r*.77,s*.1,3)}const u=nn(o,{srgb:!0,anisotropy:8});return u.wrapS=u.wrapT=Vn,u}function _g(){const i=bn(256,128),t=i.getContext("2d");t.fillStyle="#111214",t.fillRect(0,0,256,128),t.save(),t.translate(0,0);for(let n=-128;n<300;n+=56)t.fillStyle="#b37a24",t.beginPath(),t.moveTo(n,0),t.lineTo(n+28,0),t.lineTo(n-28,128),t.lineTo(n-56,128),t.closePath(),t.fill();t.restore();const e=nn(i,{srgb:!0,repeat:[1,1]});return e.wrapS=e.wrapT=Bs,e}function vg(){const i=bn(512,768),t=i.getContext("2d");t.fillStyle="#c8c1b2",t.fillRect(0,0,512,768),t.fillStyle="#111317",t.fillRect(28,28,456,712),t.strokeStyle="rgba(210,205,190,.7)",t.lineWidth=3,t.strokeRect(54,54,404,660),t.fillStyle="#e8dcc5",t.textAlign="center",t.font='900 104px "Arial Narrow", "Helvetica Neue", sans-serif',t.fillText("STAY",256,250),t.fillText("AWAKE",256,350),t.fillStyle="#ff5f2e",t.font="700 28px ui-monospace, monospace",t.fillText("CURFEW  /  02:00",256,450),t.strokeStyle="#ff5f2e",t.lineWidth=5,t.beginPath(),t.arc(256,570,62,0,Math.PI*2),t.stroke(),t.beginPath(),t.moveTo(256,508),t.lineTo(256,632),t.stroke(),t.beginPath(),t.moveTo(194,570),t.lineTo(318,570),t.stroke();const e=_s(99);for(let s=0;s<160;s++)t.fillStyle=`rgba(20,20,20,${e()*.16})`,t.fillRect(e()*512,e()*768,e()*5,e()*12);const n=nn(i,{srgb:!0});return n.wrapS=n.wrapT=Vn,n}function xg(i){let t=i>>>0;return()=>(t=Math.imul(t,1664525)+1013904223>>>0,t/4294967296)}const Sc=new he(1,1,1),wc=new ui(1,1,1,10),Na=new Ye(1,1),Mg=new jo(1,36);function yg(i,t=3){return new fe({color:328965,emissive:new ft(i),emissiveIntensity:t,roughness:.42,metalness:.1})}function dn(i,t,e){const n=new Be({color:new ft(i,t,e)});return n.toneMapped=!1,n}function Sg(){const i=document.createElement("canvas");i.width=i.height=128;const t=i.getContext("2d"),e=t.createRadialGradient(64,64,2,64,64,62);e.addColorStop(0,"rgba(0,0,0,.85)"),e.addColorStop(.5,"rgba(0,0,0,.38)"),e.addColorStop(1,"rgba(0,0,0,0)"),t.fillStyle=e,t.fillRect(0,0,128,128);const n=new nh(i);return n.colorSpace=Ze,n}function wg(i){const t=new th;t.background=new ft(132106);const e=(r,a,o,l,c)=>{const h=new Be({color:new ft(r)});h.side=fn;const u=new xt(new Ye(a,o),h);u.position.set(...l),u.rotation.set(...c),t.add(u)};e([.25,.65,1.4],20,12,[-12,7,-10],[0,Math.PI/2,0]),e([1.8,.45,.12],16,8,[13,6,-4],[0,-Math.PI/2,0]),e([.12,.2,.38],18,10,[0,4,14],[0,Math.PI,0]),e([1.1,.7,.36],5,14,[8,8,-12],[0,-.6,0]),e([.6,.68,.75],22,10,[0,15,0],[Math.PI/2,0,0]),e([.03,.04,.06],50,3,[0,-5,0],[-Math.PI/2,0,0]);const n=new Ao(i);n.compileEquirectangularShader();const s=n.fromScene(t,.03).texture;return n.dispose(),t.traverse(r=>{r.isMesh&&(r.geometry.dispose(),r.material.dispose())}),s}function Tg(){const i=new ze({side:Ke,depthWrite:!1,fog:!1,uniforms:{uTime:{value:0}},vertexShader:`
      varying vec3 vDir;
      void main() {
        vDir = normalize(position);
        vec4 mv = modelViewMatrix * vec4(position, 1.0);
        gl_Position = projectionMatrix * mv;
      }
    `,fragmentShader:`
      precision highp float;
      varying vec3 vDir;
      uniform float uTime;

      float hash(vec2 p) {
        p = fract(p * vec2(123.34, 456.21));
        p += dot(p, p + 45.32);
        return fract(p.x * p.y);
      }
      float noise(vec2 p) {
        vec2 i = floor(p);
        vec2 f = fract(p);
        f = f * f * (3.0 - 2.0 * f);
        return mix(mix(hash(i), hash(i + vec2(1,0)), f.x),
                   mix(hash(i + vec2(0,1)), hash(i + vec2(1,1)), f.x), f.y);
      }
      float fbm(vec2 p) {
        float v = 0.0;
        float a = 0.52;
        for (int i = 0; i < 5; i++) {
          v += a * noise(p);
          p = p * 2.02 + vec2(17.1, 9.2);
          a *= 0.49;
        }
        return v;
      }

      void main() {
        vec3 d = normalize(vDir);
        float h = clamp(d.y, -0.2, 1.0);

        vec3 low = vec3(0.055, 0.07, 0.10);
        vec3 mid = vec3(0.018, 0.032, 0.06);
        vec3 high = vec3(0.006, 0.011, 0.027);
        vec3 col = mix(low, mid, smoothstep(-0.02, 0.22, h));
        col = mix(col, high, smoothstep(0.16, 0.8, h));

        // Warm city glow along the horizon.
        float horizon = exp(-max(h, 0.0) * 10.0);
        col += vec3(0.10, 0.048, 0.018) * horizon;
        float warmSide = smoothstep(-0.9, 0.3, d.x) * smoothstep(-0.5, 0.3, -d.z);
        col += vec3(0.065, 0.025, 0.008) * horizon * warmSide;

        // Layered low cloud deck.
        vec2 uv = d.xz / max(0.16, h + 0.14);
        uv = uv * 0.55 + vec2(uTime * 0.0018, uTime * 0.0007);
        float cloud = fbm(uv * 1.4 + fbm(uv * 0.8) * 0.6);
        cloud = smoothstep(0.46, 0.78, cloud);
        float cloudFade = smoothstep(-0.02, 0.13, h) * (1.0 - smoothstep(0.6, 0.85, h));
        col = mix(col, vec3(0.045, 0.06, 0.092), cloud * cloudFade * 0.72);
        col += vec3(0.08, 0.035, 0.014) * cloud * horizon * 0.45;

        // Faint stars through gaps.
        vec2 sp = floor(d.xz * 340.0);
        float star = step(0.99945, hash(sp)) * smoothstep(0.17, 0.5, h);
        col += vec3(0.55, 0.68, 0.9) * star * 0.65;

        // Slight dithering to avoid banding.
        col += (hash(gl_FragCoord.xy) - 0.5) * 0.003;
        gl_FragColor = vec4(col, 1.0);
      }
    `}),t=new xt(new Kn(260,40,24),i);return t.frustumCulled=!1,t}function Eg(i,t){const e=[],n=[],s=[],r=[];i.fog=new Ko(659739,.026),i.background=new ft(329485);const a=wg(t);i.environment=a,i.environmentIntensity=.38;const o=Tg();i.add(o);const l=pg(7,512),c=mg(19,1024),h=gg(33,512),u=new fe({color:7830400,map:l.map,roughnessMap:l.roughnessMap,bumpMap:l.bumpMap,bumpScale:.022,roughness:.9,metalness:.1,envMapIntensity:.65}),d=new fe({color:5001301,map:l.map,roughnessMap:l.roughnessMap,bumpMap:l.bumpMap,bumpScale:.02,roughness:.94,metalness:.08,envMapIntensity:.5}),p=new fe({color:2304046,map:c.map,roughnessMap:c.roughnessMap,bumpMap:c.bumpMap,bumpScale:.03,roughness:.62,metalness:.3,envMapIntensity:.7}),g=new fe({color:4869456,map:h.map,roughnessMap:h.roughnessMap,bumpMap:h.bumpMap,bumpScale:.012,roughness:.62,metalness:.72,envMapIntensity:1}),_=new fe({color:1514013,roughness:.42,metalness:.8,envMapIntensity:1.1}),m=new fe({color:526602,roughness:.86,metalness:.05}),f=new xt(new Ye(64,64),p);f.rotation.x=-Math.PI/2,f.position.y=0,f.receiveShadow=!0,i.add(f);const b=Sg();function T(S,B,Y,K,J=.5){const at=new Be({color:0,alphaMap:b,transparent:!0,opacity:J,depthWrite:!1}),Q=new xt(Na,at);Q.rotation.x=-Math.PI/2,Q.position.set(S,.012,B),Q.scale.set(Y,K,1),Q.renderOrder=1,i.add(Q)}function x({x:S,y:B,z:Y,w:K,h:J,d:at,mat:Q=u,rotY:it=0,collide:Pt=!1,occlude:Xt=!1,cast:jt=!0,receive:Ht=!0,contact:Gt=0}){const Tt=new xt(Sc,Q);if(Tt.position.set(S,B,Y),Tt.scale.set(K,J,at),Tt.rotation.y=it,Tt.castShadow=jt,Tt.receiveShadow=Ht,i.add(Tt),Pt){const ae={minX:S-K/2,maxX:S+K/2,minZ:Y-at/2,maxZ:Y+at/2,minY:0,maxY:J};e.push(ae)}return Xt&&n.push(Tt),Gt&&T(S,Y,Gt*1.5,Gt*1.5),Tt}function R({x:S,y:B,z:Y,r:K,h:J,mat:at=g,rotZ:Q=0,rotX:it=0,cast:Pt=!0,collide:Xt=!1,occlude:jt=!1}){const Ht=new xt(wc,at);if(Ht.position.set(S,B,Y),Ht.scale.set(K,J,K),Ht.rotation.z=Q,Ht.rotation.x=it,Ht.castShadow=Pt,Ht.receiveShadow=!0,i.add(Ht),Xt){const Gt=K*.9;e.push({minX:S-Gt,maxX:S+Gt,minZ:Y-Gt,maxZ:Y+Gt,minY:0,maxY:J})}return jt&&n.push(Ht),Ht}const D=1.15,I=[{x:0,z:-30.5,w:62,d:1},{x:0,z:30.5,w:62,d:1},{x:-30.5,z:0,w:1,d:62},{x:30.5,z:0,w:1,d:62}];for(const S of I)x({x:S.x,y:D/2,z:S.z,w:S.w,h:D,d:S.d,mat:d,collide:!0,occlude:!0,contact:2}),x({x:S.x,y:D+.07,z:S.z,w:S.w+.16,h:.14,d:S.d+.16,mat:u,collide:!1,occlude:!1,cast:!0});for(let S=0;S<11;S++){const B=-24+S*4.8;x({x:B,y:.016,z:-25.5,w:2.2,h:.03,d:.18,mat:_,collide:!1,occlude:!1,cast:!1})}x({x:-19.4,y:3.1,z:18.9,w:8.4,h:6.2,d:6.4,mat:u,collide:!0,occlude:!0,contact:6}),x({x:-19.4,y:6.35,z:18.9,w:8.8,h:.3,d:6.8,mat:d,collide:!1,occlude:!1}),x({x:-19.4,y:1.2,z:15.62,w:1.35,h:2.4,d:.18,mat:_,collide:!1,occlude:!1}),x({x:-19.4,y:2.42,z:15.54,w:1.55,h:.14,d:.06,mat:dn(1.6,.42,.08),collide:!1,occlude:!1,cast:!1});const F=new qe(16739111,58,13,2);F.position.set(-19.4,2.3,14.9),i.add(F),x({x:20.3,y:2.55,z:18.4,w:7.4,h:5.1,d:6.1,mat:u,collide:!0,occlude:!0,contact:5.5}),x({x:20.3,y:5.25,z:18.4,w:7.8,h:.3,d:6.5,mat:d,collide:!1,occlude:!1}),x({x:-10.4,y:3.1,z:25.2,w:1.1,h:6.2,d:1.1,mat:u,collide:!0,occlude:!0,contact:1.5}),x({x:10.4,y:3.1,z:25.2,w:1.1,h:6.2,d:1.1,mat:u,collide:!0,occlude:!0,contact:1.5}),x({x:0,y:6.15,z:25.2,w:22.2,h:.8,d:1.2,mat:d,collide:!1,occlude:!0}),x({x:0,y:5.72,z:24.56,w:18.5,h:.07,d:.12,mat:dn(2,.48,.1),collide:!1,occlude:!1,cast:!1});for(const S of[-6.6,0,6.6])x({x:S,y:5.35,z:25.2,w:2.3,h:.16,d:.32,mat:_,collide:!1,occlude:!1,cast:!1});const w=[{x:-7.6,z:.7,w:5.8,h:1.05,d:.44,rot:.04},{x:8.6,z:2.6,w:5.1,h:1.05,d:.44,rot:-.05},{x:-13.2,z:-7.5,w:4.4,h:1.02,d:.44,rot:.18},{x:14.6,z:-6.4,w:4.6,h:1.02,d:.44,rot:-.08},{x:1.8,z:16.8,w:6,h:1.02,d:.44,rot:.02}];for(const S of w)x({x:S.x,y:S.h/2,z:S.z,w:S.w,h:S.h,d:S.d,rotY:S.rot,mat:u,collide:!0,occlude:!0,contact:1.8});x({x:1,y:.3,z:9.2,w:4.1,h:.6,d:4.1,mat:d,collide:!0,occlude:!0,contact:2.5});const y=x({x:1,y:2,z:9.2,w:1.3,h:2.8,d:1.3,mat:u,collide:!0,occlude:!0,contact:1.2});y.rotation.z=.015,x({x:1,y:3.46,z:9.2,w:1.7,h:.12,d:1.7,mat:_,collide:!1,occlude:!1}),x({x:-24.6,y:1.3,z:7,w:2.8,h:2.6,d:.5,rotY:.55,mat:u,collide:!0,occlude:!0,contact:1.8});function L(S,B,Y,K,J,at=0){x({x:S,y:K/2,z:B,w:Y,h:K,d:J,rotY:at,mat:g,collide:!0,occlude:!0,contact:1.5}),x({x:S,y:K+.03,z:B,w:Y*.92,h:.08,d:J*.92,rotY:at,mat:_,collide:!1,occlude:!1});const Q=new xt(new ui(Math.min(Y,J)*.22,Math.min(Y,J)*.22,.04,20),_);Q.position.set(S,K+.09,B),Q.rotation.y=at,Q.castShadow=!1,i.add(Q);for(let it=-2;it<=2;it++)x({x:S+Math.cos(at)*(it*.18),y:K*.55,z:B+Math.sin(at)*(it*.18),w:.03,h:K*.55,d:J*.75,rotY:at,mat:_,collide:!1,occlude:!1,cast:!1})}L(-14.6,5,3.2,1.5,2.1,.05),L(13,10.4,3.8,1.7,2.4,-.04),L(5.4,20.7,2.2,1.15,1.6,.02),L(-24.4,-12.8,2.7,1.2,1.9,-.08),R({x:20.5,y:.32,z:-15.2,r:.3,h:10.4,rotZ:Math.PI/2,mat:g,collide:!1,occlude:!1}),R({x:20.5,y:.32,z:-15.2,r:.4,h:.15,rotZ:Math.PI/2,mat:_,collide:!1,occlude:!1});for(let S=0;S<3;S++)R({x:25.5+S*.03,y:2.1+S*.7,z:18.4,r:.11,h:6.5,mat:_,collide:!1,occlude:!1});R({x:-26.2,y:4.2,z:-24.2,r:.09,h:8.4,mat:_,collide:!1,occlude:!1}),x({x:-26.2,y:7.3,z:-24.2,w:1.9,h:.04,d:.04,mat:_,collide:!1,occlude:!1,cast:!1}),x({x:-26.2,y:8.42,z:-24.2,w:.18,h:.18,d:.18,mat:dn(3,.14,.06),collide:!1,occlude:!1,cast:!1});const z=new qe(16718346,18,8,2);z.position.set(-26.2,8.42,-24.2),i.add(z);const H={light:z,t:0};s.push(H);const q=new fe({color:724498,roughness:.2,metalness:.5});for(let S=0;S<24;S++){const B=new xt(new Ye(.08+Math.random()*.28,.03+Math.random()*.12),q);B.rotation.x=-Math.PI/2,B.rotation.z=Math.random()*Math.PI,B.position.set(-25+Math.random()*50,.017,-25+Math.random()*50),i.add(B)}const X=new md({color:258,roughness:.4,metalness:.18,clearcoat:.2,clearcoatRoughness:.25,transparent:!0,opacity:.17,envMapIntensity:.2,depthWrite:!1}),Z=[[-4,-6,3.1,1.4,.4],[7,6.2,4.4,1.7,-.3],[-15,11,2.7,1,.9],[16,-9,3.3,1.1,.2],[0,-17,3.9,1.3,-.6],[-22,-2,2.4,1,1.1],[24,1.5,2.8,.9,.7],[10,20,2.2,.8,-.2],[-10,21,2.6,1.1,.5],[3,2.5,2,.8,1],[23,24,2.4,.9,.4],[-24,-18,2.2,.7,-.8]];for(const[S,B,Y,K,J]of Z){const at=new xt(Mg,X);at.rotation.x=-Math.PI/2,at.rotation.z=J,at.scale.set(Y,K,1),at.position.set(S,.021,B),at.renderOrder=2,i.add(at)}const et=vs(128);function V(S,B,Y,K,J,at=.13,Q=0){const it=new Be({map:et,color:new ft(Y),transparent:!0,opacity:at,blending:Ee,depthWrite:!1,toneMapped:!1}),Pt=new xt(Na,it);Pt.rotation.x=-Math.PI/2,Pt.rotation.z=Q,Pt.scale.set(K,J,1),Pt.position.set(S,.034,B),Pt.renderOrder=3,i.add(Pt)}V(-19,10.8,16736036,8.5,7.5,.14),V(20,10.4,16739117,13,10,.11),V(-8,-20,2079231,3.2,18,.055,.9),V(12,22,2074879,2,7,.06);const gt=_g();gt.repeat.set(3,1);const Mt=new fe({map:gt,roughness:.55,metalness:.3}),Lt=new xt(new Ye(2.6,.34),Mt);Lt.rotation.x=-Math.PI/2,Lt.position.set(-15.5,.024,-11.5),Lt.rotation.z=.02,i.add(Lt);const qt=new xt(new Ye(2.2,1.7),_);qt.rotation.x=-Math.PI/2,qt.position.set(-15.5,.02,-13),i.add(qt),x({x:-15.5,y:.06,z:-14,w:2.2,h:.1,d:.08,mat:g,collide:!1,occlude:!1,cast:!1});function re(S,B,Y,K){const J=S.clone().add(B).multiplyScalar(.5),at=B.clone().sub(S),Q=at.length(),it=new xt(wc,K);return it.position.copy(J),it.scale.set(Y,Q,Y),it.quaternion.setFromUnitVectors(new A(0,1,0),at.normalize()),it.castShadow=!0,it.receiveShadow=!0,i.add(it),it}function de(S,B,Y){const K=xg(Y);x({x:S,y:.32,z:B,w:2.4,h:.64,d:2.4,mat:d,collide:!0,occlude:!0,contact:1.7}),x({x:S,y:.67,z:B,w:1.9,h:.08,d:1.9,mat:m,collide:!1,occlude:!1,cast:!1});const J=new fe({color:1775380,roughness:.94,metalness:.02}),at=new A(S,.7,B),Q=new A(S+(K()-.5)*.6,4.2+K()*.9,B+(K()-.5)*.6);re(at,Q,.17,J);const it=[];function Pt(Xt,jt,Ht,Gt,Tt){const ae=Xt.clone().addScaledVector(jt,Ht);if(re(Xt,ae,Gt,J),Tt<=0){it.push(ae);return}const Jt=Tt>2?3:2;for(let Ne=0;Ne<Jt;Ne++){const Un=.6+K()*.8,Ge=jt.clone().add(new A((K()-.5)*Un,.24+K()*.34,(K()-.5)*Un)).normalize();Pt(ae,Ge,Ht*(.48+K()*.18),Gt*.57,Tt-1)}}for(let Xt=0;Xt<4;Xt++){const jt=.45+Xt*.12,Ht=at.clone().lerp(Q,jt),Gt=new A((K()-.5)*2,.9+K()*.5,(K()-.5)*2).normalize();Pt(Ht,Gt,1.4+K()*1.2,.075,3)}for(let Xt=0;Xt<Math.min(3,it.length);Xt++){const jt=it[Math.floor(Xt/3*it.length+K()*2)%it.length];if(!jt)continue;const Ht=new Be({color:new ft(2.4,1.1,.36)});Ht.toneMapped=!1;const Gt=new xt(new Kn(.045,7,6),Ht);Gt.position.copy(jt).add(new A(0,-.2,0)),i.add(Gt)}}de(-12.6,1.8,5),de(18,6.4,11);function te(S,B=3){const Y=new me().setFromPoints(S),K=new ls({color:921618,transparent:!0,opacity:.85}),J=new ms(Y,K);i.add(J);const at=new Kn(.038,6,5);for(let Q=1;Q<S.length-1;Q+=B){const it=new Be({color:new ft(2.2,1.15,.42)});it.toneMapped=!1;const Pt=new xt(at,it);Pt.position.copy(S[Q]).add(new A(0,-.08,0)),i.add(Pt)}}const tt=[];for(let S=0;S<=12;S++){const B=S/12;tt.push(new A(Ot.lerp(-24,24,B),6.4+Math.sin(B*Math.PI)*-1.15+Math.sin(B*21)*.05,-4.5+B*.6))}te(tt,3);const rt=[];for(let S=0;S<=10;S++){const B=S/10;rt.push(new A(Ot.lerp(-17,18,B),6.1+Math.sin(B*Math.PI)*-.8,21.5-B*.4))}te(rt,2);const wt=Ua({title:"NIGHT SHIFT",sub:"OPEN LATE  /  24 H",accent:"#ff5f24",accent2:"#8ee8ff",width:1024,height:480}),zt=new fe({color:1118481,map:wt,emissive:16777215,emissiveMap:wt,emissiveIntensity:4,roughness:.44,metalness:.3}),It=new xt(new Ye(11.2,5.25),zt);It.position.set(20.3,8.6,15.22),It.rotation.y=Math.PI,i.add(It),x({x:20.3,y:8.6,z:15.38,w:11.8,h:5.85,d:.22,mat:_,collide:!1,occlude:!1});for(const S of[15,25.6])R({x:S,y:7,z:15.7,r:.09,h:4,mat:_,collide:!1,occlude:!1,cast:!1});const Kt=new qe(16737320,145,26,2);Kt.position.set(20.3,7.1,12.4),i.add(Kt);const Re=Ua({title:"MIRAGE",accent:"#5edcff",accent2:"#ff6a2d",width:256,height:1024,vertical:!0}),C=new fe({color:526344,map:Re,emissive:16777215,emissiveMap:Re,emissiveIntensity:3.6,roughness:.4,metalness:.2}),le=new xt(new Ye(2.25,8.6),C);le.position.set(-15.02,5.6,15.62),le.rotation.y=Math.PI/2,i.add(le);const kt=new xt(Sc,_);kt.position.set(-15.24,5.6,15.62),kt.scale.set(.2,9.1,2.6),i.add(kt);const Ft=new qe(2541823,95,20,2);Ft.position.set(-13,5.2,12.4),i.add(Ft),x({x:-19.4,y:4.2,z:15.58,w:4.8,h:.055,d:.055,mat:dn(2.2,.5,.12),collide:!1,occlude:!1,cast:!1});for(const[S,B,Y,K]of[[-27.8,5,.06,33],[27.8,5,.06,33],[-10,29.5,26,.06],[10,-29.5,26,.06]])x({x:S,y:.09,z:B,w:Y,h:.04,d:K,mat:dn(.25,1.6,2.2),collide:!1,occlude:!1,cast:!1});for(const S of[-9.8,9.8]){const B=new xt(new Kn(.1,12,8),dn(3.2,.1,.04));B.position.set(S,6.7,25),i.add(B);const Y=new qe(16718344,12,5,2);Y.position.copy(B.position),i.add(Y),s.push({light:Y,bulb:B,t:Math.random()*2})}x({x:-15.2,y:1.7,z:15.56,w:.08,h:.08,d:3,mat:_,collide:!1,occlude:!1,cast:!1});for(let S=0;S<4;S++)x({x:-15.4,y:.9,z:14.2+S*1,w:.06,h:1.7,d:.06,mat:_,collide:!1,occlude:!1,cast:!1});const At=vg(),pe=new fe({map:At,roughness:.8,metalness:.1}),Et=new xt(new Ye(1.3,1.95),pe);Et.position.set(-23.9,2,15.61),i.add(Et);for(const[S,B,Y,K]of[[20.3,2.2,15.28,Math.PI],[-19.4,1.8,15.62,Math.PI]]){const J=new xt(new Ye(.55,.8),new fe({color:657930,emissive:16730646,emissiveIntensity:1.4,roughness:.5}));J.position.set(S,B,Y+(K===Math.PI?.01:0)),J.rotation.y=K,i.add(J)}const Vt=Ua({title:"NO SIGNAL",sub:"STAY IN MOTION",accent:"#ff6428",accent2:"#79e5ff",width:768,height:384}),be=new fe({color:592137,map:Vt,emissive:16777215,emissiveMap:Vt,emissiveIntensity:3.4,roughness:.48,metalness:.25}),_e=new xt(new Ye(2.55,1.28),be);_e.position.set(1,2.45,8.515),_e.rotation.y=Math.PI,i.add(_e),x({x:1,y:2.45,z:8.55,w:2.85,h:1.55,d:.06,mat:_,collide:!1,occlude:!1,cast:!1});for(const S of[-.1,2.1])x({x:S,y:2.2,z:8.49,w:.035,h:3.9,d:.035,mat:dn(.24,1.7,2.4),collide:!1,occlude:!1,cast:!1});const E=new qe(16738858,36,10,2);E.position.set(1,2.7,7.2),i.add(E),x({x:-19.5,y:.14,z:15.56,w:7.4,h:.045,d:.04,mat:dn(1.8,.42,.1),collide:!1,occlude:!1,cast:!1}),x({x:20.3,y:.16,z:15.28,w:6.4,h:.045,d:.04,mat:dn(.2,1.2,1.9),collide:!1,occlude:!1,cast:!1});const v=new Be({color:16742966,transparent:!0,opacity:.025,blending:Ee,side:fn,depthWrite:!1,toneMapped:!1});for(const[S,B,Y,K,J]of[[20.3,8,14.9,4.2,9.5],[-15.2,6,14.5,2.2,7],[12.4,4,-7.6,2.1,4.7],[-12.4,4,-10.2,2,4.5]]){const at=new xt(new Jo(K,J,24,1,!0),v);at.position.set(S,B-J/2,Y),i.add(at)}const k=new oi({map:ph(17),color:new ft(.28,.39,.56),transparent:!0,opacity:.055,blending:Ee,depthWrite:!1}),j=[];for(let S=0;S<15;S++){const B=new li(k),Y=-25+Math.random()*50,K=-20+Math.random()*48;B.position.set(Y,.5+Math.random()*2.2,K);const J=7+Math.random()*13;B.scale.set(J,J*.55,1),B.renderOrder=1,i.add(B),j.push({sprite:B,baseX:Y,x:Y,z:K,phase:Math.random()*Math.PI*2,speed:.015+Math.random()*.03})}const st=new fe({color:1119773,roughness:.86,metalness:.3,envMapIntensity:.25});st.onBeforeCompile=S=>{S.vertexShader=S.vertexShader.replace("#include <common>",`#include <common>
varying vec3 vCityWorld;`).replace("#include <project_vertex>",`#include <project_vertex>
        #ifdef USE_INSTANCING
          vCityWorld = (modelMatrix * instanceMatrix * vec4(transformed, 1.0)).xyz;
        #else
          vCityWorld = (modelMatrix * vec4(transformed, 1.0)).xyz;
        #endif`),S.fragmentShader=S.fragmentShader.replace("#include <common>",`#include <common>
        varying vec3 vCityWorld;
        float cityHash(vec2 p) {
          p = fract(p * vec2(127.1, 311.7));
          p += dot(p, p + 34.23);
          return fract(p.x * p.y);
        }`).replace("#include <emissivemap_fragment>",`#include <emissivemap_fragment>
        // Staggered window grid in world space; every distant facade is alive.
        vec2 cityUv = vec2((vCityWorld.x + vCityWorld.z) * 0.9, vCityWorld.y * 1.4);
        vec2 cityCell = floor(cityUv);
        vec2 cityFrac = fract(cityUv);
        float windowMask = step(0.17, cityFrac.x) * step(cityFrac.x, 0.79)
                         * step(0.22, cityFrac.y) * step(cityFrac.y, 0.68);
        float litWindow = step(0.86, cityHash(cityCell + vec2(11.7, 3.9)));
        float flicker = 0.3 + 0.7 * cityHash(cityCell + vec2(4.1, 19.2));
        vec3 windowColor = mix(vec3(1.0, 0.62, 0.30), vec3(0.45, 0.74, 1.0), step(0.87, cityHash(cityCell * 1.37 + 5.0)));
        totalEmissiveRadiance += windowColor * litWindow * windowMask * flicker * 0.56;`)},st.customProgramCacheKey=()=>"dead-air-city-windows";const $=46,Ut=new he(1,1,1),ut=new hd(Ut,st,$),Rt=new se,Ct=new A,ct=new ps,vt=new A;for(let S=0;S<$;S++){const B=S/$*Math.PI*2+Math.random()*.2,Y=62+Math.random()*95,K=18+Math.random()*80,J=7+Math.random()*20,at=7+Math.random()*22;Ct.set(Math.cos(B)*Y,-20+K/2,Math.sin(B)*Y),ct.setFromAxisAngle(new A(0,1,0),Math.random()*Math.PI),vt.set(J,K,at),Rt.compose(Ct,ct,vt),ut.setMatrixAt(S,Rt)}ut.instanceMatrix.needsUpdate=!0,ut.castShadow=!1,ut.receiveShadow=!1,i.add(ut);const Nt=520,bt=new Float32Array(Nt*3),mt=new Float32Array(Nt*3),Wt=new ft(16757866),N=new ft(7719423);for(let S=0;S<Nt;S++){const B=Math.random()*Math.PI*2,Y=58+Math.random()*105;bt[S*3]=Math.cos(B)*Y,bt[S*3+1]=-15+Math.random()*62,bt[S*3+2]=Math.sin(B)*Y;const K=Math.random()>.42?Wt:N,J=.3+Math.random()*1.2;mt[S*3]=K.r*J,mt[S*3+1]=K.g*J,mt[S*3+2]=K.b*J}const lt=new me;lt.setAttribute("position",new ve(bt,3)),lt.setAttribute("color",new ve(mt,3));const pt=new Yr({size:1.1,sizeAttenuation:!0,map:et,transparent:!0,opacity:.8,vertexColors:!0,blending:Ee,depthWrite:!1,fog:!0}),yt=new Zr(lt,pt);i.add(yt);const ot=new Be({map:et,color:new ft(.22,.38,.65),transparent:!0,opacity:.55,blending:Ee,depthWrite:!1,toneMapped:!1}),nt=new xt(Na,ot);nt.position.set(-90,72,-190),nt.scale.set(65,65,1),i.add(nt);const St=280,Bt=new Float32Array(St*3),ie=new Float32Array(St);for(let S=0;S<St;S++)Bt[S*3]=-25+Math.random()*50,Bt[S*3+1]=.2+Math.random()*8,Bt[S*3+2]=-25+Math.random()*50,ie[S]=Math.random()*Math.PI*2;const ee=new me;ee.setAttribute("position",new ve(Bt,3));const _n=new Yr({size:.055,map:et,color:new ft(.65,.54,.38),transparent:!0,opacity:.42,blending:Ee,depthWrite:!1,fog:!0}),Je=new Zr(ee,_n);i.add(Je);const xs=1300,Ue=new Float32Array(xs*6),Li=[];for(let S=0;S<xs;S++){const B=-40+Math.random()*80,Y=Math.random()*30,K=-40+Math.random()*80,J=.18+Math.random()*.85,at=10+Math.random()*18;Li.push({x:B,y:Y,z:K,len:J,speed:at});const Q=S*6;Ue[Q]=B,Ue[Q+1]=Y,Ue[Q+2]=K,Ue[Q+3]=B+.06,Ue[Q+4]=Y-J,Ue[Q+5]=K+.02}const Ms=new me;Ms.setAttribute("position",new ve(Ue,3));const Ks=new ls({color:12441066,transparent:!0,opacity:.27,blending:Ee,depthWrite:!1,fog:!0}),Jn=new pd(Ms,Ks);Jn.frustumCulled=!1,i.add(Jn),r.push({rain:Jn,data:Li,positions:Ue});const ys=new vd(4018803,460810,.8);i.add(ys);const xe=new Aa(16756082,2.6);xe.position.set(-22,30,-10),xe.target.position.set(2,0,4),xe.castShadow=!0,xe.shadow.mapSize.set(2048,2048),xe.shadow.camera.left=-34,xe.shadow.camera.right=34,xe.shadow.camera.top=34,xe.shadow.camera.bottom=-34,xe.shadow.camera.near=1,xe.shadow.camera.far=82,xe.shadow.bias=-4e-4,xe.shadow.normalBias=.035,xe.shadow.radius=3,xe.shadow.blurSamples=8,i.add(xe),i.add(xe.target);const Ss=new Aa(5933764,.7);Ss.position.set(18,12,24),i.add(Ss);const di=new Aa(7048632,.42);di.position.set(0,9,-30),di.target.position.set(0,1,4),i.add(di),i.add(di.target);const $s=new qe(16739114,56,14,2);$s.position.set(-9,3.2,24.6),i.add($s);const js=new qe(16739114,56,14,2);js.position.set(9,3.2,24.6),i.add(js);const Js=new qe(3391487,42,17,2);Js.position.set(-25,1.4,-6),i.add(Js);const Qs=new qe(16747078,50,18,2);Qs.position.set(17,1.4,-6),i.add(Qs);function tr(S,B,Y,K){R({x:S,y:2.2,z:B,r:.075,h:4.4,mat:_,collide:!0,occlude:!1,cast:!0}),x({x:S+.38,y:4.35,z:B,w:.8,h:.08,d:.08,mat:_,collide:!1,occlude:!1,cast:!1}),x({x:S+.75,y:4.2,z:B,w:.48,h:.16,d:.3,mat:_,collide:!1,occlude:!1,cast:!1});const J=yg(Y,3.6),at=new xt(new he(.4,.04,.22),J);at.position.set(S+.75,4.09,B),i.add(at);const Q=new qe(Y,K,15,2);Q.position.set(S+.75,3.92,B),i.add(Q),V(S+.75,B,Y,3.2,5,.065),T(S,B,.8,.8,.35)}tr(12.4,-7.6,16742962,56),tr(-12.4,-10.2,16739114,48);for(let S=0;S<6;S++){const B=-12+S*7.4,Y=S%2===0?-8.8:8.8;R({x:Y,y:.28,z:B,r:.08,h:.56,mat:_,collide:!1,occlude:!1,cast:!1}),x({x:Y,y:.57,z:B,w:.22,h:.035,d:.22,mat:dn(.22,1.2,1.8),collide:!1,occlude:!1,cast:!1})}x({x:-5,y:.45,z:-14.9,w:.4,h:.9,d:.4,mat:_,collide:!0,occlude:!1,contact:.8}),x({x:-5,y:.92,z:-14.9,w:.32,h:.06,d:.32,mat:dn(1.7,.52,.12),collide:!1,occlude:!1,cast:!1});const er=new qe(16742966,34,8.5,2);er.position.set(-5,1.15,-14.9),i.add(er),x({x:-5,y:.04,z:-12.6,w:.05,h:.03,d:4,mat:dn(.18,.9,1.4),collide:!1,occlude:!1,cast:!1});let M=0;function O(S,B,Y){M+=S,o.material.uniforms.uTime.value=M,xe.shadow.autoUpdate=!0;for(const Q of s)if(Q.t+=S,Q.light&&Q.bulb){const it=Math.sin(Q.t*3+(Q.phase||0))>.2;Q.light.intensity=it?14:.4,Q.bulb.material.color.setRGB(it?3.2:.2,it?.1:.01,.01)}else if(Q.light){Q.t+=S;const it=.25+Math.max(0,Math.sin(Q.t*1.8))*.75;Q.light.intensity=18*it}const K=r[0],J=K.positions;for(let Q=0;Q<K.data.length;Q++){const it=K.data[Q];it.y-=it.speed*S,it.x+=S*.55,it.y<-.2&&(it.y=18+Math.random()*14,it.x=-40+Math.random()*80,it.z=-40+Math.random()*80);const Pt=Q*6;J[Pt]=it.x,J[Pt+1]=it.y,J[Pt+2]=it.z,J[Pt+3]=it.x+.05,J[Pt+4]=it.y-it.len,J[Pt+5]=it.z+.015}K.rain.geometry.attributes.position.needsUpdate=!0;const at=Je.geometry.attributes.position.array;for(let Q=0;Q<St;Q++){const it=Q*3;at[it+1]+=Math.sin(M*.25+ie[Q])*S*.035,at[it]+=Math.cos(M*.17+ie[Q])*S*.018,at[it+1]>9&&(at[it+1]=.15)}Je.geometry.attributes.position.needsUpdate=!0;for(const Q of j)Q.phase+=S*Q.speed,Q.sprite.position.x=Q.baseX+Math.sin(Q.phase)*1.4,Q.sprite.position.z=Q.z+Math.cos(Q.phase*.7)*.9}function G(S){ys.intensity=.7+S*.14,xe.intensity=2.4+S*.35}return{colliders:e,occluders:n,spawnPoints:[[4.8,-9.2],[-6.2,-4.6],[-9.5,5.6],[10.5,7.6],[.2,13.4],[15.4,-5.8],[-16,.4],[12.8,19.2]],playerSpawn:new A(0,0,-16.5),update:O,setTimeScale:G,key:xe,bounds:{minX:-29.2,maxX:29.2,minZ:-29.2,maxZ:29.2}}}function ts(i,{color:t=[.055,.16,.24],strength:e=.85,power:n=3}={}){return i.onBeforeCompile=s=>{s.fragmentShader=s.fragmentShader.replace("#include <emissivemap_fragment>",`#include <emissivemap_fragment>
      float deadAirRim = pow(1.0 - clamp(dot(normalize(normal), normalize(vViewPosition)), 0.0, 1.0), ${n.toFixed(2)});
      totalEmissiveRadiance += vec3(${t[0].toFixed(4)}, ${t[1].toFixed(4)}, ${t[2].toFixed(4)}) * deadAirRim * ${e.toFixed(3)};`)},i.customProgramCacheKey=()=>`deadair-rim-${t.join("-")}-${e}-${n}`,i.needsUpdate=!0,i}const Tc=vs(128),Te={torso:new he(.61,.62,.33),abdomen:new he(.39,.26,.28),pelvis:new he(.46,.22,.3),chestPlate:new he(.5,.34,.11),shoulder:new he(.18,.2,.26),head:new Kn(.185,16,12),helmet:new he(.29,.12,.28),visor:new he(.2,.045,.035),upperArm:new Ji(.073,.27,5,8),foreArm:new Ji(.064,.25,5,8),hand:new he(.1,.1,.13),thigh:new Ji(.092,.3,5,8),shin:new Ji(.074,.31,5,8),boot:new he(.15,.13,.29),gunBody:new he(.105,.12,.62),gunBarrel:new ui(.025,.03,.42,8),gunStock:new he(.08,.1,.22),gunMag:new he(.07,.2,.13),headHit:new Kn(.22,8,6),bodyHit:new he(.65,1.2,.42)},bg=new fe({color:2370353,roughness:.62,metalness:.24,envMapIntensity:1}),Ag=new fe({color:4804952,roughness:.5,metalness:.46,envMapIntensity:1.25,emissive:new ft(397335),emissiveIntensity:.3}),Ec=new fe({color:856083,roughness:.7,metalness:.24}),bc=new fe({color:922133,roughness:.35,metalness:.8});new Be({color:new ft(3.2,.38,.09)});function Rg(){return new Be({colorWrite:!1,depthWrite:!1,depthTest:!0,transparent:!0,opacity:0})}const Ac=Rg();function Cg(i,t,e){let n=(t-i+Math.PI)%(Math.PI*2)-Math.PI;return n<-Math.PI&&(n+=Math.PI*2),i+n*e}class Pg{constructor(t,e,n,s){this.scene=t,this.index=n,this.callbacks=s,this.spawn=new Dt(e[0],e[1]),this.position=new A(e[0],0,e[1]),this.velocity=new Dt,this.radius=.38,this.alive=!0,this.health=2,this.state="patrol",this.yaw=Math.atan2(-e[0],-e[1]),this.desiredYaw=this.yaw,this.phase=Math.random()*Math.PI*2,this.walkAmount=0,this.aimAmount=0,this.flash=0,this.preFire=0,this.cooldown=0,this.telegraph=1.15+Math.random()*.35,this.detectTimer=Math.random()*.15,this.losTimer=Math.random()*.1,this.hasLOS=!1,this.lastSeen=new A,this.lastSeenAge=99,this.patrolTarget=new Dt(e[0],e[1]),this.patrolWait=Math.random()*1.5,this.stuckTimer=0,this.muzzleTimer=0,this.recoil=0,this.deathTime=0,this.hitMeshes=[];const r=bg.clone();r.emissive=new ft(659992),r.emissiveIntensity=.22,ts(r,{color:[.07,.23,.34],strength:1.15,power:2.35});const a=Ag.clone();ts(a,{color:[.09,.26,.38],strength:1.05,power:2.55});const o=new fe({color:590081,emissive:new ft(16727314),emissiveIntensity:1.65,roughness:.28,metalness:.2});this.mats={suitMat:r,armorMat:a,visorMat:o},this.root=new tn,this.root.position.copy(this.position),this.root.rotation.y=this.yaw,t.add(this.root),this.body=new tn,this.body.position.y=0,this.root.add(this.body);const l=H=>(H.castShadow=!0,H.receiveShadow=!0,this.body.add(H),H),c=l(new xt(Te.pelvis,r));c.position.y=.92;const h=l(new xt(Te.torso,r));h.position.y=1.29;const u=l(new xt(Te.abdomen,r));u.position.y=1.02;const d=l(new xt(Te.chestPlate,a));d.position.set(0,1.34,.2),d.rotation.x=-.04,l(new xt(new he(.34,.42,.16),a)).position.set(0,1.3,-.22);const g=l(new xt(new he(.42,.09,.3),a));g.position.y=1.6;const _=l(new xt(Te.head,r));_.position.set(0,1.75,.01),_.scale.set(.92,1.06,.95),l(new xt(Te.helmet,a)).position.set(0,1.84,-.015);const f=l(new xt(Te.visor,o));f.position.set(0,1.76,.185),f.castShadow=!1;const b=new li(new oi({map:Tc,color:new ft(1.8,.22,.045),transparent:!0,opacity:.35,blending:Ee,depthWrite:!1,toneMapped:!1}));b.position.set(0,1.76,.22),b.scale.set(.42,.18,1),this.body.add(b),this.headGlow=b;for(const H of[-1,1]){const q=l(new xt(Te.shoulder,a));q.position.set(H*.4,1.51,0),q.rotation.z=H*.02;const X=new xt(Te.visor,o);X.scale.set(.75,.65,.8),X.position.set(H*.405,1.51,.135),X.castShadow=!1,this.body.add(X)}const T=new xt(new he(.27,.025,.012),o);T.position.set(0,1.29,.258),T.castShadow=!1,this.body.add(T);for(const H of[-1,1]){const q=new xt(new he(.19,.018,.012),o);q.position.set(H*.16,.78,.085),q.castShadow=!1,this.body.add(q);const X=new xt(new he(.13,.016,.012),o);X.position.set(H*.39,1.23,.075),X.castShadow=!1,this.body.add(X)}this.arms=[];for(const H of[-1,1]){const q=new tn;q.position.set(H*.39,1.47,0),this.body.add(q);const X=new xt(Te.upperArm,r);X.position.y=-.18,X.castShadow=!0,X.receiveShadow=!0,q.add(X);const Z=new tn;Z.position.y=-.37,q.add(Z);const et=new xt(Te.foreArm,a);et.position.y=-.16,et.castShadow=!0,et.receiveShadow=!0,Z.add(et);const V=new xt(Te.hand,Ec);V.position.y=-.37,V.castShadow=!0,Z.add(V),this.arms.push({side:H,shoulder:q,elbow:Z,hand:V})}this.legs=[];for(const H of[-1,1]){const q=new tn;q.position.set(H*.16,.91,0),this.body.add(q);const X=new xt(Te.thigh,r);X.position.y=-.22,X.castShadow=!0,X.receiveShadow=!0,q.add(X);const Z=new tn;Z.position.y=-.45,q.add(Z);const et=new xt(Te.shin,a);et.position.y=-.2,et.castShadow=!0,et.receiveShadow=!0,Z.add(et);const V=new xt(Te.boot,Ec);V.position.set(0,-.44,.06),V.castShadow=!0,Z.add(V),this.legs.push({side:H,hip:q,knee:Z})}this.gun=new tn,this.gun.position.set(.24,1.38,.2),this.gun.rotation.x=.08,this.body.add(this.gun);const x=new xt(Te.gunBody,bc);x.position.z=.28,x.castShadow=!0,x.receiveShadow=!0,this.gun.add(x);const R=new xt(Te.gunBarrel,bc);R.rotation.x=Math.PI/2,R.position.set(0,.015,.73),R.castShadow=!0,this.gun.add(R);const D=new xt(Te.gunStock,a);D.position.set(0,0,-.08),this.gun.add(D);const I=new xt(Te.gunMag,a);I.position.set(0,-.13,.22),I.rotation.x=-.14,I.castShadow=!0,this.gun.add(I);const F=new xt(new he(.04,.07,.14),a);F.position.set(0,.095,.25),this.gun.add(F),this.muzzle=new we,this.muzzle.position.set(0,.015,.95),this.gun.add(this.muzzle);const w=new li(new oi({map:Tc,color:new ft(2.8,.45,.08),transparent:!0,opacity:0,blending:Ee,depthWrite:!1,toneMapped:!1}));w.scale.set(.4,.4,1),this.muzzle.add(w),this.muzzleGlow=w,this.laserPositions=new Float32Array(6);const y=new me;y.setAttribute("position",new ve(this.laserPositions,3)),this.laser=new ms(y,new ls({color:16726546,transparent:!0,opacity:0,blending:Ee,depthWrite:!1,toneMapped:!1})),this.laser.frustumCulled=!1,t.add(this.laser);const L=new xt(Te.headHit,Ac);L.position.set(0,1.76,.01),L.userData.enemy=this,L.userData.part="head",L.castShadow=!1,L.receiveShadow=!1,this.body.add(L),this.hitMeshes.push(L);const z=new xt(Te.bodyHit,Ac);z.position.set(0,1.02,0),z.userData.enemy=this,z.userData.part="body",z.castShadow=!1,z.receiveShadow=!1,this.body.add(z),this.hitMeshes.push(z),this.elapsed=Math.random()*10,this.pickPatrolTarget()}pickPatrolTarget(){const t=Math.random()*Math.PI*2,e=3+Math.random()*8,n=Ot.clamp(this.spawn.x+Math.cos(t)*e,-27,27),s=Ot.clamp(this.spawn.y+Math.sin(t)*e,-27,27);this.patrolTarget.set(n,s),this.patrolWait=.2+Math.random()*1.8}getEyePosition(t=new A){return t.set(this.position.x,1.48,this.position.z)}getChestPosition(t=new A){return t.set(this.position.x,1.18,this.position.z)}getMuzzlePosition(t=new A){return this.root.updateMatrixWorld(!0),this.muzzle.getWorldPosition(t)}getCenter(t=new A){return t.set(this.position.x,1.1,this.position.z)}hearGunshot(t,e=17){if(!this.alive)return;this.position.distanceTo(t)<e&&(this.lastSeen.set(t.x,1.2,t.z),this.lastSeenAge=0,this.state==="patrol"&&(this.state="search",this.desiredYaw=Math.atan2(t.x-this.position.x,t.z-this.position.z)))}takeDamage(t,e,n){return this.alive?(this.health-=t,this.flash=1,this.lastSeen.set(e.x,1.2,e.z),this.lastSeenAge=0,(this.state==="patrol"||this.state==="search")&&(this.state="alert",this.preFire=Math.max(this.preFire,this.telegraph*.9)),this.health<=0?(this.die(n==="head"),{killed:!0,headshot:n==="head"}):{killed:!1,headshot:n==="head"}):{killed:!1}}die(t){if(!this.alive)return;this.alive=!1,this.state="dead",this.deathTime=0,this.root.visible=!1,this.laser.visible=!1;const e=this.getCenter(new A);this.callbacks.onDeath?.(this,e,t)}fire(){const t=this.getMuzzlePosition(new A),e=this.callbacks.playerChest(new A);e.x+=(Math.random()-.5)*.55,e.y+=(Math.random()-.5)*.28,e.z+=(Math.random()-.5)*.55,this.callbacks.onFire?.(this,t,e),this.recoil=1,this.muzzleTimer=.09,this.muzzleGlow.material.opacity=.95}update(t,e,n,s,r){if(!this.alive){this.laser.visible=!1;return}this.elapsed+=t,this.flash=Math.max(0,this.flash-t*6.5),this.muzzleTimer=Math.max(0,this.muzzleTimer-t),this.recoil=Math.max(0,this.recoil-t*7.5),this.muzzleGlow.material.opacity=this.muzzleTimer>0?.95:0,this.mats.suitMat.emissiveIntensity=.22+this.flash*1.7,this.mats.visorMat.emissiveIntensity=1.65+this.flash*4.5,e.alive||this.state!=="patrol"&&(this.state="patrol");const a=e.position.x,o=e.position.z,l=a-this.position.x,c=o-this.position.z,h=Math.hypot(l,c);if(this.detectTimer-=t,this.losTimer-=t,this.losTimer<=0){this.losTimer=.11+Math.random()*.08;const T=this.getEyePosition(new A),x=e.eye;e.alive&&h<31&&r(T,x)?(this.hasLOS=!0,this.lastSeen.set(a,1.2,o),this.lastSeenAge=0):(this.hasLOS=!1,this.lastSeenAge+=.11)}if(e.alive&&h<29){const T=Math.atan2(l,c),x=Math.abs((T-this.yaw+Math.PI)%(Math.PI*2)-Math.PI),R=h<8||x<(this.state==="patrol"?1.28:1.9);this.hasLOS&&R&&this.detectTimer<=0&&(this.detectTimer=.25,(this.state==="patrol"||this.state==="search")&&(this.state="alert",this.preFire=this.telegraph,this.cooldown=0,this.desiredYaw=Math.atan2(l,c)))}let u=this.yaw,d=0,p=0;switch(this.state){case"patrol":{const T=this.patrolTarget.x-this.position.x,x=this.patrolTarget.y-this.position.z;Math.hypot(T,x)<.45?(this.patrolWait-=t,this.walkAmount=Ot.lerp(this.walkAmount,0,1-Math.exp(-t*8)),this.patrolWait<=0&&this.pickPatrolTarget()):(u=Math.atan2(T,x),d=1.25,this.walkAmount=Ot.lerp(this.walkAmount,1,1-Math.exp(-t*5))),this.aimAmount=Ot.lerp(this.aimAmount,0,1-Math.exp(-t*7));break}case"search":{const T=this.lastSeen.x-this.position.x,x=this.lastSeen.z-this.position.z,R=Math.hypot(T,x);u=Math.atan2(T,x),R>1.2&&this.lastSeenAge<5.5?(d=1.7,this.walkAmount=Ot.lerp(this.walkAmount,1,1-Math.exp(-t*7))):(this.walkAmount=Ot.lerp(this.walkAmount,0,1-Math.exp(-t*7)),this.lastSeenAge+=t*.45,!this.hasLOS&&this.lastSeenAge>6.5&&(this.state="patrol",this.pickPatrolTarget())),this.aimAmount=Ot.lerp(this.aimAmount,.35,1-Math.exp(-t*6));break}case"alert":{if(u=Math.atan2(l,c),this.walkAmount=Ot.lerp(this.walkAmount,.15,1-Math.exp(-t*6)),this.aimAmount=Ot.lerp(this.aimAmount,1,1-Math.exp(-t*9)),this.preFire-=t,!this.hasLOS&&this.lastSeenAge>.9){this.state="search";break}this.preFire<=0&&(this.fire(),this.state="cool",this.cooldown=1.3+Math.random()*1.1,this.hasLOS=!1);break}case"cool":{u=Math.atan2(l,c),this.aimAmount=Ot.lerp(this.aimAmount,.72,1-Math.exp(-t*8)),this.walkAmount=Ot.lerp(this.walkAmount,.3,1-Math.exp(-t*6)),this.cooldown-=t,p=Math.sin(this.elapsed*1.7+this.index)>0?.75:-.75,this.cooldown<=0&&this.hasLOS?(this.state="alert",this.preFire=this.telegraph*(.75+Math.random()*.2)):this.cooldown<=0&&(this.state="search");break}}const g=this.state==="patrol"?3.4:6.4;if(this.yaw=Cg(this.yaw,u,1-Math.exp(-t*g)),this.root.rotation.y=this.yaw,d>0||Math.abs(p)>.01){const T=Math.sin(this.yaw),x=Math.cos(this.yaw),R=Math.cos(this.yaw),D=-Math.sin(this.yaw),I=(T*d+R*p*1.1)*t,F=(x*d+D*p*1.1)*t,w=this.position.x,y=this.position.z;this.moveWithCollisions(I,F,n,s);const L=Math.hypot(this.position.x-w,this.position.z-y);d>0&&L<.002?(this.stuckTimer+=t,this.stuckTimer>.4&&(this.stuckTimer=0,this.pickPatrolTarget(),this.yaw+=Math.PI*.5)):this.stuckTimer=0}this.position.y=0,this.root.position.x=this.position.x,this.root.position.z=this.position.z,Math.sin(this.phase);const _=this.walkAmount;this.phase+=t*(3.4+d*3.6);const m=Math.sin(this.phase)*.48*_;this.legs[0].hip.rotation.x=m,this.legs[1].hip.rotation.x=-m,this.legs[0].knee.rotation.x=Math.max(0,-m)*.9,this.legs[1].knee.rotation.x=Math.max(0,m)*.9;const f=this.aimAmount;for(const T of this.arms){const x=T.side>0,R=-m*.55*(1-f);T.shoulder.rotation.x=Ot.lerp(R,x?-1.38:-1.24,f),T.shoulder.rotation.z=x?Ot.lerp(-.08,-.24,f):Ot.lerp(.08,.35,f),T.elbow.rotation.x=Ot.lerp(.16,x?-.1:-.35,f)}const b=this.recoil*.09;if(this.gun.position.y=Ot.lerp(1.17,1.37,f),this.gun.position.z=Ot.lerp(.16,.2,f)-b,this.gun.rotation.x=Ot.lerp(.5,.015,f)+this.recoil*.07,this.gun.rotation.z=Ot.lerp(-.12,0,f),this.body.position.y=Math.abs(Math.sin(this.phase))*.018*_+Math.sin(this.elapsed*1.7)*.006,this.body.rotation.z=Math.sin(this.phase)*.018*_,this.headGlow.material.opacity=.26+(this.state==="alert"?.35:.1)+this.flash*.4,this.state==="alert"&&this.hasLOS){const T=1-Ot.clamp(this.preFire/this.telegraph,0,1);this.laser.visible=!0;const x=this.getMuzzlePosition(new A),R=this.callbacks.playerChest(new A);R.y+=.02,this.laserPositions[0]=x.x,this.laserPositions[1]=x.y,this.laserPositions[2]=x.z,this.laserPositions[3]=R.x,this.laserPositions[4]=R.y,this.laserPositions[5]=R.z,this.laser.geometry.attributes.position.needsUpdate=!0,this.laser.material.opacity=.08+T*.38,this.muzzleGlow.material.opacity=.05+T*.9,this.muzzleGlow.scale.setScalar(.18+T*.38),this.mats.visorMat.emissiveIntensity=1.65+T*3.2+this.flash*4,this.headGlow.material.opacity=.3+T*.45}else this.laser.visible=!1,this.muzzleTimer<=0&&(this.muzzleGlow.material.opacity=0)}moveWithCollisions(t,e,n,s){const r=this.radius;let a=this.position.x+t;for(const l of n)a+r>l.minX&&a-r<l.maxX&&this.position.z+r>l.minZ&&this.position.z-r<l.maxZ&&(a=t>0?l.minX-r:l.maxX+r);a=Ot.clamp(a,s.minX+r,s.maxX-r),this.position.x=a;let o=this.position.z+e;for(const l of n)this.position.x+r>l.minX&&this.position.x-r<l.maxX&&o+r>l.minZ&&o-r<l.maxZ&&(o=e>0?l.minZ-r:l.maxZ+r);o=Ot.clamp(o,s.minZ+r,s.maxZ-r),this.position.z=o}dispose(){this.scene.remove(this.root),this.scene.remove(this.laser),this.mats.suitMat.dispose(),this.mats.armorMat.dispose(),this.mats.visorMat.dispose(),this.headGlow.material.dispose(),this.muzzleGlow.material.dispose(),this.laser.geometry.dispose(),this.laser.material.dispose()}}const mh=vs(128),Dg=ph(4);class Fa{constructor(t,e,{blending:n=Ee,sizeScale:s=1}={}){this.capacity=e,this.items=new Array(e),this.cursor=0,this.sizeScale=s,this.positions=new Float32Array(e*3),this.colors=new Float32Array(e*3),this.alphas=new Float32Array(e),this.sizes=new Float32Array(e);const r=new me;r.setAttribute("position",new ve(this.positions,3)),r.setAttribute("aColor",new ve(this.colors,3)),r.setAttribute("aAlpha",new ve(this.alphas,1)),r.setAttribute("aSize",new ve(this.sizes,1)),this.material=new ze({uniforms:{uMap:{value:mh},uScale:{value:700},uTint:{value:new ft(1,1,1)}},vertexShader:`
        attribute vec3 aColor;
        attribute float aAlpha;
        attribute float aSize;
        varying vec3 vColor;
        varying float vAlpha;
        uniform float uScale;
        void main() {
          vColor = aColor;
          vAlpha = aAlpha;
          vec4 mv = modelViewMatrix * vec4(position, 1.0);
          gl_PointSize = max(1.0, aSize * uScale / max(0.2, -mv.z));
          gl_Position = projectionMatrix * mv;
        }
      `,fragmentShader:`
        uniform sampler2D uMap;
        varying vec3 vColor;
        varying float vAlpha;
        void main() {
          vec4 tex = texture2D(uMap, gl_PointCoord);
          float a = tex.a * vAlpha;
          if (a <= 0.002) discard;
          gl_FragColor = vec4(vColor * tex.rgb, a);
        }
      `,transparent:!0,depthWrite:!1,blending:n,toneMapped:!1}),this.points=new Zr(r,this.material),this.points.frustumCulled=!1,this.points.renderOrder=5,t.add(this.points),this.geo=r}spawn({position:t,velocity:e=new A,color:n=new ft(1,1,1),size:s=.06,life:r=.6,gravity:a=-8,drag:o=.985,bounce:l=0,fadeIn:c=0}){let h=-1;for(let u=0;u<this.capacity;u++){const d=(this.cursor+u)%this.capacity;if(!this.items[d]||!this.items[d].alive){h=d;break}}h<0&&(h=this.cursor%this.capacity),this.cursor=(h+1)%this.capacity,this.items[h]={alive:!0,pos:t.clone(),vel:e.clone(),color:n.clone(),size:s,life:r,maxLife:r,gravity:a,drag:o,bounce:l,fadeIn:c}}update(t){for(let e=0;e<this.capacity;e++){const n=this.items[e];if(!n||!n.alive){this.alphas[e]=0;continue}if(n.life-=t,n.life<=0){n.alive=!1,this.alphas[e]=0;continue}n.vel.y+=n.gravity*t,n.vel.multiplyScalar(Math.pow(n.drag,t*60)),n.pos.addScaledVector(n.vel,t),n.bounce>0&&n.pos.y<.02&&(n.pos.y=.02,n.vel.y=Math.abs(n.vel.y)*n.bounce,n.vel.x*=.7,n.vel.z*=.7);const s=n.life/n.maxLife;let r=Math.min(1,s*1.8);n.fadeIn>0&&(r*=Math.min(1,(1-s)/n.fadeIn));const a=e*3;this.positions[a]=n.pos.x,this.positions[a+1]=n.pos.y,this.positions[a+2]=n.pos.z,this.colors[a]=n.color.r,this.colors[a+1]=n.color.g,this.colors[a+2]=n.color.b,this.alphas[e]=r,this.sizes[e]=n.size*(.6+s*.5)}this.geo.attributes.position.needsUpdate=!0,this.geo.attributes.aColor.needsUpdate=!0,this.geo.attributes.aAlpha.needsUpdate=!0,this.geo.attributes.aSize.needsUpdate=!0}clear(){for(let t=0;t<this.capacity;t++)this.items[t]&&(this.items[t].alive=!1),this.alphas[t]=0}}class Lg{constructor(t,e=28){this.scene=t,this.pool=[];for(let n=0;n<e;n++){const s=new oi({map:Dg,color:new ft(.12,.13,.15),transparent:!0,opacity:0,depthWrite:!1,blending:Ai}),r=new li(s);r.visible=!1,r.renderOrder=4,t.add(r),this.pool.push({sprite:r,vel:new A,age:1,life:1,size:1})}this.cursor=0}spawn(t,e={}){const n=this.pool[this.cursor];this.cursor=(this.cursor+1)%this.pool.length;const{velocity:s=new A,life:r=2.8,size:a=.8,opacity:o=.22,color:l=null}=e;n.sprite.visible=!0,n.sprite.position.copy(t),n.vel.copy(s),n.age=0,n.life=r,n.size=a,n.sprite.material.opacity=o,n.sprite.material.color.set(l||1513757),n.sprite.scale.setScalar(a),n.sprite.material.rotation=Math.random()*Math.PI*2,n.opacity=o}update(t){for(const e of this.pool){if(!e.sprite.visible)continue;e.age+=t;const n=e.age/e.life;if(n>=1){e.sprite.visible=!1;continue}e.vel.y+=.35*t,e.vel.multiplyScalar(Math.pow(.986,t*60)),e.sprite.position.addScaledVector(e.vel,t),e.sprite.material.opacity=e.opacity*(1-n)*Math.min(1,n*6),e.sprite.scale.setScalar(e.size*(1+n*2.8)),e.sprite.material.rotation+=t*.08}}clear(){for(const t of this.pool)t.sprite.visible=!1}}class Ig{constructor(t,e=30){this.scene=t,this.pool=[];for(let n=0;n<e;n++){const s=new me;s.setAttribute("position",new ve(new Float32Array(6),3));const r=new ls({color:16762241,transparent:!0,opacity:0,blending:Ee,depthWrite:!1,toneMapped:!1}),a=new ms(s,r);a.frustumCulled=!1,a.visible=!1,a.renderOrder=6,t.add(a),this.pool.push({line:a,geo:s,mat:r,age:0,life:.055,width:1})}this.cursor=0}spawn(t,e,n=16762241,s=.055){const r=this.pool[this.cursor];this.cursor=(this.cursor+1)%this.pool.length;const a=r.geo.attributes.position.array;a[0]=t.x,a[1]=t.y,a[2]=t.z,a[3]=e.x,a[4]=e.y,a[5]=e.z,r.geo.attributes.position.needsUpdate=!0,r.mat.color.set(n),r.mat.opacity=.95,r.line.visible=!0,r.age=0,r.life=s,r.line.scale.set(1,1,1)}update(t){for(const e of this.pool){if(!e.line.visible)continue;e.age+=t;const n=e.age/e.life;if(n>=1){e.line.visible=!1;continue}e.mat.opacity=(1-n)*.95}}clear(){for(const t of this.pool)t.line.visible=!1}}class Rc{constructor(t,e=8){this.scene=t,this.items=[];for(let n=0;n<e;n++){const s=new oi({map:mh,color:16777215,transparent:!0,opacity:0,blending:Ee,depthWrite:!1,toneMapped:!1}),r=new li(s);r.visible=!1,r.renderOrder=7,t.add(r);const a=new qe(16751442,0,12,2);t.add(a),this.items.push({sprite:r,light:a,age:0,life:.06,power:1,size:.5,lightPower:0})}this.cursor=0}spawn(t,{color:e=16757611,size:n=.55,life:s=.06,lightPower:r=90,lightColor:a=16751442}={}){const o=this.items[this.cursor];this.cursor=(this.cursor+1)%this.items.length,o.sprite.visible=!0,o.sprite.position.copy(t),o.sprite.material.color.set(e),o.sprite.material.opacity=1,o.sprite.scale.setScalar(n),o.light.position.copy(t),o.light.color.set(a),o.light.intensity=r,o.age=0,o.life=s,o.size=n,o.lightPower=r}update(t){for(const e of this.items){if(!e.sprite.visible)continue;e.age+=t;const n=e.age/e.life;if(n>=1){e.sprite.visible=!1,e.light.intensity=0;continue}e.sprite.material.opacity=1-n,e.sprite.scale.setScalar(e.size*(1+n*1.8)),e.light.intensity=e.lightPower*Math.pow(1-n,2)}}clear(){for(const t of this.items)t.sprite.visible=!1,t.light.intensity=0}}class Ug{constructor(t){this.scene=t,this.sparks=new Fa(t,900,{sizeScale:1}),this.embers=new Fa(t,900,{sizeScale:1.1}),this.dust=new Fa(t,250,{sizeScale:1.5}),this.smoke=new Lg(t,34),this.tracers=new Ig(t,30),this.flashes=new Rc(t,4),this.impactFlashes=new Rc(t,3),this.warningColor=new ft(16742958),this.emberColor=new ft(16751164),this.sparkColor=new ft(16763012),this.coolSpark=new ft(11851775)}impact(t,e=new A(0,0,1),{enemy:n=!1}={}){const s=e.clone().normalize(),r=n?16:12;for(let a=0;a<r;a++){const o=s.clone().multiplyScalar(.8+Math.random()*1.4).add(new A((Math.random()-.5)*1.5,(Math.random()-.2)*1.4,(Math.random()-.5)*1.5)).normalize(),l=1.6+Math.random()*5.5,c=n?this.emberColor.clone().lerp(new ft(16726800),Math.random()*.4):this.sparkColor.clone();this.sparks.spawn({position:t,velocity:o.multiplyScalar(l),color:c,size:.018+Math.random()*.045,life:.25+Math.random()*.55,gravity:-9.5,drag:.97,bounce:.25})}this.impactFlashes.spawn(t.clone().addScaledVector(s,.03),{color:n?16734752:16761466,size:.18,life:.07,lightPower:n?16:22,lightColor:n?16733216:16756832});for(let a=0;a<(n?2:3);a++)this.smoke.spawn(t.clone().addScaledVector(s,.05),{velocity:s.clone().multiplyScalar(.15+Math.random()*.18).add(new A(0,.1,0)),life:1.4+Math.random()*1.4,size:.25+Math.random()*.25,opacity:n?.17:.13,color:n?2364431:1645341})}tracer(t,e,n=16762241){this.tracers.spawn(t,e,n,.06)}muzzleFlash(t,e=16757611){this.flashes.spawn(t,{color:e,size:.34,life:.055,lightPower:115,lightColor:16753498});for(let n=0;n<3;n++)this.smoke.spawn(t,{velocity:new A((Math.random()-.5)*.3,.15+Math.random()*.25,(Math.random()-.5)*.3),life:.8+Math.random()*.8,size:.13,opacity:.09,color:1382170})}emberDeath(t,e=!1){const n=e?110:86;for(let s=0;s<n;s++){const r=Math.random()*Math.PI*2,a=Math.acos(1-Math.random()*1.35),o=new A(Math.cos(r)*Math.sin(a),Math.cos(a)+.3,Math.sin(r)*Math.sin(a)).normalize(),l=.5+Math.random()*4.2,c=new ft(1,.26+Math.random()*.45,.05+Math.random()*.12);this.embers.spawn({position:t.clone().add(new A((Math.random()-.5)*.5,(Math.random()-.5)*1.2,(Math.random()-.5)*.5)),velocity:o.multiplyScalar(l).add(new A(0,.8,0)),color:c,size:.035+Math.random()*.11,life:.9+Math.random()*2.2,gravity:-2.6,drag:.986})}this.flashes.spawn(t.clone().add(new A(0,.4,0)),{color:16742960,size:1.6,life:.26,lightPower:95,lightColor:16738856});for(let s=0;s<7;s++)this.smoke.spawn(t.clone().add(new A((Math.random()-.5)*.8,Math.random()*1.4,(Math.random()-.5)*.8)),{velocity:new A((Math.random()-.5)*.5,.3+Math.random()*.4,(Math.random()-.5)*.5),life:2.5+Math.random()*2.4,size:.5+Math.random()*.5,opacity:.14,color:1579292});for(let s=0;s<12;s++){const r=new A((Math.random()-.5)*2,Math.random()*1.4,(Math.random()-.5)*2).normalize();this.dust.spawn({position:t.clone(),velocity:r.multiplyScalar(1.5+Math.random()*2.2),color:new ft(5982780),size:.025+Math.random()*.04,life:.8+Math.random()*.9,gravity:-7,drag:.99,bounce:.2})}}shellCasing(t,e){const n=e.clone().multiplyScalar(.8).add(new A((Math.random()-.5)*1.2,.8+Math.random()*.9,(Math.random()-.5)*1.2));this.dust.spawn({position:t,velocity:n,color:new ft(14263646),size:.025,life:.7+Math.random()*.5,gravity:-11,drag:.995,bounce:.3})}projectileImpact(t,e=16735010){for(let n=0;n<10;n++){const s=new A((Math.random()-.5)*2,(Math.random()-.1)*1.4,(Math.random()-.5)*2).normalize();this.sparks.spawn({position:t,velocity:s.multiplyScalar(1+Math.random()*3.6),color:new ft(1,.25,.055),size:.025+Math.random()*.04,life:.2+Math.random()*.4,gravity:-6,drag:.97,bounce:.2})}this.flashes.spawn(t,{color:e,size:.28,life:.09,lightPower:24,lightColor:e}),this.smoke.spawn(t,{velocity:new A(0,.25,0),life:1.4,size:.35,opacity:.14,color:1708816})}update(t,e){this.sparks.update(t),this.embers.update(t),this.dust.update(t),this.smoke.update(t),this.tracers.update(e),this.flashes.update(e),this.impactFlashes.update(e)}clear(){this.sparks.clear(),this.embers.clear(),this.dust.clear(),this.smoke.clear(),this.tracers.clear(),this.flashes.clear(),this.impactFlashes.clear()}}class Ng{constructor(){this.ctx=null,this.ready=!1,this.timeScale=1,this.tension=0,this.lastStep=0}async ensure(){if(!this.ctx){const t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.ctx=new t,this.buildGraph(),this.ready=!0}if(this.ctx.state==="suspended")try{await this.ctx.resume()}catch{}}buildGraph(){const t=this.ctx;this.master=t.createGain(),this.master.gain.value=.64,this.compressor=t.createDynamicsCompressor(),this.compressor.threshold.value=-16,this.compressor.knee.value=18,this.compressor.ratio.value=5,this.compressor.attack.value=.003,this.compressor.release.value=.22,this.master.connect(this.compressor),this.compressor.connect(t.destination);const e=t.sampleRate*2.4;this.noiseBuffer=t.createBuffer(1,e,t.sampleRate);const n=this.noiseBuffer.getChannelData(0);let s=0;for(let a=0;a<e;a++){const o=Math.random()*2-1;s=s*.92+o*.08,n[a]=o*.6+s*.9}this.ambient=t.createGain(),this.ambient.gain.value=.9,this.ambient.connect(this.master),this.rainSource=t.createBufferSource(),this.rainSource.buffer=this.noiseBuffer,this.rainSource.loop=!0,this.rainHigh=t.createBiquadFilter(),this.rainHigh.type="highpass",this.rainHigh.frequency.value=780,this.rainHigh.Q.value=.4,this.rainLow=t.createBiquadFilter(),this.rainLow.type="lowpass",this.rainLow.frequency.value=6800,this.rainGain=t.createGain(),this.rainGain.gain.value=.026,this.rainSource.connect(this.rainHigh),this.rainHigh.connect(this.rainLow),this.rainLow.connect(this.rainGain),this.rainGain.connect(this.ambient),this.rainSource.start(),this.windSource=t.createBufferSource(),this.windSource.buffer=this.noiseBuffer,this.windSource.loop=!0,this.windFilter=t.createBiquadFilter(),this.windFilter.type="lowpass",this.windFilter.frequency.value=190,this.windFilter.Q.value=.8,this.windGain=t.createGain(),this.windGain.gain.value=.075,this.windSource.connect(this.windFilter),this.windFilter.connect(this.windGain),this.windGain.connect(this.ambient),this.windSource.start(),this.droneGain=t.createGain(),this.droneGain.gain.value=.032,this.droneFilter=t.createBiquadFilter(),this.droneFilter.type="lowpass",this.droneFilter.frequency.value=330,this.droneFilter.Q.value=2.2,this.droneGain.connect(this.droneFilter),this.droneFilter.connect(this.ambient),this.drones=[],[41.2,55,82.4,110,164.8].forEach((a,o)=>{const l=t.createOscillator();l.type=o>2?"triangle":"sawtooth",l.frequency.value=a,l.detune.value=(o-2)*5;const c=t.createGain();c.gain.value=o>2?.05:.12,l.connect(c),c.connect(this.droneGain),l.start(),this.drones.push({osc:l,base:a,gain:c,index:o})}),this.growl=t.createOscillator(),this.growl.type="sine",this.growl.frequency.value=34,this.growlGain=t.createGain(),this.growlGain.gain.value=0,this.growl.connect(this.growlGain),this.growlGain.connect(this.master),this.growl.start(),this.tensionOsc=t.createOscillator(),this.tensionOsc.type="sine",this.tensionOsc.frequency.value=240,this.tensionGain=t.createGain(),this.tensionGain.gain.value=0,this.tensionOsc.connect(this.tensionGain),this.tensionGain.connect(this.master),this.tensionOsc.start(),this.lfo=t.createOscillator(),this.lfo.type="sine",this.lfo.frequency.value=.075,this.lfoGain=t.createGain(),this.lfoGain.gain.value=65,this.lfo.connect(this.lfoGain),this.lfoGain.connect(this.droneFilter.frequency),this.lfo.start()}update(t,e=0){if(!this.ready)return;const n=this.ctx.currentTime;this.timeScale=t,this.tension+=(e-this.tension)*.08;const s=t,r=.09;this.rainHigh.frequency.setTargetAtTime(220+2600*Math.pow(s,1.5),n,r),this.rainLow.frequency.setTargetAtTime(550+6900*s,n,r),this.rainGain.gain.setTargetAtTime(.014+.026*s,n,r),this.windFilter.frequency.setTargetAtTime(70+180*Math.pow(s,1.4),n,r),this.windGain.gain.setTargetAtTime(.055+.035*s,n,r),this.droneFilter.frequency.setTargetAtTime(85+280*s,n,r),this.droneGain.gain.setTargetAtTime(.045+.01*s,n,r);for(const a of this.drones)a.osc.frequency.setTargetAtTime(a.base*(.58+.42*s),n,r);this.growl.frequency.setTargetAtTime(28+7*s,n,r),this.growlGain.gain.setTargetAtTime((1-s)*.045,n,r),this.tensionOsc.frequency.setTargetAtTime(150+260*s+this.tension*140,n,r),this.tensionGain.gain.setTargetAtTime(.002+this.tension*.012,n,r)}makeNoise(t,{filter:e="lowpass",freq:n=2e3,q:s=.8,gain:r=.2,pan:a=0,rate:o=1,delay:l=0}={}){if(!this.ready)return;const c=this.ctx,h=c.currentTime+l,u=c.createBufferSource();u.buffer=this.noiseBuffer,u.playbackRate.value=o;const d=c.createBiquadFilter();d.type=e,d.frequency.value=n,d.Q.value=s;const p=c.createGain();p.gain.setValueAtTime(1e-4,h),p.gain.exponentialRampToValueAtTime(Math.max(2e-4,r),h+.004),p.gain.exponentialRampToValueAtTime(1e-4,h+t);const g=c.createStereoPanner();g.pan.value=Math.max(-1,Math.min(1,a)),u.connect(d),d.connect(p),p.connect(g),g.connect(this.master),u.start(h,Math.random()*1.8),u.stop(h+t+.02)}tone(t,e,n,s="sine",r=.14,a=0,o=0){if(!this.ready)return;const l=this.ctx,c=l.currentTime+o,h=l.createOscillator();h.type=s,h.frequency.setValueAtTime(t,c),h.frequency.exponentialRampToValueAtTime(Math.max(20,e),c+n);const u=l.createGain();u.gain.setValueAtTime(1e-4,c),u.gain.exponentialRampToValueAtTime(Math.max(2e-4,r),c+.006),u.gain.exponentialRampToValueAtTime(1e-4,c+n);const d=l.createStereoPanner();d.pan.value=Math.max(-1,Math.min(1,a)),h.connect(u),u.connect(d),d.connect(this.master),h.start(c),h.stop(c+n+.02)}playShot(){if(!this.ready)return;const t=this.timeScale;this.makeNoise(.16,{filter:"lowpass",freq:3200+2200*t,q:.7,gain:.42,pan:0}),this.makeNoise(.05,{filter:"highpass",freq:2400,gain:.18}),this.tone(135+t*45,43,.17,"sine",.34),this.tone(1700,220,.045,"square",.05),this.makeNoise(.5,{filter:"bandpass",freq:480,q:2.2,gain:.06,delay:.03})}playEnemyShot(t=0){if(!this.ready)return;const e=this.timeScale;this.makeNoise(.28,{filter:"lowpass",freq:900+1700*e,gain:.11,pan:t,rate:.52+.48*e}),this.tone(100+90*e,30,.3,"sawtooth",.07,t),this.tone(520+340*e,100,.16,"triangle",.035,t)}playImpact(t=0,e=!1){this.ready&&(this.makeNoise(.09,{filter:"bandpass",freq:e?800:1700,q:1.4,gain:.13,pan:t}),this.tone(e?310:620,90,.07,"triangle",.05,t))}playHit(){this.ready&&(this.tone(1250,880,.07,"sine",.05),this.tone(1900,1500,.04,"sine",.025))}playKill(){if(!this.ready)return;const t=this.timeScale;this.makeNoise(1.2,{filter:"lowpass",freq:1500+2200*t,gain:.11,rate:.4+.3*t}),this.tone(90,26,.9,"sine",.16),this.tone(330,62,.55,"sawtooth",.035);for(let e=0;e<7;e++)this.makeNoise(.05,{filter:"highpass",freq:3e3+Math.random()*2500,gain:.035,pan:(Math.random()-.5)*.8,delay:.08+Math.random()*.8})}playDamage(t=0){this.ready&&(this.makeNoise(.32,{filter:"lowpass",freq:700,gain:.25,pan:t}),this.tone(80,38,.4,"sawtooth",.11,t),this.tone(240,60,.16,"square",.035,t))}playProjectilePass(t=0){this.ready&&(this.makeNoise(.24,{filter:"bandpass",freq:900,q:3,gain:.08,pan:t}),this.tone(900,260,.24,"sine",.025,t))}playStep(t=0){if(!this.ready)return;const e=this.ctx.currentTime;e-this.lastStep<.2||(this.lastStep=e,this.makeNoise(.1,{filter:"lowpass",freq:280+Math.random()*120,gain:.055,pan:t}),this.tone(55+Math.random()*15,34,.11,"sine",.04,t))}playUi(){this.ready&&this.tone(540,720,.06,"sine",.035)}playEmpty(){this.ready&&this.tone(420,320,.04,"square",.03)}playDeath(){this.ready&&(this.makeNoise(2,{filter:"lowpass",freq:400,gain:.2}),this.tone(110,22,1.6,"sawtooth",.16),this.tone(55,18,2.2,"sine",.2))}}const Qt=i=>document.querySelector(i),ht={canvas:Qt("#game"),hud:Qt("#hud"),intro:Qt("#intro"),pause:Qt("#pause"),death:Qt("#death"),clear:Qt("#clear"),startBtn:Qt("#startBtn"),watchDemo:Qt("#watchDemo"),resumeBtn:Qt("#resumeBtn"),restartBtn:Qt("#restartBtn"),againBtn:Qt("#againBtn"),demoToggle:Qt("#demoToggle"),demoLabel:Qt("#demoLabel"),demoIndicator:Qt("#demoIndicator"),enemiesLeft:Qt("#enemiesLeft"),enemiesTotal:Qt("#enemiesTotal"),hearts:Qt("#hearts"),heartCount:Qt("#heartCount"),timeDial:Qt("#timeDial"),timeArc:Qt("#timeArc"),timeNeedle:Qt("#timeNeedle"),timeTicks:Qt("#timeTicks"),timeValue:Qt("#timeValue"),timeState:Qt("#timeState"),crosshair:Qt("#crosshair"),hitmarker:Qt("#hitmarker"),damageArc:Qt("#damageArc"),damageFlash:Qt("#damageFlash"),toast:Qt("#toast"),deathKills:Qt("#deathKills"),deathTime:Qt("#deathTime"),clearKills:Qt("#clearKills"),clearTime:Qt("#clearTime"),controlsHint:Qt("#controlsHint")},En=1.66,ri=4.15,Fg=.36,mn=.05,gh=3,il=12,_h=1.5,Cc=.72;let vh=Math.min(window.devicePixelRatio||1,_h),Hn=1,Co=0,Po=0,Do=0;function Zs(){return Math.max(.72,vh*Hn)}const U={mode:"intro",started:!1,demo:!1,hearts:gh,kills:0,enemyTotal:8,timeScale:mn,timeTarget:mn,actualSpeed:0,missionTime:0,elapsedReal:0,elapsedWorld:0,clearTimer:-1,restartTimer:0,damageFlash:0,damageArcTime:0,deathT:0,introT:0,pointerLocked:!1,audioReady:!1,ready:!1,hitCount:0,renderScale:1},P={position:new A(0,0,-16.5),velocity:new A,yaw:Math.PI,pitch:0,roll:0,eye:En,alive:!0,radius:Fg,invuln:0,lookActivity:0,lookSwayX:0,shake:0,flinch:0,flinchAngle:0,recoilPitch:0,recoilRoll:0,weaponKick:0,muzzleTimer:0,nextShot:0,triggerHeld:!1,bobPhase:0,stepTimer:0,lastActualSpeed:0},gn=[];let ke=[];const $e=new ag({canvas:ht.canvas,antialias:!0,powerPreference:"high-performance",stencil:!1});$e.setPixelRatio(Zs());$e.setSize(window.innerWidth,window.innerHeight);Co=Zs();Po=window.innerWidth;Do=window.innerHeight;$e.shadowMap.enabled=!0;$e.shadowMap.type=Uc;$e.toneMapping=Xn;$e.outputColorSpace=Ze;$e.autoClear=!0;const je=new th,ye=new on(73,window.innerWidth/window.innerHeight,.035,260);ye.rotation.order="YXZ";je.add(ye);const xh=[];for(let i=0;i<il;i++){const t=new qe(16735006,0,6.5,2);t.position.set(0,-100,0),t.userData.projectileLight=!0,t.userData.inUse=!1,je.add(t),xh.push(t)}function Og(){for(const i of xh)if(!i.userData.inUse)return i.userData.inUse=!0,i;return null}function Bg(i){i&&(i.userData.inUse=!1,i.intensity=0,i.position.set(0,-100,0))}const Se=Eg(je,$e),en=new Ug(je),Ce=new Ng,zg={uniforms:{tDiffuse:{value:null},uTime:{value:0},uHeat:{value:0},uDamage:{value:0},uExposure:{value:1.04},uResolution:{value:new Dt(1,1)}},vertexShader:`
    varying vec2 vUv;
    void main() {
      vUv = uv;
      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
    }
  `,fragmentShader:`
    precision highp float;
    uniform sampler2D tDiffuse;
    uniform float uTime;
    uniform float uHeat;
    uniform float uDamage;
    uniform float uExposure;
    uniform vec2 uResolution;
    varying vec2 vUv;

    float hash(vec2 p) {
      p = fract(p * vec2(123.34, 456.21));
      p += dot(p, p + 45.32);
      return fract(p.x * p.y);
    }

    vec3 aces(vec3 x) {
      return clamp((x * (2.51 * x + 0.03)) / (x * (2.43 * x + 0.59) + 0.14), 0.0, 1.0);
    }

    vec3 toSRGB(vec3 c) {
      vec3 lo = c * 12.92;
      vec3 hi = 1.055 * pow(max(c, vec3(0.0)), vec3(1.0 / 2.4)) - 0.055;
      return mix(lo, hi, step(vec3(0.0031308), c));
    }

    void main() {
      vec2 uv = vUv;
      vec2 centered = uv - 0.5;
      float radius = length(centered);

      // A whisper of chromatic aberration; stronger when frozen or hit.
      vec2 caDir = normalize(centered + vec2(0.00001));
      float ca = (0.0008 * (1.0 - uHeat) + uDamage * 0.0024) * smoothstep(0.0, 0.5, radius);
      vec3 col;
      col.r = texture2D(tDiffuse, uv + caDir * ca).r;
      col.g = texture2D(tDiffuse, uv).g;
      col.b = texture2D(tDiffuse, uv - caDir * ca).b;

      col *= uExposure;
      col = aces(col);
      col = toSRGB(col);

      // Compression toward monochrome as the world freezes.
      float lum = dot(col, vec3(0.2126, 0.7152, 0.0722));
      col = mix(vec3(lum), col, mix(0.56, 1.10, uHeat));

      // Cool sodium/cyan night on freeze; warm golden motion on movement.
      vec3 coldTint = vec3(0.79, 0.92, 1.10);
      vec3 warmTint = vec3(1.075, 1.0, 0.91);
      col *= mix(coldTint, warmTint, uHeat);

      // Lift shadows just enough to read the geometry.
      vec3 lift = mix(vec3(0.002, 0.008, 0.016), vec3(0.010, 0.004, 0.001), uHeat);
      col += lift;

      // Contrast curve.
      col = (col - 0.5) * mix(1.035, 1.075, uHeat) + 0.5;

      // Warm highlights from practicals.
      float hi = smoothstep(0.55, 1.0, lum);
      col += vec3(0.03, 0.014, 0.004) * hi * uHeat;

      // Lens vignette / freeze vignette.
      float vig = smoothstep(0.99, 0.28, radius * 1.2);
      col *= mix(0.70, 1.0, vig);

      // Damage bloom at the edges.
      float edge = smoothstep(0.10, 0.70, radius);
      col = mix(col, vec3(0.34, 0.006, 0.0), uDamage * edge * 0.82);

      // 35mm grain. Static enough not to flicker obnoxiously.
      float grain = hash(uv * uResolution + fract(uTime) * 137.31) - 0.5;
      col += grain * 0.036 * (0.68 + 0.32 * (1.0 - uHeat));

      // Fine scanline texture.
      float scan = sin(uv.y * uResolution.y * 1.6) * 0.0025;
      col += scan;

      gl_FragColor = vec4(clamp(col, 0.0, 1.0), 1.0);
    }
  `},jn=new ug($e);jn.setPixelRatio(Zs());jn.setSize(window.innerWidth,window.innerHeight);const kg=new dg(je,ye),Hg=new cs(new Dt(window.innerWidth,window.innerHeight),.64,.54,.88),sl=new fh(zg);jn.addPass(kg);jn.addPass(Hg);jn.addPass(sl);sl.renderToScreen=!0;const Ei=sl.uniforms,Pc=$e.getDrawingBufferSize(new Dt);Ei.uResolution.value.set(Pc.x,Pc.y);function Gg(){const i=new tn;i.position.set(.345,-.27,-.92),i.rotation.set(.006,.1,-.012),i.scale.setScalar(.6),i.visible=!1,ye.add(i);const t=new fe({color:1317407,roughness:.46,metalness:.7,envMapIntensity:1.2,emissive:new ft(264203),emissiveIntensity:.55}),e=new fe({color:3028541,roughness:.36,metalness:.82,envMapIntensity:1.35,emissive:new ft(330254),emissiveIntensity:.5}),n=new fe({color:592911,roughness:.72,metalness:.18,emissive:new ft(132102),emissiveIntensity:.4}),s=new fe({color:1513756,roughness:.84,metalness:.06}),r=new fe({color:328965,emissive:16734754,emissiveIntensity:1.9,roughness:.4}),a=new Be({color:new ft(.14,1.15,1.6),toneMapped:!1});ts(t,{color:[.17,.26,.35],strength:.72,power:2.6}),ts(e,{color:[.2,.31,.4],strength:.72,power:2.7}),ts(n,{color:[.08,.14,.2],strength:.5,power:3}),ts(s,{color:[.07,.11,.15],strength:.4,power:3.2});function o(_,m,f,b,T,x=0,R=0,D=0,I=1,F=1,w=1){const y=new xt(_,m);return y.position.set(f,b,T),y.rotation.set(x,R,D),y.scale.set(I,F,w),y.castShadow=!1,y.receiveShadow=!1,y.frustumCulled=!1,i.add(y),y}const l=new he(1,1,1),c=new ui(1,1,1,12),h=new Qo(1,.06,6,16);o(l,t,0,.012,-.075,0,0,0,.13,.145,.4),o(l,t,0,.095,-.075,0,0,0,.105,.055,.38),o(l,n,0,.012,-.42,0,0,0,.096,.108,.34),o(l,e,0,.073,-.4,0,0,0,.085,.022,.3),o(l,t,0,.02,.165,0,0,0,.095,.11,.06),o(l,e,0,.03,.11,0,0,0,.13,.024,.08),o(c,e,0,.035,-.69,Math.PI/2,0,0,.019,.38,.019),o(c,t,0,.035,-.84,Math.PI/2,0,0,.037,.22,.037),o(c,e,0,.035,-.935,Math.PI/2,0,0,.03,.075,.03);for(let _=0;_<3;_++)o(h,t,0,.035,-.885-_*.018,0,0,0,.038,.038,.06);o(l,t,0,.122,-.05,0,0,0,.08,.026,.14),o(l,t,0,.177,-.03,0,0,0,.062,.062,.078),o(l,a,.014,.178,.017,0,0,0,.018,.026,.004),o(l,t,-.034,.177,.016,0,0,0,.011,.055,.012),o(l,t,.034,.177,.016,0,0,0,.011,.055,.012);for(let _=0;_<9;_++)o(l,t,0,.123,-.27+_*.045,0,0,0,.048,.012,.018);o(l,n,0,-.13,-.065,-.12,0,0,.062,.19,.13),o(l,n,0,-.15,.1,.27,0,0,.066,.19,.095),o(h,t,0,-.085,.04,Math.PI/2,0,0,.045,.065,.05),o(l,r,.068,.018,-.035,0,0,0,.003,.02,.17),o(l,a,-.068,.03,-.04,0,0,0,.003,.014,.038),o(l,t,.072,.05,-.2,0,0,0,.02,.035,.09);for(let _=0;_<4;_++)o(l,t,0,0,-.48-_*.045,0,0,0,.07,.006,.022);o(l,s,.012,-.165,.115,.2,-.06,.04,.086,.12,.095);for(let _=0;_<3;_++)o(l,s,.05,-.138-_*.022,.085,.1,0,0,.026,.02,.048);o(l,s,-.004,-.07,-.43,.08,.08,0,.11,.08,.15);for(let _=0;_<3;_++)o(l,s,-.005,-.085,-.5+_*.045,0,.05,0,.105,.026,.021);const u=new we;u.position.set(0,.035,-.975),i.add(u);const d=new qe(11982060,4.8,2.2,2);d.position.set(.17,.12,.05),ye.add(d);const p=new oi({map:vs(128),color:new ft(1.9,.92,.36),transparent:!0,opacity:0,blending:Ee,depthWrite:!1,toneMapped:!1}),g=new li(p);return g.position.copy(u.position),g.scale.set(.34,.34,1),g.visible=!1,i.add(g),{group:i,muzzle:u,flash:g,flashMat:p,base:new A(.345,-.27,-.92),metal:t,polymer:n,glove:s,accent:r,lens:a}}const Ie=Gg(),hs=new A,Vg=new A;function Wg(i,t,e){let n=0,s=1;const r=[["x",i.x,t.x,e.minX,e.maxX],["y",i.y,t.y,e.minY,e.maxY],["z",i.z,t.z,e.minZ,e.maxZ]];for(const[,a,o,l,c]of r){const h=o-a;if(Math.abs(h)<1e-8){if(a<l||a>c)return!1}else{let u=(l-a)/h,d=(c-a)/h;if(u>d&&([u,d]=[d,u]),n=Math.max(n,u),s=Math.min(s,d),n>s)return!1}}return!0}function us(i,t){for(const e of Se.colliders)if(Wg(i,t,e))return!1;return!0}function Xg(i,t,e=.06){return i.x>t.minX-e&&i.x<t.maxX+e&&i.y>t.minY-e&&i.y<t.maxY+e&&i.z>t.minZ-e&&i.z<t.maxZ+e}function qg(i,t,e){const n=e.x-t.x,s=e.y-t.y,r=e.z-t.z,a=i.x-t.x,o=i.y-t.y,l=i.z-t.z,c=n*n+s*s+r*r;let h=c>0?(a*n+o*s+l*r)/c:0;h=Math.max(0,Math.min(1,h));const u=t.x+n*h-i.x,d=t.y+s*h-i.y,p=t.z+r*h-i.z;return Math.sqrt(u*u+d*d+p*p)}function ds(i){const t=i.x-P.position.x,e=i.z-P.position.z,n=Math.cos(P.yaw),s=-Math.sin(P.yaw),r=Math.hypot(t,e)||1;return Ot.clamp((t*n+e*s)/r,-1,1)*.75}function Yg(){for(const i of ke)i.dispose();ke=[],Se.spawnPoints.forEach((i,t)=>{ke.push(new Pg(je,i,t,{playerChest:e=>e.set(P.position.x,1.15,P.position.z),onFire:Kg,onDeath:$g}))}),U.enemyTotal=ke.length,rl()}function Zg(){const i=ke.filter(n=>n.alive);if(!i.length)return new A(0,0,8);let t=i[0],e=1/0;for(const n of i){const s=n.position.distanceToSquared(P.position);s<e&&(e=s,t=n)}return t.getChestPosition(new A)}function Kg(i,t,e){bh(t,e);const n=ds(t);Ce.playEnemyShot(n),en.flashes.spawn(t,{color:16738856,size:.27,life:.07,lightPower:24,lightColor:16734754})}function $g(i,t,e){U.kills+=1,en.emberDeath(t,e),Ce.playKill(),rl(),Rh(!0,!0),U.demo&&(dt.study=Math.max(dt.study,.75),dt.studyCd=5.5+Math.random()*4),U.kills>=U.enemyTotal&&U.clearTimer<0&&(U.clearTimer=1.65,$n("ALL HOSTILES DOWN"))}function rl(){const i=ke.filter(t=>t.alive).length;ht.enemiesLeft.textContent=String(i).padStart(2,"0"),ht.enemiesTotal.textContent=String(U.enemyTotal).padStart(2,"0")}const Mh=new Kn(.085,12,8),yh=new Be({color:new ft(4.4,.92,.2),toneMapped:!1}),Sh=new oi({map:vs(128),color:new ft(1.9,.38,.07),transparent:!0,opacity:.9,blending:Ee,depthWrite:!1,toneMapped:!1}),Lo=14,wh=new ls({color:16742961,transparent:!0,opacity:.5,blending:Ee,depthWrite:!1,toneMapped:!1}),Th=new ui(.026,.06,1,7,1,!0),Eh=new Be({color:new ft(3.1,.7,.16),transparent:!0,opacity:.38,blending:Ee,depthWrite:!1,side:fn,toneMapped:!1}),jg=new A(0,1,0),Io=8,al=il*Io,Br=new Float32Array(al*3),Si=new Float32Array(al*3),Xs=new me;Xs.setAttribute("position",new ve(Br,3));Xs.setAttribute("color",new ve(Si,3));const ol=new Zr(Xs,new Yr({size:.27,sizeAttenuation:!0,map:vs(64),vertexColors:!0,transparent:!0,opacity:.96,blending:Ee,depthWrite:!1,toneMapped:!1}));ol.frustumCulled=!1;ol.renderOrder=3;je.add(ol);function Uo(){let i=0;for(const t of gn){const e=1/(t.vel.length()||1),n=t.vel.x*e,s=t.vel.y*e,r=t.vel.z*e;for(let a=0;a<Io;a++){const o=a*.68,l=Math.pow(1-a/Io,1.35);Br[i*3]=t.pos.x-n*o,Br[i*3+1]=t.pos.y-s*o,Br[i*3+2]=t.pos.z-r*o,Si[i*3]=2.1*l,Si[i*3+1]=.46*l,Si[i*3+2]=.055*l,i+=1}}for(;i<al;i++)Si[i*3]=0,Si[i*3+1]=0,Si[i*3+2]=0;Xs.attributes.position.needsUpdate=!0,Xs.attributes.color.needsUpdate=!0}function bh(i,t){if(gn.length>=il)return;const e=Og();if(!e)return;const n=t.clone().sub(i).normalize(),s=6.4+Math.random()*1.2,r=new tn;r.position.copy(i);const a=new xt(Mh,yh);a.scale.setScalar(.8+Math.random()*.3),r.add(a);const o=new li(Sh);o.scale.set(.6,.6,1),r.add(o);const l=new xt(Th,Eh),c=n.clone().multiplyScalar(-1);l.quaternion.setFromUnitVectors(jg,c),l.position.copy(c).multiplyScalar(1.25),l.scale.set(1,2.5,1),r.add(l),je.add(r),e.position.copy(i),e.intensity=13;const h=new Float32Array(Lo*3);for(let p=0;p<Lo;p++)h[p*3]=i.x,h[p*3+1]=i.y,h[p*3+2]=i.z;const u=new me;u.setAttribute("position",new ve(h,3));const d=new ms(u,wh);d.frustumCulled=!1,je.add(d),gn.push({group:r,core:a,halo:o,beam:l,light:e,trail:d,positions:h,pos:i.clone(),prev:i.clone(),vel:n.multiplyScalar(s),life:5.2,whiz:!1})}function zr(i){const t=gn[i];t&&(je.remove(t.group),Bg(t.light),je.remove(t.trail),t.trail.geometry.dispose(),gn.splice(i,1))}function Jg(){for(let i=gn.length-1;i>=0;i--)zr(i);Uo()}function Ah(i){if(i<=0){Uo();return}for(let t=gn.length-1;t>=0;t--){const e=gn[t];if(e.life-=i,e.life<=0){en.projectileImpact(e.pos),zr(t);continue}e.prev.copy(e.pos),e.pos.addScaledVector(e.vel,i),e.group.position.copy(e.pos),e.light.position.copy(e.pos);const n=.84+Math.sin(U.elapsedWorld*19+t*1.7)*.16;e.light.intensity=12.5*n,e.halo.scale.setScalar(.72+n*.16);const s=1/(e.vel.length()||1),r=e.vel.x*s,a=e.vel.y*s,o=e.vel.z*s;for(let u=0;u<Lo;u++)e.positions[u*3]=e.pos.x-r*u*.27,e.positions[u*3+1]=e.pos.y-a*u*.27,e.positions[u*3+2]=e.pos.z-o*u*.27;e.trail.geometry.attributes.position.needsUpdate=!0,e.trail.material.opacity=.42+Math.min(.3,e.life*.07),e.beam.material.opacity=.28+Math.min(.2,e.life*.05);const l=Vg.set(P.position.x,1.15,P.position.z),c=qg(l,e.prev,e.pos);if(!e.whiz&&c<2&&(e.whiz=!0,Ce.playProjectilePass(ds(e.pos))),U.mode==="playing"&&P.alive&&P.invuln<=0&&c<.43){Ch(e.pos.clone(),1),en.projectileImpact(e.pos.clone(),16744495),zr(t);continue}let h=!1;for(const u of Se.colliders)if(Xg(e.pos,u,.035)){h=!0;break}(h||e.pos.y<.13||e.pos.y>20||e.pos.x<-36||e.pos.x>36||e.pos.z<-36||e.pos.z>36)&&(en.projectileImpact(e.pos.clone()),Ce.playImpact(ds(e.pos),!0),zr(t))}Uo()}function qs(){if(U.mode!=="playing"||!P.alive||U.elapsedReal<P.nextShot)return;P.nextShot=U.elapsedReal+.158,P.triggerHeld=!0,ye.updateMatrixWorld(!0);const i=ye.getWorldDirection(new A),t=.0015+U.actualSpeed/ri*.004;i.x+=(Math.random()-.5)*t,i.y+=(Math.random()-.5)*t,i.z+=(Math.random()-.5)*t,i.normalize();const e=new Sd(ye.position.clone(),i,.02,90),n=[...Se.occluders];for(const h of ke)h.alive&&n.push(...h.hitMeshes);const s=e.intersectObjects(n,!1);let r=null;for(const h of s){const u=h.object.userData.enemy;if(!(u&&!u.alive)){r=h;break}}const a=Ie.muzzle.getWorldPosition(new A),o=r?r.point.clone():ye.position.clone().addScaledVector(i,90);en.tracer(a,o,16765594),P.weaponKick=1,P.recoilPitch+=.008+Math.random()*.004,P.recoilRoll+=(Math.random()-.5)*.007,P.shake=Math.max(P.shake,.2),P.muzzleTimer=.055,Ie.flash.visible=!0,Ie.flashMat.opacity=1,Ie.flash.scale.setScalar(.34+Math.random()*.2),en.muzzleFlash(a,16756836),Ce.playShot();const l=new A(Math.cos(P.yaw),0,-Math.sin(P.yaw)),c=a.clone().addScaledVector(l,.08);c.y-=.02,en.shellCasing(c,l);for(const h of ke)h.alive&&h.hearGunshot(P.position,18);if(r){const h=r.object.userData.enemy,u=r.face?r.face.normal.clone().transformDirection(r.object.matrixWorld):i.clone().negate();if(h&&h.alive){const d=r.object.userData.part||"body",p=d==="head"?2:1,g=h.takeDamage(p,r.point.clone(),d);en.impact(r.point.clone(),u,{enemy:!0}),Ce.playHit(),Ce.playImpact(ds(r.point),!0),Rh(!1,g.killed),g.killed||(P.shake=Math.max(P.shake,.12)),U.hitCount+=1}else en.impact(r.point.clone(),u,{enemy:!1}),Ce.playImpact(ds(r.point),!1)}}function Rh(i=!1,t=!1){ht.hitmarker.classList.remove("active","kill","head"),ht.hitmarker.offsetWidth,i&&ht.hitmarker.classList.add("head"),t&&ht.hitmarker.classList.add("kill"),ht.hitmarker.classList.add("active")}function Ch(i,t=1){if(U.mode!=="playing"||!P.alive||P.invuln>0)return;U.hearts-=t,P.invuln=1.05,U.damageFlash=1,U.damageArcTime=1.15,P.shake=1.35;const e=i.x-P.position.x,n=i.z-P.position.z,s=Math.cos(P.yaw),r=-Math.sin(P.yaw),a=-Math.sin(P.yaw),o=-Math.cos(P.yaw),l=Math.atan2(e*s+n*r,e*a+n*o);P.flinchAngle=l,P.flinch=1,ht.damageArc.style.transform=`rotate(${l}rad)`,ht.damageArc.classList.add("show"),Ce.playDamage(ds(i)),Fo(),U.hearts<=0&&(U.hearts=0,Fo(),Qg())}function Qg(){U.mode==="playing"&&(U.mode="dead",U.deathT=0,P.alive=!1,P.triggerHeld=!1,U.restartTimer=U.demo?4.5:0,Ie.group.visible=!1,document.pointerLockElement&&document.exitPointerLock(),ht.deathKills.textContent=String(U.kills).padStart(2,"0"),ht.deathTime.textContent=Dh(U.missionTime),ht.death.classList.remove("hidden"),Ce.playDeath(),$n(U.demo?"DEMO BOT DOWN — RESTARTING":"SIGNAL LOST"))}function t_(){U.mode==="playing"&&(U.mode="clear",U.clearTimer=-1,U.restartTimer=U.demo?6.5:0,P.triggerHeld=!1,Ie.group.visible=!1,document.pointerLockElement&&document.exitPointerLock(),ht.clearKills.textContent=String(U.kills).padStart(2,"0"),ht.clearTime.textContent=Dh(U.missionTime),ht.clear.classList.remove("hidden"),Ce.playKill(),U.demo&&$n("DEMO COMPLETE — LOOPING"))}const yn=new Set,Dn={forward:0,strafe:0},es={forward:0,strafe:0};function e_(){es.forward=(yn.has("KeyW")||yn.has("ArrowUp")?1:0)-(yn.has("KeyS")||yn.has("ArrowDown")?1:0),es.strafe=(yn.has("KeyD")||yn.has("ArrowRight")?1:0)-(yn.has("KeyA")||yn.has("ArrowLeft")?1:0)}function n_(i,t){const e=P.radius;let n=P.position.x+i;for(const r of Se.colliders)n+e>r.minX&&n-e<r.maxX&&P.position.z+e>r.minZ&&P.position.z-e<r.maxZ&&(n=i>0?r.minX-e:r.maxX+e);n=Ot.clamp(n,Se.bounds.minX+e,Se.bounds.maxX-e),P.position.x=n;let s=P.position.z+t;for(const r of Se.colliders)P.position.x+e>r.minX&&P.position.x-e<r.maxX&&s+e>r.minZ&&s-e<r.maxZ&&(s=t>0?r.minZ-e:r.maxZ+e);s=Ot.clamp(s,Se.bounds.minZ+e,Se.bounds.maxZ-e),P.position.z=s}function i_(i){if(!P.alive){P.actualSpeed=0,U.actualSpeed=0;return}U.demo?(es.forward=Dn.forward,es.strafe=Dn.strafe):e_();const t=es.forward,e=es.strafe,n=Math.hypot(t,e);let s=0,r=0;if(n>.001){const _=t/Math.max(1,n),m=e/Math.max(1,n),f=-Math.sin(P.yaw),b=-Math.cos(P.yaw),T=Math.cos(P.yaw),x=-Math.sin(P.yaw);s=f*_+T*m,r=b*_+x*m;const R=Math.hypot(s,r)||1;s/=R,r/=R}const a=s*ri,o=r*ri,l=n>.001?12:9,c=1-Math.exp(-i*l);P.velocity.x+=(a-P.velocity.x)*c,P.velocity.z+=(o-P.velocity.z)*c,Math.hypot(P.velocity.x,P.velocity.z)<.02&&P.velocity.set(0,0,0);const h=P.position.x,u=P.position.z;n_(P.velocity.x*i,P.velocity.z*i);const p=Math.hypot(P.position.x-h,P.position.z-u)/Math.max(i,1e-4);U.actualSpeed=Ot.lerp(U.actualSpeed,Math.min(p,ri),1-Math.exp(-i*14)),P.actualSpeed=U.actualSpeed;const g=U.actualSpeed/ri;P.bobPhase+=i*(3.2+g*10.5),U.actualSpeed>1?(P.stepTimer-=i*g,P.stepTimer<=0&&(P.stepTimer=.33,Ce.playStep(0))):P.stepTimer=.1}function s_(i){P.lookActivity=Math.max(0,P.lookActivity-i*4.8),P.lookSwayX+=(0-P.lookSwayX)*(1-Math.exp(-i*8))}function ll(i){if(U.mode==="intro"){const g=U.introT,_=Math.sin(g*.19)*.012,m=Math.sin(g*.31)*.008;ye.position.set(P.position.x+Math.sin(g*.11)*.11,1.94+m,P.position.z-1.3),ye.rotation.set(.012+m*.25,Math.PI+_,0,"YXZ"),Ie.group.visible=!1;return}if(U.mode==="dead"){U.deathT+=i;const g=Math.min(1,U.deathT/1.3),_=1-Math.pow(1-g,3),m=Math.sin(U.deathT*2.3)*.015*(1-g);ye.position.set(P.position.x+Math.sin(g*.9)*.12,Ot.lerp(En,.62,_)+m,P.position.z+Math.cos(g*.7)*.08),ye.rotation.set(Ot.lerp(P.pitch,-.18,_),P.yaw+Math.sin(g*.55)*.1,Ot.lerp(0,.44,_),"YXZ"),Ie.group.visible=!1;return}const t=Ot.clamp(U.actualSpeed/ri,0,1),e=Math.sin(P.bobPhase*2)*.026*t,n=Math.cos(P.bobPhase)*.021*t;P.shake=Math.max(0,P.shake-i*3.4);const s=P.shake*P.shake,r=(Math.random()-.5)*.055*s,a=(Math.random()-.5)*.045*s,o=(Math.random()-.5)*.035*s;P.recoilPitch=Ot.damp(P.recoilPitch,0,12,i),P.recoilRoll=Ot.damp(P.recoilRoll,0,10,i),P.flinch=Math.max(0,P.flinch-i*2.8);const l=P.flinch*Math.sin(P.flinchAngle*1.8+U.elapsedReal*38)*.035,c=Math.sin(P.flinchAngle)*P.flinch*.032,h=Math.cos(P.flinchAngle)*P.flinch*.022;ye.position.set(P.position.x+n+r,En+e+a,P.position.z+o),ye.rotation.set(P.pitch+P.recoilPitch+h+a*.25,P.yaw+r*.2+l+c,P.roll+P.recoilRoll+r*.35+l*1.4,"YXZ"),P.weaponKick=Ot.damp(P.weaponKick,0,15,i);const u=-P.lookSwayX*.12+Math.sin(P.bobPhase)*.008*t,d=Math.abs(Math.cos(P.bobPhase))*-.008*t+Math.sin(P.bobPhase*.5)*.0025,p=P.weaponKick;Ie.group.position.set(Ie.base.x+u,Ie.base.y+d-p*.012,Ie.base.z+p*.075),Ie.group.rotation.set(p*.07+t*.009,-P.lookSwayX*.06-t*.012,Math.sin(P.bobPhase)*.008*t),Ie.group.visible=U.mode==="playing"||U.mode==="clear",P.muzzleTimer>0&&(P.muzzleTimer-=i,P.muzzleTimer<=0&&(Ie.flash.visible=!1,Ie.flashMat.opacity=0))}function r_(i){if(U.mode!=="playing")return;const t=Ot.clamp(U.actualSpeed/ri,0,1),e=Ot.clamp(P.lookActivity*1.65,0,1);let n=mn+(1-mn)*Math.max(t,e);P.alive||(n=mn),U.timeTarget=n;const s=n>U.timeScale?7.2:5.8;U.timeScale=Ot.damp(U.timeScale,n,s,i),Math.abs(U.timeScale-n)<5e-4&&(U.timeScale=n)}const dt={target:null,targetTimer:0,strafeDir:1,strafeTimer:1.8,shootCd:0,study:0,studyCd:6.5,waypoint:new Dt(0,8),waypointTimer:0,stuckTimer:0,lastX:0,lastZ:0,aimErrYaw:0,aimErrPitch:0,errTimer:0,reaction:0,wantShoot:!1,scan:0};function No(){dt.target=null,dt.targetTimer=0,dt.strafeDir=Math.random()>.5?1:-1,dt.strafeTimer=1,dt.shootCd=.3,dt.study=0,dt.studyCd=6+Math.random()*4,dt.waypoint.set(0,7),dt.waypointTimer=0,dt.stuckTimer=0,dt.lastX=P.position.x,dt.lastZ=P.position.z,dt.aimErrYaw=0,dt.aimErrPitch=0,dt.errTimer=0,dt.reaction=.35+Math.random()*.35,dt.wantShoot=!1,dt.scan=0,Dn.forward=0,Dn.strafe=0}function Dr(i,t){let e=(t-i+Math.PI)%(Math.PI*2)-Math.PI;return e<-Math.PI&&(e+=Math.PI*2),e}function a_(){const i=hs.set(P.position.x,En,P.position.z);let t=null,e=1/0,n=null,s=1/0;for(const r of ke){if(!r.alive)continue;const a=r.getChestPosition(new A),o=P.position.distanceTo(r.position);o<s&&(s=o,n=r),us(i,a)&&o<e&&(e=o,t=r)}return t?{enemy:t,visible:!0}:n?{enemy:n,visible:!1}:null}function o_(i){if(U.mode!=="playing"||!P.alive){Dn.forward=0,Dn.strafe=0,dt.wantShoot=!1;return}if(dt.wantShoot=!1,dt.targetTimer-=i,dt.targetTimer<=0){dt.targetTimer=.22+Math.random()*.15;const p=dt.target?.enemy;dt.target=a_(),dt.target&&dt.target.enemy!==p&&(dt.reaction=.35+Math.random()*.55,dt.aimErrYaw=(Math.random()-.5)*.052,dt.aimErrPitch=(Math.random()-.5)*.028)}dt.strafeTimer-=i,dt.strafeTimer<=0&&(dt.strafeTimer=1.7+Math.random()*1.8,dt.strafeDir*=-1),dt.errTimer-=i,dt.errTimer<=0&&(dt.errTimer=.38+Math.random()*.65,dt.aimErrYaw=(Math.random()-.5)*.058,dt.aimErrPitch=(Math.random()-.5)*.03),dt.reaction=Math.max(0,dt.reaction-i),dt.studyCd-=i,dt.studyCd<=0&&dt.study<=0&&(dt.study=1+Math.random()*.8,dt.studyCd=5.5+Math.random()*5),dt.study>0&&(dt.study-=i);let t=P.yaw,e=0,n=!1,s=null;if(dt.target){const p=dt.target.enemy;if(p.alive){s=p.getChestPosition(new A);const g=s.x-P.position.x,_=s.z-P.position.z,m=Math.hypot(g,_)||1,f=s.y-En;t=Math.atan2(-g,-_)+dt.aimErrYaw,e=Math.atan2(f,m)+dt.aimErrPitch,n=us(hs.set(P.position.x,En,P.position.z),s)}else dt.target=null}dt.target||(dt.scan+=i*.7,t=P.yaw+Math.sin(dt.scan)*.5,e=-.02);const r=2.7,a=Ot.clamp(Dr(P.yaw,t),-r*i,r*i),o=Ot.clamp(e-P.pitch,-r*.7*i,r*.7*i);P.yaw+=a,P.pitch=Ot.clamp(P.pitch+o,-1.35,1.35),(Math.abs(a)>1e-4||Math.abs(o)>1e-4)&&(P.lookActivity=Math.min(1.6,P.lookActivity+(Math.abs(a)+Math.abs(o))/Math.max(i,.001)*.32));let l=0,c=0;for(const p of gn){const g=p.pos.x-P.position.x,_=p.pos.z-P.position.z,m=Math.hypot(g,_);if(m<9){const f=-g,b=-_;p.vel.x*f+p.vel.z*b>0&&(c=Math.max(c,1-m/9),l=Math.sign(p.vel.x*_-p.vel.z*g)||1)}}if(dt.wantShoot=!1,dt.target&&n&&s){const p=s.x-P.position.x,g=s.z-P.position.z,_=Math.atan2(-p,-g),m=Math.abs(Dr(P.yaw,_)),f=hs.set(P.position.x,En,P.position.z),b=us(f,s);dt.shootCd-=i,b&&dt.reaction<=0&&m<.034&&dt.shootCd<=0&&(dt.wantShoot=!0,dt.shootCd=.29+Math.random()*.19)}let h=0,u=0;if(c>.15)u=l*1,h=c>.7?-.35:.2,dt.study=0,dt.studyCd=Math.max(dt.studyCd,2.2);else if(dt.study>0)h=0,u=0;else if(dt.target){const p=dt.target.enemy;if(p.alive){const g=Math.hypot(p.position.x-P.position.x,p.position.z-P.position.z);g>15?h=1:g<6.5?h=-.9:h=.18,u=dt.strafeDir*(.55+.2*Math.sin(U.elapsedReal*.9)),n||(h=1)}}else{const p=Zg(),g=p.x-P.position.x,_=p.z-P.position.z;if(Math.hypot(g,_)>2.2){const f=Math.atan2(-g,-_),b=f,T=Ot.clamp(Dr(P.yaw,b),-r*i,r*i),x=Dr(P.yaw,f);h=Math.cos(x)>.1?.9:-.2,u=Math.sin(x)*.8,P.yaw+=T*.35}}Dn.forward=h,Dn.strafe=u;const d=Math.hypot(P.position.x-dt.lastX,P.position.z-dt.lastZ);Math.abs(h)+Math.abs(u)>.2&&d<7e-4?(dt.stuckTimer+=i,dt.stuckTimer>.45&&(dt.stuckTimer=0,dt.strafeDir*=-1,P.yaw+=1.3)):dt.stuckTimer=0,dt.lastX=P.position.x,dt.lastZ=P.position.z}function Ph(){Jg(),en.clear(),Yg(),U.kills=0,U.hearts=gh,U.missionTime=0,U.timeScale=mn,U.timeTarget=mn,U.actualSpeed=0,U.clearTimer=-1,U.restartTimer=0,U.damageFlash=0,U.damageArcTime=0,U.deathT=0,U.hitCount=0,P.position.copy(Se.playerSpawn),P.velocity.set(0,0,0),P.yaw=Math.PI,P.pitch=0,P.roll=0,P.alive=!0,P.invuln=0,P.lookActivity=0,P.lookSwayX=0,P.shake=0,P.flinch=0,P.recoilPitch=0,P.recoilRoll=0,P.weaponKick=0,P.muzzleTimer=0,P.nextShot=0,P.triggerHeld=!1,P.bobPhase=0,P.stepTimer=0,P.lastActualSpeed=0,No(),Fo(),rl(),ht.death.classList.add("hidden"),ht.clear.classList.add("hidden"),ht.damageFlash.style.opacity="0",ht.damageArc.classList.remove("show"),ye.position.set(P.position.x,En,P.position.z),ye.rotation.set(0,P.yaw,0,"YXZ")}function ci({demo:i=!1}={}){Ce.ensure().then(()=>{U.audioReady=!0}).catch(()=>{}),Ph(),U.demo=i,U.mode="playing",U.started=!0,U.introT=0,U.elapsedReal=0,U.timeScale=mn,U.timeTarget=mn,ht.intro.classList.add("hidden"),ht.pause.classList.add("hidden"),ht.death.classList.add("hidden"),ht.clear.classList.add("hidden"),ht.hud.classList.add("on"),ht.controlsHint.style.animation="none",ht.controlsHint.offsetWidth,ht.controlsHint.style.animation="",ht.demoIndicator.classList.toggle("on",i),ht.demoToggle.classList.toggle("active",i),ht.demoToggle.setAttribute("aria-pressed",String(i)),ht.demoLabel.textContent=i?"DEMO ON":"DEMO MODE",ht.controlsHint.classList.toggle("hidden",i),Ie.group.visible=!0,document.body.classList.add("in-game"),i?($n("AUTOPILOT ENGAGED — TIME MOVES WHEN IT MOVES"),dt.studyCd=5.5,dt.study=.35):Jr()}function Jr(){if(!U.demo&&!document.pointerLockElement){const i=ht.canvas.requestPointerLock?.();i&&typeof i.catch=="function"&&i.catch(()=>{})}}function l_(){U.mode!=="playing"||U.demo||(U.mode="paused",P.triggerHeld=!1,ht.pause.querySelector("p").textContent="Mouse captured by the rooftop. Re-enter to keep time moving.",ht.pause.classList.remove("hidden"))}function c_(){U.mode==="paused"&&(Ce.ensure().then(()=>{U.audioReady=!0}).catch(()=>{}),ht.pause.classList.add("hidden"),U.mode="playing",Jr())}function cl(){if(Ce.ensure().then(()=>{U.audioReady=!0}).catch(()=>{}),U.mode==="intro"){ci({demo:!0});return}if(U.mode==="dead"||U.mode==="clear"){U.demo=!U.demo,ci({demo:U.demo});return}if(U.mode==="paused"){U.demo=!U.demo,ht.pause.classList.add("hidden"),U.demo?(U.mode="playing",No(),ht.demoIndicator.classList.add("on"),ht.demoToggle.classList.add("active"),ht.demoToggle.setAttribute("aria-pressed","true"),ht.demoLabel.textContent="DEMO ON",ht.controlsHint.classList.add("hidden"),$n("AUTOPILOT ENGAGED")):ht.pause.classList.remove("hidden");return}U.demo?(U.demo=!1,Dn.forward=0,Dn.strafe=0,ht.demoIndicator.classList.remove("on"),ht.demoToggle.classList.remove("active"),ht.demoToggle.setAttribute("aria-pressed","false"),ht.demoLabel.textContent="DEMO MODE",ht.controlsHint.classList.remove("hidden"),U.mode="paused",ht.pause.classList.remove("hidden"),$n("AUTOPILOT DISENGAGED")):(U.demo=!0,P.triggerHeld=!1,document.pointerLockElement&&document.exitPointerLock(),No(),ht.demoIndicator.classList.add("on"),ht.demoToggle.classList.add("active"),ht.demoToggle.setAttribute("aria-pressed","true"),ht.demoLabel.textContent="DEMO ON",ht.controlsHint.classList.add("hidden"),$n("AUTOPILOT ENGAGED — PRESS B TO TAKE CONTROL"))}function Di(){Ce.ensure().then(()=>{U.audioReady=!0}).catch(()=>{});const i=U.demo;ci({demo:i})}let Dc=0;function $n(i,t=2400){ht.toast.textContent=i,ht.toast.classList.add("show"),clearTimeout(Dc),Dc=setTimeout(()=>ht.toast.classList.remove("show"),t)}function Fo(){ht.hearts.querySelectorAll(".heart").forEach((t,e)=>{const n=e<U.hearts,s=t.classList.contains("full");t.classList.toggle("full",n),t.classList.toggle("lost",!n),s&&!n&&(t.classList.remove("hit"),t.offsetWidth,t.classList.add("hit"))}),ht.heartCount.textContent=String(Math.max(0,U.hearts))}function Dh(i){const t=Math.max(0,Math.floor(i)),e=Math.floor(t/60),n=t%60;return`${String(e).padStart(2,"0")}:${String(n).padStart(2,"0")}`}function h_(){const t="http://www.w3.org/2000/svg";for(let n=0;n<36;n++){const s=n/36*Math.PI*2-Math.PI/2,r=n%3===0,a=r?53:55,o=57,l=document.createElementNS(t,"line");l.setAttribute("x1",String(60+Math.cos(s)*a)),l.setAttribute("y1",String(60+Math.sin(s)*a)),l.setAttribute("x2",String(60+Math.cos(s)*o)),l.setAttribute("y2",String(60+Math.sin(s)*o)),r&&l.classList.add("major"),ht.timeTicks.appendChild(l)}const e=2*Math.PI*47;ht.timeArc.style.strokeDasharray=String(e),ht.timeArc.style.strokeDashoffset=String(e)}h_();const u_=new ft(8379647),d_=new ft(16735010);let Lc="";function hl(i){if(!ht.hud.classList.contains("on"))return;const t=U.timeScale,e=Math.max(1,Math.round(t*100));ht.timeValue.textContent!==String(e)&&(ht.timeValue.textContent=String(e));const n=2*Math.PI*47;ht.timeArc.style.strokeDashoffset=String(n*(1-t));const s=-138+t*276;ht.timeNeedle.setAttribute("transform",`rotate(${s.toFixed(2)} 60 60)`);const r=t<.12?"FROZEN":t<.52?"DRIFT":"FLOW";ht.timeState.textContent!==r&&(ht.timeState.textContent=r);const o=`#${u_.clone().lerp(d_,Math.pow(t,.65)).getHexString()}`;o!==Lc&&(Lc=o,ht.timeDial.style.setProperty("--time-color",o));const l=5+U.actualSpeed/ri*5+P.weaponKick*6;ht.crosshair.style.setProperty("--spread",`${l.toFixed(1)}px`),U.damageFlash=Math.max(0,U.damageFlash-i*2.4);const c=U.hearts===1?.12+Math.max(0,Math.sin(U.elapsedReal*2.6))*.08:0,h=U.damageFlash*.75;ht.damageFlash.style.opacity=String(Math.min(1,h+c)),U.damageArcTime>0&&(U.damageArcTime-=i,U.damageArcTime<=0&&ht.damageArc.classList.remove("show"));const u=ke.filter(p=>p.alive).length,d=String(u).padStart(2,"0");ht.enemiesLeft.textContent!==d&&(ht.enemiesLeft.textContent=d)}window.addEventListener("keydown",i=>{["KeyW","KeyA","KeyS","KeyD","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Space"].includes(i.code)&&i.preventDefault(),yn.add(i.code),i.code==="KeyB"&&!i.repeat&&cl(),i.code==="KeyR"&&!i.repeat&&(U.mode==="dead"||U.mode==="clear")&&Di(),i.code==="Escape"&&U.demo&&U.mode==="playing"&&(U.mode="paused",ht.pause.classList.remove("hidden"),ht.pause.querySelector("p").textContent="Demo paused. Resume to let the rooftop keep moving."),i.code==="Space"&&U.mode==="playing"&&!U.demo&&(P.triggerHeld=!0,qs()),U.mode==="playing"&&!U.demo&&!U.pointerLocked&&["KeyW","KeyA","KeyS","KeyD"].includes(i.code)&&Jr()});window.addEventListener("keyup",i=>{yn.delete(i.code),i.code==="Space"&&(P.triggerHeld=!1)});window.addEventListener("blur",()=>{yn.clear(),P.triggerHeld=!1});ht.canvas.addEventListener("mousedown",i=>{if(i.button===0){if(U.demo){Ce.ensure().then(()=>{U.audioReady=!0}).catch(()=>{});return}if(U.mode==="playing"){if(!document.pointerLockElement){Jr();return}P.triggerHeld=!0,qs()}else U.mode==="intro"&&ci({demo:!1})}});window.addEventListener("mouseup",i=>{i.button===0&&(P.triggerHeld=!1)});window.addEventListener("mousemove",i=>{if(U.mode!=="playing"||U.demo||!document.pointerLockElement)return;const t=.00175,e=i.movementX||0,n=i.movementY||0;P.yaw-=e*t,P.pitch=Ot.clamp(P.pitch-n*t,-1.42,1.42),P.lookActivity=Math.min(1.7,P.lookActivity+Math.abs(e)*.017+Math.abs(n)*.011),P.lookSwayX=Ot.clamp(P.lookSwayX+e*9e-4,-.7,.7)});window.addEventListener("contextmenu",i=>i.preventDefault());document.addEventListener("pointerlockchange",()=>{U.pointerLocked=document.pointerLockElement===ht.canvas,document.body.classList.toggle("locked",U.pointerLocked),!U.pointerLocked&&U.mode==="playing"&&!U.demo&&l_()});document.addEventListener("pointerlockerror",()=>{$n("MOUSE CAPTURE FAILED — CLICK AGAIN")});ht.startBtn.addEventListener("click",()=>ci({demo:!1}));ht.watchDemo.addEventListener("click",()=>ci({demo:!0}));ht.resumeBtn.addEventListener("click",c_);ht.restartBtn.addEventListener("click",i=>{i.stopPropagation(),Di()});ht.againBtn.addEventListener("click",i=>{i.stopPropagation(),Di()});ht.death.addEventListener("click",Di);ht.clear.addEventListener("click",Di);ht.demoToggle.addEventListener("click",i=>{i.stopPropagation(),cl()});function Oo(){const i=window.innerWidth,t=window.innerHeight,e=Zs();if(e===Co&&i===Po&&t===Do)return;$e.setPixelRatio(e),$e.setSize(i,t),jn.setPixelRatio(e),jn.setSize(i,t);const n=$e.getDrawingBufferSize(new Dt);Ei.uResolution.value.set(n.x,n.y),Co=e,Po=i,Do=t,U.renderScale=Hn}window.addEventListener("resize",()=>{vh=Math.min(window.devicePixelRatio||1,_h),ye.aspect=window.innerWidth/window.innerHeight,ye.updateProjectionMatrix(),Oo()});const f_=new ah;function Lh(){return Math.min(1,gn.length/14+ke.filter(i=>i.state==="alert").length/8*.4)}function ul(i){Ei.uTime.value+=i;const t=U.mode==="intro"?.16:Ot.clamp((U.timeScale-mn)/(1-mn),0,1);Ei.uHeat.value=Ot.damp(Ei.uHeat.value,t,7,i);const e=Math.min(1,U.damageFlash*.9+(U.hearts===1&&U.mode==="playing"?.09:0));Ei.uDamage.value=Ot.damp(Ei.uDamage.value,e,9,i)}function p_(i){U.introT+=i,U.elapsedReal+=i,U.timeScale=.16;const t={position:P.position,eye:hs.set(P.position.x,En,P.position.z),alive:!1},e=i*.16;for(const n of ke)n.update(e,t,Se.colliders,Se.bounds,us);Se.update(e),Se.setTimeScale(.16),en.update(e,i),ll(i),hl(i),ul(i)}function m_(i){U.elapsedReal+=i,U.missionTime+=i,s_(i),U.demo&&o_(i),i_(i),ll(i),r_(i);const t=Math.min(i,.05)*U.timeScale;U.elapsedWorld+=t,U.demo&&dt.wantShoot?(qs(),dt.wantShoot=!1):!U.demo&&P.triggerHeld&&qs(),P.invuln>0&&(P.invuln-=i);for(const e of ke)e.update(t,{position:P.position,eye:hs.set(P.position.x,En,P.position.z),alive:P.alive},Se.colliders,Se.bounds,us);Ah(t),en.update(t,i),Se.update(t,i,U.timeScale),Se.setTimeScale(U.timeScale),Ce.update(U.timeScale,Lh()),hl(i),ul(i),U.clearTimer>0&&(U.clearTimer-=i,U.clearTimer<=0&&t_()),U.mode==="playing"&&U.kills>=U.enemyTotal&&U.enemyTotal>0&&U.clearTimer<0&&(U.clearTimer=1.65)}function g_(i){U.elapsedReal+=i,U.timeScale=Ot.damp(U.timeScale,mn,4,i);const t=U.mode==="paused"?0:i*.035;if(U.elapsedWorld+=t,ll(i),en.update(t,U.mode==="paused"?0:i),Se.update(t,i,U.timeScale),Se.setTimeScale(U.timeScale),Ce.update(U.timeScale,U.mode==="paused"?0:Lh()),hl(i),ul(i),U.mode!=="paused"){for(const e of ke)e.alive&&e.update(t,{position:P.position,eye:hs.set(P.position.x,En,P.position.z),alive:!1},Se.colliders,Se.bounds,us);Ah(t)}U.demo&&U.restartTimer>0&&(U.restartTimer-=i,U.restartTimer<=0&&Di())}const an={time:0,frames:0,cooldown:0};function __(i){if(U.mode!=="playing"||document.hidden){an.time=0,an.frames=0;return}if(an.time+=i,an.frames+=1,an.time<2.5)return;const t=an.time/an.frames;if(an.time=0,an.frames=0,an.cooldown>0){an.cooldown-=2.5;return}t>.0225&&Hn>Cc?(Hn=Math.max(Cc,Hn-.14),Oo(),an.cooldown=5):t<.0176&&Hn<1&&(Hn=Math.min(1,Hn+.06),Oo(),an.cooldown=8)}function Ih(){requestAnimationFrame(Ih);const i=Math.min(f_.getDelta(),.05);U.mode==="intro"?p_(i):U.mode==="playing"?m_(i):g_(i),__(i),jn.render(i),U.ready||(U.ready=!0,document.body.dataset.ready="true",window.__READY__=!0)}Ph();U.mode="intro";U.timeScale=.16;ht.hud.classList.remove("on");ye.position.set(P.position.x,1.94,P.position.z-1.3);ye.rotation.set(.012,Math.PI,0,"YXZ");function v_(){const i=new tn;i.position.set(0,-60,0);const t=new xt(Mh,yh),e=new li(Sh);e.scale.set(.6,.6,1);const n=new xt(Th,Eh),s=new me().setFromPoints([new A(0,-60,0),new A(0,-60,-1)]),r=new ms(s,wh);i.add(t,e,n,r),je.add(i),$e.compile(je,ye),je.remove(i),s.dispose()}try{v_(),jn.render(.016)}catch(i){console.warn("DEAD AIR prewarm skipped:",i)}window.__DEAD_AIR__={state:U,player:P,projectiles:gn,get enemies(){return ke},start:(i=!1)=>ci({demo:i}),restart:Di,toggleDemo:cl,bot:dt,fire:qs,damage:()=>Ch(P.position.clone().add(new A(2,1.2,0))),spawnProjectile:(i,t,e,n,s,r)=>bh(new A(i,t,e),new A(n,s,r)),snapshot:()=>({mode:U.mode,demo:U.demo,hearts:U.hearts,kills:U.kills,enemiesAlive:ke.filter(i=>i.alive).length,enemiesTotal:U.enemyTotal,projectiles:gn.length,timeScale:Number(U.timeScale.toFixed(3)),missionTime:Number(U.missionTime.toFixed(2)),pointerLocked:U.pointerLocked,renderScale:Number(Hn.toFixed(2)),pixelRatio:Number(Zs().toFixed(2))}),teleport:(i,t,e=P.yaw)=>{P.position.set(i,0,t),P.yaw=e},renderer:$e,scene:je,camera:ye};window.__game=window.__DEAD_AIR__;const x_=new URLSearchParams(window.location.search);x_.has("demo")&&setTimeout(()=>{ci({demo:!0}),$n("AUTOPILOT ENGAGED — CLICK FOR AUDIO")},350);window.addEventListener("visibilitychange",()=>{document.hidden&&U.mode==="playing"&&!U.demo&&(P.triggerHeld=!1)});Ih();</script>
    <style rel="stylesheet" crossorigin>@font-face{font-family:Barlow Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff")}@font-face{font-family:Barlow Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff")}@font-face{font-family:Barlow Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff")}@font-face{font-family:Barlow Condensed;font-style:normal;font-display:swap;font-weight:800;src:url(data:font/woff2;base64,d09GMgABAAAAAFfAABEAAAAA1DQAAFdcAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoE6G6oCHIl2BmAAhQ4IgSAJnBURCAqCsHyCiRELhCIAATYCJAOIQAQgBYQCB4h2DIFWG/W8F5hu129FpDcrFRP8n+exRgYC3XGktFPU/KOQnI6upvj//5zkRGRCnJCkazud3kOhFDkr0YITpqEz0ROZvKpRtbS6t0owr0R26kxKFl0mS5ZJNLaDFykoOk2rKW3xzo2mdrTxPtCRsCJtGhD0Fi7BGFj54qyqIEU3e6PZDyie8dgSpGDqQ5m3zeKL58hgw35kBm86OdEQfyEoMInFElmC4jrGVzgnOeiHRjTKByveZyDo6f7ww83GhNhK/Tid+HKR/0/6VtM45gXXMffznIFtI3+Sk5fn+dY+u6+6f4hJESqyOZEkTIRhtqiBPdssgwNUO1NHNOf/7EkuubuYkEAS4lhIgkkppQbUqBhSShtEHwUqJp9HTagKtP2FOhVqqjzwodz8/zMTAZLJEEIIEgpBEoKUYlYYtPUrmue62d+/881WlSdiv389u/cFFJCLUdFILhMVC1WARtcBKVHhWyUra/9f/iFP/C8VrBQq2CQk091NQKbbYZtUmFBxWqSOJTNJsBao7HrWTx6/1/oQbesfdneI3RU2AAU8USlRVKJsaCNBQUABC7NOL+OdXrRX8frqZdW9iv8Pvp/bcYyFJhhn7Cr+1l6wSjdYozMJHwQV0DMp+D44HmhCJ2BKp+qvm70+BIlslWFZkjnrgynABgwgVZKvM+D/za3WxUbopMLrJI2memOi2PmHgOmSIwnkxYzkS0UNxq3j5GO71f/e1NcT7r1vd0kqpQj+TEUMKcqBphO0+AFaO8Opw8Ap1W5aubKa1rHrPCqAf7/XZtqBogJS4CuTyn67ATrY0JgSvmNNUDrvuahd1Oqqrz0uIGBTZek8FGgismQ5D75lO2UqU/Lta2+XsduE/zuXzR0XxprI+E24tiOSZ0y+/XmzyM+jn9BJ2r7caw+XIVxO97Gt/VEJ0vdwOrGN/QFb+rmNQIXpGpvaZOe5fb0BRoA2GA1GPf//1yrtv3W7z0z14gvh1BJ30BIpUrGxOaNnqod+361Z6KWaDlGFe7l3uQMAMm4jc6JxcTYErFhHRsioCKMToU3+3lSr9P8GQQFjIe3u3a7nnqXO2VTCjM/uQm8q737vN7r7dzcBNAAd0CApiSBnKFAGRpwhQXEGjQZ1IEhNiSBlz8mvcVrnQVKkKFt+jNfonLW5sfEl0QbhZfHlF6T5wf/7J2pfTg8VsFS0h5+0Sa25sOmyjEf2Aac2G0P77w2IptRVQxD99a4fY2l1MIntb88ihRERR0SgSoxNvf0ZU/uaQFeau50BohuUsZ6CJn/YMGdu4sxJhYoz/XzC9C0JMAOgH6QZDQMKDHCGQf/fVQg0hE8OUdJDDPwggUIh4cIhkdpA2mkPSdQZ0lUaJEM2pEAhpFgZpEIFZJiRkFEmwNxxB+aee5AHHkIeewz54AOkWTM8gAJ4CEQBDgF9hKuAbXyR3AO0X2aWFYEAAagtcAiOFG4YFATO4c+lRRD6Gk/ZILA35xfmLJ0aIosEM/DDBcEZ+iJvXODCEVUEOAUguJAS8ZBeWFwODr5MtFS0JJD1PQvZ3npIeeuh7n/8CaqDfRaqs6UfPTeAggjEQVxEIxYJgQM6u0BnJ+hsBp21oLMm6CwL4WjWWoxEHOCEjHnyhOIlIwRUV543AwLtLxAUCgj4orbpeAIPE7dnA/GX8TMZGpJDgmQ/d/5u/Bb8PI1FrERWwiejJXwfvoityXrWZvXMONsd2Rg8AHdniCWtAu8301rYm9fa4WLYBBdwlANnw+kQJUSRoNxzQ5CV0P/pL/qFvsNeYI+wO9g17ALhdHKM+Xpndic2ZNzZzeTXUraii7oAmJVMgWQcd/6IlrWI2r1pTgcCqUkvge9q9SRSe7KExvpwwAX/fDgsQWxl6PFejUw2BBi3Kh5RDDUVw89M/SEYC33KmxZt+Vke5Fau5FxO5kgOtIjC1CTboX7jaVTWZFmqgHm+Sl3fDEh9SUB+pcVO98uB+ecDSUxRsUeqh3U22WrQN6eTMSFCV83Y7WHtE9hooO+JqMegmoKP9QTJJ3rB+EJDgMV6XyiYKbPOMcrSUglYMdDTQrswesD4d5tHJSuT1ssklGjqJzXtRZafQhiI6YDic12UmvgYoh+s/AMK6T/AsfLHeiFsxSewz2DqNyfCAZ/ohXW9BH01pnxmGD5eR83ovUnS/KiPeFMcE4tx7CAUPoCGY3heQlbuCRXtDaiMBfMrKvBBRcVnpF7TUS3wiVoKPgvu7RIcqy/Vc+9i3UrElHmJ/1HNZrRUC2HmJpCiiGqa6M8AhjGCsUxmT/Zm2jXSs8lOaqSHCl4YKVk7cSIFs7Mx8KRwCiTXOjquhwBDdaNhFkiekqD6ajhJgoxQSpV0b0uIHvuAinPt2NGQUMij1IKYQJzxKiC/glRlnSksZX3Q/laoHPr+IQowXESfNxdSO5AAFlsEKPPERpGBemrzJVb5M7kzX4LZ9S2XNs4eXPc/qO5Gzbu+kn7/++2a/gN9HJr61nP/7uTTuzNw3Y52B+a0m9ui/Z22uTBRqq/Ftr+8pD90l+8EC3V1A+O71vcrZ/cXW3rTUlR+4oe49h5AeGrUqnfUJVdcdcttGCsCg4eN40vwCQiLJcQUJJQmpDUBnXHoM4qB0WMmttSXX+79ySTsJuQwEedrQcKEw0SKgouRgNZOZ6QuX8bXtX9CugyMTDlIufIUnw8jFBij0FhFJlHcP1+JMmLlKnANM4L9SBRLjTUO33gjNBrp91BuUBHQMBz1hjlqHJcMd8UIV0V6pgelMPMiKEfyrCzy+IwoWpr4hjmJJEAez5dxd4BvaF7lFmX02UB/tTK0/ARW1k6XEqJkYk59SeLLmtXFwUlyw717Dk7NePsma5CVhpUZqZ48ReEeTDXVWMtgB7UkGmMXf4y9QmdKfCHYxIjVShwHJxdPJlxflQaNmvhF02j9HTp16dYjqTeZNJgZNZouttzcAus0+m2vXEpJAthlx0x7fHxbw6muT0x1TH0yakhDpdk08ItbxRQJyOxYbmAbiydjGsc/IT3haFASTVIGdutvxRp7BA5I4SjYBg30UuEYCpLpDr4B2XkfKVktHwbFUqPNTj1h9VSvqWXC3oWc/u+bnHD/uxO5g54zos2JR3cR2x/hDVqaiyzpj/ZQDSQBcmufVxIvGDy4mKfrgXb9eXL1q9WHG7KlNKhbErYwavdLZf/t1IxPmzGJC3uNh5aN2dgF27B6TFkk4c/yq/fJjRq5CN02jpr9BqJA/TSW4Kk1D6R8iAQqeXKp6vxz+PZHgcFwI2tWPeAI22x8fXrtmh+Z37YyeavpPDIact30GtcvpfoC+cYS37WDvzz/fqp/4tB/OU7fb8oGCgW+GaHjskErn2bff5P7+8j46YGPQzRlYX1g1Jv3d68q+3L3tcDdZlfB7A5b1/oRL6igwqfdI8YbMKTmS5VF8JBwy1qkNjmwAEUX2mECt3oiSolRSikxKiinmlJixCAtmW4n03AYziliwydJDlkKKCKfSgqoJJ9KCik9oEiSrEuuJNs+VRSJn3tTmbrbPBw1RqMJXBYPSJNqksjDO0QgTQS1kQkoDKM0kqpjP0SauAgfgdzWF5lyBJAQE+kpUuQuyOMSivZXyohgYyWIHzzyyY8QpPO6YEqrwOZ1BuYdc1Jn+DHGZQc1PTJ0XRcC9tppMy2+VhXEcIy8DC4eGut26fJJiCmZmFlY2fjyF8DOIVIXRUoMNXIP+UQ43Tj9mMAJKFkuRCLQ2169mFS7qdpn6ICOSEQSktEJnZGJgcjCIAyGG9nIyQonNVbLI1cnYC7v1OplUhC1FknggAIXPNBgitnahF+fE3ih4sWABFLIIIfCK13F2uXpBwwwepPhzQQLrLDBF37en2B/7MBhjp21W1l7oAM6IhFJSEYndH7sLjvqurb07VXK+PKZwEBkYZAfDLiRjRyf6/R58PmDKOi/MOgtMNqk+H0lr/sHKMUQlEXlz6nIhn5hWOWHAyP8SNWPHfTjqHj8U2puU1t/dF7jst/oD5m/4ZhiFVqtK7Ijiqp1xCihwPY5yBH0WqoHpzcAwXDhBnJgYWQIYBe1vAr1uqafRVYDA5ICaQtogdvdzYQll8d2m2yyZukaBuSv93MdrMEh+2230RqLLLDALFOMM0KZgVKlQMSmmGqa6WaYaZbZ5qi21kabbLbTUU9hps4xa0vILKC1eNjygRW8rIYgO2dCdgIBOR34ZVNGYPmF4OjCQjEQlw3vmLUmMWiMOGUq4hh0+09lf/7Co27FWfehrR6qnrbuwTbuacr0vLcvZ+qhx/vTTrHvU5Jk2yKemosipKRjFiBEjEycfLWylom/YNEg8kBhZS9GfoJEwVMRWDKeDHy5RD48FY4hpeHNh1PEwzIYmoQaiapDOIi6n1xdzINVoLBjW1BT9iKiYmF/GIn9mFVYgo7VW9GnkeJCVN+KvijNzEK7W9WXudmZaOvw4qwCtJ6ruISVnNOapn1dXliKJvhv5S5CoyD48TCqGA8IPllSJIkRJyJBDgRqtgYxQnHZgmBIPuXep2ogWpY5GfFULmosLDJDCQukuTzGQGCiSa8vZLElllpmuRVWWmW1NfYWJJjEyFykF6+z3oaleo8tth5YzUo6105LpsEchORY24121kfqwc5ETQS6c4cT85jAvhwvYp/zwkVoo2FSjYJJMQ6ui1RjOaVoYYy0HpTHvaZSzHZZvmcVWrR+Tv0Bg8y1CHg1KizoRREJxO5RDcbaYmtiBDwPLLFqW5Fr77RiH6FrHpXcS0aGq9AascnmJD2kwulIjYda4CUhj94bSTViJJSkuEBTjFF0jpe/RjLwnxPEZXChJG38jw4h776YvojsO/ThoJxqH2AHt+ns40poQO8eUB2xp49kz7v4vnAETLmNv5oStEtJLkCXAaWD1QOTnBSw4cPgkBFlhNbs0H5qaqC/QBHGaEF93Vvfk73TewfCCZyHGy+ZXq3X6g16iz5IH6lP0G/NcoPEIG8BgP70HCKtilNK6wxEgDc4d7hUr9J7HtOljxC68wn2Fqrhm+ze2HxrHjajOQBdP+V+Ad/9lQvy5KPlWfBx/1B5cOXBeUAAK4Bd7oBcyyKV5YITzbks8Htt/N8tRzzw0We3HdfgsKdqNapx1F77vPbSK3U+IbD4hMQUlFQ8aOnoeTMw8WcXyMHJJUy4CJGinXLMae+dDwsx2mqng8SDGN83JanltNzjF5WUGnoc/d96wh8nvXPXAfc8ct9jf30NA99MdM1bZ3wPH356Y7sd4cIHXxwMD7aZ5LrddtmjHheJg0bhYQjISUjJeFHT8CRiZGNm4cvqOR+hggQLESVAkdZitdJGnHgJ2ussSbJO+uihp146GmDwgZLPTnjxwsv8o9QQw+UZwU+O/zRpDuc49WF2wSWXXVTxMkadfwdtAKXT8t9sfLT1IHPeR+NB2TYihFJKfH1ZXibrQbZESYDa0Q3DfVx+WjOTpfV3pnZX/d9R2y/Z6+j/Gq/CxICv5+DnX6le/goc7TC8jwvkV3ekni7iEpfP53LgvCciYi/jDkT2USsS0KuLihTixVeUgPZIWr3R0xHTRIxa6OpIi9/dk3JnCTIj5Si1lM+WHe10GJWV6T0vy+/4Wn93Dw95ol06pR3zCfE0HFrnJNovkfOkYIYhiIPEkdWeqEML/t+jnH91YTI4mU+oluApuW39Dj35Lr9VPj170cRqccZvnN0bCqxPLUOWRaJL6PEenvw/Bwvkd+mBaFrUuYfgGi9MyCQZzTpOQ+pknBPPA3FXal5VHQulwtJhOjdljmt6rshnZm0ykqhkN4hdCzoUtYoKMAFlTy0Y40ZgzJRxU+d9Z6ZWVCddDCSyJTZRqMCoDTcKqA+nUidzKmPPT5zI3tfv+1F6fZ9y3gxxw6UtC2LeQHEZAnfekQd0oooxMMFhBzrbJJ6bMBUQ2+dKpJMFyVuSsfFsJwDK+Zzzc1k+a5R2W1SDWBwXJ9PQJVZkP9GBjx+iO+PJYKZSJMRcR9mjtinXGtopt+DOyxZ6OxTTlqTkPmPc02SMTqKsj1K4ngiHcS11ZCyJVDaCd+Jt4GVIEoV2Cr9wr69oYlYBO8kv3Uhl1tRoiuhz3QwaSYk1Ts2SOJfl81xrTDEif6KV2EZkSQtfd0KR38f2mMZUljpJ926Gr9tPUednT7q9jQKLu6qVl5A0ZSpsZFnqWpLP1BxCsi6g5Bsvkxih/GLnd+h9vTn20h0SGA5FqJTha78xydkkkmRVmLNqZvKMBUjbmITE+pek9PLEMugV0LITaJliQm5Kw6hUBW39tJGkneU2+0jJNVFVf6j2OCAuoNhzbf5iuPPIKjooyERFsgIhOYGSvCCRgiATV1BIUVDJmRAjJSFOykKiuw2Zjzmp1q87QVCTPP94xKnINTsqTU7u44DnTUHu8yHx0GMyxl1yOHcSP67lJCrwUIWiBkUdCh+KAIoGFCEUTSha0LO6QJO+7qI2Mlcxkkcm+ijAKtl5N4YjPXjUmNVx/S7pA5hhdnskrUierx7HnQ/IgD32FD5TInA+9sdFSWuT8NRcNYeTVDUyMwJe0e8aowcTFMs2SRByl54Wzj8A4PBOVsooZRx+l0yABjMnksQ+iVP/FPWtptihWYsIiS11DZ2jUHEcdbSJ2o+n/3N+N7M7mxAO3Co81LSbJbJ2fcD5CxDOd/aIyv6BysnC5LGpzuFh7hrQ5BmCLOOojUao6iEdG/xkjRkqzsORrFc9l2fz1YLpyjugEbmml5RpTHW5eHlc/dhVqonM2AoVpjZJT9HkAo8rX0XNVBKM5GSZphU352mcknqBtqaNOHEBTWwe5ySleMoqqtqU81AE16RcXlnLLKp2dKw8osFKKBmS0qw0LLuMUUOpU0DfEMqONQLHxPwt6p/rZajRiHehJw5ypqwWVV0b9/lWhs2la8rLIeMW+R2bDwyB/MrjfqfiyEMznRQQN/hSzJbOMmy4LQtorC69ZA89q2+/5JbbmHhnoGq9N3sPLqLf3AO4jOytkGgzzLMWeVRZszdGjjE4SWpk/ycT2cImAN4GCxrUsmKl+ISi9VxbbufI/piYpTI4Btns9RtZcT5pEt7IkqtuLMI32rUmrgkv5wayMhH0xsj8+K0Oy1y9Zvom49tz23+HAvIU5TSo905tXpCHxeAUQY1prjWfWY+Ia7FFeghWQ2YXHTpFeAHnFxiCgAsNXSEKuLjAkARqMzhC2Auy5HIDGPLkCtsggiK50gCGMpUrlnEMqjFztQJDPeBSQ9doBFyzwNAKqE0OB3biQl2IAT1SH2LAgDSEGDCiS8coeOZRE9EMWlNuCrs8m/oSg9Mzf0+IdIs8uczTreZimsY6N7HJTW2h9I5d57vb5+kOebrjXKx3nHIL59zCJbdw7QR3y9Pd8/QPNG08cxuv3MY7t/HpBPfN0/3yPOuPzrzR3SLr7KThgyDeeTPdFtfe9L2xvGZ/slUPImoLISCDAsqkIAMAJvzMYOodgPYAKP+AVXf/3/mWpVY1MDgkwPw9YSTTEVQUYllm5AaYUrjrIV/B7sfjsFUxA6s5CSqGoKxk34t7kHsJZbltjbgprmgyhuLtUU6uVg4SFTykOFEXfTI50w9ZdWhJdNvQgpeHx3x9MpxQN8OgqVJBO5hCW+Z+FJlieW2mZQyjPJi8VOz4w47pnWe7AeeKC54zysYZrxvLkpdtd8pB09gbRsbbO6/loj2j3+QhM03mOOfmOvRCzjXv8Da1AnH0pePJKMxpewF7ad5DWdPhbO45zRTlPDyu3fgw3rTSXmjb7ZTFi6PjeNexvTBjn6c9gf1w42tbwzgrbW7MF98hsqz4FLV58wHjXjbb75dK5uUx6Pbik8nlh3v2/L3TC94xJ8xkuVy2mj83+UPydWrcGpVPh4Y3TFY1Sl2TjUqPkSRbf2x2jAmzzvImn4GidxjIgs5GqQScEPDtLhfASbSHqM7HBEGGqcCuzf7RT2mK7UR2yFb/Jtew8TsQU5vNNiQvos1Hz4jqTFkXAn990MD/Y7kkqrGiosiy0bb0pkNDSV5+Ee4geOM9QIBbv2vvSWRBcEBbdVSSCn9XxT6Al2b0Re4+IzSSHjpa6XIxjWqoqSOZCwRWwTsKqtAaJTqGqLckoO0UuUmcxId4puOEC++Gj5ZqGD3VnRHatDaOXPjaB6QsPwM6IfXhF520sUAadA/rMkVgZgf/ey+RBY+5anB/cag6vIMKFV8cJJmXjOcGs2g1TEP31BJVdEr2hqK1t9CkQbQTTuvtrVwziwHR4VJu6NdDhUAWnYm4TBWKZ2iXHU2UC6LOcydBZnRlr9jXN0QGE3lM7wB+7B5BuuWRVcxwC6ePB31XRFX0DAeUPLfPgmUc5ig2usjB3pLvv5CR/BA29MIdux4kuVaJqZYkqVImjJA+VOiIrQqDi1CVYwyRcAfmdgPupIrAXRhgWDt3qJSOBD7vjzk3fex4mAM/djXAFrPhlPqR/tfExumuCP2w/bhwxcLB1lclsoit+/nLQgIVgYXLUVFS7lTvTU9oGevFzxkm1g7Mfh0En2pz019L9rdCxqQjPcSmdhJJmp6YqEFR01VIV9cF9tO9RAfK8HEIkCfho0ChiK6d1RTaVIXLpIJscvAuChOQPS3qkklgRhrL7WKdidBoj8POfBi5MXk2C03mSoEM1aRc45GamnOZFFrXwQ5TxJvQnk8xfrdVnKrSRkZ8el6WHSwiptzN/t4R3YYqoT7ERIm8RNFpJ+ekStx4pQlNKbsamaNEsUEpoPYEDca6JIkkMmrOszgcQMRRXEjzI/EawCasZ8yez2QpizI18tzdmjpficujl4LSQy5LyKItl2dqF38AZa0hJm7j9FyrldnCImoVuba+2FEe4nK3JQaeOdDVQ1QipRl0Ge4zF0vuvTi5OvCWLnPtYerqvAoMrTfQbdBvh75N71+7N25miDCZVoADHZODh6u1/8PBQVZ3URlekpU7c6RWzpM84Eaw9LAQSosul7HVLmUzwX0AVRp0S5547Q6K2hyyD15DKbAQagQJRYiF/NVIBW2qeVcxMxpJuL+uCncVTa3t1w8aHl87jQuUbyw6HGyHlVo1a9J5g5+s1kI3BeWJKhBhrn73cNo9i/oCPx0eg1hT62dSADQVeP+EtWPp6mjilvts3hMa6mvhA/qSJWI4LwKRPrGi/1G9NuvBGl+LuWb2zHU17VR6xP6Qh72q46bF0qH7GIq6GH4cDJbniojHArxXuon+ojbImGEYA+GHyK1GhxZRg6OELka4ZmNoIvYohzzqqfsrFH5uQ15toPbfLUzkAkn4PiYnFmbY5U6917V8rJVaqvMo5bjsyHaY21SMyh2ObN0MkSMcxMYgJdppRWvZlXoPQ51Y2Eee0fuMhUiD9T6OA1AOiqVNBxhfXMwdB6YDPccKbQOiLI9hrVgzQTUPMMEpTFVD2joJ5zh45nfIB5FP/8aoWxMqHz4FBkURrnsjR3LzoMRt7aPrQAS0SN/oH5XJHolQs8PIa60AwizjRkKEjnLpgra016r3b9nwSiAsigpBsIo6mqlLhDRv9VK/9iCJLkQExQCLFJvjceAqOh6+4TzEb2IIHXZJmpFrJIW+5xrq377+nZVpgG8wzMsX0evwZFsYVZZqtBbpkcjwt3Na1yiA6LFygdejvACyF5rkTpp9bCUazwzclvmNe45W+ffaKsFqZQkBHNbDZ6a/53KIPtIRX000ZhxZ5IxUKBNjwbiiwoG5qQXcqN/qq/YE772P/j+9mrk2x7ldQUaCjzldlrta3BE7qRFLq8E7B8XnLrC3TbbguOsC724Iw6tn3pDtC5K1qnsPCIET9lPem+TsWVwrasJztZaFq5od9tnTFSckxPRnx1eNr3p9TqQhEei7X99WmSoyPE7WXKWdrcMt2qQ0nJFNjhg4lISgVawCiKeOcCZQf7cTSqh0KywdorRhCBdvMIgkY42zgpIgFpnz7XlbwJ6/Q/cGDvzjE44dFQJKGEq9BSFUGkEtgTwEf9Ji0YdtAZoJNQdCbJeBa60lEG5Njs2G/Q3wm3vRdJkSjLVyEEDicbeNlyvOv0QJgXBi7RtECoFm+J03k5a+MCva4+juKSJMuyH/+MeQgYFPBMYYPnWvff0GEOLiIel+aNGrz+iyvoUZtlIQtrSkJ71LY3k5dEWDEAOzGcbIwl88vhZ31JEYjvg/4nWXe9cefWcgIKi3SzBQo5xTn7xsZP5HbobxJBlc31XawV8kxIs9u+dMNQO2q0PWWuogJn/f9RHutIAPSCPdUadRrbkwO9ugWLBgkKVc/5YSJ1iSk6CN5HJFATHOsxz7YT3KFVanzulZG+hIcH7oU6Me/5nPoeGgZweFhuAjolyDoZ43JUgF0qmR4M0dfYOh13K9SVv4CefLRwCn9S2VdFbUeG6a3pGJemP7Qj5HeVZ2ZLqgN0qzfmg5asSqQUnelF0bV9W0BiCbbtSrgpS548nYV72tjVoYVVxxG8AgtONSLGF/GHjDcZicIjYCcVOjA35P4nDz9pwqAfk4oFkqNxBJmiSrMyfNDjWJkkxCJSwalpkEPnbhvL0qS+Fk0gwdXTf0rqXt24j7YgVIXYZ7wq3dH+x3TDEGUH29F/BES5lD6T0sZK8iX7HYV93oPY238L3uVsLk1PSBjGFVmb6+pIWpn+B71kBJP/uTCW1DU66QjK58DQMZ9E20EtjiqUBstTnJVeXSfs0ZgJeZW8cqPvSk7tSWsLVS/kMNtySue0By779LjtDpfN2ineqWpBVNJKydFf6prBHLVDP0F3ZCLmpvWzn1eL21gkK93ExQFdJafoWK4MtfpfOar5E34SeSvEaNSdVWeTA59eWAO98PekYeBCKd/qWROV6rnj3/xL9G8bRspZWu2/J7GntBaoP6fpBWWoIZQ8P4kNtcZb/FQDb3t5VN+tqAgv/fwaVFR9VaPxfCozfhU1+nvlRGiP1AlR96oBMAtBsmdq1zFwHj91vswk+H5OAUiQ5eV2KF1mz8IlxYiHbFjNSc78O10pwY+rShlcD7uyu5a9smVxJDtSY+XkWUaHUuj+HNRmBeGdnQpGSULL6JOhHJsD3zF4fqyJiXb4+YeMyuafme68QD2wgkkO1Kn+x2gr73dnZ+DJxm6KDXsjCWIgVkdxBUNNRXRSteIRHha7e8J7HFgZTjCKNkVbcmWOgP7WKYWKkWfS8pABrMBCmUOldWpuS54eDwurZi1VMu2tCTu1WlHerXFez1MxTqNBdG0xgViNtM62+K4wwkVQaf8mAp1HoqeVA3zMPK1sMgw6h9xlzmgrbIdOYzrMkeR3+6CLcVjqFzNOO8GstZMgRIj3Of4zE3Kl540jr/P8O5XszRgSdiTRe8tnG6cjpCWcx3Mcnv077YIcVFZ4fCRT4/OhMeWM8x06+Nh4ozVWzsWg+5igRXSNjqvz6W/XKTKar/bvrDKVrJp2wCBMNjMI65W5t9nsZ6Rz71dTcrxQJJ0E6fN6rTs6TSrHSJUdLoRfEgYA2xABZE8UW+dle1mjnDSHZW41xs98gXRBsEyD/DCTjzMwunWurqyA2eIcnVAIyAJJidpWoDWAPAM0mbIdp3KUEAtuJ0ZqsG209ZhdRZG3MFY32UIp/9ZykOar3avXFQeXf02Uk7yz/PLuVUJDoS38e7aqxDjAFyLQno9Fe9s1/zpK3Hb5qV73nIANhHggzXDmp8tN0YGx+OxyeGY1yQBAskjktT5wX0fGqdaJ4WzIuWyaT1Q89tnxiNjz3warDqD0d9U5+HD8OkVcfTjmOZ6QcX0H3Aj0JkoNDj97uJht66fjvRy77Dzn1owJDBsCHMjynx0OLZ5KW43Wx6xm1KDQAHfLPvU5Da7QIAqHKvPRsAXgfxgIst+raQQKxAxLHryc52tf60l82znDXjDIu7Hsz4uMUW57TtoMYHIq7IeH88PjEYUaKGqNNWCehVae7CRwtUez+V0AF6z8Pu7Vc6EF8uub1D5A5mAVDZD4IOZAmgnyZFgasHOuoo1a4zhoocr6NcokGKXiH66yXyx/w8MKYrD3Xw+D4lCKrvi3D0AOVV7TLj0MEhCOGgB5mc8DcYISuYyAO1Br2+ZQA8P1HHHVQM3cdcR7DJrYSO8sxZIciXH0ghyAWSQ3bQvoZdRmPdFo2/XZNlv5MTjKYzCtkRZhicyLFr1NUOAYTRT89ZoCZG4wWxibGOxNRYrCA+NZoQLszRREsXFYrVhb1apHV+5GsHOpp9MPNCK9wPnK3RAT+VV5UYeKCDpRJmHo+1xybHOkyjDvhJ07r45MJbGtQ7FYqd6mi21s45Fl7vaL3RhHg2PQgM60m1XltrKIyVFZQVttcZ8/RqUg8z53/qoT3k/gYvx9b1CdV32SsKYi1GmwOA//vkIt9G/hylmitNB2A/CdLtZeZWq75zoC3eYrLZl80wrm8aAFtLj/TcUo/qsbQQY8Ke4avo3ezCA5dmAdgwU97ry7AbEk1/Z8rUrLQYRY+kOdNGaCqWptVoXBwY4cfWRb4VGbboOitsOa3VBMVsyYZRbE9eAK4CpEv/NJr/1Hg6bqCiBYZmi2yunlBq2iBFDQhTTUH6r4AetiJDqK2wtKxNZ2gtTgOkxRWmi1ZQVDRVnGr+8bdop4uM9beNPV3n0wNWArAspryzC5yx7aLaTcZ4xecPo37LFdL0cNpvjZHPWzlEl1WeM+v2GfXs7HnJR1jUtojbYdMijR/kaxer1cwxzTL11ILsba+thBBIW6lOK1Tvg3NysF389LXVL3RtuxYIwHktQ9daVFbhpmQMyuAn8KfYTWvMZ3EENp31oXdRcrpzpTO4DrKceby6jSgJ/lBmViOYix6gc/Xv4QSsf88XPcDxihaqBVjSi5saHz4Pip5ZgFHwgymFEuG51ocH51XgY9GayJh/lNNgHZVeuX15G6cnKHLnAJAmaCVTePkYthsYi9SPRELo4b0SMwAZgi0yqZG/tYhqL0tU6JwtIlfeDq3alZdK0J3Yf/fg2tHWZtXGtS5DUUNrf6x+O5kE75IkTakJXFZStXY6FyQBqG1rarbWZm4ECuUZ2Q62BZQAIKNz+IRaIHv2eI3EDoBMMCcSmvjXJh/srXXbpkfySB0siNg5XsQQvPVrsOc5pX7OKZmV4KcWTcaPp/oj/vs658Wuvv72WtF1ZS2fVGNtNcUHCh8GaVNfOH5sY/vnh7uqWlx4kzGn4PlPshx9ZPzrqAKTy+/CqoPuXhsdRhm2WADrSG7xNld8DLXXixLNkJ93mZLff3MP7h6mSf6D1xzDuSglN5JI9Ef8h1wBDQ15helpZBYUh2hdLanjaG7G/WT0pTSfN2FIAGzmmhhUNDXPzCJ8mGbH18rCCMJGr6ZtRZFVsNp0w90Q+DIEK/PoAhTfRh3IOV+f4aWHNKx5a7lVJgMzkTcnRpIgumV0AKybQC1ZdQIpkBHplWUEgs7oywwbxVF7v5AAQFfC/N+IfwDfS/TpHSntJpousbMpjwxwiNIYchz1VZTXGQ7cs216zD2JDk6jRtX0iUkQi9EK/lI264o2N03ZO+bNzyRTRZ75fgbPYRhifi3UUmlgBMk1Mny1kqmqMiTBD2rINeqsbB6sTjSQSjVfa6HLTWw5ewOt/d36RvUP0rfd1aGBwgnmxtaNCju5FVQuwYDoKOeaSu4eymsZuSLF5gqWK9lTarkJR6hsGloHDW2GLXMwrx53RVsaJVm3iMMnRuraqDjxFxCF9WSmqUFCIGZPZWyilHaGAP5DJHBnVoNpTxA+rTlHZmSIsmK81N0zK75MfpOIp4t+yvpdXUd7GSzYPJ7qjzbFSyAeH4jc100rSfAXw2QnpeHRNv9JWRihfYBozYegFoPKmZVqveBN07r4roZNHf/iaLnZwKKqsB1+3LQ+PsV4Yd0jJOkrTto33aHLMtJJDXpaFGnqaI7VfWI0ftJ5AIWC+s+C5J91itn02uopkd5yqujUWT+1YFkC02V7Le5gl1qlSKKChiFmxrAqN+sFpsU+vBn51DtEX/0yLO9ELttfKfrfWtSHOyjsR45r1VRqAq5it5OR9HBEO+hHrzLiL+Q9qVh783vu13AmkkmdDe2yij0Y9LFAEmwmkwCiNgp5Vw0JVRNc61dW2xNqCfXG6jF8PZkEHILi8xGeaLbkwU/3CisH/OF9Djd4sSRneTwx1MsI9vsmyGBRhYq7xob7OPgMQsu5zM7rLLb7Swgv6MdZ9Gi6rIkms2TfsnNAv3fITRoBeFOZlQluTHLy6+sLPWmJZtKokblnadnCjbL9VMD/i50FU2Ad9el2r+iGqrqBb3RPii3trtnmM/RHgocdYdDMv3AO/KnSyuyIp5393gc75T1KMvhDC91C/x6S9TfNLsdROQJxcGYzZiNK0Q58p8a2s2e7N3ACznjjCW00i72q0Z8xbPSqFONgS0yOPKpSyaM52BL1Tq+2/pwXgxBIHpMfMZ3Xk2wJzrW8hZOrfid42GEGlbHgRngZQLFDiKddC/azrrZD0cZyC5JgPeXbelZMw3OAtdUZKQaJsNu7a5/KvK1Z6bWP2QAopFGjcA1tWRwfEZkSJJGcNssftEeuEr1ACOc2RkRUi9B3nnaHqhbNSXPb92jTR15/d1IieKLBwKH43udsH/4od8fugCwPnSQSmCvI3+q3XTSRqK6dmYKlTAE3W/i47efhV4Gp1z5c22vvENRVrPOTK1ytl7x1QygJePxHWOopiwb1Q7jurBqP2VxaVWL4mHQDP+iCIR2JZ2id+eWlPo2LtXJZCgaAgI9hAvGGKW7yf3d3Mte0P9jtLrasMnrKysuypHGVRWtajoY/4RfwPmHYTwTn/R+zE85oMW7IbgozOhkviE9r2ttftiUXu6idkgaKury+tuc+as80Xw0fgCoYx5j96J4ktfz9+VL86Rs1vvXm7XLZPrnF3uZr7dDXWtNrSLIG5IEk2HU9ekH90z2R4rBeHy4xZ0Zc78Ynro6ea0laYrimPxosieYa65gkjeOLLM4T5twn4KVBnpaGvAQhMyJwoLLGDCPG6dVm1i0bndaGs/45TsvgypetH42pU331pnWi92UBcGTQxpG7i6vp5gjXbPGhD3FCwpEeANwABNVI8FpmFV/4z2CBGF0KI20tfX6uX4rjiwyHJfEsIxR0iixdQir5KdrcXHRnn3Y0oyvozA/h+yS5gOvIQr27IcponL6jyTuM8aww0hYcCLCaFBKmg+Ev6mgLDXcEfu0Okwg0OKERdI5eq1KNLxBjNp1vrRWQQh5fSXGkMg4tJPgieqoxJDzpIWe1AJAdtBGOMjYKX0ngZyciPu3pgx7olj7gFPzu5dKhoQ6H3d5h7/vGaf3jhckfEP5BBpmRpkSRvTxh6c7R60W/WzZWiiSZlDKFp6TpFFpLCXk8IeUNpImyYBWPp6bVq0hFbDx+jqDofL+izrbQcGdAQXy5WJDrFyZ8eblbx5mNvGwFc7wvbL+f7dcARlxdo4yCZRxaxOdbYRZNCfjzjzIDjKZ4RUGFKZ4w2u0dRnNTwBzvmEW0uEMdL7moVJwo3s4Jhf+ndXSiXS2ADMQOpwhGPIAxjN4wN0H913zD7029fizZcr2lnuQEbo1fQ3pULj8yi6oo0JlfXtauN8oPWnY08URKP3PZC3Vuco4dml1jZl3dJfssCpOUMNe25RZHZ9rh2vzU2Humiq1y+SGxPiu7jDgkExcaESCvrDZDiHvtGDENP0Liu9849kuyUehlXVzhutce5gRFY0F8l1P0LoNkGflSqHEsnGgdaUIbC8rPBdK7lIJpQvbZs6ZpYlV1kXeR/ER3PS4ZJPEFwkjDgfstUkFN45FEZMTPacrnIUx7+mLlnYnoREezYqU5QrhNVnANCEpc2dwGN56zM+I8cpqiZ0gqS0nR0zQ9Q69e6RVdScHG6aGXz3OFd/i6Tv/FTanL9Ya03qTD7e619/0eEprKcjtdijSlwSSY6ClyOXosU1W6wiLYeu8cmrIbegiy28gqxMh6fZIgg86oi4uVmnpIssdchKZo5H00tdUU/Ebf8o5E28QZBn83ertHMldWBslOgRrHox3hUf+kl9JM+6OnK8QyhSyNnqYFm3FhliBrmt7SleP2FF+JSPDabG5v0ZXIBI+NEz4pfFBwksc9KXhQeJKXqznDbfm1DrvK9TYAXp4v2YxN/ukpTQIv2/fb8NQ/z8qICzzuBUa0GsPATq90FRXbnKVO2Qs3q9UnxDT8e5Q6T/Nlb+kWYWqK3Wqyeop5V5NLa8BRrkxA5eFCISqlOZvbkIh8ef6KOhzD3pj26noqD7flMZNu8E7BK7bH3aQvkhTaQptIC91DinyVH9Ogr+RZkmHmqpHca5dSDB2UGRj7EJvZacjiIjjexFUiTBb3EEUhbJrHoknMJ/eA5o1epR9TF1n1g1EJ68kGieZPeFFVUhXKd5ptpo8zVQLG/+gusVpcJQbaA8Nw9BiHc5Sx9fkaxU9YlJsjIHhyPi+TiWAUn7udS9CXnb2F7WYhSwNAqvCyOKK59KM2HyKO235kg3Vv3HTVblmiVi9d2WezPnVssk6/qSraZSw7OFWt3Xixwap+9PISlebAtGR3fQrAdnDJtOxUknOUkW+T5OtZDX5U/x1qShGzu9hmcRYPsmQHh3uEKYJ1TqX/EPEuxPLSTzKVwr+15cjDHCaC4wjDVCJoHk3yOEvUNS9TzbW3d8jOdWF0G9tr4X78ojRX3IdRPxFuMM/TWn7yRVsyqCZtX476BrP5kNXWqmndx/B/ICvACp7W9IMaCwabf3WT5MVcYhEX//7LIX4Bi+F/kGsbGL6947hGrnIGRK//cUnOGHFB6wUnLwTMfuYm01Qz1J2vdntoFhUej3piGL5Agl4AV1gTPWZnYmI4qj0ReurEHg/BjcrO+le3Hakh8Z+awM+qCGXN1wZXbJbWkuNBr7ydipjeGCktf2zPcSt2XYtRKEtfMytei1Yqyl43ZSzMdJOMdriB/MwJAW86DbECbpXT6VLsT9Qp1sdfF+thRjsyCdxhfkKwnnzCCbEtMiETNLsUBEK6lJs6etsV6+JPtHPfKekI7k6jylgArQOI+ipeVMoCxAw6dQdPAaRMpOcgnS29M2Q2sQBnZyO+pGeupY9y+4XK9sh6ib6u9qEXONxQ6TYG5mILtEbrQC9PQjoqaJm55cv39aZQ+jrKp9QEzY+PGmV+1Kd1X75uh/b2t6aPv+nrD7W1YeOo0aZHfOEqdZuXtm1T8lz32l3MAH6pNuV0lMdVHr83OSefPuXxb+a2+PhbMxd7rJYKv+2LW3KONGiE73MtHrDC5To+4F+v6LSJco+r5OmUdTvZAezyuu5nu05a5EeEXjA/Uh1sB+A4CezsyD5yVe9DaOR4p0vzrjcTBOA6ZdI3pztRDkARUz5CREYJ7U5sIeFCrDz2q+0Uvpd90N4Ubc7LNLtlz6PHc0O6ej/K43VlncOtOpRGyBBV9y1Iz9Qx9rbkovRXGcbBJlBb5VEMsJh5bjg9wfaqajUV2ma4AUdMb/nentaI1K3zG2iA8PFx7MulBCRcYlyW/bKb4L2C0dgmvrR6PcINup5pFvh9nRnZr5R/KBYEUuJVNTYg5tyw+s+4C7C7mn90AMiNY5MYDnmA7keax3Ffq4SWn5wI7JWJxaUh+p8SepSJTpB//4hTTqcRIMZQzWn29yWON0OMtzsN9wYRwACY7wcDfTwidFiQ5XCok9o5gfx5b92boba/HN4/iqzWWnhSPi+JVJuKs41yRTaMGORyg7L8yj+du108B7KO0q53DRvRvdIu3X6AXeCp6rzqIMakd2xS7xKdk6jtqjzKvto1lk2tmcszpLs0fG93Y224fySmB0B3ZRCrOCBFLaXXwRTrHw7X9zTj1TBn9ywRxpUSn7L8f7JxAKzna3ENNqx3NV2skDBdg9YDUCH6h7/5y+z6PYX50buA0dyWl9drfQDQ/y54hnoA7IODM22N3VGiGebumiaAuLkbvESfWaoAWKNK1pxAY6tb/7KunWIqfKtGXWTUSD86aHGaiZ2JWCXAmEwfQ5pjem8QYgknwsfc1NBsf7LUKsw6G06vYVc0s3iteNE/btD9ik/hnoaQzDtLZzuj0l/LxCTgmsnWLJGIMRAgEXLSDGebz2dEINYMIMIyQzjNmAEPanEgFwITkcO6r+qATvfBtU/70x5a01NyqbauAQqfVtcsnvwY42Kb6A13UqI4D5lIb6Km/JPnq+Q8d2OwOSeCRW2TePPohnpOfC+HFPQZN++xYLp/iz3OGtODbE3g1Rwm+0ru5GT7Jh+s3qUX1eUFPhnGZPhf/vXo5toUUVLtyNelK0PC6VUadBrVLF/FhLnYBKbRP48RkP55H2wiBxzlDCKLTQ7ksjB8xx86zbOyC9yRg6M65uVW5+dnPVW52jwB1S5cmae1rrQqB8+FMVE2N7Th5e3e3g9odQ/EzIO6tm+3ptrV8/5PlRG41aC/oNM9qDfcql+AH52V2Hlzb6UG7x4ebfKEDPLfHwqKzV4tXpaldJxYFKy3elgIigVxXHhGR2YclXpVxNPTygzRiK7EPe2tX8WtVwq8RfFwQWF2824XzlKq3CRg+ZutXU0bE5OvSxNb8cHxG7dmZJW+/jkeXWjNuMTHGdq33oxH+B97cCE2tsQLqmhHtSYcH24L282hT13yG5aYew71hktjOnOoqKI0aDTIzUcqg0yPkYnncqIOdDBXj8ip38I6xDNsAv4WX4N+jVzQSqScH9HdKTTbs/XPeKb+8sV7UvcHoz7h8xQpB8xEV3sHqfPy/VMhp74naiurvqGxn4+hRk/5/weJRbgJws0XWna+nnjpvNX0BPXUJd9oi9fqjXVteaWl0TxDgwlv8yONkK0EaeWL7V8n3bSedTgNVS0EQq6pL6wfb4+kHlxZKBbeslUs2zlCJlixWvSeJ/tsWurZnKz2U9X93clz/at1WTntZ42lsmvD8x7Pyvpqz+y8u642EylSXa9egzlPnTaxxT7DXq7T7beTSXCZxbjc+2nuLbyD9M08kYjDF3aFRQsOOn5LGtKCTBFbqSnWbi4uYZEjpTYWeamSkpa6hgpbfW1JaV1NUYVSUlq5mCmimEXLv1SGalg0hADTuihl9ExBhZSU1hNHWvMClL1EcbZxR4nRpCJ9Bzi99L4RN2kVenh5yc1JtOn7ZvZnCQd1v9mbyaJ0yPNiOhAX4kStqRQCpZZvvJzsr63XFWrrqpcWFNRpI4W6rGldfoGk35yebpFKvGlbj8T2bF0vReX7m6vwvnbhmfpIkqriWw+jSC/PebWVyoYMjfPDuKROuTaacTGyCPGyCDGThCu04xdxLrrAouqXcR42hGp8L+s3ufam5NoSDN/wqjhYlBus61JA1GQMtRZ3qV5t3dscI1ZUS7Jhxfs1DnIjmVUlXkt5vxVdoq2OfiGTjfajtj0m054OvD7NGf+O1VZrdZXVWlVltWW5ZPNhqXRJEsRZnEvD1ziuzTsNlOyfCcRInrhkmYr8+jlXcTlvsiSezbIwVn3Lu+3dIDTFJsn94rQG9NH7Q2aM4XPe4zF5DycQiOFYDwKRJ6QK/URBaqHcWxla+8s0Cf1oUv5oVvxolv9kUrFup3vRRzLb5cudboSF1nNb5N2/N4H/71azMM1auck+/eimzx8wIEB6IoRm2ydqGNo6QHP2jQjQho6j/BDaERumVDHzFbNMMbPiARB6YNQD++qxwUsMB4F22R+TKUZrYrmmaaNoRICWhcDHxRijixW62KSL5YnUZtIS89DgMwSIGoYWnJiWwxhAszuOuoXQTqJhikxktoksMpFpdP9F8Jk1DIlOmjXQWuD4HoD7z9STB46Dk1UnkxD/mMk8M1lq5jyThcCnxBTFljDXEpZYwgyGvRHKZxfj37sL9JQ4TcXjpfU2mN/FIKOrWlKjammNzTJhloMrshLlKlfXmow15nWvz/qrX2ewFphqp8tAY2m2ANm2y7M5t35QvPWHbm0L3Dhry1oN+1kp1IyuCyOs2bZG0zY1+VUqok9gGqtF7cVdXqDrlQxu4u2m9R99DziHYPFMajjwzBYWT6WFgmegisNcBaZooQGNlpbnyYRXcbCSNO9rtDAB6Sk4/A60a/231vO7e9HKVbH/qSScdJ8N+xqAiQvuMJ709NHqgH4gvx1DuOtaxPIvbQIjbjeAay2CZn+FW/jBQKFngWuRPYF3WsW/HhNphtPQgF3XIqFNoMeRBjBtEWQyWG7Di3Ffu1oP1/EYBh0OO0vlN5kN2LTH0CICvp2xKtDtIjMy1nU+C7xAuJl/6oZX9f2xSBtbG7Dreiy0szTY3ACmPYZLmRphN0z8mBDkv/P/6iFGd9iqMdlIcLCGM6LqfxTR0aAjbaRkPRwz5PA8CNcyBQqEmsCkME+zSGNuYXhEuYUhHucWtFPGgPIEMYcvnDZs5mxNN+qcjeIg7/OVhW14v3QuOZcx5O4mRi71Qo5bCeqiTDCeVX6qcwp1RqPlULQyq3LOkVttb5APLrX+fE6DAudPL/Fu8AyCkXISmTYzNBpS3S7GDCDAHTGfWWLG2Ud19NmAiBTcCaFpDoVD3sIZzg2IEGNColrWFKcBsdOiTfwi/eNxNBz27/q3WIrbJVxP6l5ra5ABEvgU0swpgch9DgG3wHJwhrdgONxpv1N+9o/fj+GGS/hvb59OCdq+ShN7FGc16HQL7h7uQWTNQaijVuiQ0eUKQGyB1mYOdixUIvbDQ8eXEYUUZpPhfmtFDPP2Jsg3EHp6BTJiDiFSMcHmAuTMqWRiAeASj9Vq3uQ1yvqRjYa7rdWypO7Hofnd7/lHb0UNRCGuEXb8CBJGADsqzblcIfOi4l3hY2fEVpzzI1B4cz5DJLgAWmj6KO9oNYffEMFbZtXykpTbtwBiYi6L1gZKagYvljWi6sIDMmOJiPOyd+9+Xxtrae+yt+eZiFDnQYnIuPZ2/YmPImFcrofXQiPKdjTcZW1DonFvEWTNYWMBYPUAiQskR9av4t3F/5Df5Un40fmOK56pAvXy9syNMVdQkU2cEOFFHHvm0NrMPF1gOr42WuUpO4MbRDgZ7rR20xaArFTUkFuKrbsJZ7oIJuhbIDNNdJz04HHQcLjHfifxqHBeefiO2HH9BAg748IGGkYYuR8cBj6F2WAmIXJKHifyARxAGcQFydQaKftmrOCENcaouqh6VwToXcjtD+EXOhJJAQzQD0IkxPFwj7XddoFnN3GrvWpBaY6EmFrJTExMYlIGnAAj4sO2NqtbBOfzhjRi+F7CcAeHSrUaUJAwDaq1zwGUREyqcE4vZeyLkndFnuDQArc4EAlWgjJKPtFgZhcuh5hFM5fAOen6SGlfHrYXBhVJr3xtuYmI6nxan4C0J3CQ1zXMa4njspLBIxl0/Dmhn5wp3ckd7/CZf9iMgq5nEj6yxmC0wuc1zTnIV7A5yu3k4j9ivAjwu4t3NXxmYPdRNdzu9Oay7TJIvDUvmEuxxBHk3GI7v9M9Dge90sQn49aJ/6v9Oyvymx5QCq+7FPfeNdIbURUdVbXtjQPI0QkuPGgZ2TEqrrPbFQPSLnSdm6hkZzWEUU6j73OEDVMtGiEexH2robRp8Znj9V2mz6YHxxDeGUR4rhIy4NsDtFCQZG7JXI4hV9+J+MSyyPgEcoe1c8ex5YkEMqr5kxmRjilGAiQx4WOpcpmh3E4KFKyEs0D4WBLO37SmvSHOIYDiMmbw+l2QPBAGWcKKcDuD4XZr16aTemwBkfeB6JqImKPnbVghkwOFVW83Z69baFZDZYLBqMkBbYpDJxRP0SYFwi8FIQIR8kv3JJFWBdpAAnQ/s+LzLTAPqCIq8PNc8Dih4TwKIC0WRZPjDhrMcj/t6qSroH+O9zHq/PicRo4A4MCe3oxpoJaeyA1x4aQS6vDs97cQDp9ePuzOGy/W99yG/YrGQr3cp1DYEelAB4aNF7yL89rQWQp8MJBl/rIHl5Dwwg6nC7Sv9TTJDopnaLVjoRW01L4BKSNcIFRTBRxfLvMyDx4SSHokYNsVHfrDpWOLNTiRCU34CV0kPhJO0zA0x+Z2bViIxhClxulw9yRoBa5DH12p5PwPk/hSk7ac0VVRBYW+V1DNt9IuY5fZkJMO6VHGPhi6ubxw3ta6kWfUdRcfkgVVXeNxOEAbH4E7VNtrta5wb/b2UFzsq9pDe1sMAOKZlp4+BZ5+8PT9N6/ub48HXMB530ZE0SN60/td3p+KV7HuIlxEeu5eppSdm1F0BRsjPKodiGfOpbCv5xGhiTBKHeiMkTCBdlPmzEM5UMKgnVHf7bOCHMUOanvrlSK/R+IYIQY5uuJlV56gdrBajLTTODVTY4wNg9bdGRqKCvGDhFBcPWM02KOdn17e+bB70eQI4Jfs65vmKYRuBjgQjC/O0ePi0UmEn0iJrtC6SC2gOr5G1GlVCk1Z0by/qPR5kNRtmEKw2UF/Z8JDE1x6e73f9rpUDhxVaTKdQdb9gNlEF3EuDIOyLGhi5R2RE8gTYhnCGAG1RFWfAJSp42tklZZ7lAKz4riz8wScNlvzrmcNADvigHqaZ523nandPwKj4d4FtDmJ24lLndYr8rtOBuiCfrDWMdqmS/KuPNOWD8JQa5M6KPPBiyooKF57k0cmibq8tnmYeykVPgs+jOUXexDGjYFAz/0PAxT6wegQuJeggSBAxDBg/8mWeCmrbY4jk8S2AjiYZ+Po37ErbEAmBU430RhK3by/ZjqGR8K2A7yuvlnIag3k6xhSi3cvKn774VIsVSLe1Q5S6FFIN16ZTuQyEk1vtuIaKfJofpvtAuzB/AOd7cbro6BLtQxBUegJrflSCJx1sOjSA5J3uTsyLhHyaxQQSkbqAsjA9mVw7fclEus+0Szi3bpno+LqYXzqc90l57H8cMtw5oNVblCqbEeiSefEdTnz7JKlAqBVwFWgodWnqgPEnCb82bMKCX/yibwWsUkHaIUInbX0TgwRgXn2hMKEi055keseb3yXjkWu5jTbizOIfCHBKKhRUwLIjMvYRdqoxWrtrFOjWaFVryOXfMBCuvvougN0KZEoeCmDd+WdLpf3vqkUxkYvDYWZlcP/O3a0bduD90FuC3pwY3K+aputOS0vXNK+PQ36pHAbMXPAl90EBak1eoD2WOlZtZajCkGmxllftW+BgtAYy6yLhL24hn1dHMXGRyk9OWbzqP1PkOxWIVREDiQsOMSkthrIGJXACZMYPu9uwM+uetaFekbCo0FgDcrv7otrrTgAO+cJ1vBdNqMzV/S74z0C11PZSPEijVFyvEpwqny4GeBALtR4cKdRgRsAN383WB82AbpuaUGrgy0AdJQnRg6kMQfXEgAcY7fl5fWnqaEaKJX+//dOFCAvTh5AJLjG5OAAQBkBDc0pS5QxlGkgAuppc4sVSPMZRxgGoqCRXZ3yi82QJyyoLSviVlbdLIc0UMfzEZMWc686UvDIlweAuG3VS687c8yRkb81AXlUieBRXMu1xAjHp/B+z0YWiyRWAKZ0RNFlSZzE+7ikCBZvsagExmQuPzf+zV8YyvN0lyhXLRNvVkdrq5To9m3uVtutsvHQqL9mphmkL+myKDEzbPKuCJKUlDR8jSRMWuUVZ9OHcF873fbZR51/dn/JQrw8TXPru71Q5Yf9KAw2/wRdg8PQj4y+nzkztNqxSKv7Hp7rrJBdSSWH3NsBzJDuYK+m1FOPRAD8/OPXX374/uuXTx5vrnZiOe+7qkAZn7bh6rogK1Qu/dXnJG4Hog8Z3dNaxDfqxWO03GsyUajTdW1kzlDOT2ewSKi5IAbyeamPP3zz6tmT2+v9zvcpwnstbZYrkGb63ioMeT+xo4ld8xR8o/ZOF4wDJRiGXMSUPGfGYGcHSFkXHwJQl5Zxj89qT50D/cciwaksrS3rQ3Smn20VYXjVX/R8WVfySNP30LpWD8xYeFguiU6ifb17h4C06HpKonp3B9y9vXvz/On1aSfm01tXGhSnQ7iZN6G4GNuaHXnGU3QFzrK+5t5vFgUbMf0tzdx3qOqWk7nm3bgwMjVKMOnxvYoSU4RHG0WZe1V3jQVtke2FOnbrDS/1G88/KDnPb8/fFsUJ+exXlGQOYbHbcLu0on0Xc1vY6xYtOzAYRJg0tk6ofmnRtZjQ9X13gq7rF+i7/uj7OrGePVLc9G/tG4gynO/8V7SbRgIZnAOghqYYLjLMCZEZJ4jIBTLyiBeBdlNk4MMf72yvHOVDrcdLFOeRgwM2xoI0e5rVR1hOUgBlDylCEuT1IhFTg4TI7tI4I5oeW1wc/S1YXGhjN8+dWvYQebF+xuk7Ed1MYQtqOGrBCeP/zBtQ4o/0TPIUYglgD4WgxgRttiMKaoMfSd7U9msF9GBrLTWVxsfirWjaN5rHws8TLAlqiZh+h88kMsSn+xw/0su+q81eKKh8lVav4XaG8EAxTWZ0G7Lp4HYA+Q2O5ulwHUhth+XITW3wEpHQE0NCyxuOh/vovCnLkR8kY7bfVW7lRlT7OqjDKghkRS6YQmnsm6swxYHEUFR7Au59ukQRKjmKdSoA9Z360Vz7LAgMxoH4TVkqGrn7Db3FRdFfQ4NhQFts0nBC729ohjb9HN25JXO+h7v9dj691MnZmMqC5uxa88pbcZW0Gjxl4LdSMWrvLk/L5joXxM8D6iM3tcWQMlDtVfy6fFVrRUWVBu2zrPms8ibeb1kKZuOFZiuu/YTUXnZxpskuOrqTAv4nIImnwiw57GY9XpZeVsNt1ppCklkvoLitJMtQ20GJRLSFMvRS2Qpklr8qYBO6DFrkUuawKW8wqMKnN0ONd6OMiQ7tVhMtz/UNfZ2+Qc/vtZsqPkcfsXI1g3E/MDYIVriCajRpcgPGIypqo08tqUf5kzX60F5nLbwua21IR27Og521wQ6HJBdjZEHN8qW6Rf/P0Ssgfz+9Azx+C4/3h91i9k6kVi/z2MVbt2OsdDracNrlagxrog4Lz6moxry+6Npa/b5+1xjd0fCzYwuUyXzKI2/cTBYebxG9CvGcpHAkEy5sfB4HtLjaapb2VteFBvyj2ktGXZy462S9ifOGUq94oVq0Ihv3Mb2W1ncA6cqVj6OOWSWfMbeY5sLh5kZ3MPXAnamxaJZAzrud0BN+x5muiMRdivPe6d++uR9QQSofXkTfXt+97w0z0q+Q2WaDZklLQER8jUgtsQJ0Z0Kh1Ql7hl4984xFv+R02GIzCrKvILpLfzotPHScg64peL2tHEKi5IBS59oiS/kjEApqpfHyKGhhwibTtLXBlmgxHCWtLQ5HPvo2kXp1MurfMX3Vc2S//vT1Oee9C8iP12DgHInCeXyi8GRfyqzKF9lcPh9d21TviLV89tl5gCnzNNOsdaHMowJDGpFAMtyyLGNme0R5Q3dmwc0uynJVkQULI4oiXvOufHsZ9h36nHf+jEvC1jta7749d9QX5YQmmPhvh52tGYf4/TpS3PD/NnEzhDixp4TODx4BYBheCYbbif1fVKPfyRAddf3he/sE1OmxQRNOhS/vF1gbkqIu3yXI2DpJZiC5esS6lZPvvSN/W+1VUCREqy6n3NiucXqUwSq/iu4s3rGQt4SJ3co73egC8LyAI1dSBGTt1V7tNHrQ7wYm4bHsX20HHMMaYDP/5RE5kn04yqG2Wmrc9J9rdbV6Vg+slKxeXu/3CGeLVOFZVUbyj7pMVXnvYhw2N2p9hiODtcHUD1rFnb+aa4ygrPVC0nOpEFCICYrQad224mNFPZkFzCZGpfFht0Pyet/Bz/6nIsKpZ6THL0/iusfOac3DXowHKomPa75D7B51C10gkIlasyIOVBj99dpbqwCcPWv6/SVFf+WjkRrEs4YcBs0VNxiHfvit7PDfxcvpCj39Mi+PBSQWRk59P+RxXXq4CXQ97PEpa4/Ek79salHNk6OOIlH4+qtPP3nz+vmTu9vTfnMZUnALbhRm29suGgM3/IS4FxIbDwp33el0YHOHFw8bQU4oUj2VgMg/zGTvJ+IzHUd5VjTGc+qRhwPoodt5XP7zS6PE/dy6jmDQIPJDBAQ3Al5ELiaChXHxMFYkBTLBnW16TjhQZ5Ch/Sr9Yn9ukT1R92qBzvtaK4xszSkQsHmycHGHSxEMB8Jtru9KoqP7rl45EFq45Ar9/2+mrS3xfj4KsCKHtbG49dS2KUsDyU4zcdM0B4UM5mjO4ZsOJN9YqdZK/UnE59L0hlqCU2+40B03RKcgHahMWPFwcLwd5o3h/CbXcg7iFfWJvNuORBJHn+kYjVWIwfaiB+a5hw+ST0xAaFDLW2XuCA504ZnRTzz7rs8puJdweUTBjRhilM7ExcnTB+SeH6Ll1WExqtTQfHAYLIsFab7pAz/I68L7EEBxdcky54HkX7148jCf+mvXVVyWM2lqnp4ReTPiXoYxSMqPE0BOZuKlnZHhlAhNKhefABQf7eEGOYuVqzqJ53zs8STWgytVavjI49O9cKrtpxD1EI73r92CK98C9RVD7rLm8cRT7UNt0WodJ3pa4ZWGdshdcYXWsrP0QmB3F8oaFhl3PbZYPpwuByDC1148u787HfzaQ61isvTShj3qfOhkvToB56wH8gWbQkVinb08gJLOdSzlHINBpWva0GiQ74q3eO5IMNPICelE6aQf1/RmpYl4dbT2XPG5NliPj2IejnkcNFLgpypKOvRHxv0GpjYjnj+9OQUZigbFZ+hvnQsQ/Bb5c78OdYe16TBNuONxDZZNT2cUalGRsQK5ipPjkdeXzTihCUQwxSCsRHNzATauqndFpPp/Not8qdXcPCPRDagQR8doMBssnKbGGHKy42KRodg4UZ4+FmHG3tX8JqTyf/He/zMJvpT7NQJJ67doZSurNxFCmSzzuiPrAz8GqPpKaL6gI1dk3hvydygb/cUxWeIYren5fFBYpyAgERPMmlU+BlCB52sM6FSRKXaWsj2VPV5nY3yrmaA71Ul27BK3N704Lb2/PGQQwe1O3XGk89S7FKF7MSxocQPvJtOwykrbOnMgK7cLAuh6/TvbjxYFjzboe49Ma3EzwZDF+diRvkuaYGnSsrR2Mbar9RQXr4oijhkWx8VBrFsvixfdNTaxlvn5GAWQhxbt/39vPvk2a5aIC0ThXaLrCy+3DlhQ8wf5XGeHVJeThNCH+ollFSQq8B1Ua3WKqjaiVTte7k4wKFuKGBCnjIH9Sx8wnUTMIamX++3HIwH0ZKJI5F+/Bl5/9frLjz/EV/DlTqjoblAtlsELsodFD9P1pMGMzbgVl8sxsfIsZq1zS0PoeEgdRtjeVfRhLDp+F5EsonWr63kkyK3dNAihi+FnraJbkM+iexG/IyjfKl/hR3Qua3Ucx32U3yGixcMH1OGDRb8dXlvX3+9qmwQN0bB5yJfG6bsMiBsj9mlqi48kwA3eFdEvrdG/lnmtEvSPev4Ry6U+fvrR29c4wuFscm00XeY06tn8lyZZgrruC6iRWWt02Vq3BkADmhDILnJC22Xv1n9Hx6RP9fwZ0SxTtqjHl/Uc86jc4iliVccxy65tMWw+LuGlnsfgnbzjbrN8GedpSoVe4sW7SL9oQbE7F/HFhHR1XlDdPTeGaJ7rqtWqbRCxFmIR6V0yNU2GKyYNA0y1UiwBCR+v182ec327vjnsl7PuqqR39A7GbOa/LlYshR6YeGNUycNmPRI1VyMVpb9rIZA4xRmQUVr6nPi4Wy0oi5BwXPe41PB5zpIN36N4ZOhHedte5QIwXePTMQNrTxsfwzcV2d87V56Adbpupj7/aKDMgPtyD4MXDcpop40z0vUHfVa4t3hPf3T4Umqm8HJrEIxN0JhLILevUlWYA+0zZ8acB71vpYpK3cixCF4hfr28Sry/JKLjscXxeTisqVMtYVx+HKy2W7Oe0pAUAnLg+1mfcFCGMPobp/BXgM8uNf3KrvwyteVs1Xkz/uXkH+gJAwiwjRVpqsc3ZV/I/pMyyGbG2+VXKP9j520oEOU+Y27QuIjRI8b8Obj/Y4u/7XRP53iLcAsUap+5gMlvTFnLWHva0jFOMA9pzioJXNZTi7Fyh3du+6v8Zz9mzEmKPCfPI3ps/A9JjxPnDVneuZOqmiiNxM09sLec4JWDVDiB0wd3KHMmzHG0nOLl4dlOECFc1UWasVNs5uFKns7IZffSd2k859VtGJRTx95A1XcWzSo93IoL9TlO0xrfdSjbTJKb/OD94uYUzUnLaYIycn+5gM0BTPFw/CIEYWGn/D/joUvYaMYqa6iy77X6xktAbE5TxhI3x0lziCRNmByjUuuVWY+XQ5SIBIULAUiAP/wghCtxJMD53C2RxFqNiTg63mkTEid84NGybADaCIAVXCXitYSXcWcBH+SxykNME/hC39J5SB3f4vyg6VO6eBd5Yhfwy4JRvwlNnjxsKaVJPQEiXXrDhoenlBdzhvdIN3I3tlzWXy2m9KHOJJCjcETgAzyCvGaqtcYr7xgw/3isemzu+CmL76yzmoR/91Z/09z961Nky2vC1JKf9C2mYpcPfHvvdlLmDK/+ZuwvqpZQVJIoJykPLmiyC1Ns0clGizTIrbM0EsOughYCdJ8La0f4eauKB15CeA8t9vefrDeE1qDSgSBTMcikUaXhoUySvgIIZFAlSHNRMAZJZgNXrsgjEEAvbjjU8gBcCh0xEgl2YyRG4PRIXAfjrkkITyOpSxvJ6dm5BEOQQR9TdzSmWGDtEF0m9Kt+SrECQ/xQ5Yst3+uq78KrllOH6oconeXKoxHdejBZ3y1fW8tN+dIOzuSHDB+0NVFmnOePZnKyC+YQzouj9ODnFAbfzvVQf6rX9A75HaVMlDm/jUyUpsfMqaD3qjN7JhcHpzB6PXTaU6F8rSulRg1A78qVam260vtU2zIpk01lc3KeztYvS03rJC3Lrw1bep7uexcaWEdGA7P/+v5JLj/trgUKgzNpdMpAt8pywTxmFoOovWYz2NPOOMuHLz/+zjnvgosCLLpp7gQG1GbL9pr5dtgpCM80WIhQYcJdc12ON0WIFCXaWzESxqkBI/uZTmrLa5TPtzoY0+Anb1yVajVqvaXMjNngytWF0FlDSF/r6WaYFMONNMoIq62yS8AHE20/HdOF9DHGOOus0Vc//aXa2DsHpDniaDiIQlzEQzQst4KUjNyKHNp4+/+1MIhFfCRAQiQiJiElI6egpOJBTcOTFy0dPW8GRiZmFlY2Pnz5Ve+b734QE/KitQWhmsEax03FxyHRCoOVboBYcUTxb7c94jU4oUatvfbZZLNDDiPRCWBvkoOoBDZZVRwJfPTJfnredP5nrUyt44zLiGeaKVp4phlmmZhtwzJ8nV1jE1MzcwtLK5fWNs32wC1ztPGu+26ffM/kZF6uvaA4q6BHShJVXpTrcA2n8g+Disu4HTMS7QW52Zm0O8OdkevxFPRyszPyZt5cTn2Ji4IyN6e4aPDMKhsapXPNrUvEqaDXcRLLrRCtGJI7DIN7hxEadYd1rCi3GJ1XKgTjyLmE50AAnSYknUfIkVAMhEBiHiSWHgjBCIJnBOA5AMGAhECOQCBQjEAw4BqBQG27HLsI5nW1BL3eNkGSM/xP3hgZEzagLIXlIN45EXx9Lld/nDsewgmY3uCYhmdXLrFrwzzxLwnqzfKmia9LMyv8GwoH8jKzuoHLAnPA3s6WV5ZbMGhTNDK+KS7ONxwPSRl2UHFZoPHgOwvU/N3pd2EXfgqyQXWab3dFPdkbQQ7GqCh4CucQ7Fk+jp9Tj4V36Bxi5vH0Wt0Nn5L3R+7Uuxf+a/3zO/sFiR0hNyZw7sBw2j8YOPyhzh+OW38vtr6NJFeEsPPvcUwLcIjcPzTmOf+Mb8Fwr/m8OR72FyzYKz1VL4RPyLuivO6pX/LFk/Jf/06bCv+kXFHFpQMA) format("woff2"),url(data:font/woff;base64,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) format("woff")}@font-face{font-family:Barlow Condensed;font-style:normal;font-display:swap;font-weight:900;src:url(data:font/woff2;base64,d09GMgABAAAAAFXQABEAAAAA0/AAAFVtAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoE6G6NWHIl2BmAAhQ4IgSAJnBURCAqCtnyCkDcLhCIAATYCJAOIQAQgBYNqB4h2DIFWG1e9NWybRjSD7gA0Jel3TzEZt/CgO7hW1wOkjAwEGwcw9lt/Zv//GcnJEIXYAxrbbf47BIsMlbELw4kw11oNe8LevZEl9D0by+Vaj/R6B0FCQnzb/IFhF8EpVJ/gqd+8PxvmX9Efh8ViiY4C1blm8hzOQKpcvrAlag9b1WMX6h3OIY/0+F2ptvQz9MVdCS8V27AKaeiQLmxBk3Oo6fs/rFrXnYFtI3+Sk5fnn9byO/dVT3r+IqIDRiMQFQIqBL1qkzqiTZvZO+6OCxZyIYRSciXEjIhVVFM1aqLUhW+JfEqFiqYk9STVSMWpGQzPb6t/Lvfecy9wCxBwMBAjAaUVjEso2qhYgYCIVajT8d/M/p1IJ9rZqXBjZqtnZ6N64u2+Gvr/uAfd835mEooFOATBWidg1ZpXKl6nzmU6GD7l4OC/uX0+x5UmnLG7sbX2BKs9qmCw6ENt1veqgKSDFBBTEigkxKWStNloT39dldteDrO3i/r/6bT+f9uN2gFDCJYIDAt4gE1jtXE7YFpghYBl6Qi6S1HeYZtUGKg44m2hIZkJgTqyYlk5/zzu8Xiv+/9f0+zCe/9XybIbCENsN7k7WAEnM+PRkLoUUFfCHljqVHC3zjL71TjRWAFI0+PUUf1fHLfC8/3a7511+W4X96S7Q4jaMqRKL8DTO4b+hIt4JaSUhjdENy2mpuSc7av/qSu9gaICUuApP+yxA3TgkJYOQT8o3fq2qK+o1VVPPlZo3ZbzsfIBWio6O61NpcNLr3fK37KdMtGbHYh2WEa230/vXYaf6jpbUHYVbghGzDY2ubkJxXKqyr18uBQIIuDvTbVK/0OjJUBaQ47WGXEtZ600Z1KZ1ZxxPjIua/z/G7/7/26YBsEBAZIiCVIrQRbAUEORkgbdDeoAiJoCzUxxNMZxpjRnNVrnSEJaURhHI45ZrTE+PmN8aCvfILrwwkviS8K9+IIw33CJ/zqRFzpewMNiAavWHOXBH88UJIeHwTIGi51y4fn/pc3m/7u7MAntUYvbYgzdSXT41JlLH9pQj0eO4sStCrJUh/KtqCgO0qAM8N+caP+7f0chUa1wMiXQNlRMzcgxk2W+3xHIeH+4eE8IkUH2sef+xf98cz7nGhCbW3fxiGAEEfKNogpVUVWPR1kaXH7j9i3HcFYfW23vvGvtxiAKBJkJEGmT92M/8wsuk+Jukvf37roFLNm4doQuiFfeJgHWAlgA8uARoBAgGwn80l2LxkNy/lAAETKKguKkQGnSoAz1QBpygTRVCdJaG0hPQZBhBkBGGgcZbxJkooUgU61AlCpFPPIIeuIpVKYM+uAD5OFBBTBAhUYWKAjMJ8143D32at4eYn97x44ACg3oXg2iSNTTg0Jjzjx59Agw3eEN9UjQ+PqGe5NVnpBUJrH7zAXBLHK9kje8cc56CkwBBAdZ2EE6InDixYtkYqBloIYOnAvKOQc05Rxw7qP6Dnsvu2Cfo3vfcwEM0sgghzzKUAkMmGwBJhuByTpgshqYrAAmS0EMD3c/CTLAJIRGPT1o6iIa9g3/EYLhPTd9LNBYwXfDk3YRGdaPPs+JdiTYVzu62iz3tW15W0g3Q9aQ1Wa3qW18sxhS/egprJ3zizzatuatYVC7MrokSVtsC19mY9M3TVOZxlM08fhZn6t6J797MWTVsyqtu8OQctXVOl+OyiG2OkTZkx/bamOtpiylMb9m1mQYWyNQg+Tep7pXR1oUW+tqCvWrZpc0YTXT4q7RFRoRdISLSJHEzLUUzWoIduHffD/ozpuhdpXKy0+6y8Xy27dTkMs5l/zYcywHqiOtza5bzUKLtwxZWZ+VY4ylIk/HP14MnT4OMFuApGG3S/Y5GtLuYgWx9hZGLsoH5k1P97P1PzkX/hls5PrcGpqX/jP4mstrx8KxVZNCI/3ODksH6BxNjPJVp91guWvQSt39SuCz4dozYenxZr7ZV1xY3vDG27r7VZoFydF4MEzfEWfzsR1Gcc0nFFTAvx1feOlr+M06D9kVhpqdz7fcLlDyOX++EZ25DcMNNXAqUahAXdc6DRrn8SPrmJgntr7Ad3F7EpZ5A6ig9BKk4Ew797FYtDEEmktH4XLYMHwV/n5RFmQAFhU6TESjxkwO+ZRTRwNtU+1FYie7rMqw2SSaK8KySBIrnJGeJtmJc2ssA1lpK4BN1eriLZCR0tVv/6wyKHKfStv7Eo9K/aEyH7ClhC6tDqXAGt1BZAKlkLWgbCbO1S3NGcDJnPkctjT+TyALBIeeFgyReUWBcKNBnggDLBXoF3O1r3JN4Yyru+97N62mu1tcvtsPWNTLq+hry44cbAzIxjvFxQWxUqSQq3IyteW3Omi2ipDpCpZZYv+BjMjXYi9YfDmnHJKyy+bgVOS2O4qVIPRoPiTkFHgBAvAMDBgm4XiRovBixeLFi+cjQQKUKg2RIROlhvowDVXCteZGyNKB1FsP3GC9SEP1IQzTjzTcAB6LcZRxJiEmmoGYYiHaLLPIXHMN55df6CAisAiGgwPh5MQoUoRy2220O+6QKFYCkciABvk+HfEocuHaTLFX9MNk9fd5wJ+ctSP87tLfP4YqOeP2w6hqnrvEfuFD5e6wdHGOHfb2ujcmOkBscAsPnAUFq6GmWmqzsXMoLAD9EtVqtOTo415dfPwCugUzVUpByUlMmZ58ya8gEJocw+tQrabgah2ILmczLUoi2e2AkUYu+pAJwuBqJWSGZYj0cEw+l5357iRuTXLZhJcdAGCSPq1SUz2wBiQcSYLGCFjbwHWTG1UNu/tBSDzCww5UEI5YIGIepd3DDqg/rGdoMCxEhVLSgu7pVZVdan/5eSPdmX9d7PegUVIySsfnNQETLupM7x0bVMXwOx5UMv7593GrjnetMCVDkA1Z1g2/ifY/ocKuUjJmdzPcBluFD3cs9PLPlfc/Gqqbw4q2QcpGxtUv0bi7JtbFsELfECyT0X7gIRPpfqpnidDDw/AanAW7mirsjaDFtu1hV1ymoNd9SxWJVewtGfydidgqWm8ZLce0DVTHdtFv+GepQf+o1VWrsQ/OjuJzwGAoFuCAA/VR1zdwFg7Mgp/SXRsFTC5RxDkPuVp11/CTKW7jV0+eAsXV3QYHERQChUKRkFEOT9iWE6Y2Y9dDsIWHiorNCOaQa6XF6S6EdTcKDIfd2JF4pMzwYHcf/HOKN/5vOu51iw0xCR7MetS7Rcd06QYS+7C/PmCC4ejZqFE6FecQEs4rJyApY4SC25HAU0HwdCh4xmRKOOun8DxmUBPTaXiNGj3tI9ZZZ32mRhCvz0CRRgGTh/iR/3eIA3mXF+5yHQ8zTTZu3K5H0qPol/8GMAkRKky4SNFixIqXoZVBYQsPFl5IzOjndDzkJPDTcBUaBY010VQzzbXQUm999NVPfwMMNGgMn8e17RzdIagP6TYSYLA4UjyfJu9lFAJiiJmECE0YhIsUJfY8bj/Er1TD5WsUNNZEU80010LLY6sVa72Lsrb0RHqn6QN99dPfAAMNyuB8hiBD9YYZOSwrNApGG2NsxuUyHmPCyk3cMgkmZ0qcGfrMpMyiYd9+2Tg6Z3Nt+X6ZGaWvDD3MH2TsnUwqTJ0i6EQ5Se8/8iUIDqWPLDKEgAYOIIcI6MUQWgrZEQgRGjSwEQNEFTBRRDjbOplgnk70WDQSIHR3nxlT/TTzqFTMLlssxJlvkaV22+MQmwrEgr2zdC7Epv20jQGyzQ3ZxHfw/UDntiDm75IucR6aOMmEzmPdlSe/Pu0RzK5HNBBh/Zet/dI486smMuTHZ48I7b/Pn1Dzu6aZCN/J3vsUSylAkBAxktXQCGa8HmpgEi1JdQjJkdOhVQWLkigT90aTEegZRTLLOJuJ4sNPFdVEGDMdgwiemo7vVLw0iPFw+8q+AoWJkzoBBeO6UypaoWLfiNT85RtuwfPtz6OTBkcOR0fhH0b1LYQnfl6dFRrYG488c6jvMNx3LnawmbUsP5UWnjMxfDTOrs/jN4RTkS86SeNX4Ag5MlgkECgQGiYp+o0Uz0eVQx8sljuPPmnHoS1Znsm/M0cXGWy0mEUy5E8SRgpzzL2bZZPNrLbYapvtdthpl5c+zaSG3qPqX/baZ78DDjrksCNH5reSdYQetB6PT0Nt2nOBM/AxVHsaJjoqlKlWry3SbLow628RBhoqvGm4uluEq61lKK20Wiqt4abpGtJWB6a120295P1D6/HKfaZ/Lz5LV9gIzBwqoXhxgjRiwX2wKCM22VX0SX+kOnY7kvKszXV8hNPO5+8JBGPLYBvzLL88o5MKQh0r6YTUiGl8H3W3DQm83DZwTMVg9aJrNO/ywtOsUBoDP6NbfcpWTKnL59MEibPNRYG6tDrj2F/m5Ri60vbeVs5Uj5r3yUE/63aBm2C1D+pVTwPD5lGvAngdoKbEAawSm4DqmUugYCNdkz83tyOi6YAFxUk33UNMSLty1OUqrUcNKZqSUsGrCKJONIhGMVRMFDPE+nFHmkaj2ujv9YIFieJl2FFC2tYpuyagGsU900/UivpvbxbTRQ7SpYM/4UbA3B7fe8YeeAIw++uPeYAf//64+sfLz7b+OOxz/VP3ye0nNwEBtgIO8CHIjdmoaczVftJcmdXe083/ip3zxEeflLjgorMqZLvGzilHrtdeeuUUN/pQqUnJl+ZzRyuQQRBRNUYm0WLFiZfALFWadBmqu+K8q967mQxqaKBIsVJV3KrVaNKi9bg7FdJ3rJ0aMnz4KsLTbv93POe3y955KN8jzzxW5o8v8YGv5rjrreu+RQ4/vHHM8Tj44LPTSeGoue454T8nOXAkGDyWlA8Ff2p+BFXpVKGnEixciFCRwjwXIUWiJMkyxRjBNm3QWA+7dCeXSmXKVWjkUadeiU6BqQM96ODbmcaNGDVmWi/VyjDIf/3lCTPd9EbmUuSWQo2xzMVv4S6Cmnr/lrYgU0HaTno1Vxen9u2/VCwCju8mCkXCAcIcxQH05r7Yf+5lqVxrSe67n6SsoLWLqqcsOvii8cEPFVi+AHPLTNz98pwsGL6EKdKHZ1KLl2cBh28iB8Za4pU4yaADgSO4igR08rQihVixFSWgPZaGtwrXZ4YIwWU67LvMqydS7hyBupKyH1vK10cdrdBTcGweH1hNdsdGveMDnFniukzMyLWEePaH2uUj/WZIzpKcOXqr6FFeffHhGrTg/64pp19dGI3TcDJkYu8tJdOt374w26RPwufrT110FheLXYsXRUZ3bBkaVVFyngEfsND/9sEU6XM8kaqHhDt6ri48MzRLBNWyOqRGnRPirSfuhG5jzRhPPbd+Fi+sMDHey4USulTbqCSuGjzS9yDzFKcVFWAIyhZbMMkNz6Q6nqkz1ipJrphQJmvFIs/k5MGhAItqGNbx7wSV3HRT2dmLh08k5/93Pc+DOqecNn3YMHFLvahVUNx5GzGWgmycrmISTLHsQHWMzvZNqRMQ/XqR9DAl+U4wuWuSKYDTbMbJhRy6rgNDUmQNYmEQnU1FlxrAMXSvLWiQZgeRobfQRlykLsoWot3JLWglbaGiDeWlrGEhrQQlyxqD5kdiVI3SewBwjRHDwsx1bPQAqw1vjVh9bXmAiUwrF/yBpruihUYDkiaXKgf2jDqldQFvhWUqZCsHkch0uJCDL7mFNh9oqVE25RLJnGks7/gs/wz0KY2jHCUo07vpl7cfo8Y2UqZ5Fhnp/q6WXgaRFEfbVZwMNZfNJ7AGkIwFlKznWXYRyp/J9Blddls7K3eCH4YpQzQQyGG70uS4ViggOGiqGP3dbQYyMiAhsetIJM/zzqHIqNrxTKvDkEwdDaUiK6RnkzkCSTkvTnsQFjcK57EStOwjnD+PnG3F/G25eKIV88jIlRsqeAgqeigqeSRU9sio4lFQ1ZNANU8S1T1nqOFJdcYQLczKRF7e8YKa5GPMKHVpp2Bl3vu7cXel7/17uTgouLALS4bpPY3aH96GpsnRIlzCIzjhEwEREhHRJmLSPaBBLepnBxYz+vIu+mbVyMB7wI0MkNG80XbHy2UIYAyd9kicEe9efCk3A0cj+tCTWeMCdrU43GUl5ob+rQ7QGMum+PL0BPjEdccURXCUfX8pEufDNa8u8icAgPNvMpMnMTfMl8sMaDDmPUGc3O+jinPUd5qKC7IIiRgoHbhEpkH6DHWVJNwxM+ti+jzWsUT4A+N6B6rrFpHkbr6m7BWIPAtjVLbfhCSR9fA+rcbyMPUUaNICm1m3oG4rwkQSpFTe+Hccy0Bx449lue6YJZOul9W5250qkVzqiIzaMRO0WR5cHp2appEZWqHC2LrAWzQay4O7c6RviwLlOZKM4owRqhyR2kp6GDcg5hLoIvKgiTbFYnAkSFJODHhMlxbVnRb0o+kY2qhBhxBXUpCQZub7ym2Mapk2Au4QGzC0yyeCUCUryTrvfY1GrGGPHDyZcmE0YVHZ4gKGatAV6aqhuMI9tP9KFK8eeFjlOIob1G9CQDRYgUqYu0C/YbbUo9E6D2K2zGx6+PZbZuPox3pFU/+aT+DKOxt8Dq49OdLga4JpQZbFBGsODLqIIY9NIyk9Eam3VGx81KS8D7XMtJ1/iazWuAuOMJz/W4wRjIeDfdiJjcwYi5W4VR7RVSdWpUL060jp4lYSdSBMfLgxcmPe6mDd2g3JN9ttye32O2SQtyjnVrvP68sVPbw55IeCGqPkFkVZjwCzchHI68x6QgdcVr+E5xCIXCN8RGEHQ4woNSKL/Oc4BgimcFR2onJUH0AaR20nOufp/aFiGKSxEVNE8w6WJaK1EVtk7SEhfYxKZycuZ90Y4HH0duJzfj8yBHJ/eGtY+Zxj6xzB9oxu8JOwX2NfX8is8YI8UZAmv5w8h4Qzj6nMW9M4PzAzP2hhQVpU0L143PJZkvkszXyWZT7LJ7SiIK0s6F6FrYDVWcCaLGBtFrBuQusL0oaCfPrSG1UXBPu3c54DURcQLlzYmKCMUjY12fv98cA5ONE9taV+r6tTCgi718KALAKoVUAWAFjpE2C1f4DhEpz6H+zwB5Tm61bPUijIQMKoEYFNZaLAdpVilTubLBy8Pb4hGxODfClkMXfuXuUmobvAotCjTk9AMT4l8uxIiJH1xubbIS1qMMyRPZEsSOaLcYnp6Ky8VGFWDEkWSWvSbkwiGMdGLFhVfkbdKt30irpQc5oRH9KsUe3wacdyuoWuz1iPrVnRaBg15hrrulOIB00vMnaG4bL41GIb5hjjiPm6Zem5XM9a9o/G7MrnsoF8NpwExbjdcpGPzHSAHuWZrlu50g8JY1aalSaH6SpiTshYyNKsPL+cbttZJ8xm21nGSsPtdOGzRqiqAbMMZjw7gMW6Hlu332uyi8XhsF63vGRAHrEFnsqJ22ZXLQVroVt6qVSIyl2LndkvornBvCetFg6JplEXunVDN4YPn6nbdkXXucX1sqWY25bPuI/EI4hIY3B42+d6xAwhByAXpBF9i/PAyOYP1w2ODKFhNHiOAfLOY7YmDknY5NolnhlLtNiTPnp4KJmMrqGR/68aQUWfAkfF8shj4Iug9gktfmTu6/X2GOg1Detf9yaB+0jkdSSuS7YY7xrwapGkmUJN60yLh/B6iePoGVle951kuVhrcX0Us869Tt11Sc80MCLZIEBzM9XaKi3KjWbszU5q7q09zK9IYW5nmiPtODH14U2dzyFzBPLaOYCegHiYmGMOVcQ5ibNcSPVj3FBYfB+V5EpHTjYCppJQPt/5SDMwV0HlGKOPcBDbm2VUxEiqJBjtZPG8hni6eRPOiTrKuHZKifh7Dr0v2QMFHkEPLQHZla3hQgWUj1jjAJRIwHlybQnm7yQsqpSIC4JbRg/HgEmx94FK4o2KMIcnkKgeOAwZATQiWWt2Hh3UdLfk8fKIIm54U6XMASX2mf7KI7I9xp02E0gdUGgFuHOLElZgZwADisRORiiNLaA4AtKTG51mrr4sQRHncyzwO6OhLPYGp5yCk8d0c6Sb0GGTmQ8ikdadza9nBf/NJdyuHYe08TSNJxbbuoyMFBSOnhg4ud+oDJKdgJXmTxHNiRL89nAL+liSLFDsjRZSTCBbDLRpgpRIaNrXUrGoSoq4waeh3RtI4jiDEY2DMYPvCQbFIyMA+RrIFWKZ6IEewGgDP0RJClPpaIFBu0gC1p98FsRBc+XubAQeCmIfnt2ixPIaVDCV/xzCsKiirkvIC/EUhXuVbpEC2Tb5KAhornOnlgjaxaLZslWo8i0jhnbwu/aywDPpnIRFhxOM1BxlE67ZMlMValCju9qhDJpytvXUiOWFUcsDfL5Mcc1DmkYo8SJui0uGN23V6Am02kxUxM1dlgJ0/088lrQUWWoSxhUPyVSZFoJY9kqg5ZgLInKKfDuVShXFFlXJ6LVhlcn+sK2pI9xmYlvrpCsXfXXVW7U1o63bk68CK6SsxwzFp/3SToenrdGlYRsbN+ZmYEfNLoM2QNym3a8r3vkJX1baDcD9CyEmc4bWv0XOqGFCYlz0zUAhPrFvt0mPBOj0YxtBmzktG+mcA+4rz/AQsH03NV0wFmZRqUif5c1KZRFQjux4cyXe4sNjU4vZTGxVKudmce1UjuYotF2J5ljVsfg4TiOfDjKao0FBP3id2E5vpXvnf03Qwp0tmyXrzWhPo5g3tqfRFmYiCxSR6tO66LVBuiuYQCt7Y4kJTk7qUDd2S6qjSjA30N4SmD/02tJ5FXHyGhNJVN9IKYkpjnnkgSNCxohx56+DrESjWJGKi8VEuHtmDWsmBDvUXB+cKJTPivpZuVuinkt3Y1OcDdXFzRw5p+OcUeFS3P88eOvB+8hRtj+kY7U+kHRTVnA/vEbyd+KsjSGQ7X6vlD8q9X3eUcWl8Wc8q1PrVi1ez3HI4ZgjCOpcWBEE43HL6ix4jVNB/U7IWAOeaA2rLEZryiKQXVlgP+UFcHlNXiycLOI+ONTPXevr2/wN12Lj0PxqVbF7Tw+4dANX6VIeJGuXVRtRYXizN7QDs/LqqiNsuAk9WgM5js1QbyqOxUIWUJVgfVRR6WMkn9l9temu1ZfBm1CZ9kUkJXLye3diLZ4ZBsOXLZOV3+Aeq93RCGxv+TLb3leIxa+PGd5X9Mbbe+B7SpK5w15TrJcKsi7A9VzkNknTntXBrUTTMEHpZmjbgt85wC6kjfCy2/y/+feMv6u5HSu6Hn3HG8o2J7tK01A77mNlGWfUA7D0DUtEvH6/EUO6TueXxjvua8be8Xofz3knI6OR9blfabSiu8npUBmV6bKd79AUEFSiDFP7G/eiplW7mvnOt4IANQSlw8M8QybhBH423lBvCvZgiSMQcAYJrA8zAmwtyvtHIr4DsyMVV1FBfTIbaYaYNTLDdH1b83jfRJJptisXkMebAhfuyJ9i1U44NbfnpHyvgOD1S49L9rEV1LJ5b3zzkUfqarIMMcFDUf0qi8Bs4laLz3VuTePF5yGkKUJWPUSI43P4kba9LtxfGzEVTDcEcgsNS0WZhnC2OvYp9KYtw1osLOlIVXjMpUDSED63S412Rs2qWHNNa3cuVdC8OEmIu1tYYIt+N8uoN5Q8sCbw6Vqked5Zs40TUjjOpteW4kZNYsxNhfOWqP0WlDIsH3yuNGJ4ez26t314W339yMDXjiH0AqfaMrDZaQA1tnGvXZSiqXZgb4zNDqRlo3n4WZE3hjg++hZHzzKyQFSTt+llp9FzzfCrL3hS7seuKIM5paEKXJD1UhQoDhBxbYFSC1bGYis5l5YWYNl241hxc8ZwcxyD+SPBIo3ZmdqcqBOyDrCHwJnEHxitmxXz6U198kmeC61+zbgukOe5hzg1pk51AzPP9xG9GDmxYHHRGsQ0JAoEwJLvvizZ7FrSmBU+5xcrddc1w+dwp4ZGFPLiAnzFxGgokeU+2y4puChrjKYxcH+Hb6yMlhzFXMqpsQIua1Ft43T1azsTNQMqTD/bopEpibiUM8RsC+ejR3OKoKvgL8BjQMuaJoAqB+V8Yc8f1p5E3nkJDWA1ZfMp39x+zWBlxV45wWbzoNl22WuK+N1ZXzu6hG9bAbqHJxNhLqgtiDtXsdEjSmY846vQyD1kuwaAQdM1HP7X/YzD4sNEfnuuqH21smuWNTK2xTb6D29c2DCyiQkuWTBHHYT4E1EX7C6nM3J0WZFMwGTbW80+5Fd2fz9p84baGityg7totl124/BfLpAQvjuGXjv2KctxXIiehsIJM7NbO4bIkP3K+sZB6a9/eeK84i/M3/ZPCJsgJBZ7EefR5//KxhfqjHxpTAlwEJN+dRZjUKtroTX/9GlZQTnjYiGzvbNS1X5c9W2EEYBauO53qtvg5XCz6nYDPY6s2J4AT0LQvV0yS7TEKG8JtukwiOhKHarSKJ/v0jyAS/Pk9sQgzIrw67C/vi/eYdC4DzIprdtenEX0PEJdkRRwT/m8rH/bOFInqkix7y9nxaZZXj4ZJ2lJyb0xG0CKc02E/fpkPtbG0xmuS8ZOqKRoDssp4Z6W65D/Uop0UImJNZIIfYY3cU1Zsap/9Kq2HevCVbvJxXXYFkcKmZ6lm31rC5Cu1+H6bTzm0NgOOds86T0ym9+yCu2RbHDU/xu6esbxKQJMWQ2lKj4oHXLXHq7hbI+bbTwltC2ZMmgVWC0Bgn+KYFJbPGlCsTjuZ0UVku0BSVnZXwlIpmMQ+mjlpmVRyytq7FZuYetamynZ0JLgFNkOlRS7nkW0WWRRwxRqn0smUgtMP4XTpScr6dV/xXgTVHUgqkWU/rFUMqvp4J5xa/SP2Sg485jDTwSJFGc7duoauv0IV7fHyM0ejQM2Xa3Sn7b6lbLMTS1eL88LXG1x4q+eG5GGmZtOytSGqr7sNmOAjevxo65H+d8k4TLhbHbSyfziT2yHZFPdXBzD4iDZdrujpvI54A8AnAO/P+kO/CeMoama76qSaPpzkhYzJB2EsXHE1V5fXlLvdqiVf1e5RAI6KJ2rj4n1xMR4YmPqY9xFJL+Uq4cbYT2XV0rS+5jMzftV1BVKxUtBCOpg769oJiaRX4QRWHZRhX+bPms0IYw9BUAnAD7sR18ZunwAeK351IU+SospBWAaIPIKK3kM70kh9peRz5cs5HML5gTgFcQNu16uvROYDrTf+abvp0+5ywMzXl/rJkd8sbn3v3XADwCqzs5WownTwwqFXywCYAoAYeFGLDzmTfROjvh94REvik1h+xCaWiCEKQoW2oRciuIKoyh6H/LzexlhTZ1depv/pS/GUbzjVTX9RcxIoUxDq1ZExy346+kzA3yaPy9YMBqfVSSs6qvqqp1/PJ7Rgc/Z/Vpzs1VlnZX9r9X+3NwsePP3FlQsaxGRAAxqCueLAsXdSQBAa1cZLUAbQNqfi79DqfUbzs8NhJ18ADaDVm5g5cl4+Zr7X6yVdoO4U5t/kzCyZWRvxMKDbca28IDP1qU1teYrSw5KEAOKAmLTSdPeAxzGYD5yLU+lKNO2KfpizH6+9G8ANB2wQPyVE/9LqyYWcjmLh8xiXVpjs9WScUguc4+kEOa3565frKbmXLWtodq74XmEFde+VEYexafNm5Jh+B8hLsInj5Fl5a8iaMQYBB5LSuOp+wAAz4h/0snE0Dyx9/6PuAOxibM7tkK2ETGL7sicfi9ZWrhUxMKOpQnWi1WQ/rdygVSVabgAgTKwAzrXUJ4JT8dRx+GbsKmxrriuuTUQeD2YnpVJsiQyhrkjFlPr0xsYkphih+HzbPnchrzqiG9dGKqrNoxjaEKKU1z9mM2X2Yre6YfYPYanX2qBnm6QDz+MiLnAKhjz/anOqDJkeQviCnplz8/Q3LVLUgWGH33wH1wNPO+Yb83WB+ys5uQNBks2AL9JYwlf8JJnlcpDMhKAGQBI1m6hA1uD0WL29rOfWr8x1eQSce9EoeoZr9not1PFeaEpFlTcdVUANvSRcFH278rVPwMbxRF/S5IPxCbxA5L8VqyKVeX+K4KLgL/YeB/mtmbr/TZzUr1Fh7jlEExQhyvlAIwBQErPxSpmZY5TWEemwWNWGGi+UuYuQfxBCX9PELE5mQ05VkNTp7aADcoWtUpz+h5arpz+kyS/Ekbc+/N/bE5isbZloq9z3/vzoJkEAICSPHaG86lnMa/R6GU/+SP5m/Bu/aDKIp+wspKz2FRjJ/erNnrPu5mjSZUXBnCql6SPCx1r5qxyt2ptoh2WmyuzuG44MUubeU2TpuV2wtFakjqggaX6hs+5WRiDlSxJb0yS9aSsKBaLA4b+wFmwHU1ZJ0bh7k7odnAAz4f921PXwqgYOJhn3DEojH0LoI2nIURAHqNUic/CAMZsKuoY3ijbfBoC33KeiMUj3CHreCVPhpKx86LGhrHPcHPFxUPTUuiuNGOZrkncD6kEyYqPKV53oEjrqBOXxAMgJX8nhd4KwQGIppCa8bY2/B/5RBQAERSXJH/lPzeAefN8Nq2tIcKlRPJGQrgU4C/sqsZaGpOW39LpVpa1Dnrd67Ew9jYAGHWLTy0tn92Nf0GiVZ21jdlVsaOwz6d0RmYDJQCR1Hk+/xYV+eH1fCIVgAgKEQs/E3wXpm2NTZfq2ZZiy0diFomA6iwvcrnI9NMG3YWDFRPbqVsrOnivG5dhg611l6qHOn2+wc5q6dQiqOYpRdt5ir4b3QfNb4DouoFW/+wVluC1LyppLCQQRAjmln3cQlshWZop6Gus7/72rn9VEQgr/shSzLbUX2qyNbqsr4ptyIuEmNtPDeogf2jGnKSwRU+zm+oGWru7B1vrNhky3dUqrfTZkeTUxpUSWynD8jPOIIILVm/SbnUigvjBI0Qob0uizUYjgoxZcbqpFcgtgeA2NUjdXtGtVOGVjxUP0n35Z+QV53by+C6QBr8n4FdOYuajDYWtkcAEicXx2APDP9eZI+z3jQAQkYMizje2pjm/LepN2Ix10JgwgSIBSDL+/ZDswb5Xlh4ayw+lVNP0auaPZWm/tsHPKG9oRadGHE10BNvOXKcv+ZVTYuMksjhWz+iZeaE9r2fmFKU709IdaWmO9NTCtNp0iB8L1ZexKplPo+SltGd44i69nGa+4CZ/XP575eOmqJZR/SLu0pIXc6sKYvt/d0hRAKu7LeQh4EeQxKEroojpJAgRkIdIq3ozgkS0ySaSMdOi58uJ8A4OjJ0xZv9s0RSCaOMJnTtSCCGNNmebVOQfvbTZBPi1w51+/xC/hKAYf1a9GA2wvZbqZQZDEithcdBQlEl2ZRkKJig8dSlfI8k2jk1m144kpwDx+qE6j+GZaweCpu9wu/k6wpX9sGfLKL2eKu/uPq/iD53uj3Jcjb4xVXnUpwqYHadjhraISpjVuI/uyw5MugS/9RP5U7n7p/cyzIU3PGsUU+C0eY79EJv4VaurGXdMLmc2l+Ktionci42NbCMl776rYKBE/mFmCaIVbzJULcFGm0rh+OFuxyYBrRDwduP0p2kX7rGl5Y7KvpbG1gFfDTKBbcWnKiBe4/HP8iMC37siGmzO0mFP2543w9gzYwOLA4HRnkb1T+/UdWYn1+UEJgcHqJVkxERCwkQEuRSxVftfjZbiJPFS5FdYGNvHMSdvDmPpANwU/edzDTOvwsJYVm21ppAAIIrAr0Wd0AfbUR+k34q/4N8P8YPh9hq/2BiVW11SGcLZnNWrVRM/ICR5hiIjPuDQmL+gI6k5CJuSTXynIq/Ez6h6f0QIcjtNSj+GARz5MUmvpkn5J1zAlX5CUtsgJrPnexW1iyZlp7kIV3KapLelEHxZ/y9icf8vMj45R1qldjEKS+1Wco7M7CpC0AgEsLjUqOfpRTTP8LMUwIseICR5iiJFrADjOTXvxQ8k5fqqvpQAcDJhbCuvceqISIwEsJe+KaACnEbLHwsjS69dlfZ/XuG2owFIcnlXld0BHsWeM4ZXLucp/bgLIrv5mip5CSWrmnYW/hxVJhXvGtka75dxvdBjPvCvs07e3qUPQIyCXk6Qwp4U7N5C6xj9cLM7Lr3yUVHvmkc06GEXf+KwGQB+pJjnmuE1w9gUKCs2mfMrrLpx/VAbaZSLKP+WqwvVbF5xqgud+IDHBYASPI+R4g3bWuDGU7GXaUN1Xa5c87SxON/GhoRx2hxNa8P8Z/jdgjM474xg3TbHW/MurfoyTd5RQafR0GWLs9VKV13AntVgBbPvS0yS9wnB4aQCVfs874iEu/8DgB1nGicv2sQJ948KyI0Flv5oqLtWEMx1SCsqNQ5Dupz4krE8fRYfE53Z4vFpCvLadPrW3GxFPStobO3umJsPY2sEwe4+IYLcyXVn9xgM1W3q3AKv2lRtUPf18KKEX5HkPWaEuUcycX4EdVbV6AHmGAgpI5B9jb6CeqcvQG6E98UCsK2Stu2E/y1niJc6NWUlT+I9su4aAFQAOAuR890VmxOar+mqa/KMtXc1D9bx6iJpej8t4HGtYuI2ZaduE0yfqQ6wj/sxN4l51g8AGEW0yv9u0dzurbucluE6UCdjoAKOZ2xXZ9uoz5MSHSSnbmH8W1QreSzx0bnB27lv56ryHtk+LqM8Hi1GIHDOmhXWfbjX81IPoBnUUXd/yHkX8LSZ/J5uh8PZbQ/9pTU8+Co9dvz+g0ztfX8wz2EPWoJYphr/asGJuncEgndEGuEpLdRoXz73Zk8x23C1mbXjq1QuUapevsOoosoVrHhJEDCakaLMyt7pcHSfoe4ZmNliiUlSLBRm9yfPFqq+nhcchs25f8a71mkYREByVsuObHQkSxr5Ne/cb33uU19w28VdURKDUKhL1s3zBDV2tktnqmWObxi8UFpS97+Wr5JV4aHF3WXdkTFCHM52d6nzbQGV1Y1yojX5PqDFGKMXiZyULCJWRhaJxBy/BHVW1jhRtG4mFA8jVwH0nT9yBvdC8gz0bC7zHH9+TE7txPZg+7iHX5tRPSAqGl5QEsNoCUIuxmKVTOTePn4gH0K/wcTg2M8XlDd4obrnGpjNM6mtu2OiDveoiK8/bkpXwDudoyQYJdVZw/dH5L+8LsjzhDEmmkMOKSae4EQrIVJLM0Jy2cJG2XmuFGuFk/f4Ey6hVvJDOxvyIJL0LG3kVL+j2DVgX4/p9DI0wVOTCqQabcTq/jxX4YBlbapGnQqnPbEK5iuERopOFCp4eAxz/DMnCUtMDB4hSqQpvViCcGKEEQyTxOT93LywK9DF8UrtECiyrNEL1QFZiZ5B+jT86W7fMRKkQo6TSkYVI1FxBtJrqoCr2HrKOrdaLK8HI/5+wTVBP4reDU5POCxow8LYGocpsFXBw8GwKSyHeHRVgiiMlQmCIQ799dFYGQmmcTGgaQGRpiJLnrUwr1Ax/9zZBZtduLsF12w/NSjMztxsS0mudjbQ6/EwYDnDayVzBH04v9uPIs49egCcR5QRiOdCLwrwTr1SQbDIWVO5Nib3LdNrYWzh2scDoJIfoxJIy8njpTrftZKteI/M9AQAQgBiClHMu4iX8xFfYNDri3JycwoNYpxLUo00hQVQkkliSJiB4zn1TCvBL+Z3rL6ZGQBysK78yFc+qTe92a73A4bzJCmyWnNCSD/YXAFohAW0jvBgeUsPivZg2dhpphvJbEsyAHIAhAQ2ztkdga8+eBW81NY0K9nq+fS9ev9+5EBs1Okv3o9I++6tDYq47av4Tnvs6PbY2O2ffR2R+uUXB6KjTo7FBJMJQhwnmrtFcbI+5snvU0hWkSZWTgnJUlbIVGzHpy5njJ5GXeU1tKm9l48krDnQRPgoPpxY/+sQx5MNUtTvIIytY+LMv6vI9kRRTfycKvozgVwu+CxaNafp3PritHXuf65lhUdpaj9FGw17TZ4U/3P73ZnxxDO1lrZHyx/mSjHuu1m95acwRqbscjz33HGJxCWSLpQhFL0P0AKb1d9vLnL69abWfNVjhe+9+98CaEqnOvF3x4/vT/nrjvSken53U+9VPLyFTapKTq5iE5OT7t2/a+8nxa7fFMYw3KfSIVhxkk2EYuMHfL594xhXkuR0YahSo9TDGBbGSjDNLLAuLlaJYq4k5wVanFh6taUaVIwhulgfDs4T1sAGc0gOrOdOoUBRFnXz++8IFSTp/YyCCkiw1DOhrNQVVkmwza70o8BGXEkxaS3bSPV0ptSjop6Uu/szyX243C5+kUT4NkJaoxCp/0OgW1szlV3heH7Nn4uOT/H34CGTqtV4bdFi4xVVuwTik3sSf7z74jySLh4uK7K+6L52m5ykPj9R9Zz1Pc4GA75XgfCgdKPvCYfjCf8W6UGhYNnNg37VYeOqLf6v59tYjy0rsj5XdeJzapK8fc394hoT/qTDDNfMH3r0NwGwDgATTe2H6vo9eh171F694NXNGpdgsl2x4DVhss9WsjKdoBWMEYMHY6qcTwqP90qjzPWWlRwWZibdVpOPPvUOhb8TI0xmwu0Y6lHZnXlR4Y2+XGYLxd7JW9sr/nie5vznOJ9cSJSxO2RcRMLutLz9XiP5MucOsdi54zS2fKSpq3TGKXofTFmPJ4swIJ4+JeoVUnibS9Hb8CnQ3xpJDb6tRjLkWQ8De0F0O6YUV3ZPd709Dkfdw0PADi5JLaUp2IHYHp66/VKBs+GLZauYWO2L5JwF0oOSf1vQeJZ1osDT6Vnmct6Idx/Wa7e649c5AeocdA+yX4lHB0zGkiJU8AisFu16wjN6wzfeV3y1mOJni0cWaA/EvhqreFUhZnucevzmmNtXyNjQHTgMvLxEiP3pwtaCqeLcwmLfXRsi/6UX7+JeXojNyVQEiieNl3tGtVOpub1L+qWaKQq6K9qGxryJAGT8XN0yAwBUeUgp3qGRNnevhyzjkrf2MFyByinAVwoNAEziXVqhIjvZbfV4z5uPYg83CFfgJ+EjYmRoG0f37/q/sTRaCoBqr+RtVAGgHhye6azt7WDqkajZnTSXUDeJyYXxZgCmeqCpM0u1ghV35zvLRhqkWMnODwU0EcIBpfCN+jgIaVDIFBH9OPZQw2TyHG5xU0rsfgu5GQ8lxx7YercId4VHza9rAIAB7GN7y4IfRHwUq+oo1u/AgLO8TIgIy8sdtL3cCRA/kyeUrCJkGSZeRphimIGClJN6feuvyrjPvjjlWDdPfoPqnVcNc9iFn0ECcht58TmnFs2ap79EbMOP+UYPHiHWCY66JH3QoKw9KlhHHOHV/XzEpYYsVKtd7HtjhcIBp+YTjg3L71Q+yQbLsi8L5MpVDnkvQX9xph5FdXW6Y7lorUsvybWO3yzmR+c3YLC92XS15ZGqQs3OqPge2cgMuh0spzLGF0IwQS2mVEnnEIAknVOZ8VL/+ybMnifNduT8u1b2iZiBzdtGy1SqCo0GyhZRq0Mko/zlz6iYJX+UL+vZ30z4Cfo7pJT0V705E6eYiYnZoFBsjHG9v0p1dBvj/0lX0RNbytxrGyNTiO7hEY+rwWn8/5w8XUkGJcMzlFqBc40xDhWzCIc02xmFZIcCjQkJF/xYKuNbshoaMs2OUWfpNK88KaIwu7kuXRX71jIdirnSSiQw7qs3tlevKavc1C4yEgNjc+c6A+wbZ+R9fhTfgPEely/0w/yNvIeCEIkifnCaP/VZvLs4sck30tY63OZ06n3rEi36po6sfDagy27JzctpEOm58VYhCn33ajqG2MdsV8sSXdsSEhr6QtiXNOl9y6k/Lme4BGdFhbew/v5vDxN+FQrnDjU9mH+LEJb0fx+ASADeV5Z7EbEVMdVj9XZdoD2bLZ17sTPdWKYTbvz3Ecz7L0H8h0cnbP338aLHE6M/uIsccjrWDabrTFVdKpb1qoxuE6/nB5l4SJK/8SKi3l9sy0i+qMnUGUtqncszNNXhdq/oaMhFMdNhgm4MMkywkXlLgh1paz3a42ubPdzSHTzSsnX5Qm1H0rmDJb5Ju32q3GUfnbSVlkzYEHGVxx/McXuppv6EdmXWcZ32hSx0AvuTpgC+AcNm8K34NIatxwFF/4GNo1kvaW+InmnXG1ty8owd7UarNSgUycshJV20NaemrDzPXFZssZQWm/NKyy1la9p0CFoGUEzOmwjEBZqJBjWawQXR8VEVJADid9P49HXiHBNkvGWGj7HszgbggdWdQXtwPsl0ppYwbU9r3kBsYvwx6LrYhjx+RpfPt5Boui5Eoev5K1+p1KiqsrJUlZXqzEwTUVe+IuqqdNpMyeTnssjPpdLPI2WLyN7Gok99Yabhkxhq1zfzbNGnu2j5E/rYk9RPEVEVxtLDJ1JJ0DKpScVY4M2bvxoNMocIyL2kOuk2QlCTpLX4rZStb2/VqUtNFrpRHukT9JS36YfqdDNEk6k15Ts7D00wA5qIGeBHUL2c1SPwqTosX3xWv3Y6n8z3JzAXMEqUWkQo11JKjGaeSCkvt+QEZIGcAyx0e5gRBoUWMe/s7NWWX1e28oTnGzBEF9yex46vVInV/KuVuJzfKy+ANu9RK+UaLdI8xlv3y5+A9RwB14j8qK3dTNsk+RBf8kuCPTDlf31yMGDMj/4IpZKPs4YkrhsExgX7Dml24tFX2cFh4erwcGN4WGJYKJvzftYZF9As3H/CytrPP+HWyTtdx43YzPXfDxjRICMi7mFXvg3Bc98HPCn8vgh46LelcNIaGs9Ivt8WcdpjCW6i7qQDsq+0iRloI6nlQClWDiytoV8D8LZp9CzlyyZpqWySDsim0lw8FnBn6kDaJ5ulJbJZ2i+bpRzZLO1kZpC0EdWIatg6FyjfhuCOAEqO4/sGcOtvS2GXNTRuk5p+W8TpjyW4mbqTDspNpU3NdjYSyO0kvdyuNIome+FTrAF4UnSPu+n0fs/P7BmUtFXuLc2SezM9QekRPBZwC+pAssoWaYZsYSCQDskWabPyiTblE1meVjfXtlRF7i4FpgzcUe3YBLLsBpthGbDC8uYW1dwKeZu53STvgJ2wNOwyl3chXyVf9Tf9SkZ7gNXZ3AMaa0eBRt7q3ffIwoQ3yHpe+PX/ojBe5L0BsTL672ulZF9jj15jP+4zyT6vrxDXgJINMsItMPs2owdA88AhoBQAa6nUMQYqHRGqwtBYqARdg7hDl/T6ADRe7w59QfiZI3NEysUa1QRdYFDzixrXG3/coXrAjrqfu66c+7KJ7L95Vt7kA8EvYkS8U8CCoAbKIitZVfl1w2y6aB6QHKjMCp9Zf3fpKwFOaDvm+vVnwDfc9f9rswn7eUUOVMmqKhrQwjUHCltphxDJO+gEjucsByq8xCNbcqOLWs+VHCj8Ems54J9Id8CfBWCHvn4Ok/YWre6uRgfh0C8eKw3ICy7hlB0qmBrQgAB5DlX4Je3le3oX8OIvyUCNidN0xr8jM3NRR0YukkbLSk1sqsSvKSi/iBotrUqtAISc26iJElHxSGxBqrNGKFygFf4nEa3wtzS0aL1mJgX1GpbwLwryt53qVd1PJezq4ejoUf0rm79egeIWUrtZgwwXuVWK7ACY8XaaRTS0fbmS2+G6WhmBpvXtSgGC7uqP86pXcY65cYsC9QfV1VNzKCozWSErkj9rwE98SzvCo2nJ+JIxM/XKZTrFFNVUcC2Eqg6FQx5RhnMFEWIMJErN8mWmAslZplbMQRIfzg8fbx9vUKO4Rd5inRET5S2AHQGQwBOkzUrRRW5xQK3KyiiOBznNCfkK/P6Pn+TINfribJ7npOqW1SbWKW7msHUYNZe64CwdhBpqSYOMJpcAyTm1blawYx6J2DLOMJcxRRTxRc6JOSYxj0HfWEGHO4RIxRCxOYfcrJJkYg6wxWOfE0Wn86klGZXR8TLyeU7If79z3z4JF0Qh7hF2fI+EHuBI368vFwdlbodaBKeIxshTUHiVnL8KpoA2Ig/lgLOckp8GRXbdNG8DxMQTLPmhpUIZI2DpKeVBgRQLIu77WtRQejvYqE8QreKPExIR6RWIUHxxfM+YWl+FujW/SZSPWc6IiSUY5+pAHwJyh602vmk8xTkY+HAMZ9Tg5KSYuzKRrs4Bformi4cblXyZKtl5iCzMAVvzBIQ6UYoJ5gSL+eOma8FZHdWNsqc9LmYfC6gsKWigw/nSKexEhccIfXMy0SCIxchDv2lOy1cLdOxF1iROxUy9A1S0XhYtk/ZIcOFb+hnhFPFJTolhPqnrOC+gcHf5u+3bSxig/KX3SIQzhtOWPlHKdqxF+DRXI8fkI6PCVMAEY45IhPOcFtOLGzw6jSPZ3QSljoSYWnqAzYOELrRWZSwm4XeagiaNXVwkECv2BkKOy6WWmlMKEur+v/IcUQQoAUr0Vof0wmNvu1pEKfvWBY5Jgwp9+WigzokmOSGmEaosXqkI7AzDQ6Ut7UyuNOJHNA97DxJSLKf0GIKekTzaLRzgNLNgu5JWci2UYeW4xz2dHOCcco3n/sylPSvhyLtgQyyJFM8V/xDtfRHa/nusNgLYqei/DJiB6RUrx3ybZvrBBkOnIiIVBv6SGyDgb8gPCyLUIz0oyOyu+8QHkk1L8q+RO2ahLhWpuU9dsV3NXiD/b/zLKkqrB1RhDiH53/CuqDW0Yqi1xHszwIo7zYOiurKjD3y1U8SIoIOm4SpOAljHHlKptG32iLlIeu0v9/f6qu0pNuQrruzbZqbThRHYaxMR3BKRJ1QYQAiuzvrtRYail4riwArIcZrNpXWsdH7v9SV0VP6jGZGOIZEASQy8zdXbYGjEZYOC1VHzuWGeE/cdpZeXIXYIoPiUyf4YPHA1CH1esioqnUmOiREmwatzUJzpzVbA7nAgjDESIUlSiibudbeDLoPbF9emZi04M93dPeoExfYB13BrKzgRhPh+qqtIdaKUgef1Jo4RqgUnmUKAKzBU+lxihaVPZ6Jcw0s24cHAXcuyANK8ZTyiJY9bsZFnHMFSB8a2vQ6Tmxy/TsHwQwDyyM77zZpuUfgeXJBQDI3S1vY2wvGLAj7tyCnX6vupohFtwgvd0TEq1TIBfPPx4JXdvcHGNwCeQ8IzDkwjQtxzIZ8KSTVVx+zAuM2UaQgVQfFubEPKCO9VUAtKxQhRqspARC4ymY8KAdhiJkEfa49ah409gPMkRfTRHZCO8YJn97zzkWaIprq/X1mIYISypmVOCe/OLZUt+N2DpV/7Io0PxujK19jrYsI5XxqCYOnbqEuYMgtyqIJ077EfjZax+A3zjoamrz2sabaLyfr6+2lzLeKIUtdr2WthC+v1Qa34bVdRv7sD7l7cfXz7fHUh9thi4wWIKJ6I7vLHD/9YrEA6jT0l0p38BahyPt5UujGH+k07sRIaInH/OIErl/ByxE2I2SNU8eZ6FtCNSbIWmr7CmYgZrHqkzqFgegibe6AglXTk1v8jkFgAXBREZH+FuJzTTSRHsIRPczsgjhBWzXMFbzPqA287DN21i8cgBSCNkIKm4WtVSCwo5ZH+KcUF5LcL1ghQerp3QCFGmJho01KtlVXRgcJDjNvrx62p8Q2d9Gvj9L4qymL7nMcjE+oDOBDVDihyL2foidK2jbCJH3Krri3WxEf0vXoMif3KQZE5DHWE5dAIaXEF08wVmX6MbfjCAp3yh0N6r0lp28vNhAK6nKMyKRwgUHSXv0PT0usMaGLJbruiJ4J9Yj0cmV6QwcUSYWSNRm5PXoYyRI5OOuqXoJAKMXemL1EM/fqAfResbv5CzMvD1RULR4nrAC8sQAIVpY6ZGqixCgC3khHbQ9jAhe3kW2ZBVIxJDcSaO/nYIqQ8FYs0v/jkfs1HrMjPNuqhRZKe4ouhXfKsYNnnQOyTQHcwEMQ4HZbC+BhUaM8CwOH5EqXUSf5K4gFVDbp98jJI9BcB5+Zd6+C3LCILyKTAIYsw3+BKKfCYhsllzcJmkm+65z83ZPArvm5V8duYMbDhEX6LndrKgIL7bs6lVaJQkFThZsEEXB+X2ln9Aejng18r9nbfCuz4z7lNCqVuI/duBYAuZCx6i0svAq8k9EV+bY4KTQFZZLhQ378dXwJxI9ynqzbdw3dVtLEx8Iu3Str+sDnXNsZmBsjTMQ0uKzzoIA3IPtvFmZUpG14KWWX8GZdA0fVXhKVEOB+ABeb+KHEiayBPHzYBfmXtDgExTIx6h7h7oQnLJGvDRAG9lBtrpNCVuHQXo8zEVXCxATZ51Drsvd6X+apFJu9v0avepFoecT5HEEtHC9AWyypPtYp/dcMTjS1ezqQuYX9t3ef8sTzf73BIMiJEvjbSf4tarwBrSkJgtiulKEGpqGtlJ4HTvIXvs3FFTkQVpSNhETSsOKM50sJyVat2aY6gWEi3jNu/1InGHcGmO153jLGPyorERqUdCTWBZ3DnygFsQMeLI5EAORIWQcOKNZhVgJvi6a8Nm1DaN2XA+6cB0N5PlKrYQvmZYLoXyaRW+vN4cH1VZ34WKLgA5JaHzdAQe4hU9u3WYm2OAgwX8zD9yMjFEpLETqPA9crQC04x8eUZZ580irUctxsAySJD2q0RhwufgGQhoK1dw+0wOKio2TcdKWznC32oOOoSw8bs0ZGRvzoAuReZAeoltXAZhrRyioaBz4RFetEGGxIrAuUuByI4zjgzHspLeXaDYddfca5pB2lbI0VZKaV7Z+gpBeSCvZ4bgF62aP9qeDWNZ2JpqFPWBTkRgsWLl9N5wm/PGwv2jjQFUMM7+pYDMgOvFPxFQXBJPE8TjeCFuGvjM4AXnKZN764pU7b80tuHrW7xh9WMLQ1zoarybGZbrb2aUEPbblZMuSWTprwAPdVe4+XZYVjagej1ASZRCX1RRBemogX88vcPv//y4fnpKNbL7nluUBaHJNq9lBvEb7O5/uHlYQgF9ZZN4p9D1X28fVbRXaWrWj3bacyzNd5II8OY9/Hb15e7G51HcVvJXzsb02nHe3CXs/RUNf2TVPEH+H8FU2hlWtamYy3TLNNc1fSXyCl+V8SfbruoRGhRoUvO0pYrjitGgZt6AYcblOjw2Dqtm1SiZWOPf+GlX7ugbd9qpdWB4bqFyx2tov0bBYqPE/qiTcLiI1zV0yduSpP2S7CuPiY8h0976TC636NYzvtnq2V1yOMo9Cd0/9/36d7uMJkyXFXrF8sCRpKlk5lbGvdhzaKKpnkrD1HapQDtlAIcyEYJhyJKkSaV5gtKwqWW7oT1+gGEm/pN/7y0Csvj+hO8M7eLEDw48yNK8jpTDqN6f51eTXRcMl2j2q65PIgwVHJA4x+qPv+jqTHQtG2zS9O0c9qm/XDEZ9iuh44edL+0jMPjA1ZyfZ8SswpK6GAHQA0NuJBhDkRm7BKRczLyQxBHgu9NEr99F+UPrdeYZkg3/CJLmA0reDrcOGyJYmeJFmpzqVb/5Kltbs77IL0Qd5XXsM1UIQluJhK2TIhXERFVfBq1ovExQr7+Vc0v5IvQOuYVXZ6z6DwK2TQsl+zJcDLNEUj8nswypxQfT9DqMuXoJbjTEsHq73JwNY6ICW8zqRXgBXGhttgtXlxarapTnvruLEfFzIa6tp0mwsainlBLBPiSb66n4GN2tfK4DgLVz7KyHQkrn2fKC6jum0iMvka7Z8IDdakePWYxV4ig9ijleKSafGhIw+MKCRQWhRb3Lk1MXEzex8cIhurgzZZY+CRW93i4mkNfpMM7ijoNlC5LGIeo8KLNnZQLyAcuc6DlXdLbT2uEJaiwgfHw3LAQgY8K5x6CZimltvEA8kwBBGbHFkAfZK6dUcwd0yPk6V/qBUZKr20YWBU7dNSx0Nt39Gvt7ZYvnvdWl0e9gbLUEpXi2BjkJlHSWca3mjmTrZkboZq8FEE6LkbAdn+N1aoe6r5FRU9HcLv/LroMQiGlN3m1UVsOcQra8PLNr97/r1Lo1Eb/S/DitF0/79ezrI556D9tmqlqiEfHwKz7LGWIoXGHwMVXmpgY0fPSf5crQe+otlpQVctezHNWjG1b9Hk6tk67i7PSx91rqcPCI4t9YlYxyzJGsbO4ERNOOEZgCxtUjWohBvC/yMaWZGY1tujNHXtnN7qgeBbvKneng2u9XVCXtRrvHEpGl735mM4IS+2oYgex9cjSryt99c2mede8vVIdCjSCYexOuEt2xoqhkQ1+yXYKwG1iQxouB4lPClpchuWVYUXFrSRf/0prosPm9jOB86VFncut8J5qOhvSJZeQ6G8Qhl1RUDwZHCpFabHE44s23XgYAWuu29VFp0JPXEdXHqA0k9K/vgxP4r/gS4eguh8ItyymZmOF5Q1uWz5kley3SzOyV7DfGuaYPYUCMdxTuhIAfWkMHS9sLSQIYG1GMr+NDMID/0eOghWEglomImYMytI28ZQjywitIjYQhkspNP1FBj2tGIcHySObCrxCfol3DJ60vLC8Wa7qRj9fHVUfQ18EnxUaxEeh0MBWjtK3NnXyRHvYCDi8d6NIHLTg4/A09a3le3jBgBke7Bcb8dSieAUkcSccjRFYEjGXvl+vuhaJzxzwlfEP0/4bdoQVrRXdLWlVZjlS5WZ25d8Efm5main4lRHFUAPAxPpLeo4RrXq42d6kwIHVv4uY/wV9uAc6Ji8Sise76tYDuGf9dCdUFXNXzoImLX8aDIjtibe4IASQtrW7O0KItA+NSAvZH3My+pZ+LEx9D4xZbFXc/arRan3eieg7l/1HrF368g6Acws238sVQCG7ewYZ9vxERJs45Em9pAMM3ArECdiPFMNcAbrTsHi2mkykHdsBL7I/Pz3pgRLCQz0oMNIj4G8KUT2cKCN8UcrppgZrBcA321IPARm9UAEiB4J7ixBQiAFFaNZiUvGxgG6WBmYTtbXI0yOQzFeG3/8vD1FZGJ6Z1MPOk0xsXH33mUXTKr643ux0ER4ZXe5mSfE9BEMeAUx/msyGx/MrseNinzkG4dtW++KBupN+l1b79ddF0sSzjOKNHkip6gYNdEzadvL9qlms/EONr3ajEdjiSZ0tStz92YyaR0MZfSiiR25NfsVX07/h+ako//pXP/nx1199+vD8dHd9OuT9cJiSFPNwerWxdPrksAf+yLyCOQJXaUAkAZDY8ghNqJndSGQ/kwyWv5XFHzpzsEuW+mgCgj1qCWlMQAnVpIWhxJ8xDc/xwAHxUZpF2yI8I2h3fBiief4Bep0Rs1endoGCgfavIBE0BPa1AZBzkQKE1cBGSPRzoyPIsE6x9dhAsqvpu6QzAMRCkGWN+2bnmICw4GCFIlQyQX4r91vYWBd1xibYmJACzKGl4IgdSFjOXoDMGGaSSFxUO2efLw4mYbhfzqLb93X6fVRsqYfC3P9wKWWy0lKoZQE25AxORd+9ZJaiCi6o2lRZpvUwhE5MumJabRMa+tckD8n3xhMLzuuCd8BXbc2LR0t6rcAjCTBtl9zEMH05eeaYsbSfnENmkQoteNSXBj3cD6ZXN/4V/uq1y0ZV7VRZHiEGijz6/rnNm95GntHYc2MMlsFXoRUrXEXaYPF4rGXT8xmmSxWM+XW/tgiPYsIeAeuyDRenb9fKxzSn7su6Wc2Us+JS4VpmtcIHVZEEUelW7C/C+JzIg1DUzEONcpZN9hu2orfnpY7t0UxUuN+aBTwjttUoAyVLksYOb99lfXj39OBrSSE2MYBLys+uF7u9ifMQ5HqGMbLgNueQkxmIiFEjk5cDAqRGfzwGFB+d0DN8wqvDEapEQEQstaKudfRV6I8nYje601lNv+mF1jc1uFxE8XYnpQ8D/blGmzK7WTJ871wIdux9WRa3l4mWVnioRGvkVBwwLK70oBhMp+gRpr+DspYRhPKoxbzy1ydv7m8vz/NpQpIU1VtJsZRSZHV5eQLKrR7Q2y20PD+QEP/t9KEUl9xLuKFgLSnFB2QERBP3CCQwNXRRVoR0ID/y/yPxcCKq3fRIvDTxXId8ugXStWFh29llUEmBTyJKOuRlZTCJru4D759vLv0cxThbctVWPaZA8Cvg/4Y9WMcjc453Ku3oGAUgjNwCTdIQwMSZVY3AE2Uzdkto3Gg0SFWpxgmaYoUkX1wst3fyHUPPZLlEHVy7N0DYWR6fG3UNF5r7MyqdIKF9CvSS+Pw9s7Y+wWfb6aoyVIMDVae4FNMxesznpq7/sWFGo0fEuwC/aSC5nd9T6h2nefCfWeGCD+SP+X36xz01V/z28F1aA0LzUJlL5LfJzh8A1UMiaglmSyIHIm32tyH653jB7ZyQJtSHiCr9QM88YRJyOqh/NEXzY3OyYhCujiCLS8Aou0inHVNEQejiPtTP9UIELSShiPIiUm4CNVXzaR+dDt3WVL7T7pSHx/FjDfcN0mJCxeh+ieQHc2KYU5Aw8urFVQ1CDlZbGAeIWoz/4JWhRYM7OnJClmTsPDRtab4Ml1sWOAOjbd3X2Gt2YI82ISW7YSzEHtUoI5VQfU9S63aqVbRXr5umKFyXYXWxOhe79qvm5fNe6KKWlXt090moO3vi+zC/X1Oj3TYW3jZ2CQo1BBIuvA21Q7WnIFECX1JQS/2czKavomk2ow0gD3dIBxMTxKyaCf13YYIBuD56f7ki1eRQEdWcGaXUvoWz7ohYQlIrtyO6CsBEBi269PICvPx4+fF3vsFf+PNUqGhspNr4Rw9LHU6XCNihnFRQEMONFVnIxCFVquSWzeN/E4Kd+iGf58dufMZObRyudjJv7QRb5emz2545dopVI1GkNaGS37KDR/7P56LFY6pWt+PYoYARFCJ5f5frqoKKqFidVIcMb1G2NMa1rrEywgTFsAY5865TtZX5RVVirDzg0tMT8PTu6euXD/iA99dmj5tWREvdlKvyatsrTLOj03yFRGSWnbVpm7o/jOICBgLZRA40U7Zu2qEKk55V7Z6iyhxzR8SmYm+UHOEaa0e4MBUt5+S6DM6Vc3nYr1/1z2ur0C3dIo3ZBUImau7Tnlq73Nul0zw1Km1XxomONSlT1ewxQnqwRXjq0XBByXCJoRID0qwSGwsg4WMRkxp3VGnqCBkVzvZdZ5ewvdlenx9X88eNhLt38zh8loMBe+v9SiZyiz/L3PdmpLpoStRvyRBIzH6mQXpnXZ/+6LBeEo+RcL5Oz1G4662mgyYFyeO7F95RtlwdAbNqR8QMQQYU80FgvrF9wRyWrSPFnacyEPmCVHHpqMVG/GfV8fnG2Tx6aYRJXP0LRBWDzihus5qCnJMKKw1NrEkc8FtaYFea83m6E2GH0wT9yijOBqfZ4c2ArzoojHQotb5ivz+XlOkaxGSobRMsfH2awI67bHcohl24JbFZS25Ux+imXzMKHqEQFadTSP2l3WHvQn8QveKreXBbkioxbPeZTbqUpKdHmUPh6dM7Y642QI7gaqtdB4gIjQACzFfzqJ3RuWjqCHXugiAA8uTPg/r+9//46j+PUb1XgO9e/950qFz+G3tk1vof2u8hEhgRgIA5nWmV8RV2bah5VhbJGcZ7X35ItTh5zRZIVSVdjwhfmiro+vWSHGDTn+TRi1Zu+LsLTmQ/u/u4kmDdM3SXwv9UGD9YlQSgG4TLuVhltD3TS6C/0eYXUveFWudUNTspKKvoK+QHVX/5/hQPkOWOry59hRTQdIUaCsTNzgWpVDLTWheNcg0ZHPnnMHdgX5fK5XiNrntKgzTBizg6NLkIu3YBYEp917FD2w3C1qauq3ZHDlnK0JaITisLX9aWktUyf8offwO//jR4BZJVlXUv0z1RZC36YmWj7mx2HCZmUqOrXjNzKaTIZYpS48zCfCug6iQmF6m6ii+9aAMNIBKiQAZxEGNG0X+ehCbg7CWNFpswQdWDRMBGgwsHVHxx0WA5NvN7TPH6+RJpuUlbXQrfVfWatprqRUB7HlWLlFJdVIFfkK/0ZVA3BFmTRXSfT2gKbAz4meYWMkjjnumuExGa7bs25+wCrjqLbD/I3ejQBP5AN0HeoG8S09I3F9tDqgDb4LGFh4z/ukPhUjyEU4DutIL6Sh47dZXaRStdAf8G5PGviOb0Dbr76bs5WSeS5T7V/k3Ihqt40gwMcSgnT+PcJ68UABwoAXMX4/R0QBVdG8NtOr/BaxAIx5y7hu9UjuCShYoVB+EXo75Sqrem9z2CLGI01CIsQtTYZuDGd380GpgaAIaDFMC1PnfPRtEuP5tQyHs2pbapUtr8bAmdrGczIiXpin47OM34dDHDLOKyx/AZFYqbxo3RtIX0b/pIQQ/mPjKtFCln5zWq35AwhyGD/AIGjQnwU6urn5dPn3oBow4w47caJ0GsJPHSFutnaq+GXdMRcgo1qaAJtXzU5mhxYqM4YkgNm45RBGOfOY5ZvASpRO0TCDg401uTMui9JHzctjomNtGTkr1j4oSn0BwTqYFCxrYJXaT3VekDghiS1MmZ+jhOpyGan6xnM/uEZxGQAoJics0VfZzR12NWChGqnxSvhevvRdfdECFSlGgFbnIpFDNPPn2AO1eRWwa6Y5XjbBJ/va1JkqVIleauewZ5V7oMmap7q4b6aOs1ONzdrAaKDHH5UWPDkX/sRpQoVabce8aaFI6CcSqioaWqJNBatSk1pi20yIyDpjmvnV9nsveJWK+TRkssM8sMTZq1aPWzfD3c9JgzsXFw8dQ++4lRbD6AZC59X15rRUBIREzi+UEYxUma5fvDsShPvBISSdW6aWnP4atvvvOlVJXBYbTdjHa5YAE5hlotPmSydMpXG1O0E06q61mX2GXLkeugQ844S4JPTGLNdRqbOPOsL57CR255RNUEWWOP3mwl4ASTWmi+JRZbajesRB2k53TAqxggI2SCzFA2lANZICuUC+VB+VABZzN8qthycECpx0qGyrrycl5I0z/k6/fUlGETg6Esnd6M9PuHxvGSjlJNfyjo5Xd3dHeEHqT+XjzY0Xsphzj2L3yRM94NhgYDl9Z4WBH4rNkDxLGTaSfnsdCk6aKx0BQ5aXhMZAbw+DY2GFpZ8FzhE+LkeE3ucY0h+DWpBa8mN6QmHFwTkJo+kJr2wjUBrfEJbGKQewwCClITkBsCAgxyQ0FqCgICckMS2pFlz7mTdV79CTanqGf6fwjH6Dinm5Eut7KQv2URP+rT6bRGmxYjOBF7A8xGnuYrbndIyf5YfVb2aDPvn3UvoNox0MXz+u7ghao3dXd3YeONh/r9d3kGsmdoqG8m81iTJvxD4ycwjx/dA6dZHufFAxrPQ9CWpnPQXMTqWM5zsOMVTmEyR4ly0nEvLFGKWHANSEYiMZT/tEYl1w4MSDpXgZ6dmzg+KbpJ3RTc5N0ELEcCASNhnMN+oqh7nQODI/9LhNZVN55j1zWqyO9Jbb+Gcy5yOLJL1PkUsc8NfBkHkjWtPs9S3MybJcq5uSALSeXKUZRKvwY9XE1k83nuVe5J1A84zvo=) format("woff2"),url(data:font/woff;base64,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) format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAADOYAA4AAAAAXRQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABRAAAADgAAABMBi8GEEdQT1MAAAF8AAABmgAAA3DqP+r4R1NVQgAAAxgAAAGnAAADVk8IQItPUy8yAAAEwAAAAFgAAABgajJr52NtYXAAAAUYAAABogAAAlhSE0snZ2FzcAAABrwAAAAQAAAAEAAYACFnbHlmAAAGzAAAJWMAAESmrFhP9mhlYWQAACwwAAAANgAAADYdRmV7aGhlYQAALGgAAAAgAAAAJAVfATlobXR4AAAsiAAAAVIAAARgbSZImmxvY2EAAC3cAAACHgAAAjJMPDw0bWF4cAAAL/wAAAAcAAAAIAFMAmNuYW1lAAAwGAAAANIAAAGmIB89MHBvc3QAADDsAAACqwAABOkht1NjeNoNw4EFgFAABcB7BcpHNEtrBgSBVmiFJus5JxiAySracIiz4qq4K56Kt+KrRBZztuzmH/yZCER42o3RAUSjcRjH8e/zbveu5S3ROgd0hUu227Zbpe66c04OLCAAkQJVSSoiEEiIKBgICgQFXmFIYCAQNDAQCASCevyENyBf/4/Hf3/z8mBAJ/+YJTX1vzZDYX57fZmvy3Mbq+RIA7y8YASJ2RIzpFbm1pfIJQUCwAisSajXRgdmZ/bFXSBixEKDZ5545IE2Le783NLkxqcGLfXkp03MJeeccUKdtnfEAXuaFLu6T7bDFmu0WPTZbDO4cjeCtFuTeVnxe+NUv07KP7Ikx2RZ9snfsiqH9Q/Tsl+Oy5IsvOkv2df7Id0U5YQclANuQIS5kPYCQi9FB1nSdJEj5DOjdHPgFTn2StS9MidehQvvB9delS5g8gNn7N0x0Leir0kZ9gksY1lC67Fesokd/rTQLRJRebc97Y4GsddM7CxWdanNsav9xN4aiywQqx0anGtS6gazv+BOyZzM43KouSz7ZEX+kvdyWK7IbzKSBTkha7IkR2RV9suiHJeDcgC0IyMDZOkkQ0SPT73k6eY7owxpS2UMCCWuWfgKw/ODkAAAeNpNkgOsXUEURde+eqxt27Zt2/NqW3HjhjXiKkYbNU4Rq7FV+yvW/5PJycvV3kfrchBQZitviZcuX7uVmbUbF08z/PShy2fpSgLQ2uo9IqVIJVcRCQXKuQrEZJSo1mpnzrM3r4fPnjvD9rwevXioxsa8nr1y5iKr8wqIOGgUNAGLsuisfrKf5cykPQJEkYjOZDzgqTqqkzqrCyKjTEWpCiqqVJ8UXXmeyzKeECGmswBIsLoukvGJVxxnMyPpTER7MpqJOcz84M57wmB605kyTdb5F3xuyJ3ljrnG/wndOcGd94zpjGc4/elOexrtGr9t6kfw2aHurO6s7pidu/svI74FnxVyZ7nzeUeecpfb3OImFzmJYzebWc1iZjOZ0QymJZALaLBn+B98Hn/tfX7aHb7bM321O30JPjPwznhnvDPeGe+Md8Y74x0zERkzvM9iNnM8lwFx+M9V76I/ojMgIEUk9T8bkdCXacBr3tCb937vy0e/9yOGwInRdVJUrD7YepASEQmloIJKZAhRpr4eGBw8pivtKapIpEQFr7FKXoWQojZB3HK5AHjaY2BhimCKYGBlYGDqAtIMDN4QmjGOIYLRlIOTiZudk5WJmYGJuYGBIR0or8UABZ5OvgqMBxgYlERZGP+9ZWBgYWQUTmBgnA6SY2Jh2gWkFBiYAf2KCuZ42nTMM4JeUQAG0HPfi23j/i9oYtu2bdu2kzbYQNJnB0kbo42tHcTjmWb0oT1IkKKFVEALNZKJmGysmmqhoT6GGWu5dY47rSD0CwuSu8n95HXyNg1pjbRu2iW2iO1ip5jF7nFAHB4nxtu5LHctdyNrlrUsKAANRX0NN84K651ws8iZn9wpc6RpWqfIaR7bxA4lTv84rKITWoV6qEXBGwpuQcFG8sfnD8rP8tuRl0fel4/94OPqj9nHMR/bf4wfXn6Y8WHDh/XvN7+fK4DxWI2t2O8oYSBA6F16Qs/QVzUJLSwzy0GXbTbWTCutcsAR0403xXrTzHDKSaetMM5qG6xxyGR/BWttsc7h0NJSF1xy3hVbbfPbDrstds4EO/2y1zHPPPfHE9udUeCpPZb47osflissCB6MGwAAAAB+NF69TbtAbTs2L7Y1Vf5L8goqisqqatoamlr6Orp66gYmhkZmxk5NbSytrG0txF05d+HGpWu37jx78OjJh1dv3t378ufbj6hfZ/5lJKWkZSXkzMUC4UAoEAxE7Dtw7NCRkx0/6YhaAAAAAQADAAgACgAQAAX//wAPeNq1OwVgG0e2MyvbMtuytJIsllZgMayklWVZMjOHnLhxEscO2SljcuBrfpqUmeH4rsyXtEkh/ffbKx6Ujjk95mt7paz+mxHYiuMc9P86szt6M/No3nsD+4oYZEKIiUkqkQRJEeJlZpnNLDObGLXYgreJN0kqP3p7nDkF+sXSbzMRphYZkBMhs8Xu4KoxZ7FHwk04ErZzlhKpI4n5kFKPedYWijZDox4rlPh3fr64uHosMXTKWxOBaDDB9qpnV205q1n8nq95fLvP7wpExnpvswRDdkPS3bRh8u8bB9y2zjaFkTCGvEBVDlQVyI6QjZL0MZFwFAip+Agv4xyhJNOMwz4GOKD0rpWyvQlPb1g3tzbRy0rn52eVDr1MpncoY83NE/6YuX1Lx/6LYv6JYx+tq2DNyi8ozWxFR9NYUweh1wn03MxRpERWhOS8jCcyGRhWUc1wRGaWE4hsRGBKrnM+R04X7vVQgr8HOjFPKsUcFZ/NkOvY0m4GgusoFbfnCx43wqgdKKmoPlExlSnJEKGkPpxFzYeigqoa45amyVaOa13fNDat2VzNexqbm5t8gmyjZnulvWs6mZzusnfEomZnW+PqWLuLaxQ683o7emK9yT6O3nDTMd3ximOQAPTMII0WWRfLY2D02MzmZZEQWjyYC44lN7ZauJaJxti6lEW8oSsV6FT16mYnom2/awaxNidTIJatY2PcVRXrdJh6nXH8VEdMWhZrQ6C7VpiqBjpLSABZIjyh1oRZjuVZTsaz5v477rxTZhVs9z/99NN3ivEZHJ9ZaeRt7MzuGfG5GbD1SNrDtDCTqAl1o1XAsaIkqyAh4sP5FxFBBb8oagPOWUE11JRNGKSThu1uXJL5JSkwDKZl35Vdk43qkNfA8S5f2Ng4Egy7HNz6XXansXE0qLDJqjU+0znRgYDyfFvoYYM3uuKMzwd9vmDA54uODspMXp3bV1FabjXZ7eXFypFGd7u/vlppaNgoU/Xy7g5fvaS4WFmnrmAdUadKKzNrrfhcv11j99MHaKkftFQHWmIXLFnJyjhZmLNUM1Dpny+WdacGNsxvUlj1snlir67mmUnxEdx0ejlrYMWvEo+YgoeL+ROqQipQvcXejKkVgYwlmOjeTPSNB7w2mxeK+Nu778auO8QYs9KuVWvt9CHKQP/iphnANpGO4W8AtnKkRkiVGa8oceNCxBve+D5e29X3LFZm0W5mmJljR5JDEt0CVpBwEHjrAQmrMhKmMC+Vcw4pyw3Ol/R/+vpXfnnzl5uJXENj8y+J3/hL/ACM6YExMhhTBraT57/nS1/C1i+LwgyjmTn2mRliYzboF2JqiT3z0CWjPtWCFulML6rYdpRUep0On7S4ivc3hrbX16uMO9T1aiNT1G0Jep0cPzYiXoM3eK0Go3h57o3y81SL2DylwokqnCemaOIEsxQA/2sAHHJkLvQ/YrOOAsvEnqb1mYASp4FlMi60tAhQ8uEk955qbx1pbaePTGyMQWyszcVG9vjYKOPk/2psBCEWh0bxx9iyKDjS+BU7edyX/OdxP4wthfErOwdBpigfUcwgnQTcnmInAWV+HqNSab0j5ojtiLc9Ig6SmHK5lneoz++I3E8tJppdq1xkBuwOwYAh7EGw82OfBFjPR3cIF0ZskLDgQK5Vn+D6TSuEQNxhWmFq9usu2NG/3dKu7I1NNZjGzADYXRnxdnB2k1mnKK4qllsi9tHVLnuf2tasYykgbB+ZINSd1K4PITldnSMkKpLZ4LMhEQ/3dd2wxag579VXXx1KYvlMvemTB2gwhLFdwHkVSM/mdA3jeZmCBx2TCocvz1mg3AaRYp5aIB4Un6UWiNce+4hgsVOPKSKexUt4Iyb+KPnp4xd1xqXxzs88zhT98KmnfghdMaqGnn3Qs4bYUe5PwpG/6llPWdc5nWXeLW23Jsqab2WKxNX4blKOfYR3i3thtAVGR2G0DOjIHZQQdXw/5mqw5ZkD1yYD0kBy/4FnrusOSoPduESc6OmZeE98e1tv7zYYrwfbaspQBwarsRtHeIEyLODHL/wH29Uyudvx7f3DglRgio59LiLMbMPp733pSygbPWqzMkawGewEm9ke7BF/gh8VX8fRnTg0s1P85gyx4Sp4DMCMSFEFzImDk3IgJuYkPH4m+K3Af/3PgWfFn5cOfuGhh5hDx7qYRvGXSIJG6Mp2CGTTkggkB6MBO5HmFh9zdvfhxqw8Xxv5++bZpmiqVx/p94tvHxXgv+kVEZ6PrGAObV6V6Kktrhnu8XSHdRucIXPQ+SYO2v1mv/0lIk8IZt7DPIcs1GaplRoYMFNJfhOSZGDlluDkxXv2XBwejtsrzpfWaRt0HU1NHboGbZ30/Ap7fLjyifvufVIX7HRa1C6jbNu689dtkxldaouzM6gDTfSCVH6QqhTV5WVy47wsst7v79+7d//3v93T2dkzzBx69K67H9k+ue6CtZOiGnhcAaMrYXQF3Z+yub8V+HHxRewW38BR5tDcgbkjc9m+WuhbtqivbAV+XjyMbeIPaT/xdeItILcG5HZSi5dwJ5DdwFAH4ki0wV8uLdPYefOOnfN7w8ONNlCCTGvXtcaqDAFrLP7pt8/ZxDYY6g7f9fATulBng0XpMsq3rTvd2x/Vt4cbN4jXEl2TIMpm5MCcDJyS/nH4mpf37IF/YESvM4fAkCzHuqD3EPQuz0odoSGJ+vHQ7bfjJ26/fQq/OzUllk8RvMH02/jdjOdjGbGSheADw/C7pqYV/OYzaneX+YPewB+ARLG/P6yfXqHxNEYa8fwcDKMztBJwgM1iKSEko94r5zDbu2dPyei11/3wretwaOOrMPy5s58TfyASbU/DKB2MKibaJvqe3oMjYM0PU5yBrC3Xwg+Bq8CcCoSmrg5CHygp27evrOTM2zZJp645E7e/KN6Mt74oPgn40xiDBgr0JefoUKqvJ8tP//xBKPgdsQJ6V+B3oDeDrDCjYZjRGmQs2FGDqZG9bsEC2DHdajS2Tnfsn5/fzwX0VUJXlyBUBk+5aPWqfacEn7rnnqdmtaFe73nrtlFTRgz1SzfwUo4U1LKyJlyP+ZwRj+CyLXNzWy6ajfh8kVnm0NnT02eL7+Jz3H67303566X8scSvizmy38lsMXMuzh/HJlO0r69ldjrD5/TsZ7+X5/Rgf9Ihf+zmDK83PyYfPXgCbgU6myrglsuyCyFSwi0EkNf2EI67266/au/wAtOD26vFX+CaLZTtHyCMOLKzAL4blq5qeOmqRsMUtq77dMOwYyKcaAk09m0au/CssfOsg7qhyJmBeO/EuKVtU2WSH/O6o7zLXVYpm+2dng17x8yOyQZXeZVseig42mQCyvUgRYrGT7BrjnoA3nnhq4ydGTr2MDM0RywwSf34EOkrl4HL5pYs6gY+qD5TzLrtdjdbvKcuvL6/f324Dmxm0JF0q9XupAM/Im7qO7XPZoMH/izgkwHN7mz8kPByFS/AwvTtp69aw0vD4xc/DWM/+6Mf4U3UPuugbxeN1Zm+1LSF7ELW6j9DWVbWtaurrEy5039XsjQJY0/9Cr5R3P4VfM2xLnypeE5+JaQ4zJkFjJPn106m77qB5tLU0CWvHLm+pVmabL/kmUt37boUb8Nj515wwbnivcTLSgHDSC5O5Ieyv//lNaMpacvY5b9M48N3XnnlnWJnOu+TVD4nzi1gTINYiifEh/BPxa/grWfhH86dJYKRShb5lB65l3hVwWZPKNjAF7pYT1NTDymcVstBKXC07VsnPjGxlT6e1SmUCh19IEzsjUksin9Sh0B2xxNHym4au++FO2bxXx7t/Oaxh2aJDnzQ1w58GqlUQhI349yVhCS3Ra0BOe2i4mexaCwkxKvOrHA2r4zG1iSM2kCr/Sa8ftfTgWFveSic8LgtqYDeKAx43T2tCcNuwG8EPZgAvwDEQOqlyGGBlrBZm6MukvOyCK5NNTWGAj2aVXXexi5vZG2KU9qCOmO0QW3v3JQIDSU8sk31nYlEa1dLF/5cyC51BzwNA2q3sa4+0O4yRxs0JcUlWleTzTcQ1bNWf32/KyoESwP8TrLH0MEjTuMSWBLMZgQTJXGsjcTYDeKTWP/FyUnxnu+V7jsdf13kt+z7Ix4kGuNBIi+Mc8EPs5TPS5KTAH4vyCk3MyXiEVlppc7mN3qG4maufVMqOBj31G6o1Fu9+kSqJe4RZLMa/Hmm53dKm6baEBsLh8dbrZRfBaepaW0sFZJmeQ3eT7j2AXWyHzAi74JVCXy1RKpKSpY5tfibN7Rxvt513odTm3uDlaXlOgdv8QwIJmv7hqZEErTckqx0dM+k+veeNq73jK6ciDIK2K0aGkdCkfEWbmsqXhlPJuGRQpjMJGOhOxLEyzmWxBbJV99//3T8+78yw/O/P/PYY8T+XcCnD+bdjPyoOcNpwd2AgcluzpbyKy/k3pPc2GYZTEVbTYnxxsbxhKk1mhq0tG1MNqWSCcK9EI8LUCqN0T5P50pZqXykuaE9oNEE2huaR+SlspWdnr6ocUvErwhEIgGFP4KTIU+1Oxh0V3tCRKdOek5/LqNTTGySS0oEB+xtFp0Giwu4YlxL9Rkzgj7jRNdpBBolmsWPLlapXZdXKWj7aqpQqlrgQQb6GgYeouSGRpXV1oKyFi63DIyRAaOLgKlWY6mKc8AL9AfsYsLYq/7uUH28xWTW811Oa8JvKp2oCJo4V6ncoGqLlUiKJPir3SUy2fylY9KyUaM+UHOFSRmrNEV7nIlpztXttLf4NAqzWxUw2VymkhqNqUG3cqjO5XXLN9k6Hbds5hMzSs3DmiZzcShCT5tXMWbgO4hSMMuLFcbCspM5EeUPn0R91QwVogkfZ6TPnDZ6eqfR0rohmTolod8orfDbmzo6muz+Cml/hyPRwMq9fdHTWgwWi8FkNp/Ob7t1+1m3bXDa2ybC4mUJi23raadttZs1qwa0yS39n4lPtlsPWoxXGS2+ppYmH/Hbq9Hf8DfwaWCbSACbvRpH//bJT6bTOThTgtoQ6ZdAHzI6vCXXL4F/9uHsLMARwMcz8GZsZplxANP+6W5Gl36YwFWZ/o/T/i+n38GXoXvIvrD4uAgf9njCUCo8JoPJQx8w2pL+gImiy6G/llikqmAMf5Jf22xms42zWD5vtVisUD4HdQ7eJUalU2lc9oFAdsojU83YUTfIJyVPvBl4fzQ9h29CX6Q6gEX5D/fu2fRF8QUygrbQEX0FI/6G78VbmKNkhBw2EX87G37HxOdhxCVQ+xZzFEYM3IRQCRrYjqie7wX4lZkRGGhg/0bhXrhwep60vYChdaENOu/ZSNsAXxBaaii+ob2EgyE0jwh8COAeCh+m8GECP6ksrek5xoS+CCPGLicjxtD+DGfIjW/Hfwdekc0REVRSFT73xRcd+/a57z777pVXXUX6HIY+92b6pLBDULHSw/v2OV588dNXXbUSehHsyM1Y8N8B+8rrCfaVaC/lUwC4GuAOtCr9CUQ0smqORKHvpPvwPqYGFSM5sSSBV7GSgnn+VdAV7Ao5nSEoB15Kp19i6l0GncFFHxkM7wCGQwQD5Zxna3Ch5amClwXZLIq/pF96Kf1hIYahdJJRAg865Fq0ugCiarxwry4pZAuH+JUJs4Fvs+4amoi6/PGKuTKrMGjPkvlvfaTX6+nkTSUjt0giiWqvO+LyGONeLWMrpN2WfocpZ57L0BYiSXzCzYK0gPb3F1Pkc3zEs6SPFhJcYOTPiyljdDB9LiNl3kNKsN3sakpjlIrzSQ6aGwdc896xpM2WHPPOuwYazVjo3Xf2epNp9dZzUhtT52xdbTJOnr0P8Iymz8Wfp3jyqwi9Z3PwBgn+/DKIJo2LEJnWAyLA9HXA9AFgkoIlyDKn169j4VvfukRy4fgx3zj0mIQe12d6YJmZnnLx9eIL3/oW895HnxpnXiV9NkKf96BPYy4CgWxJWFLIrU0IgrHDB/xlr+gVSpUB55ZkeJEJ51ncnYhW1CrKZFVnr1lzdpWsTFFbEU08dFhdKzPEGxvjBlmt+vAlMU9I4zCoKxT62sR4olavqFAbHJqQJzYec7gUbMDk4qUlUt5lCrAKlyM2jgp5w3QuQV/VQJleHFJuJGSCCauUU7zoAwMxDRBX9i/wxrz3bzOHwQvOBUt8j0Z0zOMh3HuWeBBU/9GnUGFrMbTCseTgWbg308yQeMCMMYegVZqJXVIo+O3JuyZvgwIHmdenxNfT6Vw/WHWmaQyQwvo/CtZfgeqRHpmRFzWBNdK180Rnhhzm4mV7fKVnbKyHFJNeb4KCt8zcMv3w9M0z+J7jW8Y3rlmzkZRBr91n99IHZimnlSdoAh28A7O3OashiPbvnJrVDrOoRZpZCSS0/dRT8dV4q3jzsbfIE/p1pVczapC3GY1CrCK756X3vnTCC7/u5S+AqaE6aE/sqMYZOFYlMX7P1DgcCE272upb7AHB5+9zN9lqBcFpg+9IFK5JLcCjMadtqCHaU1ZbqlLn3hJHi7feYB+q1zZwBq6SrTQ5vCpvt6pK0+lqaPGqDbZhaLIYrAVNrxp91QqmRKLwavM1Yi+69CyjyZxThdz2yCzjyN8x/2iS45Kjfqzf0bvjXUtiRTC4ImH56CHmd8eUiGgX1THjzJ0Qz52oC/S05OtE9iY/v62Cs+Tyn0M9qZ2jfv/ozlTuza9JWa2pNXz23TQ6We9vcTR2y/orTBqTzWrRWyr7ZD11vtW7Bgd2r/b5Vu8eGNy12ifY29fxCX5duz1fWbVtjbs7pI26HGqd09xhdupVDgc4dxE6B6/Dv2SeozJEURJU8s+l4CLUpOn2VghBoxuz2GNvD+l0IUI0qNcH2+36oJVlraRO30WhdRYz5xQsap1Go8PrdIF2h6M9oMu9nXJLwKAwBCzyfCX4uEXbUNvRZGNL2RBYZTW+jbHRexM1WG8E2CAfRmW8iqefNgRO6uBU7Hjfz/pmVjQVNw21lhQNDxeV4Nt+FYv9ChvOOkv8xY5111+/bgfg+gwexT8HuelXf2xx5PfCJ/jq77Bk56kZ4/sAaXmjO9o8OpQ0WS2u6rCsL9E94jjSZdAYPXhts8kGx/CogrNoFT69s6PtC503e6oUrF7rAqqfxGP4h9k4gvDy8cMztn79GCl2p9MOBY9tXrNmMyldPmfc6aMPxMDsjWdnz3iimYtmRGEJRkcbmZ42R+7tCgZdUPC4LkgmIKjLvVcLLpdACsLodTyN/4vGS6SFoPZ64uwEQFaLZAc1C7U/Qoy0ozNuJDHyjOzO0YI8TJSxkXO74IA/FUwT2aVJHYfWnfOI+aHTHzI/cs66Mz3NtzVPJ598MjkNldsQAzpBzCC9F1EhRGyMFhKfeSlMNC3cp87aKzv9Qm7b7m04vo3L/nhh47aNLxyDGytaITyY0DEmRi0F2SScxEG+T7z6pbIvbXp+//PHcK940I+vEM/MfF16lPHj+1A98V+yki1MvcqAc755aUNcwxoUel35KbUjHYt/POrgdA19jXVnzOYrgDWJkhBVbEQmgdgpqIDY6tsHDpx+4EDyyNYj8A/RfiKjwTO500wS/0jcuhUxxA9h/DkwvqYQQzH0ymARf4B/dP+DWx+Ef/dv20a/9I0wVUwdoWmTUsVTrWPPDf033th/A33+OleBJ4lgSWQFOimoyZAxw0PhFq5wMwn8/cljtXoWFeD3B1atSmOzaVRaK74IXqQOD0TluBLkey273gD24qyUVvwjPLd1649BWoxWoTJGwqyFPsCBjS2Gv1X4fvE5HH/n/D/surv07l3ouF62iC0C3VbhOPS6XxzbQzr94fw/kH4vozfwZfhScrKznfhk98aikx1Gt6Ev4yfwYSTPRPBmnHWhzJAGwVJTYxEayLv1y3KzV2PSeM1yWol0ZeawmSmHOSyG8XBPZZbhz4l34Jebn9kqfo/oQEAyxszcRe8vgIID5oZulMgMAWtkluimjnjIkjgQbmhZ21Gv1dZ3rG1pCPPOhV9O3heJ+KCcVrMzfI5hjOfHDOeEd9YU/toQj8EffRBe2tNXMCrmXKSh38VyGSE8a8BkQXLIkpiYu5SVwBZPBus2Lp3cunVyc2pYOVlh1xnd1ROqla33NDQ4nGfO1l62c+dltbPbS1sDfL2jVHyotEEbCbSWbse93pYq3FfZSvYiEdg58RChrIXf4TJ+RiwaSs7PJHhg31VX7Qv1Rh01U4pEMNFd+bO33vpZZTdUFVM1jmgvfI677wmlzV+fdPm6UiuHVqa6fK5kvd+mzH2X8QAtN7lZJbHPAY5zgj2KCmgqMwcWM9u9AuNtvZVyrmWdMDRrG69P+MPNsoqDNzM1Kl01Xvtpbm1JZfGUPmX3DQqGRn7I3BBrNEU1U6VlWrdFLS09E6zblr6S4SVuxCEn4aIYdCkoVRHYwi9SsN3B5nbxHFFwpAQDi+AOuHjoNG64bbUq2O1lt2+aal1vGvb11E+Nb988NdzgW40lLr/XU1HS5B/tK/9WUZk13GJbta1i29bSUMOoUPlUUd3W/lVn1OxgTrc1VDxYKe5ucJY/VRpCmPgKM5r5gibwJIxIMl+kM4o3Jx988My7Lr6l9Ja9d5354IOidXrPND5NvJoUqKbTmdw4iRFiPKb74Pf/Aa88vDIP/3AxnPl5Hv4ehS/F80EBPJ6Hf7QMnncJHPRcAvBuphb5URPqQEiVX7EXRW0+4+8cmz8Rc5mkPupbOc/KJWxdEhtYP+5rMRorRmqH476krMg5Mrjm7QaH0Vy2ulTjCFvCY/KiihbWZuRcfi1mbbbrbJUDAyNjsTV2szmecnB9u3e21iUHfEatNmRXxhKJ2Jjgb7LZ60xWfEEs4HQGYojmxfloXhz5caINYA1WUQHYpdvt7FUjTh2fKTc9UlZUoaowuFjOpw7EKt3lJpW8XudVVW/cAYkwTG1BAl20g/EWSYrMnNrClulq+EpZVXWlqljSXnPZaSQtJpdv42T+ihwoAnxKF27/c14EvGRCmIMHoxYkhQHrR8OmRle9te2UWGJDK6ePDvjiQ2qprNk16V/FDbufrdbXrJkXWlsFKMyhkGl4/Vyyb67LYuvY1Nx4ShsXcRfxa51NQkQfVJWxlcKxmbZUU6qNPtLpTDYetaP3MbGLEmIWeTixxw+XwqkdvbcUTvGUZOwRkwaczQkrKsyhmspmfs1kk71gPO2X4cNExl9PhufhlI+l8AwfS+EUz/UZPkyUD5pN9ijwUV6QS5bLHssljREMNMeKYq7JeAqTwUzzpjIcUngtWgynHC6FZzhcCqd4ajMcoownGuCCK840onqI7H7gUrDnDUQlzduwVE7tglpNxlIAZsCGTp6kaTV0alPdpDoZJ9VvCC2M5HC1TZl94xXtO4lZ1skGwis65rJV/Mv21r4KddnRigrxzny1QILajCaynFZlY0YVUpJTe2Gaqy2SrcqB20X34Zl8uMIw8jUjxxmh4FEO/htsaFNJFI2u/lUrB1fZi5TNDf0r/+Cw6Y2lq6X1Nr432nhdY5Q+3oIAAGFAfI6zcbYLL7t0z4jLXhAyaP5NOsY0M0fJuszLckmfZjazNXDjyMKHN4GT9ZAU0JvuxWPXjU9dcX5boru9e5C95LvMOEkFnfrU1DcrN41vP3WKj6qjgamnxclMjlth/u/HyHGDfMrlk9zS6UzWVcb20mQmlGQi8nBqe0vhGdtbCqd4lBnbS2fgNM+JwjWZVQkvggOeHPy9LJzmK0leALiOwHElWgw/kIdXF8AvzcMr0InxVBXAj+bhNcvgKYcngMhun55Oauiek6RPmel6TIq5AvMybD7PMX8f3n/HddfdIf62vnfq4Ych4+l/Nr+ymdkgfg330/wmH9nr0BN7YUbTP1tH8tlAOLEo18kW7Q0uWkuCQpUnt5ZUnTG3OEOKmYBsjLXbaRpUQ1tIf+I1pa32sTsWZU6R03s2V6qSzI6cZB8tyZeiOhhubX2NZE299iLJmuo97zyc2ozVC6lTj5zy/XQ6h40pQY9QXdNcKjo3pswcS9AiOMwxrpYAHFoXwy/N96+QoEI8uKqgP81aovitGfwF8AN5eHUB/NI8vGIpngIbojlBpD8up7brzMJppgLlp5LCXQVwKtdSOKXrytMtxFO10B8sUZt+FuLOO0iFzDQTIn8+STKLziYkhMtJaMhl5zkkSuxZIfArW/Vakg0xFqPVefFDRvKiIdwlfLJLILVK64rAdt/8KMmKyFbveQp7ZaYafIph2zrxObAl+CF+yVDIe4G/1MGjjeZbgeWYMxF6wWNsstw+CtfvvfDCvdiZcZvy3q6u3kfuvutR6jib8dtTG87cMIWyWUQOwFeN1NnM5MwHbzDAhTg7smcPPxTRzm7Zs50cs7Yzh+aNsZHg1NmXvev22/wkztEcHTqXgQKboPBFcxMogF+a719RAKdzU9CfZsBQ/OE8fppXnY7RrFYtQqqCdNYIl93sqtj++Um5VQcprcVS1uCs1zTIilXPMy+LL5+Xy2ydIF+8FfXnnQkYP4978Ys02wJO6Xwkm5Ly2NQay9kbVuPerh84U03iG13Q82bo+RRzhNDG5oKMlHzQqcE8fkp86yzOYFBodSXD1T2ptp46g0PZ9TjuHV6rtakZVZ1eYXDEUkG1kzNW+QDvFbgdPwF4vYWZKBTpwoePE6Sh6IxaDaQ81cTULeG2Ia/J5lvZafRzmvL2SrtJZ+AMVsalrC2SsSo2rDdHvZyruKjEYws1Vco1NbzKoFZIVPIe8ITP4Rn8GHBA7uYchbdzJ88I6uno6CHFVF9vIkVWWSmDgmcmVoxNTIytmEi47O12F32sqi4vK6+mDzKTX8az+MGs3vNq5w6Pj+q3rR58B9/9ijMaFf+Syva8H7jTQ8/CPKAFrbPm++dM6nqFWl/aXqIweQ2J1hqtTZm4M43wQyvqrSqJTK5VamQmdU0corzJWONJES6+AJI/CLhdVOqMfrPq5ZefC9wgpGrjFZw+bNEZTHptvVLlqA4qY/5El1NvcfXhGZfGodA0SBVsnK0trVawCo/WGHSaHMVFxXbOG0UMUJ7FB3JZPpiLCJlbLq4Zc1LcfOtFm7zegeL1+J7OF78bazn/sssIt3fiGTrGlOd2MZMCvSrMsYpd0eaaxgqrRqfVqRT64s6qn99ZVlzB2XwtPcCf1sFqDMpiUElp6ZGWObUxwofp/y311SwNFnGUSjaNB0MaDz6RSWBvS5fS6lOf3rmqvKS0we5p6kto6+vhpluDZ3oTXCriqvEN+bHMGguE2+JaZblKq1WVK7Ugz/10ZmnGDs4m7HB4/Vw7RmesZj7RNt8uvg3W+RXg6GHmCLXNCOVp4ZNbwbQUMqYqZNOT6nYZtdaWRKLFqjW6ulNqjUZNCrlUgoJnBJfFXlpUajc4eN5hoFWLS3hRWVcqUyplpXXKq1R1pXKVSl5ap0LZGXwI+KKakiex4FjYRGfuWAoZemZBQ6mMzkpBSYQ6nl3QUFZl91MdUW0h4qHpD/BjeFXOQ4s/roeW/BMHBa8DTT+Ih4l/Ckv9M5Vzz2zP+/Eq4p8p/O/7Z9dy7gneCVI/iFfRb/7/d95Z8s+ck8wtyHQAD2e807acd7bknRN8E3glI0zA68fxzZJlXBM8M0uB2lvxx/LMkpM6JvFMOqfDJ/RMLMt7JnD0MF6V88zi/x/PLPm3HDMzdw8BV1RP/Mfxy5N65aJv5Q707fQsQshOv5lL0Q/RDYi2pz84YfuPCtqPQPt3Tty+DP4fF7ST8a8Wtv8T+j9Znv4y7a8u307xv1bY/k/o/3RJ++uF7f9E/p/9E/w//yf8/3x5+su0v1nY/k/4+wVpRxh1Q7uMeY6u8FI/OKqMkwmOGuwQGFl3h6OoZEdJkaOj+y388+4OH14l9uEDq7APAGQs7IxldKeOUtgIRgy7XKkqhVXS7sVDv09H4gNiX37kOcxq/Evm5/Q76/Lf9c5TW+uUVplMU+uTReyLfzCrq0vLKyurmjRcvkKkuZE5FT/DvEgz6cys+UbsEt9kXjwFPG4Xswb/BChChiC0nSQj8OtOk8kJ5a7sm1ljUSvVluMeQOsPTAoflBgJLZLEhhsHN8wxKdvhKNmxQ9tcpk0Op7TPz20YZH4bPWwjPJ7NtOCjkkoyM6ApcqDDWz7Vdv75yU9JKm8NnnVW8FYa3RkPPiCJL/vtGDjOxAbs0fM2lrXx+txbo41otIxHYQ0a9CGrIvdu16lNYVKAh6NMF94nYSnvvJTDwgh7hYT9FjlBMCz2ZHMROYH/8+qSyxlogJZn0z58ELSnW/J/ZAi8dOFSAzfCTbenLHs7wSbriirUFXpYMb2vLrqA2LIyfy0BVpruY1ajx2B2pOhd8Q2wSwKbY05FNzAvAuwfedgwswY9Qvu9l4c9w6TQZRIjwN7Pw84FWCuFfZCBIZy+lomgMyQy8gVWkon8xMq5nXtDkOKkbfNdIJE5tdqkwWzaAL0PpJOoL/08uSViC+zDaTY7ofy3uV5Zb6YPJEn3Mz3oa5L7c19q5WAPkpPYWEXX5MzfKSKT6T4oBCHzbe4wL75iVqvU5uMeaCkFiaCqwSehsH9msmvjcRQku/nD3P4TEcjj35jHD96jOgn+64lnuY4nsHH94RPzDx4vQfiXkkv/Y4+XoBN5PPi1BOOfAN5/268leFm//i349QuFfv3brF9D2xxty/u15Nq8X/8O/PrAifz6wGK/fhP8+uh/7tdvLu/XxMZ/CjZ++CQ2fjhv42TO/4a+VjT+caxWsuufWC2l8HGstsh2Uqsl+Ms/ltUWlS9jtf8Lp83mLgAAAQAAAAIAxNmbIqFfDzz1AAkD6AAAAADdPAP/AAAAAN+RHLn+2/6iAoAEdwAAAAkAAgAAAAAAAHjaY2BkYGBh/PeWgYEp4t/tf7eZGoAiKIBRAgCfagaaeNqt0gFEA2EYxvFTrMhGA9JWs1paLLdl3ZCxZmt1upaJGMkEFKCFCAGESMgIbVQhgRQCSYhBBAAIEIgA1J+emMsIHT/P977f+37gOpaNEFKIIYeszhYySMJGBWXMo4CI+qb2YqonEUUeI/AhjKD2vCgigVmUJIosHMR1twZT/WEUW3IIfUijF3740A1Tc6MYxyACmFBtYQxR7cZwIFMwlE2Eldfyjj1c4glxOLrLqH+ns4VncTCNWyziAStYFUc80oUPySMAA1X4sIsd1S9YRxg9CCGKdAsbaVmSJo7Vs5BFEiYi6EKqDY/mTVgulVZShg3TZUDpRQE55F2C4m2jEwn4pOTiiOh/EulX+lFE2qUbNuqoYR8nOJWGXOAcVzhT769znn8wI1UcYRtvqGMTDbyihkfD+JzDBhZwjy0c4gb2D7336y3Nts4Z4PvOLzocwbcAAHjaBMEDFKVAAADAXD9r27jt2bZt27Zt27Zt2zYezrZtc4YgCJuoRIwi9hOvyGRkXbIf+YbSqVxUQ6o3NZ46Qj2iAV2OHkavoB8zFJOCycvUYfows5gNzCnmH5uVrcK2YvuxO9jz7AOO5hCXgavANeemcdu5l7zOV+Ab8aP4Bfwh/j7/TVCF8kJTYapwT/iVyJvol5iYeCymFIeK18RH4ivxm0RLmpRKaiJ1kPpKI6Vp0iJpg7RPOiVdku5Lr6W/siYHciq5tNxGXiU/VgQlg1JQqawsVF4rv1RRRWpKdYA6Vl2oWVoWbZr2Qtf0snpXfam+Wd+vX9f/GpZR0KhqNDR6G1ONo8YV47nx27TN7GZxc6x5zPxh5bSGWkutjdZe66R10bprvbRL2/Psl/ZXQAEV+CAjyAtKgqqgIegGBoFxYBZYBjaB7w7j1HJGOQecM84V54HzxvkBWWjACKaBOWARWAF2gqfhO/jNpV3NDdxUbja3kFvOreU2czu5/dxR7jT3hvvEU7wsXgGvjFfDa+J18GZ667xrvutX9Vv5M/yL/usABdWDVsG24EWYNMwVNg+XhHvDV1GSKHs0KNoeHY8uR4+jz4hBNkqOsqPiqDpqjrqj4Wg6Wo62o+PoIfoXp4tzx03iTvGAeHJ8KD4f38A8NnCAU+BMOA+ujFvh2fg0/r8fiiqKvorRipmKNYqrFQ8pflZSVgqGQQD6/JxnAAB42mNgZGBglGD8waDFkMnABuQhA2YGRgAoJQGyeNqNjzVyQ0EQRJ+ZHTr+mZnZTszMDGJmxjvpBDqQzqGuLXGkpXldOwiME2CIgeEJ4I9agwdYodrgQWapNHiIIzINHu7wGWEOW4NHWWCnwbMiCJHTTil2XTuLlwxh6Zx4jaw4JpskQ1D/z1zxwC1nPPJCDD8lUZKE7irv0nFFnEnF8PElnTE55IHFFmtsN97jRhZL1G++N+kgebGbTCu+ESdqRIp6I89lU5TNbEEzs7phg032RY1MxisjvzXxKTFtqyMia5Rf1i9b0OtjrQ4wZT1wAAB42lzBA3AQUAAA0PfXnL1s2+Zlu2Xbti7bdci2bds8G7nhrO2MvScCSNsiEUEGIQGtQoTW2mirnfY66KiTzrroqpvueuipl9766CtRP/0NMNAgpZVRVjnlVVBRJZVVUVU11dVQUy211VFXPfU10FAjjTWRWx555ZNfggIKKqSwOKXkCJlccllLOZ1WRHZFxYtyzXVXXPXEU/fcd9Iph0U6pKTMsmiqucGGyqWZOyFSrCF+WGWN9dbZYK99loeoEC2raC0Mk81/2yW5obhiSnhstSPuWhFirBRjl3EmmGi8ySY5YIpfpppuhmm+m2m2OWaFWHPNs8BC8x20yEVr/bPYUsss8cctLz033FkjnLPFyBDnp1FeeOW1N956573RPvhojM+2Ou+Cv774aqxvftstWYrUEJ9OEFwcKQAAAQDbzD3P3d0Nd7f2oD2cJpA3iV179h04dOTYiVNnzl24dOXajVt37mPlwWOsY+PJsxev3rz78OnLtx+//vzHOCYxiH50YxRzCclYSEnLyMrJKygqKauoqqlraGpp6+jGjl6wrZIscBuKgSBaZu49IkNDwuBBrJ8PIVsylC5fGE9I9N6uYdaSp5emZVZRyMtk50IMJ/9USrZBoRWpz6bJO2xSunsxKbwz8fq79K5l09pfOVtmiR+5cxMbX+bedeWSp83fuS/MP/O+UL6XNms5r5uYN9o5L8wZM+vWyID8ZUByBhQZMGTA/jMgzIAiA4oMGN4o25p8I9tkh+ySPbJPDklBjsgxOSGnpMzsb4hcoUYjcgxqock3skdKUpD9TKXvZ/PSl2EeTJFiua1qb97Lh021NoV39ibOV7OyVZiw24fqBmez4iD0sZj7Iq2rVfmJ+trPbQ274wwoXg4GOGztLns9HAU9fj+RKSa/6PRClgA=) format("woff")}:root{--orange: #ff5b22;--orange-hot: #ff7a3c;--cyan: #8be7ff;--ice: #7fdcff;--ink: #ebe7df;--muted: rgba(235, 231, 223, .54);--dim: rgba(235, 231, 223, .32);--line: rgba(235, 231, 223, .17);--panel: rgba(7, 10, 15, .58);--bg: #04060a;--time-color: #7fdcff;--sans: "Barlow Condensed", "Arial Narrow", "Helvetica Neue", sans-serif;--mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;user-select:none;-webkit-user-select:none;overscroll-behavior:none}button{font-family:inherit;color:inherit}#game{position:fixed;inset:0;width:100%;height:100%;display:block;outline:none;background:#04060a;cursor:default}body.locked #game{cursor:none}.hidden{display:none!important}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:21px;padding:0 5px;border:1px solid rgba(235,231,223,.24);border-bottom-color:#ebe7df1c;border-radius:2px;background:#ebe7df0b;color:#ebe7dfb8;font-family:var(--mono);font-size:9px;font-weight:500;line-height:1;letter-spacing:.02em}#damageFlash{position:fixed;inset:0;z-index:8;pointer-events:none;opacity:0;background:radial-gradient(ellipse at center,transparent 24%,rgba(130,6,0,.22) 58%,rgba(144,10,0,.74) 100%);mix-blend-mode:normal;transition:opacity 90ms linear}#hud{position:fixed;inset:0;z-index:10;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .5s ease,visibility 0s linear .5s}#hud.on{opacity:1;visibility:visible;transition:opacity .5s ease,visibility 0s linear}.hud-frame{position:absolute;inset:18px;pointer-events:none;opacity:.55}.corner{position:absolute;width:24px;height:24px;border-color:#ebe7df42;border-style:solid}.corner.tl{top:0;left:0;border-width:1px 0 0 1px}.corner.tr{top:0;right:0;border-width:1px 1px 0 0}.corner.bl{bottom:0;left:0;border-width:0 0 1px 1px}.corner.br{bottom:0;right:0;border-width:0 1px 1px 0}.hud-top{position:absolute;top:30px;left:34px;right:34px;display:flex;align-items:flex-start;justify-content:space-between;gap:30px}.brand-mini{display:flex;align-items:center;gap:11px;font-size:15px;font-weight:700;letter-spacing:.22em;color:#ebe7dfe6;text-transform:uppercase;line-height:1}.brand-mini small{margin-left:8px;padding-left:18px;border-left:1px solid var(--line);color:var(--muted);font-family:var(--mono);font-size:8px;font-weight:400;letter-spacing:.14em}.brand-slash{width:3px;height:19px;background:var(--orange);box-shadow:0 0 12px #ff5b22b3}.mission{display:flex;align-items:center;gap:8px;margin-top:3px;color:#ebe7df7a;font-family:var(--mono);font-size:8px;letter-spacing:.18em;text-transform:uppercase;white-space:nowrap}.mission-dot{width:4px;height:4px;border-radius:50%;background:var(--orange);box-shadow:0 0 8px var(--orange)}.hostiles{display:flex;flex-direction:column;align-items:flex-end;gap:0;min-width:128px}.hostile-number{display:flex;align-items:baseline;font-family:var(--sans);font-weight:700;font-size:37px;line-height:.9;letter-spacing:.015em;color:var(--ink);font-variant-numeric:tabular-nums}#enemiesLeft{color:var(--orange);text-shadow:0 0 20px rgba(255,91,34,.28)}.hostile-slash{margin:0 4px;color:#ebe7df42;font-size:21px;font-weight:400}#enemiesTotal{color:#ebe7df61;font-size:21px}.hostile-label{margin-top:5px;font-family:var(--mono);font-size:7.5px;letter-spacing:.32em;color:#ebe7df6b}.demo-toggle{display:flex;align-items:center;gap:7px;margin-top:12px;padding:6px 9px;border:1px solid rgba(235,231,223,.16);border-radius:2px;background:#05070b70;color:#ebe7df7a;font-family:var(--mono);font-size:7.5px;letter-spacing:.1em;cursor:pointer;pointer-events:auto;transition:border-color .16s,color .16s,background .16s;backdrop-filter:blur(6px)}.demo-toggle:hover{border-color:#ff5b2273;color:var(--ink);background:#ff5b2214}.demo-toggle kbd{height:16px;min-width:16px;font-size:7px;margin-left:2px;padding:0 3px}.demo-led{width:5px;height:5px;border-radius:50%;background:#ebe7df40;transition:background .16s,box-shadow .16s}.demo-toggle.active{border-color:#ff5b2266;color:var(--orange)}.demo-toggle.active .demo-led{background:var(--orange);box-shadow:0 0 8px var(--orange);animation:pulse 1.4s ease-in-out infinite}.crosshair{--spread: 6px;position:absolute;left:50%;top:50%;width:0;height:0;transition:filter .12s}.ch{position:absolute;display:block;background:#fff1deeb;box-shadow:0 0 2px #000,0 0 5px #000000f2}.ch-t,.ch-b{width:1px;height:7px;left:-.5px}.ch-l,.ch-r{width:7px;height:1px;top:-.5px}.ch-t{top:calc(-1 * var(--spread) - 7px)}.ch-b{top:var(--spread)}.ch-l{left:calc(-1 * var(--spread) - 7px)}.ch-r{left:var(--spread)}.ch-dot{width:3px;height:3px;left:-1.5px;top:-1.5px;border-radius:50%;background:var(--orange);box-shadow:0 0 2px #000,0 0 8px #ff5b22e6}.hitmarker{position:absolute;left:50%;top:50%;width:30px;height:30px;margin:-15px 0 0 -15px;opacity:0;pointer-events:none}.hitmarker span{position:absolute;width:8px;height:1.5px;background:#fff8eb;box-shadow:0 0 5px #ffb464e6}.hitmarker span:nth-child(1){left:4px;top:4px;transform:rotate(45deg)}.hitmarker span:nth-child(2){right:4px;top:4px;transform:rotate(-45deg)}.hitmarker span:nth-child(3){left:3px;bottom:4px;transform:rotate(-45deg)}.hitmarker span:nth-child(4){right:3px;bottom:4px;transform:rotate(45deg)}.hitmarker.active{animation:hitmarker .18s ease-out forwards}.hitmarker.kill span{background:var(--orange);box-shadow:0 0 8px #ff5b22}@keyframes hitmarker{0%{opacity:1;transform:scale(.62)}35%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.22)}}.damage-arc{position:absolute;left:50%;top:50%;width:0;height:0;opacity:0;transition:opacity .22s ease-out;transform:rotate(0)}.damage-arc span{position:absolute;left:-18px;top:-116px;width:36px;height:58px;background:linear-gradient(to bottom,#ff2f0c00,#ff3a12b8);clip-path:polygon(50% 0,100% 100%,50% 84%,0 100%);filter:drop-shadow(0 0 10px rgba(255,40,0,.8))}.damage-arc.show{opacity:1}.hud-bottom{position:absolute;left:34px;right:30px;bottom:25px;display:flex;align-items:flex-end;justify-content:space-between}.status-block{min-width:170px}.status-label{margin-bottom:8px;font-family:var(--mono);font-size:7px;letter-spacing:.3em;color:#ebe7df6b}.hearts{display:flex;gap:5px;height:24px}.heart{width:24px;height:24px;overflow:visible;transition:opacity .18s,transform .18s}.heart path{fill:var(--orange);stroke:#ff96698c;stroke-width:.7;filter:drop-shadow(0 0 5px rgba(255,68,20,.5));transition:fill .22s,stroke .22s}.heart.lost path{fill:#ebe7df0d;stroke:#ebe7df38;filter:none}.heart.lost{opacity:.55;transform:scale(.92)}.heart.hit{animation:heart-hit .3s ease-out}@keyframes heart-hit{0%{transform:scale(1.35);filter:brightness(2.2)}to{transform:scale(1);filter:brightness(1)}}.status-sub{margin-top:7px;font-family:var(--mono);font-size:7.5px;letter-spacing:.17em;color:#ebe7df5c}.status-divider{color:#ebe7df33;margin:0 3px}.time-block{position:relative;width:122px;height:122px;flex:0 0 122px}.time-block:before{content:"";position:absolute;inset:5px;border-radius:50%;background:radial-gradient(circle at 50% 48%,rgba(5,8,12,.52),rgba(5,8,12,.22) 54%,transparent 72%);backdrop-filter:blur(1.5px);pointer-events:none}.time-svg,.time-readout,.time-meta{position:absolute;z-index:1}.time-svg{inset:0;width:122px;height:122px;overflow:visible}.time-track{fill:#05080c47;stroke:#ebe7df1f;stroke-width:1}.time-arc{fill:none;stroke:var(--time-color);stroke-width:2;stroke-linecap:round;transform:rotate(-90deg);transform-origin:60px 60px;filter:drop-shadow(0 0 5px var(--time-color));transition:stroke .18s}.time-ticks line{stroke:#ebe7df52;stroke-width:1}.time-ticks line.major{stroke:#ebe7df99;stroke-width:1.2}.time-needle line{stroke:var(--time-color);stroke-width:1.6;stroke-linecap:round;filter:drop-shadow(0 0 5px var(--time-color))}.time-needle circle{fill:var(--time-color);filter:drop-shadow(0 0 5px var(--time-color))}.time-readout{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);display:flex;align-items:flex-start;font-family:var(--sans);font-weight:600;font-size:28px;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.03em}.time-unit{margin:3px 0 0 2px;font-family:var(--mono);font-size:8px;font-weight:400;color:var(--muted)}.time-meta{position:absolute;left:50%;bottom:17px;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;white-space:nowrap}.time-label{font-family:var(--mono);font-size:6.5px;letter-spacing:.28em;color:#ebe7df61}#timeState{font-family:var(--mono);font-size:6.5px;letter-spacing:.14em;color:var(--time-color);text-shadow:0 0 7px color-mix(in srgb,var(--time-color) 55%,transparent)}.controls-hint{position:absolute;left:50%;bottom:31px;transform:translate(-50%);display:flex;align-items:center;gap:10px;padding:7px 12px;border:1px solid rgba(235,231,223,.09);border-radius:2px;background:#05080c57;color:#ebe7df59;font-family:var(--mono);font-size:6.5px;letter-spacing:.12em;white-space:nowrap;backdrop-filter:blur(5px);animation:hint-fade 13s ease forwards}.controls-hint span{display:flex;align-items:center;gap:4px}.controls-hint kbd{height:16px;min-width:17px;font-size:6.5px;padding:0 3px}.hint-divider{width:1px;height:10px;background:#ebe7df21}@keyframes hint-fade{0%,65%{opacity:1}to{opacity:.32}}.demo-indicator{position:absolute;left:50%;bottom:27px;transform:translate(-50%);display:none;align-items:center;gap:7px;color:#ff8556e6;font-family:var(--mono);font-size:7px;letter-spacing:.18em}.demo-indicator.on{display:flex}.demo-hint{color:#ebe7df57;margin-left:8px}.rec-dot{width:5px;height:5px;border-radius:50%;background:var(--orange);box-shadow:0 0 7px var(--orange);animation:pulse 1.3s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.42;transform:scale(.8)}}.screen{position:fixed;inset:0;z-index:30}.intro-screen{display:flex;align-items:center;padding:5.2vh 6.5vw;background:linear-gradient(90deg,#020408f5,#020408db 32%,#02040875 62%,#0204080a),linear-gradient(0deg,#020408e0,#02040800 44%),radial-gradient(ellipse at 73% 38%,rgba(255,91,34,.08),transparent 45%)}.intro-screen:before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(4,6,10,.52) 0%,transparent 14%,transparent 82%,rgba(4,6,10,.65) 100%)}.intro-screen:after{content:"";position:absolute;left:6.5vw;top:18%;bottom:18%;width:1px;background:linear-gradient(to bottom,transparent,rgba(255,91,34,.52) 18%,rgba(255,91,34,.16) 72%,transparent);pointer-events:none}.intro-meta{position:absolute;top:34px;right:38px;display:flex;flex-direction:column;align-items:flex-end;gap:6px;font-family:var(--mono);font-size:7px;letter-spacing:.18em;color:#ebe7df57;text-align:right}.intro-meta span:nth-child(2){color:#ff7a3cad}.intro-content{position:relative;width:min(640px,65vw);margin-left:1.3vw;padding-bottom:16px;animation:intro-rise .9s cubic-bezier(.16,1,.3,1) both}@keyframes intro-rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}.kicker{display:flex;align-items:center;gap:10px;margin-bottom:17px;color:var(--orange);font-family:var(--mono);font-size:8px;font-weight:500;letter-spacing:.3em;text-transform:uppercase}.kicker span{width:24px;height:1px;background:var(--orange);box-shadow:0 0 9px #ff5b22b3}.game-title{margin:0 0 9px;font-family:var(--sans);font-weight:900;font-stretch:condensed;font-size:clamp(96px,12.8vw,194px);line-height:.72;letter-spacing:-.035em;text-transform:uppercase;color:#ede9e1;transform:scaleX(.91);transform-origin:left center;text-shadow:0 0 1px rgba(255,255,255,.35),0 18px 60px rgba(0,0,0,.68)}.game-title span{display:block}.game-title span:first-child{position:relative}.game-title span:first-child:after{content:"";position:absolute;left:.025em;top:.23em;width:.11em;height:.022em;background:var(--orange);opacity:.72;box-shadow:0 0 18px #ff5b228c}.title-outline{color:transparent;background:linear-gradient(180deg,#ebe7df42,#ebe7df0a 68%,#ebe7df1a);-webkit-background-clip:text;background-clip:text;-webkit-text-stroke:1.3px rgba(235,231,223,.8);text-shadow:0 0 45px rgba(255,91,34,.12);margin-left:.04em;position:relative}.tagline{margin:19px 0 0;font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.39em;color:var(--orange);text-transform:uppercase}.lede{max-width:440px;margin:22px 0 0;color:#ebe7df87;font-family:var(--sans);font-size:16px;font-weight:500;line-height:1.55;letter-spacing:.015em}.lede strong{color:#ebe7dfdb;font-weight:600}.intro-actions{display:flex;align-items:center;gap:13px;margin-top:31px}.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:18px;height:48px;padding:0 23px;border:0;border-radius:1px;font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;cursor:pointer;transition:transform .18s ease,background .18s,border-color .18s,box-shadow .18s}.btn svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;transition:transform .18s ease}.btn:hover svg{transform:translate(4px)}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--orange);color:#0b0806;box-shadow:0 0 #ff5b2200}.btn-primary:hover{background:#ff723a;box-shadow:0 8px 38px #ff5b223d}.btn-ghost{height:48px;border:1px solid rgba(235,231,223,.22);background:#05080c40;color:#ebe7df99}.btn-ghost:hover{border-color:#ff5b2285;color:var(--ink);background:#ff5b220f}.intro-controls{display:flex;flex-wrap:wrap;gap:14px 30px;margin-top:34px;padding-top:18px;border-top:1px solid rgba(235,231,223,.1);width:min(100%,620px)}.control{display:flex;flex:0 0 auto;align-items:center;gap:5px;color:#ebe7df70;font-family:var(--mono);font-size:8px;letter-spacing:.1em;white-space:nowrap}.control kbd{height:22px;min-width:23px;font-size:9px}.control span{margin-left:6px}.intro-footer{position:absolute;left:7.8vw;right:38px;bottom:30px;display:flex;align-items:center;gap:15px;font-family:var(--mono);font-size:6.5px;letter-spacing:.2em;color:#ebe7df40}.intro-rule{width:90px;height:1px;background:#ebe7df26}.simple-screen,.end-screen{display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at center,#04060a94,#04060ae6 72%),linear-gradient(0deg,rgba(2,4,8,.8),transparent);backdrop-filter:blur(3px);animation:overlay-in .3s ease both}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.simple-card{width:min(470px,88vw);padding:40px 38px 38px;border:1px solid rgba(235,231,223,.14);background:#06090ddb;box-shadow:0 30px 90px #00000080}.simple-card h2{margin:0 0 14px;font-size:72px;font-weight:800;line-height:.8;letter-spacing:-.02em}.simple-card p{max-width:310px;margin:0 0 28px;font-family:var(--sans);font-size:15px;line-height:1.5;color:var(--muted)}.end-screen{background:radial-gradient(ellipse at center,#1e050229,#030508cc 55%,#020305f5)}.end-content{width:min(700px,90vw);text-align:center;animation:end-rise .65s cubic-bezier(.16,1,.3,1) both}@keyframes end-rise{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.end-kicker{margin-bottom:20px;font-family:var(--mono);font-size:8px;letter-spacing:.4em;color:#ff5b22c2}.end-kicker.warm{color:var(--orange)}.end-title{margin:0;font-family:var(--sans);font-weight:900;font-size:clamp(72px,12vw,150px);line-height:.78;letter-spacing:-.025em;color:#ebe7df;text-shadow:0 20px 65px rgba(0,0,0,.8)}.death-screen .end-title{color:#d8d3ca}.clear-title{color:var(--orange);text-shadow:0 0 45px rgba(255,91,34,.2),0 20px 65px rgba(0,0,0,.8)}.end-sub{margin:20px 0 0;font-family:var(--sans);font-size:17px;color:#ebe7df85;letter-spacing:.015em}.end-stats{display:flex;width:fit-content;gap:52px;margin:37px auto 31px;padding:17px 34px;border-top:1px solid rgba(235,231,223,.13);border-bottom:1px solid rgba(235,231,223,.13)}.end-stats div{display:flex;flex-direction:column;align-items:center;gap:5px}.end-stats span{font-family:var(--sans);font-size:27px;font-weight:600;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}.end-stats small{font-family:var(--mono);font-size:6.5px;letter-spacing:.2em;color:#ebe7df59}.end-content .btn{min-width:220px}.end-hint{margin-top:16px;font-family:var(--mono);font-size:7px;letter-spacing:.14em;color:#ebe7df47}.toast{position:fixed;top:108px;left:50%;z-index:20;transform:translate(-50%,-8px);padding:8px 14px;border:1px solid rgba(255,91,34,.28);border-radius:2px;background:#06090dc7;color:#ebe7dfc7;font-family:var(--mono);font-size:7.5px;letter-spacing:.16em;opacity:0;pointer-events:none;transition:opacity .22s ease,transform .22s ease;backdrop-filter:blur(8px)}.toast.show{opacity:1;transform:translate(-50%)}@media(max-height:700px)and (min-width:641px){.intro-screen{padding:4vh 6.5vw}.intro-footer{display:none}.intro-controls{margin-top:25px;padding-top:15px}.lede{margin-top:17px;font-size:15px;line-height:1.48}.intro-actions{margin-top:25px}.game-title{font-size:clamp(92px,12vw,160px)}}@media(max-width:980px){.intro-screen{padding:5vh 7vw}.intro-content{width:82vw}.intro-meta{display:none}.game-title{font-size:clamp(88px,17vw,156px)}.controls-hint,.mission,.brand-mini small{display:none}}@media(max-width:640px){.hud-top{top:21px;left:20px;right:20px}.hud-bottom{left:20px;right:16px;bottom:18px}.hud-frame{inset:10px}.hostile-number{font-size:29px}.time-block{width:95px;height:95px;flex-basis:95px;transform-origin:bottom right}.time-svg{width:95px;height:95px}.time-readout{font-size:22px}.time-meta{bottom:12px}.intro-screen{padding:7vh 8vw}.intro-content{width:100%}.lede{max-width:86vw;font-size:14px}.intro-controls{gap:14px;margin-top:25px}.control:nth-child(3),.control:nth-child(4){display:none}.intro-footer{left:8vw;right:20px;bottom:18px}.intro-rule,.intro-footer span:last-child{display:none}.intro-actions{flex-direction:column;align-items:stretch;width:min(310px,86vw)}.end-stats{gap:35px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}</style>
  </head>
  <body>
    <canvas id="game" aria-label="Dead Air game viewport"></canvas>

    <div id="damageFlash" aria-hidden="true"></div>

    <!-- ============================== HUD ============================== -->
    <div id="hud">
      <div class="hud-top">
        <div class="brand-mini">
          <span class="brand-slash"></span>
          <span>DEAD AIR</span>
          <small>SECTOR&nbsp;09 / ROOFTOP</small>
        </div>

        <div class="mission">
          <span class="mission-dot"></span>
          ELIMINATE ALL HOSTILES
        </div>

        <div class="hostiles">
          <div class="hostile-number"><span id="enemiesLeft">08</span><span class="hostile-slash">/</span><span id="enemiesTotal">08</span></div>
          <div class="hostile-label">HOSTILES</div>
          <button id="demoToggle" class="demo-toggle" type="button" aria-pressed="false">
            <span class="demo-led"></span>
            <span id="demoLabel">DEMO MODE</span>
            <kbd>B</kbd>
          </button>
        </div>
      </div>

      <div id="crosshair" class="crosshair">
        <span class="ch ch-t"></span>
        <span class="ch ch-b"></span>
        <span class="ch ch-l"></span>
        <span class="ch ch-r"></span>
        <span class="ch ch-dot"></span>
      </div>

      <div id="hitmarker" class="hitmarker">
        <span></span><span></span><span></span><span></span>
      </div>

      <div id="damageArc" class="damage-arc"><span></span></div>

      <div class="hud-bottom">
        <div class="status-block">
          <div class="status-label">VITALS</div>
          <div id="hearts" class="hearts">
            <svg viewBox="0 0 32 32" class="heart full" aria-label="health">
              <path d="M16 27.5 5.1 17.1C1.7 13.8 2.3 8.3 6.3 5.9c3.2-2 7-.8 9 2.2l.7 1 .7-1c2-3 5.8-4.2 9-2.2 4 2.4 4.6 7.9 1.2 11.2L16 27.5Z"/>
            </svg>
            <svg viewBox="0 0 32 32" class="heart full" aria-label="health">
              <path d="M16 27.5 5.1 17.1C1.7 13.8 2.3 8.3 6.3 5.9c3.2-2 7-.8 9 2.2l.7 1 .7-1c2-3 5.8-4.2 9-2.2 4 2.4 4.6 7.9 1.2 11.2L16 27.5Z"/>
            </svg>
            <svg viewBox="0 0 32 32" class="heart full" aria-label="health">
              <path d="M16 27.5 5.1 17.1C1.7 13.8 2.3 8.3 6.3 5.9c3.2-2 7-.8 9 2.2l.7 1 .7-1c2-3 5.8-4.2 9-2.2 4 2.4 4.6 7.9 1.2 11.2L16 27.5Z"/>
            </svg>
          </div>
          <div class="status-sub"><span id="heartCount">3</span> / 3 <span class="status-divider">·</span> CORE</div>
        </div>

        <div id="demoIndicator" class="demo-indicator">
          <span class="rec-dot"></span> AUTOPILOT <span class="demo-hint">PRESS B TO TAKE CONTROL</span>
        </div>

        <div class="time-block" id="timeDial">
          <div class="time-readout">
            <span id="timeValue">5</span><span class="time-unit">%</span>
          </div>
          <svg class="time-svg" viewBox="0 0 120 120" aria-hidden="true">
            <circle class="time-track" cx="60" cy="60" r="47"></circle>
            <circle id="timeArc" class="time-arc" cx="60" cy="60" r="47"></circle>
            <g id="timeTicks" class="time-ticks"></g>
            <g id="timeNeedle" class="time-needle">
              <line x1="60" y1="60" x2="60" y2="19"></line>
              <circle cx="60" cy="60" r="3.5"></circle>
            </g>
          </svg>
          <div class="time-meta">
            <span class="time-label">TIME</span>
            <span id="timeState">FROZEN</span>
          </div>
        </div>
      </div>

      <div id="controlsHint" class="controls-hint">
        <span><kbd>W</kbd><kbd>A</kbd><kbd>S</kbd><kbd>D</kbd> MOVE</span>
        <span class="hint-divider"></span>
        <span><kbd>MOUSE</kbd> AIM</span>
        <span class="hint-divider"></span>
        <span><kbd>LMB</kbd> FIRE</span>
        <span class="hint-divider"></span>
        <span>STAND STILL TO FREEZE TIME</span>
      </div>

      <div class="hud-frame" aria-hidden="true">
        <i class="corner tl"></i><i class="corner tr"></i>
        <i class="corner bl"></i><i class="corner br"></i>
      </div>
    </div>

    <div id="toast" class="toast" role="status" aria-live="polite"></div>

    <!-- ============================== INTRO ============================== -->
    <section id="intro" class="screen intro-screen">
      <div class="intro-meta">
        <span>LAT 35.659 / LON 139.700</span>
        <span>23:41:07 LOCAL</span>
        <span>WEATHER / ACID RAIN</span>
      </div>

      <div class="intro-content">
        <div class="kicker"><span></span>A TIME-DILATION FPS</div>
        <h1 class="game-title">
          <span>DEAD</span>
          <span class="title-outline">AIR</span>
        </h1>
        <p class="tagline">TIME MOVES WHEN YOU DO</p>
        <p class="lede">
          The rooftop is crawling with hostiles. Every bullet, every breath, every
          ember runs on your clock. <strong>Stand still and study the crossfire.</strong>
          Move, and the world catches up.
        </p>

        <div class="intro-actions">
          <button id="startBtn" class="btn btn-primary" type="button">
            <span>ENTER THE ROOFTOP</span>
            <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12h13M13 6l6 6-6 6"/></svg>
          </button>
          <button id="watchDemo" class="btn btn-ghost" type="button">WATCH DEMO</button>
        </div>

        <div class="intro-controls">
          <div class="control"><kbd>W</kbd><kbd>A</kbd><kbd>S</kbd><kbd>D</kbd><span>MOVE / STRAFE</span></div>
          <div class="control"><kbd>MOUSE</kbd><span>LOOK / AIM</span></div>
          <div class="control"><kbd>LMB</kbd><span>FIRE</span></div>
          <div class="control"><kbd>B</kbd><span>DEMO BOT</span></div>
        </div>
      </div>

      <div class="intro-footer">
        <span>HEADPHONES RECOMMENDED</span>
        <span class="intro-rule"></span>
        <span>AUTO-SAVE / NONE</span>
      </div>
    </section>

    <!-- ============================== PAUSE ============================== -->
    <section id="pause" class="screen simple-screen hidden">
      <div class="simple-card">
        <div class="kicker"><span></span>SIGNAL INTERRUPTED</div>
        <h2>HELD.</h2>
        <p>Mouse captured by the rooftop. Re-enter to keep time moving.</p>
        <button id="resumeBtn" class="btn btn-primary" type="button">
          <span>RESUME</span>
          <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12h13M13 6l6 6-6 6"/></svg>
        </button>
      </div>
    </section>

    <!-- ============================== DEATH ============================== -->
    <section id="death" class="screen end-screen death-screen hidden">
      <div class="end-content">
        <div class="end-kicker">SIGNAL LOST</div>
        <h2 class="end-title">YOU DIED</h2>
        <p class="end-sub">The rooftop keeps its time. Try again.</p>
        <div class="end-stats">
          <div><span id="deathKills">0</span><small>HOSTILES DOWN</small></div>
          <div><span id="deathTime">00:00</span><small>SURVIVED</small></div>
        </div>
        <button id="restartBtn" class="btn btn-primary" type="button">
          <span>CLICK TO RESTART</span>
          <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12h13M13 6l6 6-6 6"/></svg>
        </button>
        <div class="end-hint">OR PRESS <kbd>R</kbd></div>
      </div>
    </section>

    <!-- ============================== CLEAR ============================== -->
    <section id="clear" class="screen end-screen clear-screen hidden">
      <div class="end-content">
        <div class="end-kicker warm">ROOFTOP SECURED</div>
        <h2 class="end-title clear-title">LEVEL CLEAR</h2>
        <p class="end-sub">The crossfire goes quiet. For now.</p>
        <div class="end-stats">
          <div><span id="clearKills">8</span><small>HOSTILES DOWN</small></div>
          <div><span id="clearTime">00:00</span><small>CLEAR TIME</small></div>
        </div>
        <button id="againBtn" class="btn btn-primary" type="button">
          <span>RUN IT AGAIN</span>
          <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12h13M13 6l6 6-6 6"/></svg>
        </button>
        <div class="end-hint">OR PRESS <kbd>R</kbd></div>
      </div>
    </section>

  </body>
</html>

Same prompt, other models

3 more
Compare side by side

One email when a new model lands on the board or in the showcase. Unsubscribe anytime.