@rings-webgpu/core 1.0.8 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rings.es.js +22 -22
- package/dist/rings.es.js.map +2 -2
- package/dist/rings.es.max.js +2 -2
- package/dist/rings.umd.js +18 -18
- package/dist/rings.umd.js.map +2 -2
- package/dist/rings.umd.max.js +2 -2
- package/package.json +1 -1
package/dist/rings.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
class P{static COLOR_RED=new P(1,0,0,1);static COLOR_GREEN=new P(0,1,0,1);static COLOR_BLUE=new P(0,0,1,1);static COLOR_WHITE=new P(1,1,1,1);static COLOR_0=new P;static COLOR_1=new P;static COLOR_2=new P;static HEX_CHARACTERS="a-f\\d";static MATCH_3OR4_HEX=`#?[${P.HEX_CHARACTERS}]{3}[${P.HEX_CHARACTERS}]?`;static MATCH_6OR8_HEX=`#?[${P.HEX_CHARACTERS}]{6}([${P.HEX_CHARACTERS}]{2})?`;static NON_HEX_CHARS=new RegExp(`[^#${P.HEX_CHARACTERS}]`,"gi");static VALID_HEX_SIZE=new RegExp(`^${P.MATCH_3OR4_HEX}$|^${P.MATCH_6OR8_HEX}$`,"i");r=0;g=0;b=0;a=0;constructor(e=1,t=1,r=1,i=1){this.setTo(e,t,r,i)}convertToHDRRGB(){return this.r=this.r*Math.pow(2.4,this.a),this.g=this.g*Math.pow(2.4,this.a),this.b=this.b*Math.pow(2.4,this.a),this}unSerialized(e){return this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this}hexToRGB(e){return this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,this}hexToRGBA(e){return this.a=(e>>24&255)/255,this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,this}static random(e=1){let t=new P;return t.a=e,t.r=e*Math.random(),t.g=e*Math.random(),t.b=e*Math.random(),t}static randomRGB(e=.5,t=.5,r=.5,i=.5,a=.5,o=.5){let n=new P;return n.a=1,n.r=i+e*Math.random(),n.g=a+t*Math.random(),n.b=o+r*Math.random(),n}static randomGray(e=.5,t=.5){let r=Math.random()*t+e,i=new P;return i.a=1,i.r=r,i.g=r,i.b=r,i}setTo(e,t,r,i){this.r=Math.max(e,0),this.g=Math.max(t,0),this.b=Math.max(r,0),this.a=Math.max(i,0)}setHex(e){if(typeof e!="string"||P.NON_HEX_CHARS.test(e)||!P.VALID_HEX_SIZE.test(e))throw new TypeError("Expected a valid hex string");e=e.replace(/^#/,"");let t=1;e.length===8&&(t=Number.parseInt(e.slice(6,8),16)/255,e=e.slice(0,6)),e.length===4&&(t=Number.parseInt(e.slice(3,4).repeat(2),16)/255,e=e.slice(0,3)),e.length===3&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);const r=Number.parseInt(e,16),i=r>>16,a=r>>8&255,o=r&255,n=t;this.a=n,this.r=i/255,this.g=a/255,this.b=o/255}getHex(){let e=r=>{r*=255;let i=r.toString(16);return i.length===1&&(i="0"+i),i};return e(this.r)+e(this.g)+e(this.b)+e(this.a)}get rgb(){return[this.r*255>>>0,this.g*255>>>0,this.b*255>>>0]}set rgb(e){this.setTo(e[0]/255,e[1]/255,e[2]/255,this.a)}get rgba(){return[this.r*255>>>0,this.g*255>>>0,this.b*255>>>0,this.a*255>>>0]}set rgba(e){this.setTo(e[0]/255,e[1]/255,e[2]/255,e[3]/255)}clone(){return new P().copyFrom(this)}copyFrom(e){return this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this}copyFromArray(e,t=255){return this.r=e[0]/t,this.g=e[1]/t,this.b=e[2]/t,this.a=e[3]/t,this}copyFromVector(e){return this.r=e.x,this.g=e.y,this.b=e.z,this.a=e.w||1,this}static hexRGBColor(e,t=null){return t=t||new P,t.hexToRGB(e),t}static lerp(e,t,r,i){let a=i||new P;return a.r=(r.r-t.r)*e+t.r,a.g=(r.g-t.g)*e+t.g,a.b=(r.b-t.b)*e+t.b,a.a=(r.a-t.a)*e+t.a,a}static PRIMARY=4149685;static PRIMARYDARK=3162015;static ACCENT=16728193;static WHITE=16777215;static IVORY=16777200;static LIGHTYELLOW=16777184;static YELLOW=16776960;static SNOW=16775930;static FLORALWHITE=16775920;static LEMONCHIFFON=16775885;static CORNSILK=16775388;static SEASHELL=16774638;static LAVENDERBLUSH=16773365;static PAPAYAWHIP=16773077;static BLANCHEDALMOND=16772045;static MISTYROSE=16770273;static BISQUE=16770244;static MOCCASIN=16770229;static NAVAJOWHITE=16768685;static PEACHPUFF=16767673;static GOLD=16766720;static PINK=16761035;static LIGHTPINK=16758465;static ORANGE=16753920;static LIGHTSALMON=16752762;static DARKORANGE=16747520;static CORAL=16744272;static HOTPINK=16738740;static TOMATO=16737095;static ORANGERED=16729344;static DEEPPINK=16716947;static FUCHSIA=16711935;static MAGENTA=16711935;static RED=16711680;static OLDLACE=16643558;static LIGHTGOLDENRODYELLOW=16448210;static LINEN=16445670;static ANTIQUEWHITE=16444375;static SALMON=16416882;static GHOSTWHITE=16316671;static MINTCREAM=16121850;static WHITESMOKE=16119285;static BEIGE=16119260;static WHEAT=16113331;static SANDYBROWN=16032864;static AZURE=15794175;static HONEYDEW=15794160;static ALICEBLUE=15792383;static KHAKI=15787660;static LIGHTCORAL=15761536;static PALEGOLDENROD=15657130;static VIOLET=15631086;static DARKSALMON=15308410;static LAVENDER=15132410;static LIGHTCYAN=14745599;static BURLYWOOD=14596231;static PLUM=14524637;static GAINSBORO=14474460;static CRIMSON=14423100;static PALEVIOLETRED=14381203;static GOLDENROD=14329120;static ORCHID=14315734;static THISTLE=14204888;static LIGHTGREY=13882323;static TAN=13808780;static CHOCOLATE=13789470;static PERU=13468991;static INDIANRED=13458524;static MEDIUMVIOLETRED=13047173;static SILVER=12632256;static DARKKHAKI=12433259;static ROSYBROWN=12357519;static MEDIUMORCHID=12211667;static DARKGOLDENROD=12092939;static FIREBRICK=11674146;static POWDERBLUE=11591910;static LIGHTSTEELBLUE=11584734;static PALETURQUOISE=11529966;static GREENYELLOW=11403055;static LIGHTBLUE=11393254;static DARKGRAY=11119017;static BROWN=10824234;static SIENNA=10506797;static DARKORCHID=10040012;static PALEGREEN=10025880;static DARKVIOLET=9699539;static MEDIUMPURPLE=9662683;static LIGHTGREEN=9498256;static DARKSEAGREEN=9419919;static SADDLEBROWN=9127187;static DARKMAGENTA=9109643;static DARKRED=9109504;static BLUEVIOLET=9055202;static LIGHTSKYBLUE=8900346;static SKYBLUE=8900331;static GRAY=8421504;static OLIVE=8421376;static PURPLE=8388736;static MAROON=8388608;static AQUAMARINE=8388564;static CHARTREUSE=8388352;static LAWNGREEN=8190976;static MEDIUMSLATEBLUE=8087790;static LIGHTSLATEGRAY=7833753;static SLATEGRAY=7372944;static OLIVEDRAB=7048739;static SLATEBLUE=6970061;static DIMGRAY=6908265;static MEDIUMAQUAMARINE=6737322;static CORNFLOWERBLUE=6591981;static CADETBLUE=6266528;static DARKOLIVEGREEN=5597999;static INDIGO=4915330;static MEDIUMTURQUOISE=4772300;static DARKSLATEBLUE=4734347;static STEELBLUE=4620980;static ROYALBLUE=4286945;static TURQUOISE=4251856;static MEDIUMSEAGREEN=3978097;static LIMEGREEN=3329330;static DARKSLATEGRAY=3100495;static SEAGREEN=3050327;static FORESTGREEN=2263842;static LIGHTSEAGREEN=2142890;static DODGERBLUE=2003199;static MIDNIGHTBLUE=1644912;static AQUA=65535;static CYAN=65535;static SPRINGGREEN=65407;static LIME=65280;static MEDIUMSPRINGGREEN=64154;static DARKTURQUOISE=52945;static DEEPSKYBLUE=49151;static DARKCYAN=35723;static TEAL=32896;static GREEN=32768;static DARKGREEN=25600;static BLUE=255;static MEDIUMBLUE=205;static DARKBLUE=139;static NAVY=128;static BLACK=0}class be{static time=0;static frame=0;static delta=0;static _startTime=0;static _timeLabel="";static start(e){this._startTime=performance.now(),this._timeLabel=e}static end(){console.log(this._timeLabel,performance.now()-this._startTime)}}class qe{target;currentTarget;type;data;param;time=0;delay=0;mouseCode=0;ctrlKey;metaKey;altKey;shiftKey;targetTouches;changedTouches;touches;_stopImmediatePropagation=!1;view;constructor(e=null,t=null){this.type=e,this.data=t}stopImmediatePropagation(){this._stopImmediatePropagation=!0}reset(){this._stopImmediatePropagation=!1}get isStopImmediatePropagation(){return this._stopImmediatePropagation}}class as{constructor(e=null,t=null,r=null,i=null,a=0){this.type=e,this.thisObject=t,this.handler=r,this.param=i,this.priority=a}static event_id_count=0;id=0;current;equalCurrentListener(e,t,r,i){return this.type==e&&this.thisObject==r&&this.handler==t&&this.param==i}dispose(){this.handler=null,this.thisObject=null,this.param=null,this.priority=0}}class Er{listeners={};data;dispatchEvent(e){let t=this.listeners[e.type];if(t!=null){t=t.slice();for(let r=0;r<t.length;r++){let i=t[r];if(i.handler){try{e.param=i.param,e.currentTarget=i,i.thisObject,i.handler.call(i.thisObject,e)}catch{}if(e.isStopImmediatePropagation)break}}}}destroy(){for(let e in this.listeners){let t=this.listeners[e];for(;t.length>0;){let r=t[0];r.handler=null,r.thisObject=null,t.splice(0,1)}}}addEventListener(e,t,r,i=null,a=0){if(this.listeners[e]==null&&(this.listeners[e]=[]),!this.hasEventListener(e,t,r)){let o=new as(e,r,t,i,a);return o.id=++as.event_id_count,o.current=this,this.listeners[e].push(o),this.listeners[e].sort(function(n,l){return l.priority-n.priority}),o.id}for(let o=0;o<this.listeners[e].length;o++){let n=this.listeners[e][o];if(n.equalCurrentListener(e,t,r,i))return n.id}return 0}removeEventListener(e,t,r){if(this.hasEventListener(e,t,r))for(let i=0;i<this.listeners[e].length;i++){let a=this.listeners[e][i];if(a.equalCurrentListener(e,t,r,a.param)){a.handler=null,a.thisObject=null,this.listeners[e].splice(i,1);return}}}removeEventListenerAt(e){for(let t in this.listeners)for(let r=0;r<this.listeners[t].length;r++){let i=this.listeners[t][r];if(i.id==e)return i.handler=null,i.thisObject=null,this.listeners[t].splice(r,1),!0}return!1}removeAllEventListener(e=null){let t;if(e){if(this.listeners[e]){for(let r=0;r<this.listeners[e].length;r++)t=this.listeners[e][r],t.dispose(),this.listeners[e].splice(r,1);delete this.listeners[e]}}else for(let r in this.listeners){for(let i=0;i<this.listeners[r].length;i++)t=this.listeners[r][i],t.dispose(),this.listeners[r].splice(i,1);delete this.listeners[r]}}containEventListener(e){return this.listeners[e]==null?!1:this.listeners[e].length>0}hasEventListener(e,t=null,r=null){if(this.listeners[e]==null)return!1;if(r&&t)for(let i=0;i<this.listeners[e].length;i++){let a=this.listeners[e][i];if(a.equalCurrentListener(e,t,r,a.param))return!0}return!1}}class Sr extends qe{static KEY_DOWN="onKeyDown";static KEY_UP="onKeyUp";keyCode=0}class k extends qe{static PICK_OVER="onPickOver";static PICK_CLICK="onPickClick";static PICK_OUT="onPickOut";static PICK_MOVE="onPickMove";static PICK_UP="onPickUp";static PICK_DOWN="onPickDown";static POINTER_RIGHT_CLICK="onPointerRightClick";static POINTER_MID_UP="onPointerMidUp";static POINTER_MID_DOWN="onPointerMidDown";static POINTER_CLICK="onPointerClick";static POINTER_MOVE="onPointerMove";static POINTER_DOWN="onPointerDown";static POINTER_UP="onPointerUp";static POINTER_OUT="onPointerOut";static POINTER_OVER="onPointerOver";static POINTER_WHEEL="onPointerWheel";pointerId;pointerType="onPointer";isPrimary;pressure;mouseX;mouseY;movementX;movementY;deltaX;deltaY;deltaZ;reset(){super.reset(),this.mouseX=0,this.mouseY=0,this.movementX=0,this.movementY=0,this.deltaX=0,this.deltaY=0,this.deltaZ=0}}class lt extends qe{static PICK_OVER_GUI="onPickOverGUI";static PICK_CLICK_GUI="onPickClickGUI";static PICK_OUT_GUI="onPickOutGUI";static PICK_UP_GUI="onPickUpGUI";static PICK_DOWN_GUI="onPickDownGUI";pointerId;pointerType="onPickGUI";isPrimary;pressure;mouseX;mouseY;movementX;movementY;deltaX;deltaY;deltaZ;reset(){super.reset(),this.mouseX=0,this.mouseY=0,this.movementX=0,this.movementY=0,this.deltaX=0,this.deltaY=0,this.deltaZ=0}}class d{static MAX=new d(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE);static MIN=new d(Number.MIN_VALUE,Number.MIN_VALUE,Number.MIN_VALUE);static SAFE_MAX=new d(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);static SAFE_MIN=new d(Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);static X_AXIS=new d(1,0,0);static neg_X_AXIS=new d(-1,0,0);static Y_AXIS=new d(0,1,0);static Z_AXIS=new d(0,0,1);static HELP_0=new d;static HELP_1=new d;static HELP_2=new d;static EPSILON=1e-5;static HELP_3=new d;static HELP_4=new d;static HELP_5=new d;static HELP_6=new d;static get ZERO(){return new d(0,0,0)}static get ONE(){return new d(1,1,1)}static get LEFT(){return new d(-1,0,0)}static get RIGHT(){return new d(1,0,0)}static get UP(){return new d(0,1,0)}static get DOWN(){return new d(0,-1,0)}static get BACK(){return new d(0,0,-1)}static get FORWARD(){return new d(0,0,1)}x=0;y=0;z=0;w=1;index=0;static _index=0;constructor(e=0,t=0,r=0,i=0){this.set(e,t,r,i),this.index=d._index++}set a(e){this.w=e}set r(e){this.x=e}set g(e){this.y=e}set b(e){this.z=e}get a(){return this.w}get r(){return this.x}get g(){return this.y}get b(){return this.z}get length(){return Math.sqrt(this.lengthSquared)}get lengthSquared(){return this.x*this.x+this.y*this.y+this.z*this.z}get position(){return this}static getTowPointbyDir(e,t,r,i,a){a==d.Z_AXIS?(t.x=e.y,t.y=-e.x,r.x=-e.y,r.y=e.x,t.scaleBy(i*.5),r.scaleBy(i*.5)):a==d.Y_AXIS&&(t.x=e.z,t.z=-e.x,r.x=-e.z,r.z=e.x,t.scaleBy(i*.5),r.scaleBy(i*.5))}static pointToLine(e,t,r){let i=0,a,o,n;if(a=d.distance(e,t),o=d.distance(e,r),n=d.distance(t,r),n<=1e-6||o<=1e-6)return i=0,i;if(a<=1e-6||n*n>=a*a+o*o)return i=o,i;if(o*o>=a*a+n*n)return i=n,i;let l=(a+o+n)/2;return i=2*Math.sqrt(l*(l-a)*(l-o)*(l-n))/a,i}static dot(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}static getPoints(e,t){let r=[];for(let i=0;i<e;i++){const a=new d(Math.random()*t-t*.5,Math.random()*t-t*.5,Math.random()*t-t*.5);r.push(a)}return r}static getPointNumbers(e,t){let r=[];for(let i=0;i<e;i++)r.push(Math.random()*t-t*.5,Math.random()*t-t*.5,Math.random()*t-t*.5);return r}static getAngle(e,t){let r=e.dotProduct(t)/(e.length*t.length);return Math.acos(r)*180/Math.PI}static sqrMagnitude(e){return e.x*e.x+e.y*e.y+e.z*e.z}static getZYAngle(e,t){return this.calAngle(e.y,e.z,t.y,t.z)}static sub(e,t,r=null){return r=r||new d,r.x=e.x-t.x,r.y=e.y-t.y,r.z=e.z-t.z,r}static add(e,t,r=null){return r=r||new d,r.x=e.x+t.x,r.y=e.y+t.y,r.z=e.z+t.z,r}static smoothDamp(e,t,r,i,a,o){return null}static distance(e,t){let r=e.x-t.x,i=e.y-t.y,a=e.z-t.z;return Math.sqrt(r*r+i*i+a*a)}static squareDistance(e,t){let r=e.x-t.x,i=e.y-t.y,a=e.z-t.z;return r*r+i*i+a*a}static distanceXZ(e,t){let r=e.x-t.x,i=0,a=e.z-t.z;return Math.sqrt(r*r+i*i+a*a)}set(e,t,r,i=1){return this.x=e,this.y=t,this.z=r,this.w=i,this}add(e,t=null){t||=new d;let r=this.x,i=this.y,a=this.z,o=this.w,n=e.x,l=e.y,h=e.z,u=e.w;return t.setTo(r+n,i+l,a+h,o+u),t}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}min(e,t=this){return t.x=Math.min(this.x,e.x),t.y=Math.min(this.y,e.y),t.z=Math.min(this.z,e.z),t}max(e,t=this){return t.x=Math.max(this.x,e.x),t.y=Math.max(this.y,e.y),t.z=Math.max(this.z,e.z),t}distanceToSquared(e){let t=this.x-e.x,r=this.y-e.y,i=this.z-e.z;return t*t+r*r+i*i}addXYZW(e,t,r,i,a=null){a||=new d;let o=this.x,n=this.y,l=this.z,h=this.w,u=e,c=t,f=r,g=i;return a.setTo(o+u,n+c,l+f,h+g),a}clone(){return new d(this.x,this.y,this.z,this.w)}copyFrom(e){let t=this;return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t}decrementBy(e){this.x-=e.x,this.y-=e.y,this.z-=e.z}dotProduct(e){return this.x*e.x+this.y*e.y+this.z*e.z}equals(e,t=!1){return this.x==e.x&&this.y==e.y&&this.z==e.z&&(!t||this.w==e.w)}incrementBy(e){this.x+=e.x,this.y+=e.y,this.z+=e.z}divide(e){return e instanceof d?new d(this.x/e.x,this.y/e.y,this.z/e.z):(this.x=this.x/e,this.y=this.y/e,this.z=this.z/e,this)}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}normalize(e=1){let t=this;if(this.length!=0){let r=e/this.length;return this.x*=r,this.y*=r,this.z*=r,t}return t}applyQuaternion(e){const t=this.x,r=this.y,i=this.z,a=e.x,o=e.y,n=e.z,l=e.w,h=l*t+o*i-n*r,u=l*r+n*t-a*i,c=l*i+a*r-o*t,f=-a*t-o*r-n*i;return this.x=h*l+f*-a+u*-n-c*-o,this.y=u*l+f*-o+c*-a-h*-n,this.z=c*l+f*-n+h*-o-u*-a,this}applyMatrix4(e){return e.transformPoint(this,this)}scaleBy(e){return this.x*=e,this.y*=e,this.z*=e,this}mul(e){let t=new d;return t.x=this.x*e,t.y=this.y*e,t.z=this.z*e,t}scale(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}scaleToRef(e,t){return t||(t=new d),t.x=this.x*e,t.y=this.y*e,t.z=this.z*e,t}setTo(e,t,r,i=1){this.x=e,this.y=t,this.z=r,this.w=i}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}subtract(e,t=null){return t||(t=new d),t.setTo(this.x-e.x,this.y-e.y,this.z-e.z),t}multiply(e,t=null){t||(t=new d);let r=this.x,i=this.y,a=this.z,o=e.x,n=e.y,l=e.z;return t.setTo(r*o,i*n,a*l),t}divided(e,t=null){t||(t=new d);let r=this.x,i=this.y,a=this.z,o=e.x,n=e.y,l=e.z;return t.setTo(r/o,i/n,a/l),t}div(e,t){t||(t=new d);let r=this.x,i=this.y,a=this.z,o=this.w;return t.setTo(r/e,i/e,a/e,o/e),t}lerp(e,t,r){let i=e.x,a=e.y,o=e.z,n=e.w,l=t.x,h=t.y,u=t.z,c=t.w;this.x=(l-i)*r+i,this.y=(h-a)*r+a,this.z=(u-o)*r+o,this.w=(c-n)*r+n}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}toString(){return"<"+this.x+", "+this.y+", "+this.z+">"}normalizeToWay2D_XY(){let e=Math.abs(this.x),t=Math.abs(this.y);e>t?this.x>0?this.copyFrom(d.RIGHT):this.copyFrom(d.LEFT):this.y>0?this.copyFrom(d.DOWN):this.copyFrom(d.UP)}toArray(){return[this.x,this.y,this.z]}copyToBytes(e){e.setFloat32(0*Float32Array.BYTES_PER_ELEMENT,this.x,!0),e.setFloat32(1*Float32Array.BYTES_PER_ELEMENT,this.y,!0),e.setFloat32(2*Float32Array.BYTES_PER_ELEMENT,this.z,!0)}crossProduct(e,t=null){return t=t||new d,t.x=this.y*e.z-this.z*e.y,t.y=this.z*e.x-this.x*e.z,t.z=this.x*e.y-this.y*e.x,t.w=1,t}crossVectors(e,t){return e.crossProduct(t,this),this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}setFromArray(e,t=0){this.x=e[t],this.y=e[t+1],this.z=e[t+2]}divideScalar(e){return this.multiplyScalar(1/e)}clampLength(e,t){let r=this.length;return this.divideScalar(r||1).multiplyScalar(Math.max(e,Math.min(t,r)))}setScalar(e){return this.x=e,this.y=e,this.z=e,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}static calAngle(e,t,r,i){const a=n(r,i,e,t);let o=Math.acos(a)*180/Math.PI;return r<e&&(o=-o),o;function n(h,u,c,f){let g=[h-c,u-f];return l(g,[0,-1])}function l(h,u){let c=h[0]*u[0]+h[1]*u[1],f=Math.sqrt(h[0]*h[0]+h[1]*h[1])*Math.sqrt(u[0]*u[0]+u[1]*u[1]);return c/f}}static pointInsideTriangle(e,t,r,i){return d.HELP_0.setTo(e.x,e.z,0),d.HELP_1.setTo(t.x,t.z,0),d.HELP_2.setTo(r.x,r.z,0),d.HELP_3.setTo(i.x,i.z,0),d.pointInsideTriangle2d()}static pointInsideTriangle2d(){return d.productXY(d.HELP_1,d.HELP_2,d.HELP_3)>=0?d.productXY(d.HELP_1,d.HELP_2,d.HELP_0)>=0&&d.productXY(d.HELP_2,d.HELP_3,d.HELP_0)>=0&&d.productXY(d.HELP_3,d.HELP_1,d.HELP_0)>=0:d.productXY(d.HELP_1,d.HELP_2,d.HELP_0)<=0&&d.productXY(d.HELP_2,d.HELP_3,d.HELP_0)<=0&&d.productXY(d.HELP_3,d.HELP_1,d.HELP_0)<=0}static productXY(e,t,r){var i=(e.x-r.x)*(t.y-r.y)-(e.y-r.y)*(t.x-r.x);return i>-1e-5&&i<1e-5&&(i=0),i}static serialize(e){return new d(e.x,e.y,e.z,e.w)}}class kn{constructor(e){this.canvasX=e.clientX,this.canvasY=e.clientY,this.identifier=e.identifier,this.clientX=e.clientX,this.clientY=e.clientY,this.pageX=e.pageX,this.pageY=e.pageY,this.screenX=e.screenX,this.screenY=e.screenY}canvasX;canvasY;identifier;clientX;clientY;pageX;pageY;screenX;screenY}class Ln extends Er{canvasX=0;canvasY=0;isMouseDown=!1;isRightMouseDown=!1;canvas;mouseX=0;mouseY=0;wheelDelta=0;mouseOffsetX=0;mouseOffsetY=0;mouseLastX=0;mouseLastY=0;_time=0;_keyStatus;_mouseStatus;_isTouchStart;_keyEvent3d;_pointerEvent3D;_windowsEvent3d;mouseLock=!1;initCanvas(e){this.canvas=e;let t=0,r=0,i=0,a=0;e.onpointerdown=n=>{t=performance.now(),r=n.clientX,i=n.clientY,a=n.button,n.button==0?this.mouseStart(n):n.button==1?this.middleDown(n):n.button==2&&(this.isRightMouseDown=!0,this.mouseStart(n)),e.setPointerCapture(n.pointerId)},e.onpointerup=n=>{n.button==0?this.mouseEnd(n):n.button==1?this.middleUp(n):n.button==2&&(this.isRightMouseDown=!1,this.mouseEnd(n)),n.button===a&&performance.now()-t<300&&Math.abs(r-n.clientX)<20&&Math.abs(i-n.clientY)<20&&(n.button===0?this.mouseClick(n):this.rightClick(n)),e.releasePointerCapture(n.pointerId)},e.onpointerenter=n=>{this.mouseOver(n)},e.onpointermove=n=>{this.mouseMove(n)},e.onpointercancel=n=>{e.releasePointerCapture(n.pointerId),n.button==1?this.middleUp(n):this.mouseEnd(n)},e.addEventListener("wheel",n=>this.mouseWheel(n),{passive:!1}),window.addEventListener("keydown",n=>this.keyDown(n),!0),window.addEventListener("keyup",n=>this.keyUp(n),!0),e.oncontextmenu=function(){return!1};let o=this.canvas.getBoundingClientRect();this.canvasX=o.left,this.canvasY=o.top,this._keyStatus={},this._mouseStatus={},this._isTouchStart=!1,this._keyEvent3d=new Sr,this._pointerEvent3D=new k,this._windowsEvent3d=new qe}useMouseLock(){this.mouseLock||(this.canvas.requestPointerLock(),this.mouseLock=!0,document.addEventListener("mousemove",e=>this.onMouseLockMove(e),!1))}releaseMouseLock(){this.mouseLock=!1,document.exitPointerLock(),document.removeEventListener("mousemove",e=>this.onMouseLockMove(e),!1)}onMouseLockMove(e){this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=e.movementX,this.mouseOffsetY=e.movementY,this._pointerEvent3D.reset(),this._pointerEvent3D.type=k.POINTER_MOVE,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this._pointerEvent3D.movementX=e.movementX,this._pointerEvent3D.movementY=e.movementY,this.dispatchEvent(this._pointerEvent3D)}onPinch(e,t,r,i){this._oldPosition1=new d(e,t),this._oldPosition2=new d(r,i)}onSwipe(e,t){this.mouseX=e,this.mouseY=t,this._oldPosition1=null,this._oldPosition2=null,this._time=new Date().getTime()}_oldPosition1=null;_oldPosition2=null;GetTargetTouches(e){for(var t=new Array,r=0;r<e.length;r++){var i=new kn(e[r]);t.push(i)}return t}rightClick(e){this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.mouseX=e.clientX-this.canvasX,this._pointerEvent3D.mouseY=e.clientY-this.canvasY,this._pointerEvent3D.type=k.POINTER_RIGHT_CLICK,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this.dispatchEvent(this._pointerEvent3D)}middleDown(e){this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.mouseX=e.clientX-this.canvasX,this._pointerEvent3D.mouseY=e.clientY-this.canvasY,this._pointerEvent3D.type=k.POINTER_MID_DOWN,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId?e.pointerId:0,this._pointerEvent3D.pointerType=e.pointerType?e.pointerType:0,this._pointerEvent3D.isPrimary=e.isPrimary?e.isPrimary:0,this._pointerEvent3D.pressure=e.pressure?e.pressure:0,this.dispatchEvent(this._pointerEvent3D)}middleUp(e){this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.mouseX=e.clientX-this.canvasX,this._pointerEvent3D.mouseY=e.clientY-this.canvasY,this._pointerEvent3D.type=k.POINTER_MID_UP,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId,this._pointerEvent3D.pointerType=e.pointerType,this._pointerEvent3D.isPrimary=e.isPrimary,this._pointerEvent3D.pressure=e.pressure,this.dispatchEvent(this._pointerEvent3D)}mouseClick(e){this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.mouseX=e.clientX-this.canvasX,this._pointerEvent3D.mouseY=e.clientY-this.canvasY,this._pointerEvent3D.type=k.POINTER_CLICK,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this.dispatchEvent(this._pointerEvent3D)}_downTime=0;mouseEnd(e){this.isMouseDown=!1,this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._mouseStatus[this._pointerEvent3D.mouseCode]=!1,this._pointerEvent3D.type=k.POINTER_UP,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId,this._pointerEvent3D.pointerType=e.pointerType,this._pointerEvent3D.isPrimary=e.isPrimary,this._pointerEvent3D.pressure=e.pressure,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this.dispatchEvent(this._pointerEvent3D)}mouseStart(e){this.isMouseDown=!0,this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId?e.pointerId:0,this._pointerEvent3D.pointerType=e.pointerType?e.pointerType:0,this._pointerEvent3D.isPrimary=e.isPrimary?e.isPrimary:0,this._pointerEvent3D.pressure=e.pressure?e.pressure:0,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this._pointerEvent3D.type=k.POINTER_DOWN,this.dispatchEvent(this._pointerEvent3D)}mouseMove(e){this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,this._pointerEvent3D.reset(),this._pointerEvent3D.type=k.POINTER_MOVE,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId,this._pointerEvent3D.pointerType=e.pointerType,this._pointerEvent3D.isPrimary=e.isPrimary,this._pointerEvent3D.pressure=e.pressure,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this._pointerEvent3D.movementX=e.movementX,this._pointerEvent3D.movementY=e.movementY,this.dispatchEvent(this._pointerEvent3D)}mouseOver(e){this.isMouseDown=!1,this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,this._pointerEvent3D.reset(),this._pointerEvent3D.type=k.POINTER_OVER,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId,this._pointerEvent3D.pointerType=e.pointerType,this._pointerEvent3D.isPrimary=e.isPrimary,this._pointerEvent3D.pressure=e.pressure,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this.dispatchEvent(this._pointerEvent3D)}mouseWheel(e){e.preventDefault(),this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,"wheelDelta"in e?(this._pointerEvent3D.delay=e.wheelDelta,this.wheelDelta=e.wheelDelta):"delta"in e&&(this.wheelDelta=e.delta),this._pointerEvent3D.reset(),this._pointerEvent3D.type=k.POINTER_WHEEL,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this._pointerEvent3D.deltaX=e.deltaX,this._pointerEvent3D.deltaY=e.deltaY,this._pointerEvent3D.deltaZ=e.deltaZ,this.dispatchEvent(this._pointerEvent3D)}keyDown(e){this._keyEvent3d.reset(),this._keyEvent3d.keyCode=e.keyCode,this._keyEvent3d.ctrlKey=e.ctrlKey,this._keyEvent3d.altKey=e.altKey,this._keyEvent3d.shiftKey=e.shiftKey,this._keyStatus[e.keyCode]||(this._keyStatus[e.keyCode]=!0,this._keyEvent3d.type=Sr.KEY_DOWN,this.dispatchEvent(this._keyEvent3d))}keyUp(e){this._keyEvent3d.reset(),this._keyEvent3d.keyCode=e.keyCode,this._keyStatus[e.keyCode]=!1,this._keyEvent3d.type=Sr.KEY_UP,this.dispatchEvent(this._keyEvent3d)}GetSlideAngle(e,t){return Math.atan2(t,e)*180/Math.PI}GetSlideDirection(e,t,r,i){var a=t-i,o=r-e,n=0;if(Math.abs(o)<2&&Math.abs(a)<2)return n;var l=this.GetSlideAngle(o,a);return l>=-45&&l<45?n=4:l>=45&&l<135?n=1:l>=-135&&l<-45?n=2:(l>=135&&l<=180||l>=-180&&l<-135)&&(n=3),n}}class Yr extends qe{static RESIZE="resize"}class On extends Er{adapter;device;context;aspect;presentationSize=[0,0];presentationFormat;canvas;windowWidth;windowHeight;canvasConfig;_pixelRatio=1;_resizeEvent;get pixelRatio(){return this._pixelRatio}async init(e){if(this.canvasConfig=e,e&&e.canvas){if(this.canvas=e.canvas,this.canvas===null)throw new Error("no Canvas");this.canvas.style.width||(this.canvas.style.width=this.canvas.width+"px"),this.canvas.style.height||(this.canvas.style.height=this.canvas.height+"px")}else this.canvas=document.createElement("canvas"),this.canvas.style.position="absolute",this.canvas.style.top="0px",this.canvas.style.left="0px",this.canvas.style.width="100%",this.canvas.style.height="100%",this.canvas.style.zIndex=e?.zIndex?e.zIndex.toString():"0",document.body.appendChild(this.canvas);if(e&&e.backgroundImage?(this.canvas.style.background=`url(${e.backgroundImage})`,this.canvas.style["background-size"]="cover",this.canvas.style["background-position"]="center"):this.canvas.style.background="transparent",this.canvas.style["touch-action"]="none",this.canvas.style["object-fit"]="cover",navigator.gpu===void 0)throw new Error("Your browser does not support WebGPU!");if(this.adapter=await navigator.gpu.requestAdapter({powerPreference:"high-performance"}),this.adapter==null)throw new Error("Your browser does not support WebGPU!");if(this.device=await this.adapter.requestDevice({requiredFeatures:["bgra8unorm-storage","depth-clip-control","depth32float-stencil8","indirect-first-instance","rg11b10ufloat-renderable"],requiredLimits:{minUniformBufferOffsetAlignment:256,maxStorageBufferBindingSize:this.adapter.limits.maxStorageBufferBindingSize}}),this.device==null)throw new Error("Your browser does not support WebGPU!");return this._pixelRatio=this.canvasConfig?.devicePixelRatio||window.devicePixelRatio||1,this._pixelRatio=Math.min(this._pixelRatio,2),this.device.label="device",this.presentationFormat=navigator.gpu.getPreferredCanvasFormat(),this.context=this.canvas.getContext("webgpu"),this.context.configure({device:this.device,format:this.presentationFormat,usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,alphaMode:"premultiplied",colorSpace:"srgb"}),this._resizeEvent=new Yr(Yr.RESIZE,{width:this.windowWidth,height:this.windowHeight}),new ResizeObserver(()=>{this.updateSize(),$e.destroyTexture()}).observe(this.canvas),this.updateSize(),!0}updateSize(){let e=Math.floor(this.canvas.clientWidth*this.pixelRatio),t=Math.floor(this.canvas.clientHeight*this.pixelRatio);(e!=this.windowWidth||t!=this.windowHeight)&&(this.canvas.width=this.windowWidth=e,this.canvas.height=this.windowHeight=t,this.presentationSize[0]=this.windowWidth,this.presentationSize[1]=this.windowHeight,this.aspect=this.windowWidth/this.windowHeight,this._resizeEvent.data.width=this.windowWidth,this._resizeEvent.data.height=this.windowHeight,this.dispatchEvent(this._resizeEvent))}}let R=new On;var Be=(s=>(s[s.Default=1]="Default",s[s.IgnoreDepthPass=2]="IgnoreDepthPass",s[s.Sky=6]="Sky",s[s.Particle=10]="Particle",s[s.SkinnedMesh=16]="SkinnedMesh",s[s.MorphTarget=32]="MorphTarget",s[s.Terrain=64]="Terrain",s[s.UI=128]="UI",s[s.Reflection=256]="Reflection",s[s.ReflectionDebug=512]="ReflectionDebug",s[s.Graphic3D=1024]="Graphic3D",s))(Be||{});class Gt{static addMask(e,t){return e|t}static removeMask(e,t){return e&~t}static hasMask(e,t){return(e&t)==t}}class K{static HELP_0=new K;static HELP_1=new K;static HELP_2=new K;static ZERO=new K(0,0);static SAFE_MAX=new K(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);static SAFE_MIN=new K(Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);x=0;y=0;constructor(e=0,t=0){this.x=e,this.y=t}static getAngle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}static slerp(e,t,r){let i=new K,a=e.dot(t);if(a<0&&(t.x=-t.x,t.y=-t.y,a=-a),a>.9995)return i.x=e.x+r*(t.x-e.x),i.y=e.y+r*(t.y-e.y),i;let o=Math.acos(a),n=Math.sin(o),l=Math.sin((1-r)*o)/n,h=Math.sin(r*o)/n;return i.x=l*e.x+h*t.x,i.y=l*e.y+h*t.y,i}static lerp(e,t,r){return K.HELP_0.copyFrom(e),K.HELP_1.copyFrom(t),K.HELP_0.scale(r),K.HELP_1.scale(1-r),new K(K.HELP_0.x+K.HELP_1.x,K.HELP_0.y+K.HELP_1.y)}set(e=0,t=0){return this.x=e,this.y=t,this}distance(e){return Math.sqrt(Math.pow(this.x-e.x,2)+Math.pow(this.y-e.y,2))}add(e,t){return t=t||new K,t.x=this.x+e.x,t.y=this.y+e.y,t}sub(e,t){return t=t||new K,t.x=this.x-e.x,t.y=this.y-e.y,t}scale(e){return this.x=this.x*e,this.y=this.y*e,this}multiply(e,t){return t=t||new K,t.x=this.x*e,t.y=this.y*e,t}multiplyScaler(e){return this.x*=e,this.y*=e,this}divide(e,t){return t=t||new K,t.x=this.x/e,t.y=this.y/e,t}neg(e){return e||(e=new K),e.x=-e.x,e.y=-e.y,e}abs(){return Math.sqrt(this.x*this.x+this.y*this.y)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}getAngle(e){return Math.atan2(e.y-this.y,e.x-this.x)}unt(e){e=e||new K;let t=this.abs();return e.x=this.x/t,e.y=this.y/t,e}angleTo(e){let t=e.x-this.x,r=e.y-this.y;return Math.atan2(r,t)}equals(e){return Math.abs(this.x-e.x)<1e-6&&Math.abs(this.y-e.y)<1e-6}pal(e){let t=this.unt(),r=e.unt();return t.equals(r)?1:t.equals(r.neg())?-1:0}clone(){return new K(this.x,this.y)}copyFrom(e){return this.x=e.x,this.y=e.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}dot(e){return this.x*e.x+this.y*e.y}normalize(){let e=this.abs();return this.x=this.x/e,this.y=this.y/e,this}addInPlace(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}}class ${static X_AXIS=new $(1,0,0);static Y_AXIS=new $(0,1,0);static Z_AXIS=new $(0,0,1);static HELP_0=new $;static HELP_1=new $;static HELP_2=new $;static EPSILON=1e-5;static HELP_3=new $;static HELP_4=new $;static HELP_5=new $;static HELP_6=new $;static ZERO=new $;static ONE=new $(1,1,1,1);static LEFT=new $(-1,0,0);static RIGHT=new $(1,0,0);static UP=new $(0,-1,0);static DOWN=new $(0,1,0);static BACK=new $(0,0,-1);static FORWARD=new $(0,0,1);x=0;y=0;z=0;w=1;constructor(e=0,t=0,r=0,i=0){this.x=e,this.y=t,this.z=r,this.w=i}get width(){return this.z}get height(){return this.w}static crossVectors(e,t,r){r=r||new $;var i=e.x,a=e.y,o=e.z,n=t.x,l=t.y,h=t.z;return r.x=a*h-o*l,r.y=o*n-i*h,r.z=i*l-a*n,r}static distance(e,t){let r=e.x-t.x,i=e.y-t.y,a=e.z-t.z,o=e.w-t.w;return Math.sqrt(r*r+i*i+a*a+o*o)}set(e,t,r,i){return this.x=e,this.y=t,this.z=r,this.w=i,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}copyFrom(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}clone(){return new $(this.x,this.y,this.z,this.w)}}function Ys(s,e){let t=s.__NonSerialize__;t||(t=s.__NonSerialize__={},t.__NonSerialize__=!0),t[e]=!0}function Xs(s,e){let t;for(;s&&(s=s.__proto__,s&&(t=s.__NonSerialize__),!t););return t&&t[e]}function zi(s,e,t,r,i){let a=s.__EditorInspector__;a||(a=s.__EditorInspector__=new Map);let o=a.get(s.constructor.name);o||(o=new Map,a.set(s.constructor.name,o)),o.set(e,{p1:t,p2:r,p3:i})}function Pd(s){let e,t=s,r=[];for(;t;){if(r.indexOf(t.constructor.name)!=-1){t=t.__proto__;continue}r.push(t.constructor.name),t=t.__proto__}for(r=r.reverse(),t=s;t&&(t=t.__proto__,t&&(e=t.__EditorInspector__),!e););let i=new Map;if(e)for(let a=0;a<r.length;a++){const o=r[a];let n=e.get(o);n&&n.forEach((l,h)=>{i.set(h,l)})}return i}function Wt(s,e,t,r,i){let a=window.__Component__;a||(a=window.__Component__={}),a[e]=s}function zn(s){let e=window.__Component__;return e[s]?e[s]:null}function yi(s,e,t,r,i){let a=window.__shader__;a||(a=window.__shader__={}),a[e]=s}function Gn(s){let e=window.__shader__;return e[s]?e[s]:null}var kd=Object.defineProperty,Wn=(s,e,t,r)=>{for(var i=void 0,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(e,t,i)||i);return i&&kd(e,t,i),i};const Hs=class Pa{__refection;__size=0;getValueType(){if(!this.__refection){let e=this;this.__refection=[];for(const t in e)if(!Xs(this,t)){const r=e[t];let i={name:t,type:r.constructor.name};this.__refection.push(i)}}return this.__refection}static getValueSize(e){switch(e.constructor.name){case"Boolean":return 4;case"Number":return 4;case"f32":return 4;case"i32":return 4;case"u32":return 4;case"Float32Array":return e.byteLength;case"Vector2":return 8;case"Vector3":return 12;case"Vector4":return 16;case"Color":return 16;case"Array":let r=0;for(let i=0,a=e.length;i<a;i++)r+=Pa.getValueSize(e[i]);return r}return 0}static __cacheStruct=new Map;static Ref(e){return this.Get(e).getValueType()}static Get(e){let t=Pa.__cacheStruct.get(e.prototype);return t||(t=new e,Pa.__cacheStruct.set(e.prototype,t)),t}static GetSize(e){let t=this.Get(e);if(t.__size==0){for(const r in t)if(!Xs(t,r)){const i=t[r];t.__size+=Pa.getValueSize(i)}t.__size>4&&(t.__size=Math.ceil(t.__size/4)*4)}return t.__size}};Wn([Ys],Hs.prototype,"__refection"),Wn([Ys],Hs.prototype,"__size");let la=Hs;class Jn{byteOffset;byteSize;offset=0;dataBytes;get x(){return this.dataBytes.getFloat32(0*Float32Array.BYTES_PER_ELEMENT,!0)}set x(e){this.dataBytes.setFloat32(0*Float32Array.BYTES_PER_ELEMENT,e,!0)}get y(){return this.dataBytes.getFloat32(1*Float32Array.BYTES_PER_ELEMENT,!0)}set y(e){this.dataBytes.setFloat32(1*Float32Array.BYTES_PER_ELEMENT,e,!0)}get z(){return this.dataBytes.getFloat32(2*Float32Array.BYTES_PER_ELEMENT,!0)}set z(e){this.dataBytes.setFloat32(2*Float32Array.BYTES_PER_ELEMENT,e,!0)}get w(){return this.dataBytes.getFloat32(3*Float32Array.BYTES_PER_ELEMENT,!0)}set w(e){this.dataBytes.setFloat32(3*Float32Array.BYTES_PER_ELEMENT,e,!0)}setX(e){this.x=e}setXY(e,t){this.x=e,this.y=t}setXYZ(e,t,r){this.x=e,this.y=t,this.z=r}setXYZW(e,t,r,i){this.x=e,this.y=t,this.z=r,this.w=i}setVector2Array(e){for(let t=0;t<e.length;t++){const r=e[t];this.dataBytes.setFloat32((t*2+0)*Float32Array.BYTES_PER_ELEMENT,r.x,!0),this.dataBytes.setFloat32((t*2+1)*Float32Array.BYTES_PER_ELEMENT,r.y,!0)}}setVector3Array(e){for(let t=0;t<e.length;t++){const r=e[t];this.dataBytes.setFloat32((t*3+0)*Float32Array.BYTES_PER_ELEMENT,r.x,!0),this.dataBytes.setFloat32((t*3+1)*Float32Array.BYTES_PER_ELEMENT,r.y,!0),this.dataBytes.setFloat32((t*3+2)*Float32Array.BYTES_PER_ELEMENT,r.z,!0)}}setVector4Array(e){for(let t=0;t<e.length;t++){const r=e[t];this.dataBytes.setFloat32((t*4+0)*Float32Array.BYTES_PER_ELEMENT,r.x,!0),this.dataBytes.setFloat32((t*4+1)*Float32Array.BYTES_PER_ELEMENT,r.y,!0),this.dataBytes.setFloat32((t*4+2)*Float32Array.BYTES_PER_ELEMENT,r.z,!0),this.dataBytes.setFloat32((t*4+3)*Float32Array.BYTES_PER_ELEMENT,r.w,!0)}}setColorArray(e){for(let t=0;t<e.length;t++){const r=e[t];this.dataBytes.setFloat32((t*4+0)*Float32Array.BYTES_PER_ELEMENT,r.r,!0),this.dataBytes.setFloat32((t*4+1)*Float32Array.BYTES_PER_ELEMENT,r.g,!0),this.dataBytes.setFloat32((t*4+2)*Float32Array.BYTES_PER_ELEMENT,r.b,!0),this.dataBytes.setFloat32((t*4+3)*Float32Array.BYTES_PER_ELEMENT,r.a,!0)}}setInt8(e,t=0){this.dataBytes.setInt8(t*Int8Array.BYTES_PER_ELEMENT,e)}getInt8(e=0){return this.dataBytes.getInt8(e*Int8Array.BYTES_PER_ELEMENT)}setInt16(e,t=0){this.dataBytes.setInt16(t*Int16Array.BYTES_PER_ELEMENT,e,!0)}getInt16(e=0){return this.dataBytes.getInt16(e*Int16Array.BYTES_PER_ELEMENT,!0)}setInt32(e,t=0){this.dataBytes.setInt32(t*Int32Array.BYTES_PER_ELEMENT,e,!0)}getInt32(e=0){return this.dataBytes.getInt32(e*Int32Array.BYTES_PER_ELEMENT,!0)}setFloat(e,t=0){this.dataBytes.setFloat32(t*Float32Array.BYTES_PER_ELEMENT,e,!0)}getFloat(e=0){return this.dataBytes.getFloat32(e*Float32Array.BYTES_PER_ELEMENT,!0)}setUint8(e,t=0){this.dataBytes.setUint8(t*Uint8Array.BYTES_PER_ELEMENT,e)}getUint8(e=0){return this.dataBytes.getUint8(e*Uint8Array.BYTES_PER_ELEMENT)}setUint16(e,t=0){this.dataBytes.setUint16(t*Uint16Array.BYTES_PER_ELEMENT,e,!0)}getUint16(e=0){return this.dataBytes.getUint16(e*Uint16Array.BYTES_PER_ELEMENT,!0)}setUint32(e,t=0){this.dataBytes.setUint32(t*Uint32Array.BYTES_PER_ELEMENT,e,!0)}getUint32(e=0){return this.dataBytes.getUint32(e*Uint32Array.BYTES_PER_ELEMENT,!0)}setArray(e,t){for(let r=0;r<t.length;r++){const i=t[r];this.dataBytes.setFloat32((e+r)*Float32Array.BYTES_PER_ELEMENT,i,!0)}}setFloat32Array(e,t){new Float32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Float32Array.BYTES_PER_ELEMENT,t.length).set(t)}setFloatArray(e,t){let r;t instanceof Float32Array?r=t:r=new Float32Array(t),new Float32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Float32Array.BYTES_PER_ELEMENT,r.length).set(r)}setArrayBuffer(e,t){t instanceof Uint8Array?this.setUint8Array(e,t):t instanceof Uint16Array?this.setUint16Array(e,t):t instanceof Uint32Array?this.setUint32Array(e,t):t instanceof Int8Array?this.setInt8Array(e,t):t instanceof Int16Array?this.setInt16Array(e,t):t instanceof Int32Array?this.setInt32Array(e,t):t instanceof Float32Array&&this.setFloat32Array(e,t)}setInt8Array(e,t){new Int8Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Int8Array.BYTES_PER_ELEMENT).set(t)}setInt16Array(e,t){new Int16Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Int16Array.BYTES_PER_ELEMENT).set(t)}setInt32Array(e,t){new Int32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Int32Array.BYTES_PER_ELEMENT).set(t)}setUint8Array(e,t){new Uint8Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Uint8Array.BYTES_PER_ELEMENT).set(t)}setUint16Array(e,t){new Uint16Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Uint16Array.BYTES_PER_ELEMENT).set(t)}setUint32Array(e,t){new Uint32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Uint32Array.BYTES_PER_ELEMENT).set(t)}setData(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t,!0)}setVector2(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t.x,!0),this.dataBytes.setFloat32((e+1)*Float32Array.BYTES_PER_ELEMENT,t.y,!0)}setVector3(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t.x,!0),this.dataBytes.setFloat32((e+1)*Float32Array.BYTES_PER_ELEMENT,t.y,!0),this.dataBytes.setFloat32((e+2)*Float32Array.BYTES_PER_ELEMENT,t.z,!0)}setVector4(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t.x,!0),this.dataBytes.setFloat32((e+1)*Float32Array.BYTES_PER_ELEMENT,t.y,!0),this.dataBytes.setFloat32((e+2)*Float32Array.BYTES_PER_ELEMENT,t.z,!0),this.dataBytes.setFloat32((e+3)*Float32Array.BYTES_PER_ELEMENT,t.w,!0)}setColor(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t.r,!0),this.dataBytes.setFloat32((e+1)*Float32Array.BYTES_PER_ELEMENT,t.g,!0),this.dataBytes.setFloat32((e+2)*Float32Array.BYTES_PER_ELEMENT,t.b,!0),this.dataBytes.setFloat32((e+3)*Float32Array.BYTES_PER_ELEMENT,t.a,!0)}getData(e){return this.dataBytes.getFloat32(e*Float32Array.BYTES_PER_ELEMENT,!0)}writeFloat(e){this.dataBytes.setFloat32(this.offset,e,!0),this.offset+=Float32Array.BYTES_PER_ELEMENT}writeInt8(e){this.dataBytes.setInt8(this.offset,e),this.offset+=Int8Array.BYTES_PER_ELEMENT}writeInt16(e){this.dataBytes.setInt16(this.offset,e,!0),this.offset+=Int16Array.BYTES_PER_ELEMENT}writeInt32(e){this.dataBytes.setInt32(this.offset,e,!0),this.offset+=Int32Array.BYTES_PER_ELEMENT}writeUint8(e){this.dataBytes.setUint8(this.offset,e),this.offset+=Uint8Array.BYTES_PER_ELEMENT}writeUint16(e){this.dataBytes.setUint16(this.offset,e,!0),this.offset+=Uint16Array.BYTES_PER_ELEMENT}writeUint32(e){this.dataBytes.setUint32(this.offset,e,!0),this.offset+=Uint32Array.BYTES_PER_ELEMENT}writeVector2(e){this.writeFloat(e.x),this.writeFloat(e.y)}writeVector3(e){this.writeFloat(e.x),this.writeFloat(e.y),this.writeFloat(e.z)}writeVector4(e){this.writeFloat(e.x),this.writeFloat(e.y),this.writeFloat(e.z),this.writeFloat(e.w)}writeRGBColor(e){this.writeFloat(e.r),this.writeFloat(e.g),this.writeFloat(e.b)}writeArray(e){for(let t=0;t<e.length;t++){const r=e[t];this.writeFloat(r)}}writeFloat32Array(e){new Float32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeInt8Array(e){new Int8Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeInt16Array(e){new Int16Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeInt32Array(e){new Int32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeUint8Array(e){new Uint8Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeUint16Array(e){new Uint16Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeUint32Array(e){new Uint32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}reset(){this.offset=0}destroy(){this.byteOffset=null,this.byteSize=null,this.offset=null,this.dataBytes=null}}class Xr{shareDataBuffer;_byteOffset=0;allocation(e){this.shareDataBuffer&&this.shareDataBuffer.byteLength<e?this._byteOffset=0:this.shareDataBuffer=new ArrayBuffer(e)}allocation_node(e){if(this._byteOffset+e>this.shareDataBuffer.byteLength)return console.error("memory not enough!",this._byteOffset,e,this.shareDataBuffer.byteLength),null;let t=new Jn;return t.byteOffset=this._byteOffset,t.byteSize=e,t.dataBytes=new DataView(this.shareDataBuffer,this._byteOffset,t.byteSize),this._byteOffset+=t.byteSize,t}allocation_memory(e){return this._byteOffset+e.byteSize>this.shareDataBuffer.byteLength?(console.error("memory not enough!",this._byteOffset,e.byteSize,this.shareDataBuffer.byteLength),null):(e.byteOffset=this._byteOffset,e.dataBytes=new DataView(this.shareDataBuffer,this._byteOffset,e.byteSize),this._byteOffset+=e.byteSize,e)}reset(){this._byteOffset=0}destroy(e){this.shareDataBuffer=null,this._byteOffset=0}}class wr{bufferType;buffer;memory;memoryNodes;seek;outFloat32Array;byteSize;usage;visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE;mapAsyncBuffersOutstanding=0;mapAsyncReady;_readBuffer;_dataView;constructor(){this.mapAsyncReady=[]}debug(){}reset(e=!1,t=0,r){this.seek=0,this.memory.reset(),e&&this.createBuffer(this.usage,t,r)}setBoolean(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(4),this.memoryNodes.set(e,r)),r.setX(t?1:0)}readBoole(e){let t=this.memoryNodes.get(e);return t?t.getFloat()!=0:null}setFloat(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(4),this.memoryNodes.set(e,r)),r.setX(t)}getFloat(e){let t=this.memoryNodes.get(e);return t?t.getFloat():null}setInt8(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(1),this.memoryNodes.set(e,r)),r.setInt8(t)}getInt8(e){let t=this.memoryNodes.get(e);return t?t.getInt8():null}setInt16(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(2),this.memoryNodes.set(e,r)),r.setInt16(t)}getInt16(e){let t=this.memoryNodes.get(e);return t?t.getInt16():null}setInt32(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(4),this.memoryNodes.set(e,r)),r.setInt32(t)}getInt32(e){let t=this.memoryNodes.get(e);return t?t.getInt32():null}setUint8(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(1),this.memoryNodes.set(e,r)),r.setUint8(t)}getUint8(e){let t=this.memoryNodes.get(e);return t?t.getUint8():null}setUint16(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(2),this.memoryNodes.set(e,r)),r.setUint16(t)}getUint16(e){let t=this.memoryNodes.get(e);return t?t.getUint16():null}setUint32(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(4),this.memoryNodes.set(e,r)),r.setUint32(t)}getUint32(e){let t=this.memoryNodes.get(e);return t?t.getUint32():null}setVector2(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(8),this.memoryNodes.set(e,r)),r.setXY(t.x,t.y)}getVector2(e){let t=this.memoryNodes.get(e);return t?new K(t.x,t.y):null}setVector3(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(12),this.memoryNodes.set(e,r)),r.setXYZ(t.x,t.y,t.z)}getVector3(e){let t=this.memoryNodes.get(e);return t?new d(t.x,t.y,t.z):null}setVector4(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(16),this.memoryNodes.set(e,r)),r.setXYZW(t.x,t.y,t.z,t.w)}getVector4(e){let t=this.memoryNodes.get(e);return t?new $(t.x,t.y,t.z,t.w):null}setVector4Array(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(16*t.length),this.memoryNodes.set(e,r)),r.setVector4Array(t)}setColor(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(16),this.memoryNodes.set(e,r)),r.setXYZW(t.r,t.g,t.b,t.a)}getColor(e){let t=this.memoryNodes.get(e);return t?new P(t.x,t.y,t.z,t.w):null}setColorArray(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(16*t.length),this.memoryNodes.set(e,r)),r.setColorArray(t)}setMatrix(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(64),this.memoryNodes.set(e,r)),r.setFloatArray(0,t.rawData)}setMatrixArray(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(64*t.length),this.memoryNodes.set(e,r));for(let i=0;i<t.length;i++){const a=t[i];r.setFloatArray(i*16,a.rawData)}}setArray(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(t.length*4),this.memoryNodes.set(e,r)),r.setArray(0,t)}setFloat32Array(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(t.length*4),this.memoryNodes.set(e,r)),r.setFloat32Array(0,t)}setInt32Array(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(t.length*4),this.memoryNodes.set(e,r)),r.setInt32Array(0,t)}setUint32Array(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(t.length*4),this.memoryNodes.set(e,r)),r.setUint32Array(0,t)}setStruct(e,t,r,i){let a=la.Ref(e);la.GetSize(e);let o=t,n=this.memoryNodes.get(o);n.reset();let l=r;i&&(l=l[i]);for(let h=0;h<a.length;h++){const u=a[h];let c=l[u.name];this.writeValue(n,u,c)}}writeValue(e,t,r){switch(t.type){case"Boolean":e.writeFloat(r);break;case"Number":e.writeFloat(r);break;case"Float32Array":e.writeFloat32Array(r);break;case"Float64Array":e.writeFloat32Array(new Float32Array(r));break;case"Vector2":e.writeVector2(r);break;case"Vector3":e.writeVector3(r);break;case"Vector4":e.writeVector4(r);break;case"Color":e.writeRGBColor(r);break;case"Array":e.writeArray(r);break}}setStructArray(e,t,r){let i=t.length;for(let a=0;a<i;a++){const o=t[a];this.setStruct(e,a,o,r)}}clean(){this._dataView.fill(0,0,this._dataView.length)}apply(){R.device.queue.writeBuffer(this.buffer,0,this.memory.shareDataBuffer)}mapAsyncWrite(e,t){let r;e instanceof Float64Array?r=new Float32Array(e):r=e;let i=R.device;if(r.length>0){let a=null;for(;this.mapAsyncReady.length&&(a=this.mapAsyncReady.shift(),a.usedSize!=r.byteLength);)a.destroy(),this.mapAsyncBuffersOutstanding--,a=null;a||(a=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_SRC|GPUBufferUsage.MAP_WRITE,mappedAtCreation:!0}),a.usedSize=r.byteLength,this.mapAsyncBuffersOutstanding++,this.mapAsyncBuffersOutstanding>20&&console.warn(` Warning: mapAsync requests from ${this.mapAsyncBuffersOutstanding} frames ago have not resolved yet. MB of staging buffers allocated.`));let o=new Float32Array(r.buffer,r.byteOffset,t);new Float32Array(a.getMappedRange(0,t*4)).set(o),a.unmap();const l=i.createCommandEncoder();l.copyBufferToBuffer(a,0,this.buffer,0,t*4),i.queue.submit([l.finish()]),a.mapAsync(GPUMapMode.WRITE).then(()=>this.mapAsyncReady.push(a))}}destroy(e){this.memoryNodes&&this.memoryNodes.forEach(t=>{t.destroy()}),this.bufferType=null,this.seek=null,this.byteSize=null,this.usage=null,this.visibility=null,this.outFloat32Array=null,this.buffer&&this.buffer.destroy(),this.buffer=null,this.memory&&this.memory.destroy(),this.memory=null,this._readBuffer&&this._readBuffer.destroy()}createBuffer(e,t,r,i){let a=R.device;if(this.buffer&&this.destroy(),this.byteSize=t*4,this.usage=e,this.buffer=a.createBuffer({label:i,size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new Xr,this.memoryNodes=new Map,this._dataView=new Float32Array(this.memory.shareDataBuffer),this.memory.allocation(this.byteSize),r){let o=this.memory.allocation_node(r.length*4);const n=r.buffer instanceof ArrayBuffer?r.buffer:new Uint8Array(r.buffer).buffer;o.setArrayBuffer(0,n),this.apply()}}resizeBuffer(e,t){this.createBuffer(this.usage,e,t)}createNewBuffer(e,t){let r=R.device,i=t*4,a=e;return this.buffer&&this.destroy(),r.createBuffer({size:i,usage:a,mappedAtCreation:!1})}createBufferByStruct(e,t,r){let i=la.GetSize(t),a=i*r,o=R.device;this.buffer=o.createBuffer({label:"StructStorageGPUBuffer",size:a,usage:e,mappedAtCreation:!1}),this.memory=new Xr,this.memoryNodes=new Map,this._dataView=new Float32Array(this.memory.shareDataBuffer),this.memory.allocation(a);for(let n=0;n<r;n++){let l=n,h=this.memoryNodes.get(l);h||(h=this.memory.allocation_node(i),this.memoryNodes.set(l,h))}}readBuffer(e=!1){this.outFloat32Array||=new Float32Array(this.memory.shareDataBuffer.byteLength/4),this._readBuffer||(this._readBuffer=R.device.createBuffer({size:this.memory.shareDataBuffer.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,mappedAtCreation:!1}));let t=this.read();return e?t:this.outFloat32Array}_readFlag=!1;async read(){if(!this._readFlag){this._readFlag=!0;let e=R.device.createCommandEncoder();e.copyBufferToBuffer(this.buffer,0,this._readBuffer,0,this.memory.shareDataBuffer.byteLength),R.device.queue.submit([e.finish()]),await this._readBuffer.mapAsync(GPUMapMode.READ);const t=this._readBuffer.getMappedRange();this.outFloat32Array.set(new Float32Array(t),0),this._readBuffer.unmap(),this._readFlag=!1}return this.outFloat32Array}}var tr=(s=>(s[s.IndicesGPUBuffer=0]="IndicesGPUBuffer",s[s.VertexGPUBuffer=1]="VertexGPUBuffer",s[s.UniformGPUBuffer=2]="UniformGPUBuffer",s[s.StorageGPUBuffer=3]="StorageGPUBuffer",s[s.ComputeGPUBuffer=4]="ComputeGPUBuffer",s[s.MaterialDataUniformGPUBuffer=5]="MaterialDataUniformGPUBuffer",s[s.StructStorageGPUBuffer=6]="StructStorageGPUBuffer",s))(tr||{});class ve extends wr{constructor(e,t=0,r){super(),this.bufferType=tr.StorageGPUBuffer,this.createBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|t,e,r,"StorageGPUBuffer")}}class ht extends wr{constructor(e,t){super(),this.bufferType=tr.UniformGPUBuffer,this.createBuffer(GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,e,t,"UniformGPUBuffer")}genUniformNodes(){}}class Vt{static getMorphTargetShaderBinding(e,t){return`
|
|
1
|
+
class P{static COLOR_RED=new P(1,0,0,1);static COLOR_GREEN=new P(0,1,0,1);static COLOR_BLUE=new P(0,0,1,1);static COLOR_WHITE=new P(1,1,1,1);static COLOR_0=new P;static COLOR_1=new P;static COLOR_2=new P;static HEX_CHARACTERS="a-f\\d";static MATCH_3OR4_HEX=`#?[${P.HEX_CHARACTERS}]{3}[${P.HEX_CHARACTERS}]?`;static MATCH_6OR8_HEX=`#?[${P.HEX_CHARACTERS}]{6}([${P.HEX_CHARACTERS}]{2})?`;static NON_HEX_CHARS=new RegExp(`[^#${P.HEX_CHARACTERS}]`,"gi");static VALID_HEX_SIZE=new RegExp(`^${P.MATCH_3OR4_HEX}$|^${P.MATCH_6OR8_HEX}$`,"i");r=0;g=0;b=0;a=0;constructor(e=1,t=1,r=1,i=1){this.setTo(e,t,r,i)}convertToHDRRGB(){return this.r=this.r*Math.pow(2.4,this.a),this.g=this.g*Math.pow(2.4,this.a),this.b=this.b*Math.pow(2.4,this.a),this}unSerialized(e){return this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this}hexToRGB(e){return this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,this}hexToRGBA(e){return this.a=(e>>24&255)/255,this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,this}static random(e=1){let t=new P;return t.a=e,t.r=e*Math.random(),t.g=e*Math.random(),t.b=e*Math.random(),t}static randomRGB(e=.5,t=.5,r=.5,i=.5,a=.5,o=.5){let n=new P;return n.a=1,n.r=i+e*Math.random(),n.g=a+t*Math.random(),n.b=o+r*Math.random(),n}static randomGray(e=.5,t=.5){let r=Math.random()*t+e,i=new P;return i.a=1,i.r=r,i.g=r,i.b=r,i}setTo(e,t,r,i){this.r=Math.max(e,0),this.g=Math.max(t,0),this.b=Math.max(r,0),this.a=Math.max(i,0)}setHex(e){if(typeof e!="string"||P.NON_HEX_CHARS.test(e)||!P.VALID_HEX_SIZE.test(e))throw new TypeError("Expected a valid hex string");e=e.replace(/^#/,"");let t=1;e.length===8&&(t=Number.parseInt(e.slice(6,8),16)/255,e=e.slice(0,6)),e.length===4&&(t=Number.parseInt(e.slice(3,4).repeat(2),16)/255,e=e.slice(0,3)),e.length===3&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);const r=Number.parseInt(e,16),i=r>>16,a=r>>8&255,o=r&255,n=t;this.a=n,this.r=i/255,this.g=a/255,this.b=o/255}getHex(){let e=r=>{r*=255;let i=r.toString(16);return i.length===1&&(i="0"+i),i};return e(this.r)+e(this.g)+e(this.b)+e(this.a)}get rgb(){return[this.r*255>>>0,this.g*255>>>0,this.b*255>>>0]}set rgb(e){this.setTo(e[0]/255,e[1]/255,e[2]/255,this.a)}get rgba(){return[this.r*255>>>0,this.g*255>>>0,this.b*255>>>0,this.a*255>>>0]}set rgba(e){this.setTo(e[0]/255,e[1]/255,e[2]/255,e[3]/255)}clone(){return new P().copyFrom(this)}copyFrom(e){return this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this}copyFromArray(e,t=255){return this.r=e[0]/t,this.g=e[1]/t,this.b=e[2]/t,this.a=e[3]/t,this}copyFromVector(e){return this.r=e.x,this.g=e.y,this.b=e.z,this.a=e.w||1,this}static hexRGBColor(e,t=null){return t=t||new P,t.hexToRGB(e),t}static lerp(e,t,r,i){let a=i||new P;return a.r=(r.r-t.r)*e+t.r,a.g=(r.g-t.g)*e+t.g,a.b=(r.b-t.b)*e+t.b,a.a=(r.a-t.a)*e+t.a,a}static PRIMARY=4149685;static PRIMARYDARK=3162015;static ACCENT=16728193;static WHITE=16777215;static IVORY=16777200;static LIGHTYELLOW=16777184;static YELLOW=16776960;static SNOW=16775930;static FLORALWHITE=16775920;static LEMONCHIFFON=16775885;static CORNSILK=16775388;static SEASHELL=16774638;static LAVENDERBLUSH=16773365;static PAPAYAWHIP=16773077;static BLANCHEDALMOND=16772045;static MISTYROSE=16770273;static BISQUE=16770244;static MOCCASIN=16770229;static NAVAJOWHITE=16768685;static PEACHPUFF=16767673;static GOLD=16766720;static PINK=16761035;static LIGHTPINK=16758465;static ORANGE=16753920;static LIGHTSALMON=16752762;static DARKORANGE=16747520;static CORAL=16744272;static HOTPINK=16738740;static TOMATO=16737095;static ORANGERED=16729344;static DEEPPINK=16716947;static FUCHSIA=16711935;static MAGENTA=16711935;static RED=16711680;static OLDLACE=16643558;static LIGHTGOLDENRODYELLOW=16448210;static LINEN=16445670;static ANTIQUEWHITE=16444375;static SALMON=16416882;static GHOSTWHITE=16316671;static MINTCREAM=16121850;static WHITESMOKE=16119285;static BEIGE=16119260;static WHEAT=16113331;static SANDYBROWN=16032864;static AZURE=15794175;static HONEYDEW=15794160;static ALICEBLUE=15792383;static KHAKI=15787660;static LIGHTCORAL=15761536;static PALEGOLDENROD=15657130;static VIOLET=15631086;static DARKSALMON=15308410;static LAVENDER=15132410;static LIGHTCYAN=14745599;static BURLYWOOD=14596231;static PLUM=14524637;static GAINSBORO=14474460;static CRIMSON=14423100;static PALEVIOLETRED=14381203;static GOLDENROD=14329120;static ORCHID=14315734;static THISTLE=14204888;static LIGHTGREY=13882323;static TAN=13808780;static CHOCOLATE=13789470;static PERU=13468991;static INDIANRED=13458524;static MEDIUMVIOLETRED=13047173;static SILVER=12632256;static DARKKHAKI=12433259;static ROSYBROWN=12357519;static MEDIUMORCHID=12211667;static DARKGOLDENROD=12092939;static FIREBRICK=11674146;static POWDERBLUE=11591910;static LIGHTSTEELBLUE=11584734;static PALETURQUOISE=11529966;static GREENYELLOW=11403055;static LIGHTBLUE=11393254;static DARKGRAY=11119017;static BROWN=10824234;static SIENNA=10506797;static DARKORCHID=10040012;static PALEGREEN=10025880;static DARKVIOLET=9699539;static MEDIUMPURPLE=9662683;static LIGHTGREEN=9498256;static DARKSEAGREEN=9419919;static SADDLEBROWN=9127187;static DARKMAGENTA=9109643;static DARKRED=9109504;static BLUEVIOLET=9055202;static LIGHTSKYBLUE=8900346;static SKYBLUE=8900331;static GRAY=8421504;static OLIVE=8421376;static PURPLE=8388736;static MAROON=8388608;static AQUAMARINE=8388564;static CHARTREUSE=8388352;static LAWNGREEN=8190976;static MEDIUMSLATEBLUE=8087790;static LIGHTSLATEGRAY=7833753;static SLATEGRAY=7372944;static OLIVEDRAB=7048739;static SLATEBLUE=6970061;static DIMGRAY=6908265;static MEDIUMAQUAMARINE=6737322;static CORNFLOWERBLUE=6591981;static CADETBLUE=6266528;static DARKOLIVEGREEN=5597999;static INDIGO=4915330;static MEDIUMTURQUOISE=4772300;static DARKSLATEBLUE=4734347;static STEELBLUE=4620980;static ROYALBLUE=4286945;static TURQUOISE=4251856;static MEDIUMSEAGREEN=3978097;static LIMEGREEN=3329330;static DARKSLATEGRAY=3100495;static SEAGREEN=3050327;static FORESTGREEN=2263842;static LIGHTSEAGREEN=2142890;static DODGERBLUE=2003199;static MIDNIGHTBLUE=1644912;static AQUA=65535;static CYAN=65535;static SPRINGGREEN=65407;static LIME=65280;static MEDIUMSPRINGGREEN=64154;static DARKTURQUOISE=52945;static DEEPSKYBLUE=49151;static DARKCYAN=35723;static TEAL=32896;static GREEN=32768;static DARKGREEN=25600;static BLUE=255;static MEDIUMBLUE=205;static DARKBLUE=139;static NAVY=128;static BLACK=0}class be{static time=0;static frame=0;static delta=0;static _startTime=0;static _timeLabel="";static start(e){this._startTime=performance.now(),this._timeLabel=e}static end(){console.log(this._timeLabel,performance.now()-this._startTime)}}class qe{target;currentTarget;type;data;param;time=0;delay=0;mouseCode=0;ctrlKey;metaKey;altKey;shiftKey;targetTouches;changedTouches;touches;_stopImmediatePropagation=!1;view;constructor(e=null,t=null){this.type=e,this.data=t}stopImmediatePropagation(){this._stopImmediatePropagation=!0}reset(){this._stopImmediatePropagation=!1}get isStopImmediatePropagation(){return this._stopImmediatePropagation}}class as{constructor(e=null,t=null,r=null,i=null,a=0){this.type=e,this.thisObject=t,this.handler=r,this.param=i,this.priority=a}static event_id_count=0;id=0;current;equalCurrentListener(e,t,r,i){return this.type==e&&this.thisObject==r&&this.handler==t&&this.param==i}dispose(){this.handler=null,this.thisObject=null,this.param=null,this.priority=0}}class Er{listeners={};data;dispatchEvent(e){let t=this.listeners[e.type];if(t!=null){t=t.slice();for(let r=0;r<t.length;r++){let i=t[r];if(i.handler){try{e.param=i.param,e.currentTarget=i,i.thisObject,i.handler.call(i.thisObject,e)}catch{}if(e.isStopImmediatePropagation)break}}}}destroy(){for(let e in this.listeners){let t=this.listeners[e];for(;t.length>0;){let r=t[0];r.handler=null,r.thisObject=null,t.splice(0,1)}}}addEventListener(e,t,r,i=null,a=0){if(this.listeners[e]==null&&(this.listeners[e]=[]),!this.hasEventListener(e,t,r)){let o=new as(e,r,t,i,a);return o.id=++as.event_id_count,o.current=this,this.listeners[e].push(o),this.listeners[e].sort(function(n,l){return l.priority-n.priority}),o.id}for(let o=0;o<this.listeners[e].length;o++){let n=this.listeners[e][o];if(n.equalCurrentListener(e,t,r,i))return n.id}return 0}removeEventListener(e,t,r){if(this.hasEventListener(e,t,r))for(let i=0;i<this.listeners[e].length;i++){let a=this.listeners[e][i];if(a.equalCurrentListener(e,t,r,a.param)){a.handler=null,a.thisObject=null,this.listeners[e].splice(i,1);return}}}removeEventListenerAt(e){for(let t in this.listeners)for(let r=0;r<this.listeners[t].length;r++){let i=this.listeners[t][r];if(i.id==e)return i.handler=null,i.thisObject=null,this.listeners[t].splice(r,1),!0}return!1}removeAllEventListener(e=null){let t;if(e){if(this.listeners[e]){for(let r=0;r<this.listeners[e].length;r++)t=this.listeners[e][r],t.dispose(),this.listeners[e].splice(r,1);delete this.listeners[e]}}else for(let r in this.listeners){for(let i=0;i<this.listeners[r].length;i++)t=this.listeners[r][i],t.dispose(),this.listeners[r].splice(i,1);delete this.listeners[r]}}containEventListener(e){return this.listeners[e]==null?!1:this.listeners[e].length>0}hasEventListener(e,t=null,r=null){if(this.listeners[e]==null)return!1;if(r&&t)for(let i=0;i<this.listeners[e].length;i++){let a=this.listeners[e][i];if(a.equalCurrentListener(e,t,r,a.param))return!0}return!1}}class Cr extends qe{static KEY_DOWN="onKeyDown";static KEY_UP="onKeyUp";keyCode=0}class k extends qe{static PICK_OVER="onPickOver";static PICK_CLICK="onPickClick";static PICK_OUT="onPickOut";static PICK_MOVE="onPickMove";static PICK_UP="onPickUp";static PICK_DOWN="onPickDown";static POINTER_RIGHT_CLICK="onPointerRightClick";static POINTER_MID_UP="onPointerMidUp";static POINTER_MID_DOWN="onPointerMidDown";static POINTER_CLICK="onPointerClick";static POINTER_MOVE="onPointerMove";static POINTER_DOWN="onPointerDown";static POINTER_UP="onPointerUp";static POINTER_OUT="onPointerOut";static POINTER_OVER="onPointerOver";static POINTER_WHEEL="onPointerWheel";pointerId;pointerType="onPointer";isPrimary;pressure;mouseX;mouseY;movementX;movementY;deltaX;deltaY;deltaZ;reset(){super.reset(),this.mouseX=0,this.mouseY=0,this.movementX=0,this.movementY=0,this.deltaX=0,this.deltaY=0,this.deltaZ=0}}class lt extends qe{static PICK_OVER_GUI="onPickOverGUI";static PICK_CLICK_GUI="onPickClickGUI";static PICK_OUT_GUI="onPickOutGUI";static PICK_UP_GUI="onPickUpGUI";static PICK_DOWN_GUI="onPickDownGUI";pointerId;pointerType="onPickGUI";isPrimary;pressure;mouseX;mouseY;movementX;movementY;deltaX;deltaY;deltaZ;reset(){super.reset(),this.mouseX=0,this.mouseY=0,this.movementX=0,this.movementY=0,this.deltaX=0,this.deltaY=0,this.deltaZ=0}}class d{static MAX=new d(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE);static MIN=new d(Number.MIN_VALUE,Number.MIN_VALUE,Number.MIN_VALUE);static SAFE_MAX=new d(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);static SAFE_MIN=new d(Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);static X_AXIS=new d(1,0,0);static neg_X_AXIS=new d(-1,0,0);static Y_AXIS=new d(0,1,0);static Z_AXIS=new d(0,0,1);static HELP_0=new d;static HELP_1=new d;static HELP_2=new d;static EPSILON=1e-5;static HELP_3=new d;static HELP_4=new d;static HELP_5=new d;static HELP_6=new d;static get ZERO(){return new d(0,0,0)}static get ONE(){return new d(1,1,1)}static get LEFT(){return new d(-1,0,0)}static get RIGHT(){return new d(1,0,0)}static get UP(){return new d(0,1,0)}static get DOWN(){return new d(0,-1,0)}static get BACK(){return new d(0,0,-1)}static get FORWARD(){return new d(0,0,1)}x=0;y=0;z=0;w=1;index=0;static _index=0;constructor(e=0,t=0,r=0,i=0){this.set(e,t,r,i),this.index=d._index++}set a(e){this.w=e}set r(e){this.x=e}set g(e){this.y=e}set b(e){this.z=e}get a(){return this.w}get r(){return this.x}get g(){return this.y}get b(){return this.z}get length(){return Math.sqrt(this.lengthSquared)}get lengthSquared(){return this.x*this.x+this.y*this.y+this.z*this.z}get position(){return this}static getTowPointbyDir(e,t,r,i,a){a==d.Z_AXIS?(t.x=e.y,t.y=-e.x,r.x=-e.y,r.y=e.x,t.scaleBy(i*.5),r.scaleBy(i*.5)):a==d.Y_AXIS&&(t.x=e.z,t.z=-e.x,r.x=-e.z,r.z=e.x,t.scaleBy(i*.5),r.scaleBy(i*.5))}static pointToLine(e,t,r){let i=0,a,o,n;if(a=d.distance(e,t),o=d.distance(e,r),n=d.distance(t,r),n<=1e-6||o<=1e-6)return i=0,i;if(a<=1e-6||n*n>=a*a+o*o)return i=o,i;if(o*o>=a*a+n*n)return i=n,i;let l=(a+o+n)/2;return i=2*Math.sqrt(l*(l-a)*(l-o)*(l-n))/a,i}static dot(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}static getPoints(e,t){let r=[];for(let i=0;i<e;i++){const a=new d(Math.random()*t-t*.5,Math.random()*t-t*.5,Math.random()*t-t*.5);r.push(a)}return r}static getPointNumbers(e,t){let r=[];for(let i=0;i<e;i++)r.push(Math.random()*t-t*.5,Math.random()*t-t*.5,Math.random()*t-t*.5);return r}static getAngle(e,t){let r=e.dotProduct(t)/(e.length*t.length);return Math.acos(r)*180/Math.PI}static sqrMagnitude(e){return e.x*e.x+e.y*e.y+e.z*e.z}static getZYAngle(e,t){return this.calAngle(e.y,e.z,t.y,t.z)}static sub(e,t,r=null){return r=r||new d,r.x=e.x-t.x,r.y=e.y-t.y,r.z=e.z-t.z,r}static add(e,t,r=null){return r=r||new d,r.x=e.x+t.x,r.y=e.y+t.y,r.z=e.z+t.z,r}static smoothDamp(e,t,r,i,a,o){return null}static distance(e,t){let r=e.x-t.x,i=e.y-t.y,a=e.z-t.z;return Math.sqrt(r*r+i*i+a*a)}static squareDistance(e,t){let r=e.x-t.x,i=e.y-t.y,a=e.z-t.z;return r*r+i*i+a*a}static distanceXZ(e,t){let r=e.x-t.x,i=0,a=e.z-t.z;return Math.sqrt(r*r+i*i+a*a)}set(e,t,r,i=1){return this.x=e,this.y=t,this.z=r,this.w=i,this}add(e,t=null){t||=new d;let r=this.x,i=this.y,a=this.z,o=this.w,n=e.x,l=e.y,h=e.z,u=e.w;return t.setTo(r+n,i+l,a+h,o+u),t}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}min(e,t=this){return t.x=Math.min(this.x,e.x),t.y=Math.min(this.y,e.y),t.z=Math.min(this.z,e.z),t}max(e,t=this){return t.x=Math.max(this.x,e.x),t.y=Math.max(this.y,e.y),t.z=Math.max(this.z,e.z),t}distanceToSquared(e){let t=this.x-e.x,r=this.y-e.y,i=this.z-e.z;return t*t+r*r+i*i}addXYZW(e,t,r,i,a=null){a||=new d;let o=this.x,n=this.y,l=this.z,h=this.w,u=e,c=t,f=r,g=i;return a.setTo(o+u,n+c,l+f,h+g),a}clone(){return new d(this.x,this.y,this.z,this.w)}copyFrom(e){let t=this;return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t}decrementBy(e){this.x-=e.x,this.y-=e.y,this.z-=e.z}dotProduct(e){return this.x*e.x+this.y*e.y+this.z*e.z}equals(e,t=!1){return this.x==e.x&&this.y==e.y&&this.z==e.z&&(!t||this.w==e.w)}incrementBy(e){this.x+=e.x,this.y+=e.y,this.z+=e.z}divide(e){return e instanceof d?new d(this.x/e.x,this.y/e.y,this.z/e.z):(this.x=this.x/e,this.y=this.y/e,this.z=this.z/e,this)}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}normalize(e=1){let t=this;if(this.length!=0){let r=e/this.length;return this.x*=r,this.y*=r,this.z*=r,t}return t}applyQuaternion(e){const t=this.x,r=this.y,i=this.z,a=e.x,o=e.y,n=e.z,l=e.w,h=l*t+o*i-n*r,u=l*r+n*t-a*i,c=l*i+a*r-o*t,f=-a*t-o*r-n*i;return this.x=h*l+f*-a+u*-n-c*-o,this.y=u*l+f*-o+c*-a-h*-n,this.z=c*l+f*-n+h*-o-u*-a,this}applyMatrix4(e){return e.transformPoint(this,this)}scaleBy(e){return this.x*=e,this.y*=e,this.z*=e,this}mul(e){let t=new d;return t.x=this.x*e,t.y=this.y*e,t.z=this.z*e,t}scale(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}scaleToRef(e,t){return t||(t=new d),t.x=this.x*e,t.y=this.y*e,t.z=this.z*e,t}setTo(e,t,r,i=1){this.x=e,this.y=t,this.z=r,this.w=i}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}subtract(e,t=null){return t||(t=new d),t.setTo(this.x-e.x,this.y-e.y,this.z-e.z),t}multiply(e,t=null){t||(t=new d);let r=this.x,i=this.y,a=this.z,o=e.x,n=e.y,l=e.z;return t.setTo(r*o,i*n,a*l),t}divided(e,t=null){t||(t=new d);let r=this.x,i=this.y,a=this.z,o=e.x,n=e.y,l=e.z;return t.setTo(r/o,i/n,a/l),t}div(e,t){t||(t=new d);let r=this.x,i=this.y,a=this.z,o=this.w;return t.setTo(r/e,i/e,a/e,o/e),t}lerp(e,t,r){let i=e.x,a=e.y,o=e.z,n=e.w,l=t.x,h=t.y,u=t.z,c=t.w;this.x=(l-i)*r+i,this.y=(h-a)*r+a,this.z=(u-o)*r+o,this.w=(c-n)*r+n}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}toString(){return"<"+this.x+", "+this.y+", "+this.z+">"}normalizeToWay2D_XY(){let e=Math.abs(this.x),t=Math.abs(this.y);e>t?this.x>0?this.copyFrom(d.RIGHT):this.copyFrom(d.LEFT):this.y>0?this.copyFrom(d.DOWN):this.copyFrom(d.UP)}toArray(){return[this.x,this.y,this.z]}copyToBytes(e){e.setFloat32(0*Float32Array.BYTES_PER_ELEMENT,this.x,!0),e.setFloat32(1*Float32Array.BYTES_PER_ELEMENT,this.y,!0),e.setFloat32(2*Float32Array.BYTES_PER_ELEMENT,this.z,!0)}crossProduct(e,t=null){return t=t||new d,t.x=this.y*e.z-this.z*e.y,t.y=this.z*e.x-this.x*e.z,t.z=this.x*e.y-this.y*e.x,t.w=1,t}crossVectors(e,t){return e.crossProduct(t,this),this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}setFromArray(e,t=0){this.x=e[t],this.y=e[t+1],this.z=e[t+2]}divideScalar(e){return this.multiplyScalar(1/e)}clampLength(e,t){let r=this.length;return this.divideScalar(r||1).multiplyScalar(Math.max(e,Math.min(t,r)))}setScalar(e){return this.x=e,this.y=e,this.z=e,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}static calAngle(e,t,r,i){const a=n(r,i,e,t);let o=Math.acos(a)*180/Math.PI;return r<e&&(o=-o),o;function n(h,u,c,f){let g=[h-c,u-f];return l(g,[0,-1])}function l(h,u){let c=h[0]*u[0]+h[1]*u[1],f=Math.sqrt(h[0]*h[0]+h[1]*h[1])*Math.sqrt(u[0]*u[0]+u[1]*u[1]);return c/f}}static pointInsideTriangle(e,t,r,i){return d.HELP_0.setTo(e.x,e.z,0),d.HELP_1.setTo(t.x,t.z,0),d.HELP_2.setTo(r.x,r.z,0),d.HELP_3.setTo(i.x,i.z,0),d.pointInsideTriangle2d()}static pointInsideTriangle2d(){return d.productXY(d.HELP_1,d.HELP_2,d.HELP_3)>=0?d.productXY(d.HELP_1,d.HELP_2,d.HELP_0)>=0&&d.productXY(d.HELP_2,d.HELP_3,d.HELP_0)>=0&&d.productXY(d.HELP_3,d.HELP_1,d.HELP_0)>=0:d.productXY(d.HELP_1,d.HELP_2,d.HELP_0)<=0&&d.productXY(d.HELP_2,d.HELP_3,d.HELP_0)<=0&&d.productXY(d.HELP_3,d.HELP_1,d.HELP_0)<=0}static productXY(e,t,r){var i=(e.x-r.x)*(t.y-r.y)-(e.y-r.y)*(t.x-r.x);return i>-1e-5&&i<1e-5&&(i=0),i}static serialize(e){return new d(e.x,e.y,e.z,e.w)}}class kn{constructor(e){this.canvasX=e.clientX,this.canvasY=e.clientY,this.identifier=e.identifier,this.clientX=e.clientX,this.clientY=e.clientY,this.pageX=e.pageX,this.pageY=e.pageY,this.screenX=e.screenX,this.screenY=e.screenY}canvasX;canvasY;identifier;clientX;clientY;pageX;pageY;screenX;screenY}class Ln extends Er{canvasX=0;canvasY=0;isMouseDown=!1;isRightMouseDown=!1;canvas;mouseX=0;mouseY=0;wheelDelta=0;mouseOffsetX=0;mouseOffsetY=0;mouseLastX=0;mouseLastY=0;_time=0;_keyStatus;_mouseStatus;_isTouchStart;_keyEvent3d;_pointerEvent3D;_windowsEvent3d;mouseLock=!1;initCanvas(e){this.canvas=e;let t=0,r=0,i=0,a=0;e.onpointerdown=n=>{t=performance.now(),r=n.clientX,i=n.clientY,a=n.button,n.button==0?this.mouseStart(n):n.button==1?this.middleDown(n):n.button==2&&(this.isRightMouseDown=!0,this.mouseStart(n)),e.setPointerCapture(n.pointerId)},e.onpointerup=n=>{n.button==0?this.mouseEnd(n):n.button==1?this.middleUp(n):n.button==2&&(this.isRightMouseDown=!1,this.mouseEnd(n)),n.button===a&&performance.now()-t<300&&Math.abs(r-n.clientX)<20&&Math.abs(i-n.clientY)<20&&(n.button===0?this.mouseClick(n):this.rightClick(n)),e.releasePointerCapture(n.pointerId)},e.onpointerenter=n=>{this.mouseOver(n)},e.onpointermove=n=>{this.mouseMove(n)},e.onpointercancel=n=>{e.releasePointerCapture(n.pointerId),n.button==1?this.middleUp(n):this.mouseEnd(n)},e.addEventListener("wheel",n=>this.mouseWheel(n),{passive:!1}),window.addEventListener("keydown",n=>this.keyDown(n),!0),window.addEventListener("keyup",n=>this.keyUp(n),!0),e.oncontextmenu=function(){return!1};let o=this.canvas.getBoundingClientRect();this.canvasX=o.left,this.canvasY=o.top,this._keyStatus={},this._mouseStatus={},this._isTouchStart=!1,this._keyEvent3d=new Cr,this._pointerEvent3D=new k,this._windowsEvent3d=new qe}useMouseLock(){this.mouseLock||(this.canvas.requestPointerLock(),this.mouseLock=!0,document.addEventListener("mousemove",e=>this.onMouseLockMove(e),!1))}releaseMouseLock(){this.mouseLock=!1,document.exitPointerLock(),document.removeEventListener("mousemove",e=>this.onMouseLockMove(e),!1)}onMouseLockMove(e){this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=e.movementX,this.mouseOffsetY=e.movementY,this._pointerEvent3D.reset(),this._pointerEvent3D.type=k.POINTER_MOVE,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this._pointerEvent3D.movementX=e.movementX,this._pointerEvent3D.movementY=e.movementY,this.dispatchEvent(this._pointerEvent3D)}onPinch(e,t,r,i){this._oldPosition1=new d(e,t),this._oldPosition2=new d(r,i)}onSwipe(e,t){this.mouseX=e,this.mouseY=t,this._oldPosition1=null,this._oldPosition2=null,this._time=new Date().getTime()}_oldPosition1=null;_oldPosition2=null;GetTargetTouches(e){for(var t=new Array,r=0;r<e.length;r++){var i=new kn(e[r]);t.push(i)}return t}rightClick(e){this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.mouseX=e.clientX-this.canvasX,this._pointerEvent3D.mouseY=e.clientY-this.canvasY,this._pointerEvent3D.type=k.POINTER_RIGHT_CLICK,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this.dispatchEvent(this._pointerEvent3D)}middleDown(e){this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.mouseX=e.clientX-this.canvasX,this._pointerEvent3D.mouseY=e.clientY-this.canvasY,this._pointerEvent3D.type=k.POINTER_MID_DOWN,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId?e.pointerId:0,this._pointerEvent3D.pointerType=e.pointerType?e.pointerType:0,this._pointerEvent3D.isPrimary=e.isPrimary?e.isPrimary:0,this._pointerEvent3D.pressure=e.pressure?e.pressure:0,this.dispatchEvent(this._pointerEvent3D)}middleUp(e){this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.mouseX=e.clientX-this.canvasX,this._pointerEvent3D.mouseY=e.clientY-this.canvasY,this._pointerEvent3D.type=k.POINTER_MID_UP,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId,this._pointerEvent3D.pointerType=e.pointerType,this._pointerEvent3D.isPrimary=e.isPrimary,this._pointerEvent3D.pressure=e.pressure,this.dispatchEvent(this._pointerEvent3D)}mouseClick(e){this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.mouseX=e.clientX-this.canvasX,this._pointerEvent3D.mouseY=e.clientY-this.canvasY,this._pointerEvent3D.type=k.POINTER_CLICK,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this.dispatchEvent(this._pointerEvent3D)}_downTime=0;mouseEnd(e){this.isMouseDown=!1,this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._mouseStatus[this._pointerEvent3D.mouseCode]=!1,this._pointerEvent3D.type=k.POINTER_UP,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId,this._pointerEvent3D.pointerType=e.pointerType,this._pointerEvent3D.isPrimary=e.isPrimary,this._pointerEvent3D.pressure=e.pressure,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this.dispatchEvent(this._pointerEvent3D)}mouseStart(e){this.isMouseDown=!0,this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,this._pointerEvent3D.reset(),this._pointerEvent3D.mouseCode=e.button,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId?e.pointerId:0,this._pointerEvent3D.pointerType=e.pointerType?e.pointerType:0,this._pointerEvent3D.isPrimary=e.isPrimary?e.isPrimary:0,this._pointerEvent3D.pressure=e.pressure?e.pressure:0,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this._pointerEvent3D.type=k.POINTER_DOWN,this.dispatchEvent(this._pointerEvent3D)}mouseMove(e){this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,this._pointerEvent3D.reset(),this._pointerEvent3D.type=k.POINTER_MOVE,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId,this._pointerEvent3D.pointerType=e.pointerType,this._pointerEvent3D.isPrimary=e.isPrimary,this._pointerEvent3D.pressure=e.pressure,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this._pointerEvent3D.movementX=e.movementX,this._pointerEvent3D.movementY=e.movementY,this.dispatchEvent(this._pointerEvent3D)}mouseOver(e){this.isMouseDown=!1,this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,this._pointerEvent3D.reset(),this._pointerEvent3D.type=k.POINTER_OVER,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.pointerId=e.pointerId,this._pointerEvent3D.pointerType=e.pointerType,this._pointerEvent3D.isPrimary=e.isPrimary,this._pointerEvent3D.pressure=e.pressure,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this.dispatchEvent(this._pointerEvent3D)}mouseWheel(e){e.preventDefault(),this.mouseLastX=this.mouseX,this.mouseLastY=this.mouseY,this.mouseX=e.clientX-this.canvasX,this.mouseY=e.clientY-this.canvasY,this.mouseOffsetX=this.mouseX-this.mouseLastX,this.mouseOffsetY=this.mouseY-this.mouseLastY,"wheelDelta"in e?(this._pointerEvent3D.delay=e.wheelDelta,this.wheelDelta=e.wheelDelta):"delta"in e&&(this.wheelDelta=e.delta),this._pointerEvent3D.reset(),this._pointerEvent3D.type=k.POINTER_WHEEL,this._pointerEvent3D.ctrlKey=e.ctrlKey,this._pointerEvent3D.metaKey=e.metaKey,this._pointerEvent3D.altKey=e.altKey,this._pointerEvent3D.shiftKey=e.shiftKey,this._pointerEvent3D.mouseX=this.mouseX,this._pointerEvent3D.mouseY=this.mouseY,this._pointerEvent3D.deltaX=e.deltaX,this._pointerEvent3D.deltaY=e.deltaY,this._pointerEvent3D.deltaZ=e.deltaZ,this.dispatchEvent(this._pointerEvent3D)}keyDown(e){this._keyEvent3d.reset(),this._keyEvent3d.keyCode=e.keyCode,this._keyEvent3d.ctrlKey=e.ctrlKey,this._keyEvent3d.altKey=e.altKey,this._keyEvent3d.shiftKey=e.shiftKey,this._keyStatus[e.keyCode]||(this._keyStatus[e.keyCode]=!0,this._keyEvent3d.type=Cr.KEY_DOWN,this.dispatchEvent(this._keyEvent3d))}keyUp(e){this._keyEvent3d.reset(),this._keyEvent3d.keyCode=e.keyCode,this._keyStatus[e.keyCode]=!1,this._keyEvent3d.type=Cr.KEY_UP,this.dispatchEvent(this._keyEvent3d)}GetSlideAngle(e,t){return Math.atan2(t,e)*180/Math.PI}GetSlideDirection(e,t,r,i){var a=t-i,o=r-e,n=0;if(Math.abs(o)<2&&Math.abs(a)<2)return n;var l=this.GetSlideAngle(o,a);return l>=-45&&l<45?n=4:l>=45&&l<135?n=1:l>=-135&&l<-45?n=2:(l>=135&&l<=180||l>=-180&&l<-135)&&(n=3),n}}class Yr extends qe{static RESIZE="resize"}class On extends Er{adapter;device;context;aspect;presentationSize=[0,0];presentationFormat;canvas;windowWidth;windowHeight;canvasConfig;_pixelRatio=1;_resizeEvent;get pixelRatio(){return this._pixelRatio}async init(e){if(this.canvasConfig=e,e&&e.canvas){if(this.canvas=e.canvas,this.canvas===null)throw new Error("no Canvas");this.canvas.style.width||(this.canvas.style.width=this.canvas.width+"px"),this.canvas.style.height||(this.canvas.style.height=this.canvas.height+"px")}else this.canvas=document.createElement("canvas"),this.canvas.style.position="absolute",this.canvas.style.top="0px",this.canvas.style.left="0px",this.canvas.style.width="100%",this.canvas.style.height="100%",this.canvas.style.zIndex=e?.zIndex?e.zIndex.toString():"0",document.body.appendChild(this.canvas);if(e&&e.backgroundImage?(this.canvas.style.background=`url(${e.backgroundImage})`,this.canvas.style["background-size"]="cover",this.canvas.style["background-position"]="center"):this.canvas.style.background="transparent",this.canvas.style["touch-action"]="none",this.canvas.style["object-fit"]="cover",navigator.gpu===void 0)throw new Error("Your browser does not support WebGPU!");if(this.adapter=await navigator.gpu.requestAdapter({powerPreference:"high-performance"}),this.adapter==null)throw new Error("Your browser does not support WebGPU!");if(this.device=await this.adapter.requestDevice({requiredFeatures:["bgra8unorm-storage","depth-clip-control","depth32float-stencil8","indirect-first-instance","rg11b10ufloat-renderable"],requiredLimits:{minUniformBufferOffsetAlignment:256,maxStorageBufferBindingSize:this.adapter.limits.maxStorageBufferBindingSize}}),this.device==null)throw new Error("Your browser does not support WebGPU!");return this._pixelRatio=this.canvasConfig?.devicePixelRatio||window.devicePixelRatio||1,this._pixelRatio=Math.min(this._pixelRatio,2),this.device.label="device",this.presentationFormat=navigator.gpu.getPreferredCanvasFormat(),this.context=this.canvas.getContext("webgpu"),this.context.configure({device:this.device,format:this.presentationFormat,usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,alphaMode:"premultiplied",colorSpace:"srgb"}),this._resizeEvent=new Yr(Yr.RESIZE,{width:this.windowWidth,height:this.windowHeight}),new ResizeObserver(()=>{this.updateSize(),$e.destroyTexture()}).observe(this.canvas),this.updateSize(),!0}updateSize(){let e=Math.floor(this.canvas.clientWidth*this.pixelRatio),t=Math.floor(this.canvas.clientHeight*this.pixelRatio);(e!=this.windowWidth||t!=this.windowHeight)&&(this.canvas.width=this.windowWidth=e,this.canvas.height=this.windowHeight=t,this.presentationSize[0]=this.windowWidth,this.presentationSize[1]=this.windowHeight,this.aspect=this.windowWidth/this.windowHeight,this._resizeEvent.data.width=this.windowWidth,this._resizeEvent.data.height=this.windowHeight,this.dispatchEvent(this._resizeEvent))}}let R=new On;var Be=(s=>(s[s.Default=1]="Default",s[s.IgnoreDepthPass=2]="IgnoreDepthPass",s[s.Sky=6]="Sky",s[s.Particle=10]="Particle",s[s.SkinnedMesh=16]="SkinnedMesh",s[s.MorphTarget=32]="MorphTarget",s[s.Terrain=64]="Terrain",s[s.UI=128]="UI",s[s.Reflection=256]="Reflection",s[s.ReflectionDebug=512]="ReflectionDebug",s[s.Graphic3D=1024]="Graphic3D",s))(Be||{});class Gt{static addMask(e,t){return e|t}static removeMask(e,t){return e&~t}static hasMask(e,t){return(e&t)==t}}class K{static HELP_0=new K;static HELP_1=new K;static HELP_2=new K;static ZERO=new K(0,0);static SAFE_MAX=new K(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);static SAFE_MIN=new K(Number.MIN_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);x=0;y=0;constructor(e=0,t=0){this.x=e,this.y=t}static getAngle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}static slerp(e,t,r){let i=new K,a=e.dot(t);if(a<0&&(t.x=-t.x,t.y=-t.y,a=-a),a>.9995)return i.x=e.x+r*(t.x-e.x),i.y=e.y+r*(t.y-e.y),i;let o=Math.acos(a),n=Math.sin(o),l=Math.sin((1-r)*o)/n,h=Math.sin(r*o)/n;return i.x=l*e.x+h*t.x,i.y=l*e.y+h*t.y,i}static lerp(e,t,r){return K.HELP_0.copyFrom(e),K.HELP_1.copyFrom(t),K.HELP_0.scale(r),K.HELP_1.scale(1-r),new K(K.HELP_0.x+K.HELP_1.x,K.HELP_0.y+K.HELP_1.y)}set(e=0,t=0){return this.x=e,this.y=t,this}distance(e){return Math.sqrt(Math.pow(this.x-e.x,2)+Math.pow(this.y-e.y,2))}add(e,t){return t=t||new K,t.x=this.x+e.x,t.y=this.y+e.y,t}sub(e,t){return t=t||new K,t.x=this.x-e.x,t.y=this.y-e.y,t}scale(e){return this.x=this.x*e,this.y=this.y*e,this}multiply(e,t){return t=t||new K,t.x=this.x*e,t.y=this.y*e,t}multiplyScaler(e){return this.x*=e,this.y*=e,this}divide(e,t){return t=t||new K,t.x=this.x/e,t.y=this.y/e,t}neg(e){return e||(e=new K),e.x=-e.x,e.y=-e.y,e}abs(){return Math.sqrt(this.x*this.x+this.y*this.y)}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}getAngle(e){return Math.atan2(e.y-this.y,e.x-this.x)}unt(e){e=e||new K;let t=this.abs();return e.x=this.x/t,e.y=this.y/t,e}angleTo(e){let t=e.x-this.x,r=e.y-this.y;return Math.atan2(r,t)}equals(e){return Math.abs(this.x-e.x)<1e-6&&Math.abs(this.y-e.y)<1e-6}pal(e){let t=this.unt(),r=e.unt();return t.equals(r)?1:t.equals(r.neg())?-1:0}clone(){return new K(this.x,this.y)}copyFrom(e){return this.x=e.x,this.y=e.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}dot(e){return this.x*e.x+this.y*e.y}normalize(){let e=this.abs();return this.x=this.x/e,this.y=this.y/e,this}addInPlace(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}}class ${static X_AXIS=new $(1,0,0);static Y_AXIS=new $(0,1,0);static Z_AXIS=new $(0,0,1);static HELP_0=new $;static HELP_1=new $;static HELP_2=new $;static EPSILON=1e-5;static HELP_3=new $;static HELP_4=new $;static HELP_5=new $;static HELP_6=new $;static ZERO=new $;static ONE=new $(1,1,1,1);static LEFT=new $(-1,0,0);static RIGHT=new $(1,0,0);static UP=new $(0,-1,0);static DOWN=new $(0,1,0);static BACK=new $(0,0,-1);static FORWARD=new $(0,0,1);x=0;y=0;z=0;w=1;constructor(e=0,t=0,r=0,i=0){this.x=e,this.y=t,this.z=r,this.w=i}get width(){return this.z}get height(){return this.w}static crossVectors(e,t,r){r=r||new $;var i=e.x,a=e.y,o=e.z,n=t.x,l=t.y,h=t.z;return r.x=a*h-o*l,r.y=o*n-i*h,r.z=i*l-a*n,r}static distance(e,t){let r=e.x-t.x,i=e.y-t.y,a=e.z-t.z,o=e.w-t.w;return Math.sqrt(r*r+i*i+a*a+o*o)}set(e,t,r,i){return this.x=e,this.y=t,this.z=r,this.w=i,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}copyFrom(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}clone(){return new $(this.x,this.y,this.z,this.w)}}function Ys(s,e){let t=s.__NonSerialize__;t||(t=s.__NonSerialize__={},t.__NonSerialize__=!0),t[e]=!0}function Xs(s,e){let t;for(;s&&(s=s.__proto__,s&&(t=s.__NonSerialize__),!t););return t&&t[e]}function zi(s,e,t,r,i){let a=s.__EditorInspector__;a||(a=s.__EditorInspector__=new Map);let o=a.get(s.constructor.name);o||(o=new Map,a.set(s.constructor.name,o)),o.set(e,{p1:t,p2:r,p3:i})}function Pd(s){let e,t=s,r=[];for(;t;){if(r.indexOf(t.constructor.name)!=-1){t=t.__proto__;continue}r.push(t.constructor.name),t=t.__proto__}for(r=r.reverse(),t=s;t&&(t=t.__proto__,t&&(e=t.__EditorInspector__),!e););let i=new Map;if(e)for(let a=0;a<r.length;a++){const o=r[a];let n=e.get(o);n&&n.forEach((l,h)=>{i.set(h,l)})}return i}function Wt(s,e,t,r,i){let a=window.__Component__;a||(a=window.__Component__={}),a[e]=s}function zn(s){let e=window.__Component__;return e[s]?e[s]:null}function yi(s,e,t,r,i){let a=window.__shader__;a||(a=window.__shader__={}),a[e]=s}function Gn(s){let e=window.__shader__;return e[s]?e[s]:null}var kd=Object.defineProperty,Wn=(s,e,t,r)=>{for(var i=void 0,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(e,t,i)||i);return i&&kd(e,t,i),i};const Hs=class Pa{__refection;__size=0;getValueType(){if(!this.__refection){let e=this;this.__refection=[];for(const t in e)if(!Xs(this,t)){const r=e[t];let i={name:t,type:r.constructor.name};this.__refection.push(i)}}return this.__refection}static getValueSize(e){switch(e.constructor.name){case"Boolean":return 4;case"Number":return 4;case"f32":return 4;case"i32":return 4;case"u32":return 4;case"Float32Array":return e.byteLength;case"Vector2":return 8;case"Vector3":return 12;case"Vector4":return 16;case"Color":return 16;case"Array":let r=0;for(let i=0,a=e.length;i<a;i++)r+=Pa.getValueSize(e[i]);return r}return 0}static __cacheStruct=new Map;static Ref(e){return this.Get(e).getValueType()}static Get(e){let t=Pa.__cacheStruct.get(e.prototype);return t||(t=new e,Pa.__cacheStruct.set(e.prototype,t)),t}static GetSize(e){let t=this.Get(e);if(t.__size==0){for(const r in t)if(!Xs(t,r)){const i=t[r];t.__size+=Pa.getValueSize(i)}t.__size>4&&(t.__size=Math.ceil(t.__size/4)*4)}return t.__size}};Wn([Ys],Hs.prototype,"__refection"),Wn([Ys],Hs.prototype,"__size");let la=Hs;class Jn{byteOffset;byteSize;offset=0;dataBytes;get x(){return this.dataBytes.getFloat32(0*Float32Array.BYTES_PER_ELEMENT,!0)}set x(e){this.dataBytes.setFloat32(0*Float32Array.BYTES_PER_ELEMENT,e,!0)}get y(){return this.dataBytes.getFloat32(1*Float32Array.BYTES_PER_ELEMENT,!0)}set y(e){this.dataBytes.setFloat32(1*Float32Array.BYTES_PER_ELEMENT,e,!0)}get z(){return this.dataBytes.getFloat32(2*Float32Array.BYTES_PER_ELEMENT,!0)}set z(e){this.dataBytes.setFloat32(2*Float32Array.BYTES_PER_ELEMENT,e,!0)}get w(){return this.dataBytes.getFloat32(3*Float32Array.BYTES_PER_ELEMENT,!0)}set w(e){this.dataBytes.setFloat32(3*Float32Array.BYTES_PER_ELEMENT,e,!0)}setX(e){this.x=e}setXY(e,t){this.x=e,this.y=t}setXYZ(e,t,r){this.x=e,this.y=t,this.z=r}setXYZW(e,t,r,i){this.x=e,this.y=t,this.z=r,this.w=i}setVector2Array(e){for(let t=0;t<e.length;t++){const r=e[t];this.dataBytes.setFloat32((t*2+0)*Float32Array.BYTES_PER_ELEMENT,r.x,!0),this.dataBytes.setFloat32((t*2+1)*Float32Array.BYTES_PER_ELEMENT,r.y,!0)}}setVector3Array(e){for(let t=0;t<e.length;t++){const r=e[t];this.dataBytes.setFloat32((t*3+0)*Float32Array.BYTES_PER_ELEMENT,r.x,!0),this.dataBytes.setFloat32((t*3+1)*Float32Array.BYTES_PER_ELEMENT,r.y,!0),this.dataBytes.setFloat32((t*3+2)*Float32Array.BYTES_PER_ELEMENT,r.z,!0)}}setVector4Array(e){for(let t=0;t<e.length;t++){const r=e[t];this.dataBytes.setFloat32((t*4+0)*Float32Array.BYTES_PER_ELEMENT,r.x,!0),this.dataBytes.setFloat32((t*4+1)*Float32Array.BYTES_PER_ELEMENT,r.y,!0),this.dataBytes.setFloat32((t*4+2)*Float32Array.BYTES_PER_ELEMENT,r.z,!0),this.dataBytes.setFloat32((t*4+3)*Float32Array.BYTES_PER_ELEMENT,r.w,!0)}}setColorArray(e){for(let t=0;t<e.length;t++){const r=e[t];this.dataBytes.setFloat32((t*4+0)*Float32Array.BYTES_PER_ELEMENT,r.r,!0),this.dataBytes.setFloat32((t*4+1)*Float32Array.BYTES_PER_ELEMENT,r.g,!0),this.dataBytes.setFloat32((t*4+2)*Float32Array.BYTES_PER_ELEMENT,r.b,!0),this.dataBytes.setFloat32((t*4+3)*Float32Array.BYTES_PER_ELEMENT,r.a,!0)}}setInt8(e,t=0){this.dataBytes.setInt8(t*Int8Array.BYTES_PER_ELEMENT,e)}getInt8(e=0){return this.dataBytes.getInt8(e*Int8Array.BYTES_PER_ELEMENT)}setInt16(e,t=0){this.dataBytes.setInt16(t*Int16Array.BYTES_PER_ELEMENT,e,!0)}getInt16(e=0){return this.dataBytes.getInt16(e*Int16Array.BYTES_PER_ELEMENT,!0)}setInt32(e,t=0){this.dataBytes.setInt32(t*Int32Array.BYTES_PER_ELEMENT,e,!0)}getInt32(e=0){return this.dataBytes.getInt32(e*Int32Array.BYTES_PER_ELEMENT,!0)}setFloat(e,t=0){this.dataBytes.setFloat32(t*Float32Array.BYTES_PER_ELEMENT,e,!0)}getFloat(e=0){return this.dataBytes.getFloat32(e*Float32Array.BYTES_PER_ELEMENT,!0)}setUint8(e,t=0){this.dataBytes.setUint8(t*Uint8Array.BYTES_PER_ELEMENT,e)}getUint8(e=0){return this.dataBytes.getUint8(e*Uint8Array.BYTES_PER_ELEMENT)}setUint16(e,t=0){this.dataBytes.setUint16(t*Uint16Array.BYTES_PER_ELEMENT,e,!0)}getUint16(e=0){return this.dataBytes.getUint16(e*Uint16Array.BYTES_PER_ELEMENT,!0)}setUint32(e,t=0){this.dataBytes.setUint32(t*Uint32Array.BYTES_PER_ELEMENT,e,!0)}getUint32(e=0){return this.dataBytes.getUint32(e*Uint32Array.BYTES_PER_ELEMENT,!0)}setArray(e,t){for(let r=0;r<t.length;r++){const i=t[r];this.dataBytes.setFloat32((e+r)*Float32Array.BYTES_PER_ELEMENT,i,!0)}}setFloat32Array(e,t){new Float32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Float32Array.BYTES_PER_ELEMENT,t.length).set(t)}setFloatArray(e,t){let r;t instanceof Float32Array?r=t:r=new Float32Array(t),new Float32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Float32Array.BYTES_PER_ELEMENT,r.length).set(r)}setArrayBuffer(e,t){t instanceof Uint8Array?this.setUint8Array(e,t):t instanceof Uint16Array?this.setUint16Array(e,t):t instanceof Uint32Array?this.setUint32Array(e,t):t instanceof Int8Array?this.setInt8Array(e,t):t instanceof Int16Array?this.setInt16Array(e,t):t instanceof Int32Array?this.setInt32Array(e,t):t instanceof Float32Array&&this.setFloat32Array(e,t)}setInt8Array(e,t){new Int8Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Int8Array.BYTES_PER_ELEMENT).set(t)}setInt16Array(e,t){new Int16Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Int16Array.BYTES_PER_ELEMENT).set(t)}setInt32Array(e,t){new Int32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Int32Array.BYTES_PER_ELEMENT).set(t)}setUint8Array(e,t){new Uint8Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Uint8Array.BYTES_PER_ELEMENT).set(t)}setUint16Array(e,t){new Uint16Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Uint16Array.BYTES_PER_ELEMENT).set(t)}setUint32Array(e,t){new Uint32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+e*Uint32Array.BYTES_PER_ELEMENT).set(t)}setData(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t,!0)}setVector2(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t.x,!0),this.dataBytes.setFloat32((e+1)*Float32Array.BYTES_PER_ELEMENT,t.y,!0)}setVector3(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t.x,!0),this.dataBytes.setFloat32((e+1)*Float32Array.BYTES_PER_ELEMENT,t.y,!0),this.dataBytes.setFloat32((e+2)*Float32Array.BYTES_PER_ELEMENT,t.z,!0)}setVector4(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t.x,!0),this.dataBytes.setFloat32((e+1)*Float32Array.BYTES_PER_ELEMENT,t.y,!0),this.dataBytes.setFloat32((e+2)*Float32Array.BYTES_PER_ELEMENT,t.z,!0),this.dataBytes.setFloat32((e+3)*Float32Array.BYTES_PER_ELEMENT,t.w,!0)}setColor(e,t){this.dataBytes.setFloat32(e*Float32Array.BYTES_PER_ELEMENT,t.r,!0),this.dataBytes.setFloat32((e+1)*Float32Array.BYTES_PER_ELEMENT,t.g,!0),this.dataBytes.setFloat32((e+2)*Float32Array.BYTES_PER_ELEMENT,t.b,!0),this.dataBytes.setFloat32((e+3)*Float32Array.BYTES_PER_ELEMENT,t.a,!0)}getData(e){return this.dataBytes.getFloat32(e*Float32Array.BYTES_PER_ELEMENT,!0)}writeFloat(e){this.dataBytes.setFloat32(this.offset,e,!0),this.offset+=Float32Array.BYTES_PER_ELEMENT}writeInt8(e){this.dataBytes.setInt8(this.offset,e),this.offset+=Int8Array.BYTES_PER_ELEMENT}writeInt16(e){this.dataBytes.setInt16(this.offset,e,!0),this.offset+=Int16Array.BYTES_PER_ELEMENT}writeInt32(e){this.dataBytes.setInt32(this.offset,e,!0),this.offset+=Int32Array.BYTES_PER_ELEMENT}writeUint8(e){this.dataBytes.setUint8(this.offset,e),this.offset+=Uint8Array.BYTES_PER_ELEMENT}writeUint16(e){this.dataBytes.setUint16(this.offset,e,!0),this.offset+=Uint16Array.BYTES_PER_ELEMENT}writeUint32(e){this.dataBytes.setUint32(this.offset,e,!0),this.offset+=Uint32Array.BYTES_PER_ELEMENT}writeVector2(e){this.writeFloat(e.x),this.writeFloat(e.y)}writeVector3(e){this.writeFloat(e.x),this.writeFloat(e.y),this.writeFloat(e.z)}writeVector4(e){this.writeFloat(e.x),this.writeFloat(e.y),this.writeFloat(e.z),this.writeFloat(e.w)}writeRGBColor(e){this.writeFloat(e.r),this.writeFloat(e.g),this.writeFloat(e.b)}writeArray(e){for(let t=0;t<e.length;t++){const r=e[t];this.writeFloat(r)}}writeFloat32Array(e){new Float32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeInt8Array(e){new Int8Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeInt16Array(e){new Int16Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeInt32Array(e){new Int32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeUint8Array(e){new Uint8Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeUint16Array(e){new Uint16Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}writeUint32Array(e){new Uint32Array(this.dataBytes.buffer,this.dataBytes.byteOffset+this.offset).set(e),this.offset+=e.byteLength}reset(){this.offset=0}destroy(){this.byteOffset=null,this.byteSize=null,this.offset=null,this.dataBytes=null}}class Xr{shareDataBuffer;_byteOffset=0;allocation(e){this.shareDataBuffer&&this.shareDataBuffer.byteLength<e?this._byteOffset=0:this.shareDataBuffer=new ArrayBuffer(e)}allocation_node(e){if(this._byteOffset+e>this.shareDataBuffer.byteLength)return console.error("memory not enough!",this._byteOffset,e,this.shareDataBuffer.byteLength),null;let t=new Jn;return t.byteOffset=this._byteOffset,t.byteSize=e,t.dataBytes=new DataView(this.shareDataBuffer,this._byteOffset,t.byteSize),this._byteOffset+=t.byteSize,t}allocation_memory(e){return this._byteOffset+e.byteSize>this.shareDataBuffer.byteLength?(console.error("memory not enough!",this._byteOffset,e.byteSize,this.shareDataBuffer.byteLength),null):(e.byteOffset=this._byteOffset,e.dataBytes=new DataView(this.shareDataBuffer,this._byteOffset,e.byteSize),this._byteOffset+=e.byteSize,e)}reset(){this._byteOffset=0}destroy(e){this.shareDataBuffer=null,this._byteOffset=0}}class wr{bufferType;buffer;memory;memoryNodes;seek;outFloat32Array;byteSize;usage;visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE;mapAsyncBuffersOutstanding=0;mapAsyncReady;_readBuffer;_dataView;constructor(){this.mapAsyncReady=[]}debug(){}reset(e=!1,t=0,r){this.seek=0,this.memory.reset(),e&&this.createBuffer(this.usage,t,r)}setBoolean(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(4),this.memoryNodes.set(e,r)),r.setX(t?1:0)}readBoole(e){let t=this.memoryNodes.get(e);return t?t.getFloat()!=0:null}setFloat(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(4),this.memoryNodes.set(e,r)),r.setX(t)}getFloat(e){let t=this.memoryNodes.get(e);return t?t.getFloat():null}setInt8(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(1),this.memoryNodes.set(e,r)),r.setInt8(t)}getInt8(e){let t=this.memoryNodes.get(e);return t?t.getInt8():null}setInt16(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(2),this.memoryNodes.set(e,r)),r.setInt16(t)}getInt16(e){let t=this.memoryNodes.get(e);return t?t.getInt16():null}setInt32(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(4),this.memoryNodes.set(e,r)),r.setInt32(t)}getInt32(e){let t=this.memoryNodes.get(e);return t?t.getInt32():null}setUint8(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(1),this.memoryNodes.set(e,r)),r.setUint8(t)}getUint8(e){let t=this.memoryNodes.get(e);return t?t.getUint8():null}setUint16(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(2),this.memoryNodes.set(e,r)),r.setUint16(t)}getUint16(e){let t=this.memoryNodes.get(e);return t?t.getUint16():null}setUint32(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(4),this.memoryNodes.set(e,r)),r.setUint32(t)}getUint32(e){let t=this.memoryNodes.get(e);return t?t.getUint32():null}setVector2(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(8),this.memoryNodes.set(e,r)),r.setXY(t.x,t.y)}getVector2(e){let t=this.memoryNodes.get(e);return t?new K(t.x,t.y):null}setVector3(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(12),this.memoryNodes.set(e,r)),r.setXYZ(t.x,t.y,t.z)}getVector3(e){let t=this.memoryNodes.get(e);return t?new d(t.x,t.y,t.z):null}setVector4(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(16),this.memoryNodes.set(e,r)),r.setXYZW(t.x,t.y,t.z,t.w)}getVector4(e){let t=this.memoryNodes.get(e);return t?new $(t.x,t.y,t.z,t.w):null}setVector4Array(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(16*t.length),this.memoryNodes.set(e,r)),r.setVector4Array(t)}setColor(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(16),this.memoryNodes.set(e,r)),r.setXYZW(t.r,t.g,t.b,t.a)}getColor(e){let t=this.memoryNodes.get(e);return t?new P(t.x,t.y,t.z,t.w):null}setColorArray(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(16*t.length),this.memoryNodes.set(e,r)),r.setColorArray(t)}setMatrix(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(64),this.memoryNodes.set(e,r)),r.setFloatArray(0,t.rawData)}setMatrixArray(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(64*t.length),this.memoryNodes.set(e,r));for(let i=0;i<t.length;i++){const a=t[i];r.setFloatArray(i*16,a.rawData)}}setArray(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(t.length*4),this.memoryNodes.set(e,r)),r.setArray(0,t)}setFloat32Array(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(t.length*4),this.memoryNodes.set(e,r)),r.setFloat32Array(0,t)}setInt32Array(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(t.length*4),this.memoryNodes.set(e,r)),r.setInt32Array(0,t)}setUint32Array(e,t){let r=this.memoryNodes.get(e);r||(r=this.memory.allocation_node(t.length*4),this.memoryNodes.set(e,r)),r.setUint32Array(0,t)}setStruct(e,t,r,i){let a=la.Ref(e);la.GetSize(e);let o=t,n=this.memoryNodes.get(o);n.reset();let l=r;i&&(l=l[i]);for(let h=0;h<a.length;h++){const u=a[h];let c=l[u.name];this.writeValue(n,u,c)}}writeValue(e,t,r){switch(t.type){case"Boolean":e.writeFloat(r);break;case"Number":e.writeFloat(r);break;case"Float32Array":e.writeFloat32Array(r);break;case"Float64Array":e.writeFloat32Array(new Float32Array(r));break;case"Vector2":e.writeVector2(r);break;case"Vector3":e.writeVector3(r);break;case"Vector4":e.writeVector4(r);break;case"Color":e.writeRGBColor(r);break;case"Array":e.writeArray(r);break}}setStructArray(e,t,r){let i=t.length;for(let a=0;a<i;a++){const o=t[a];this.setStruct(e,a,o,r)}}clean(){this._dataView.fill(0,0,this._dataView.length)}apply(){R.device.queue.writeBuffer(this.buffer,0,this.memory.shareDataBuffer)}mapAsyncWrite(e,t){let r;e instanceof Float64Array?r=new Float32Array(e):r=e;let i=R.device;if(r.length>0){let a=null;for(;this.mapAsyncReady.length&&(a=this.mapAsyncReady.shift(),a.usedSize!=r.byteLength);)a.destroy(),this.mapAsyncBuffersOutstanding--,a=null;a||(a=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_SRC|GPUBufferUsage.MAP_WRITE,mappedAtCreation:!0}),a.usedSize=r.byteLength,this.mapAsyncBuffersOutstanding++,this.mapAsyncBuffersOutstanding>20&&console.warn(` Warning: mapAsync requests from ${this.mapAsyncBuffersOutstanding} frames ago have not resolved yet. MB of staging buffers allocated.`));let o=new Float32Array(r.buffer,r.byteOffset,t);new Float32Array(a.getMappedRange(0,t*4)).set(o),a.unmap();const l=i.createCommandEncoder();l.copyBufferToBuffer(a,0,this.buffer,0,t*4),i.queue.submit([l.finish()]),a.mapAsync(GPUMapMode.WRITE).then(()=>this.mapAsyncReady.push(a))}}destroy(e){this.memoryNodes&&this.memoryNodes.forEach(t=>{t.destroy()}),this.bufferType=null,this.seek=null,this.byteSize=null,this.usage=null,this.visibility=null,this.outFloat32Array=null,this.buffer&&this.buffer.destroy(),this.buffer=null,this.memory&&this.memory.destroy(),this.memory=null,this._readBuffer&&this._readBuffer.destroy()}createBuffer(e,t,r,i){let a=R.device;if(this.buffer&&this.destroy(),this.byteSize=t*4,this.usage=e,this.buffer=a.createBuffer({label:i,size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new Xr,this.memoryNodes=new Map,this._dataView=new Float32Array(this.memory.shareDataBuffer),this.memory.allocation(this.byteSize),r){let o=this.memory.allocation_node(r.length*4);const n=r.buffer instanceof ArrayBuffer?r.buffer:new Uint8Array(r.buffer).buffer;o.setArrayBuffer(0,n),this.apply()}}resizeBuffer(e,t){this.createBuffer(this.usage,e,t)}createNewBuffer(e,t){let r=R.device,i=t*4,a=e;return this.buffer&&this.destroy(),r.createBuffer({size:i,usage:a,mappedAtCreation:!1})}createBufferByStruct(e,t,r){let i=la.GetSize(t),a=i*r,o=R.device;this.buffer=o.createBuffer({label:"StructStorageGPUBuffer",size:a,usage:e,mappedAtCreation:!1}),this.memory=new Xr,this.memoryNodes=new Map,this._dataView=new Float32Array(this.memory.shareDataBuffer),this.memory.allocation(a);for(let n=0;n<r;n++){let l=n,h=this.memoryNodes.get(l);h||(h=this.memory.allocation_node(i),this.memoryNodes.set(l,h))}}readBuffer(e=!1){this.outFloat32Array||=new Float32Array(this.memory.shareDataBuffer.byteLength/4),this._readBuffer||(this._readBuffer=R.device.createBuffer({size:this.memory.shareDataBuffer.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,mappedAtCreation:!1}));let t=this.read();return e?t:this.outFloat32Array}_readFlag=!1;async read(){if(!this._readFlag){this._readFlag=!0;let e=R.device.createCommandEncoder();e.copyBufferToBuffer(this.buffer,0,this._readBuffer,0,this.memory.shareDataBuffer.byteLength),R.device.queue.submit([e.finish()]),await this._readBuffer.mapAsync(GPUMapMode.READ);const t=this._readBuffer.getMappedRange();this.outFloat32Array.set(new Float32Array(t),0),this._readBuffer.unmap(),this._readFlag=!1}return this.outFloat32Array}}var tr=(s=>(s[s.IndicesGPUBuffer=0]="IndicesGPUBuffer",s[s.VertexGPUBuffer=1]="VertexGPUBuffer",s[s.UniformGPUBuffer=2]="UniformGPUBuffer",s[s.StorageGPUBuffer=3]="StorageGPUBuffer",s[s.ComputeGPUBuffer=4]="ComputeGPUBuffer",s[s.MaterialDataUniformGPUBuffer=5]="MaterialDataUniformGPUBuffer",s[s.StructStorageGPUBuffer=6]="StructStorageGPUBuffer",s))(tr||{});class ve extends wr{constructor(e,t=0,r){super(),this.bufferType=tr.StorageGPUBuffer,this.createBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|t,e,r,"StorageGPUBuffer")}}class ht extends wr{constructor(e,t){super(),this.bufferType=tr.UniformGPUBuffer,this.createBuffer(GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,e,t,"UniformGPUBuffer")}genUniformNodes(){}}class Vt{static getMorphTargetShaderBinding(e,t){return`
|
|
2
2
|
fn blendMorphTargetPosition(vertexID:i32, posIn:vec3<f32>) -> vec3<f32>{
|
|
3
3
|
let offset:i32 = vertexID * 3;
|
|
4
4
|
var pos = posIn * morphTargetConfig:morphBaseInfluence;
|
|
@@ -5451,11 +5451,11 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
5451
5451
|
`),o=[!1],n=[!1];for(let l=0;l<a.length;l++){let h=a[l],u=o[o.length-1];if(h.trim().indexOf("#")!=0){u||(i+=h+`
|
|
5452
5452
|
`);continue}let c=h.trim();if(c.indexOf("#if")!=-1){if(u&&o.length>1){o.push(u);continue}let f=c.substring(3).trim();u=!this.parseCondition(f,r),o.push(u),n.push(!u);continue}else if(c.indexOf("#elseif")!=-1||c.indexOf("#else")!=-1&&c.indexOf(" if")!=-1){if(n[n.length-1]){o.pop(),u=!0,o.push(u);continue}if(o.pop(),u=o[o.length-1],u&&o.length>1){o.push(u);continue}let g=c.substring(c.indexOf("if")+2).trim();g==""&&console.error(`preprocess command error, conditions missing: ${c}`),u=!this.parseCondition(g,r),o.push(u),n.push(!u);continue}else if(c.indexOf("#else")!=-1){o.pop(),u&&o.length>1&&o[o.length-1]?o.push(u):o.push(!u);continue}else if(c.indexOf("#endif")!=-1){o.pop(),n.pop();continue}else if(c.indexOf("#include")!=-1){let f="",g=c.charAt(c.length-1);if(g==">"?f=this.extract(c,"<",">"):f=this.extract(c,g,g),!e.includeMap.has(f)){e.includeMap.set(f,!0);let p=O.getShader(f);if(!p)throw`${c} error: '${f}' not found`;p=this.filterComment(p),p=this.parsePreprocess(e,p,r),i+=p+`\r
|
|
5453
5453
|
`}continue}else if(c.indexOf("#define ")!=-1){let f=c.substring(c.indexOf("#define ")+8).trim(),g=f.indexOf(" "),p=f,A="";g!=-1&&(p=f.substring(0,g).trim(),A=f.substring(g+1).trim()),r[p]=A;continue}else throw"nonsupport: "+c}return i}static parseCondition(e,t){let r=t[e];return r==null?!1:r==!0||r!=0}static filterComment(e){let t="",r=!0,i=!0;for(let a=0;a<e.length;){let o=r?e.indexOf("//",a):-1,n=i?e.indexOf("/*",a):-1;if(o==-1&&n==-1){t+=e.substring(a);break}r=o!=-1,i=n!=-1,o!=-1&&n!=-1&&(o<n?n=-1:o=-1),o!=-1?(n=e.indexOf(`
|
|
5454
|
-
`,o),t+=e.substring(a,o),a=n!=-1?n:e.length):n!=-1&&(o=e.indexOf("*/",n),t+=e.substring(a,n),a=o+2)}return t}static extract(e,t,r){let i=e.indexOf(t)+t.length,a=e.indexOf(r,i);return e.substring(i,a).trim()}}class Xl{includeMap=new Map;constructor(){}}class
|
|
5454
|
+
`,o),t+=e.substring(a,o),a=n!=-1?n:e.length):n!=-1&&(o=e.indexOf("*/",n),t+=e.substring(a,n),a=o+2)}return t}static extract(e,t,r){let i=e.indexOf(t)+t.length,a=e.indexOf(r,i);return e.substring(i,a).trim()}}class Xl{includeMap=new Map;constructor(){}}class Bt{static _shaderReflectionMap=new Map;attributes=[];vs_variables=[];fs_variables=[];cs_variables=[];groups=[];variables={};useSplit=!1;static parser(e,t){t.shaderReflection||(t.shaderReflection=new Bt),e.indexOf("@vertex")!=-1?(t.shaderReflection.attributes=this.parserVertexOld(e),t.shaderReflection.vs_variables=this.parserVariables(e)):e.indexOf("@fragment")!=-1?t.shaderReflection.fs_variables=this.parserVariables(e):e.indexOf("@compute")!=-1&&(t.shaderReflection.cs_variables=this.parserVariables(e))}static parser2(e,t){t.shaderReflection||(t.shaderReflection=new Bt);let r=t.shaderReflection;e.indexOf("@vertex")!=-1?(r.attributes=this.parserVertex(t.vsEntryPoint,e),r.vs_variables=this.parserVariables(e)):e.indexOf("@fragment")!=-1?r.fs_variables=this.parserVariables(e):e.indexOf("@compute")!=-1&&(r.cs_variables=this.parserVariables(e)),e.indexOf("splitTexture")!=-1&&(r.useSplit=!0)}static combineShaderReflectionVarInfo(e,t){for(const r of t){e.groups[r.group]||(e.groups[r.group]=[]);let i=r;if(e.groups[r.group][r.binding]){let a=e.groups[r.group][r.binding],o=r;if(a.dataFields)for(let n=0;n<a.dataFields.length;n++)a.dataFields[n];if(o.dataFields)for(let n=0;n<o.dataFields.length;n++)o.dataFields[n]}e.groups[r.group][r.binding]=i,e.variables[r.varName]=i}}static final(e){let t=e.shaderReflection;this._shaderReflectionMap.set(e.shaderVariant,t),this.combineShaderReflectionVarInfo(t,t.vs_variables),this.combineShaderReflectionVarInfo(t,t.fs_variables)}static getShaderReflection2(e,t){let r=rr.parse(e,t.defineValue);Bt.parser2(r,t)}static poolGetReflection(e){return this._shaderReflectionMap.get(e)}static genShaderVar(e){let t=`${e.vs}${e.fs}${e.compute}`;t+="|";for(const r in e.uniforms)t+=r+":";t+="|";for(const r in e.constValues)t+=r+":",t+=e.constValues[r];t+="|";for(const r in e.defines)t+=r+":",t+=e.defines[r];t+="|";for(const r in e.shaderState)t+=r+":",t+=e.shaderState[r]+";";return t}static genShaderVariant(e){let t="";for(const r in e.uniforms)t+=r+":";t+="|";for(const r in e.constValues)t+=r+":",t+=e.constValues[r];t+="|";for(const r in e.defineValue)t+=r+":",t+=e.defineValue[r];return t}static genRenderShaderVariant(e){let t=`RenderShader(${e.vsName},${e.fsName})`;t+="|",t+=this.genShaderVariant(e),t+="|";for(const r in e.shaderState)t+=r+":",t+=e.shaderState[r]+";";return t}static genComputeShaderVariant(e){let t=`ComputeShader(${e.instanceID})`;return t+="|",t+=this.genShaderVariant(e),t}combine(e){let t=e.shaderReflection,r=e.defines,i={};for(let o=0;o<this.attributes.length;o++){let n=this.attributes[o];r[n.name]&&(i[n.name]=n)}let a=t.attributes.length;for(let o=0;o<a;o++){const n=t.attributes[o];if(!i[n.name])this.attributes.push(n);else{let l=i[n.name];l.location==n.location&&l.name!=n.name&&console.log("location must same!")}}}static parserVariables(e){let t=0,r=[];for(;t<e.length;){let i=e.indexOf("@group(",t);if(i<0)break;let a=e.indexOf(";",i);t=a;let o=e.substring(i,a),n=this.extract(o,"@group(",")"),l=this.extract(o,"@binding(",")"),h="",u="var";o.indexOf("var<")!=-1?(h=this.extract(o,">",":"),u=this.extract(o,"var<",">").replace(",","-").replaceAll(" ","")):h=this.extract(o,"var",":");let c=o.substring(o.lastIndexOf(":")+1).trim(),f={group:0,binding:0,varType:"",varName:"",dataType:"",dataIsBuiltinType:!0,dataFields:null};f.group=Number.parseInt(n),f.binding=Number.parseInt(l),f.varType=u,f.varName=h,f.dataType=c,f.dataIsBuiltinType=this.isBuiltinTypes(f.dataType),f.dataIsBuiltinType||(f.dataFields=this.parserStructFields(e,f.dataType)),r.push(f)}return r}static extract(e,t,r){let i=e.indexOf(t)+t.length,a=e.indexOf(r,i);return e.substring(i,a).trim()}static isBuiltinTypes(e){switch(e){case"i32":return!0;case"u32":return!0;case"f32":return!0;default:let t=e.indexOf("<");if(t!=-1)switch(e.substring(0,t)){case"vec2":return!0;case"vec3":return!0;case"vec4":return!0;case"mat3":return!0;case"mat4":return!0;case"array":return this.isBuiltinTypes(e.substring(t+1,e.lastIndexOf(">")))}break}return!1}static parserStructFields(e,t){let r=[],i=0;for(;i<e.length;){let a=e.indexOf("struct ",i);if(a<0)break;let o=e.indexOf("{",a);if(i=o,e.substring(a+6,o).trim()===t){a=e.indexOf("{",a),o=e.indexOf("}",a);let h=e.substring(a+1,o).split(",");for(let u of h){let c=u.indexOf(":");if(c!=-1){let f={name:u.substring(0,c).trim(),type:u.substring(c+1).trim()};r.push(f)}}break}}return r}static parserVertexOld(e){let t=[],i=e.split("fn main(")[1].split("->")[0],a=i.split("@");if(a&&a.length>1)for(let n=1;n<a.length;n++){let h=a[n].replace(/\s*$/g,"");h=h.replaceAll(",",""),h=h.replaceAll(`
|
|
5455
5455
|
`,""),h=h.replaceAll(" "," "),this.parserAttribute(h,t)}else{var o=i.split(":")[1];o=o.replaceAll(" ",""),o=o.replaceAll(" ",""),o=o.replaceAll(")",""),o=e.split(`struct ${o}`)[1];let l=o.indexOf("{"),h=o.indexOf("}");o=o.slice(l,h),a=o.split("@");for(let u=1;u<a.length;u++){let f=a[u].replace(/\s*$/g,"");f=f.replaceAll(`
|
|
5456
5456
|
`,""),f=f.split(",")[0],f=f.replaceAll(" "," "),this.parserAttribute(f,t)}}return t}static parserVertex(e,t){let r=[],a=t.split(`fn ${e}(`)[1].split("->")[0],o=a.split("@");if(o&&o.length>1)for(let l=1;l<o.length;l++){let u=o[l].replace(/\s*$/g,"");u=u.replaceAll(",",""),u=u.replaceAll(`
|
|
5457
5457
|
`,""),u=u.replaceAll(" "," "),this.parserAttribute(u,r)}else{var n=a.split(":")[1];n=n.replaceAll(" ",""),n=n.replaceAll(" ",""),n=n.replaceAll(")",""),n=t.split(`struct ${n}`)[1];let h=n.indexOf("{"),u=n.indexOf("}");n=n.slice(h,u),o=n.split("@");for(let c=1;c<o.length;c++){let g=o[c].replace(/\s*$/g,"");g=g.replaceAll(`
|
|
5458
|
-
`,""),g=g.split(",")[0],g=g.replaceAll(" "," "),this.parserAttribute(g,r)}}return r}static parserAttribute(e,t){let r={name:"",group:0,location:0,type:"",valueType:"",value:0,size:0,format:"float32"};if(e.indexOf("builtin")!=-1){r.type="builtin";var i=e.match(/\((.+?)\)/g)[0];i=e.match(/\((.+?)\)/g)[0],i=i.replace("(",""),i=i.replaceAll(")",""),r.location=parseInt(i);let a=e.split(":");r.name=a[0].split(" ")[1],r.name=r.name.replaceAll(" "," "),r.name=r.name.replaceAll(" ",""),r.valueType=a[1],r.valueType=r.valueType.replaceAll(" "," "),r.valueType=r.valueType.replaceAll(" ",""),r.valueType=r.valueType.replaceAll("\r",""),r.valueType=r.valueType.replaceAll(")",""),r.valueType=r.valueType.replaceAll(")",""),r.size=jr[r.valueType],t.push(r)}else if(e.indexOf("location")!=-1){r.type="location";var i=e.match(/\((.+?)\)/g)[0];i=e.match(/\((.+?)\)/g)[0],i=i.replace("(",""),i=i.replaceAll(")",""),r.location=parseInt(i);let o=e.split(":");r.name=o[0].split(" ")[1],r.name=r.name.replaceAll(" "," "),r.name=r.name.replaceAll(" ",""),r.valueType=o[1],r.valueType=r.valueType.replaceAll(" "," "),r.valueType=r.valueType.replaceAll(" ",""),r.valueType=r.valueType.replaceAll("\r",""),r.valueType=r.valueType.replaceAll(")",""),r.valueType=r.valueType.replaceAll(")",""),r.size=jr[r.valueType],t.push(r)}r.format=Yn[jr[r.valueType]]}}class ue extends Ks{entryPoint="CsMain";workerSizeX=1;workerSizeY=0;workerSizeZ=0;_computePipeline;_csShaderModule;_destCS;_sourceCS;_storageTextureDic;_sampleTextureDic;_groupsShaderReflectionVarInfos;_groupCache={};constructor(e){super(),this._sourceCS=e,xt.getShaderReflection2(e,this),this._storageTextureDic=new Map,this._sampleTextureDic=new Map}setStorageTexture(e,t){this._storageTextureDic.has(e)||this._storageTextureDic.set(e,t)}setSamplerTexture(e,t){this._sampleTextureDic.set(e,t)}compute(e){this._computePipeline||this.genComputePipeline(),e.setPipeline(this._computePipeline);for(let t=0;t<this.bindGroups.length;++t)e.setBindGroup(t,this.bindGroups[t]);this.workerSizeX&&this.workerSizeY&&this.workerSizeZ?e.dispatchWorkgroups(this.workerSizeX,this.workerSizeY,this.workerSizeZ):this.workerSizeX&&this.workerSizeY?e.dispatchWorkgroups(this.workerSizeX,this.workerSizeY):e.dispatchWorkgroups(this.workerSizeX)}createBufferBindGroup(e,t,r,i){let a=this._bufferDic.get(t);if(a){let o={binding:r,resource:{buffer:a.buffer,offset:0,size:a.memory.shareDataBuffer.byteLength}};i.push(o)}else console.error(`ComputeShader(${this.instanceID})`,`buffer ${t} is missing!`)}noticeBufferChange(e){let t=this._groupCache[e];t&&this.genGroups(t.groupIndex,t.infos,!0)}genGroups(e,t,r=!1){if(!this.bindGroups[e]||r){const i=t[e];let a=[];for(let n=0;n<i.length;++n){const l=i[n];if(l)switch(l.varType){case"uniform":case"storage-read":case"storage-read_write":this.createBufferBindGroup(e,l.varName,l.binding,a),this._groupCache[l.varName]={groupIndex:e,infos:t};break;case"var":if(l.dataType=="sampler"){let h=l.varName.replace("Sampler",""),u=this._sampleTextureDic.get(h);if(u){let c={binding:l.binding,resource:u.gpuSampler};a.push(c)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType=="sampler_comparison"){let h=l.varName.replace("Sampler",""),u=this._sampleTextureDic.get(h);if(u){let c={binding:l.binding,resource:u.gpuSampler_comparison};a.push(c)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType.indexOf("texture_storage")!=-1){let h=this._storageTextureDic.get(l.varName);if(h){let u={binding:l.binding,resource:h.getGPUView()};a.push(u),me.getInstance().attached(h,this)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType.indexOf("texture")!=-1){let h=this._sampleTextureDic.get(l.varName);if(h){let u={binding:l.binding,resource:h.getGPUView()};a.push(u),me.getInstance().attached(h,this)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}break;default:console.error("unprocessed type:",l.varType);break}}let o=R.device.createBindGroup({layout:this._computePipeline.getBindGroupLayout(e),entries:a});this.bindGroups[e]=o}}genComputePipeline(){this.preCompileShader(this._sourceCS),this.genReflection(),this._computePipeline=R.device.createComputePipeline({layout:"auto",compute:{module:this.compileShader(),entryPoint:this.entryPoint}}),this._groupsShaderReflectionVarInfos=[];let e=this.shaderReflection;this.bindGroups=[];for(let t=0;t<e.groups.length;++t){let r=e.groups[t];this._groupsShaderReflectionVarInfos[t]=r,this.genGroups(t,this._groupsShaderReflectionVarInfos)}R.addEventListener(Yr.RESIZE,t=>{for(let r=0;r<e.groups.length;++r){let i=e.groups[r];this._groupsShaderReflectionVarInfos[r]=i,this.genGroups(r,this._groupsShaderReflectionVarInfos,!0)}},this)}preCompileShader(e){for(const t in this.constValues)if(Object.prototype.hasOwnProperty.call(this.constValues,t)){const r=this.constValues[t];e=e.replaceAll(`&${t}`,r.toString())}this._destCS=rr.parseComputeShader(e,this.defineValue)}compileShader(){let e=R.device.createShaderModule({label:`ComputeShader(${this.instanceID})`,code:this._destCS});return e.getCompilationInfo().then(t=>{t.messages.length>0&&console.warn("[shader error]",t,this._destCS)}),this._csShaderModule=e,e}genReflection(){this.shaderVariant+=xt.genComputeShaderVariant(this);let e=xt.poolGetReflection(this.shaderVariant);e?this.shaderReflection=e:(xt.getShaderReflection2(this._destCS,this),xt.combineShaderReflectionVarInfo(this.shaderReflection,this.shaderReflection.cs_variables))}}var H=(s=>(s[s.COLOR=1]="COLOR",s[s.REFLECTION=2]="REFLECTION",s[s.POSITION=4]="POSITION",s[s.GRAPHIC=8]="GRAPHIC",s[s.GI=16]="GI",s[s.Cluster=32]="Cluster",s[s.SHADOW=64]="SHADOW",s[s.POINT_SHADOW=128]="POINT_SHADOW",s[s.POST=256]="POST",s[s.DEPTH=512]="DEPTH",s[s.UI=1024]="UI",s))(H||{});class Ye{static profilerLabelMap=new Map;static viewMap=new Map;static testObj={testValue1:0,testValue2:0,testValue3:0,testValue4:0};static startView(e){let t=this.viewMap.get(e);if(!t){t={};for(const r in H)parseInt(r)>=0||(t[r]={vertexCount:0,indicesCount:0,instanceCount:0,triCount:0,drawCount:0,pipelineCount:0});this.viewMap.set(e,t)}for(const r in H)parseInt(r)>=0||(t[r].vertexCount=0,t[r].indicesCount=0,t[r].triCount=0,t[r].instanceCount=0,t[r].drawCount=0,t[r].pipelineCount=0)}static viewCount(e){return this.startView(e),this.viewMap.get(e)}static viewCount_vertex(e,t,r){this.viewMap.get(e)[t].vertexCount+=r}static viewCount_indices(e,t,r){this.viewMap.get(e)[t].indicesCount+=r}static viewCount_tri(e,t,r){this.viewMap.get(e)[t].triCount+=r}static viewCount_instance(e,t,r){this.viewMap.get(e)[t].instanceCount+=r}static viewCount_draw(e,t){this.viewMap.get(e)[t].drawCount++}static viewCount_pipeline(e,t){this.viewMap.get(e)[t].pipelineCount++}static start(e){let t=this.profilerLabelMap.get(e);t||(t={lable:e,start:0,end:0,total:0,count:0,child:new Map},this.profilerLabelMap.set(e,t)),t.start=performance.now(),t.end=performance.now(),t.count=0,t.child.clear()}static end(e){let t=this.profilerLabelMap.get(e);t&&(t.end=performance.now(),t.total=t.end-t.start)}static countStart(e,t=""){let r=this.profilerLabelMap.get(e);if(r&&(r.count++,t!="")){let i=r.child.get(t);i||(i={lable:t,start:0,end:0,total:0,count:0}),i.start=performance.now(),i.end=performance.now(),i.count=0,r.child.set(t,i)}}static countEnd(e,t){let r=this.profilerLabelMap.get(e);if(r&&t!=""){let i=r.child.get(t);i||(i={lable:t,start:0,end:0,total:0,count:0}),i.end=performance.now(),i.total=i.end-i.start,i.count++}}static print(e){let t=this.profilerLabelMap.get(e);t&&console.log("performance",e,t.total+" ms")}}var Yd=(()=>{var s=import.meta.url;return(async function(e={}){var t=e,r,i;t.ready=new Promise((D,N)=>{r=D,i=N});var a=Object.assign({},t),o=[],n="./this.program",l=(D,N)=>{throw N},h=typeof window=="object",u=typeof importScripts=="function",c=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",f="";function g(D){return t.locateFile?t.locateFile(D,f):f+D}var p,A;if(c){const{createRequire:D}=await Promise.resolve().then(()=>m0);var U=D(import.meta.url),x=U("fs"),B=U("path");u?f=B.dirname(f)+"/":f=U("url").fileURLToPath(new URL("data:text/javascript;base64,DQp2YXIgTW9kdWxlID0gKCgpID0+IHsNCiAgdmFyIF9zY3JpcHREaXIgPSBpbXBvcnQubWV0YS51cmw7DQogIA0KICByZXR1cm4gKA0KYXN5bmMgZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHsNCg0KdmFyIE1vZHVsZT1tb2R1bGVBcmc7dmFyIHJlYWR5UHJvbWlzZVJlc29sdmUscmVhZHlQcm9taXNlUmVqZWN0O01vZHVsZVsicmVhZHkiXT1uZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57cmVhZHlQcm9taXNlUmVzb2x2ZT1yZXNvbHZlO3JlYWR5UHJvbWlzZVJlamVjdD1yZWplY3R9KTt2YXIgbW9kdWxlT3ZlcnJpZGVzPU9iamVjdC5hc3NpZ24oe30sTW9kdWxlKTt2YXIgYXJndW1lbnRzXz1bXTt2YXIgdGhpc1Byb2dyYW09Ii4vdGhpcy5wcm9ncmFtIjt2YXIgcXVpdF89KHN0YXR1cyx0b1Rocm93KT0+e3Rocm93IHRvVGhyb3d9O3ZhciBFTlZJUk9OTUVOVF9JU19XRUI9dHlwZW9mIHdpbmRvdz09Im9iamVjdCI7dmFyIEVOVklST05NRU5UX0lTX1dPUktFUj10eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgRU5WSVJPTk1FTlRfSVNfTk9ERT10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09InN0cmluZyI7dmFyIHNjcmlwdERpcmVjdG9yeT0iIjtmdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpe2lmKE1vZHVsZVsibG9jYXRlRmlsZSJdKXtyZXR1cm4gTW9kdWxlWyJsb2NhdGVGaWxlIl0ocGF0aCxzY3JpcHREaXJlY3RvcnkpfXJldHVybiBzY3JpcHREaXJlY3RvcnkrcGF0aH12YXIgcmVhZF8scmVhZEFzeW5jLHJlYWRCaW5hcnk7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7Y29uc3R7Y3JlYXRlUmVxdWlyZTpjcmVhdGVSZXF1aXJlfT1hd2FpdCBpbXBvcnQoIm1vZHVsZSIpO3ZhciByZXF1aXJlPWNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTt2YXIgZnM9cmVxdWlyZSgiZnMiKTt2YXIgbm9kZVBhdGg9cmVxdWlyZSgicGF0aCIpO2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7c2NyaXB0RGlyZWN0b3J5PW5vZGVQYXRoLmRpcm5hbWUoc2NyaXB0RGlyZWN0b3J5KSsiLyJ9ZWxzZXtzY3JpcHREaXJlY3Rvcnk9cmVxdWlyZSgidXJsIikuZmlsZVVSTFRvUGF0aChuZXcgVVJMKCIuLyIsaW1wb3J0Lm1ldGEudXJsKSl9cmVhZF89KGZpbGVuYW1lLGJpbmFyeSk9PntmaWxlbmFtZT1pc0ZpbGVVUkkoZmlsZW5hbWUpP25ldyBVUkwoZmlsZW5hbWUpOm5vZGVQYXRoLm5vcm1hbGl6ZShmaWxlbmFtZSk7cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSxiaW5hcnk/dW5kZWZpbmVkOiJ1dGY4Iil9O3JlYWRCaW5hcnk9ZmlsZW5hbWU9Pnt2YXIgcmV0PXJlYWRfKGZpbGVuYW1lLHRydWUpO2lmKCFyZXQuYnVmZmVyKXtyZXQ9bmV3IFVpbnQ4QXJyYXkocmV0KX1yZXR1cm4gcmV0fTtyZWFkQXN5bmM9KGZpbGVuYW1lLG9ubG9hZCxvbmVycm9yLGJpbmFyeT10cnVlKT0+e2ZpbGVuYW1lPWlzRmlsZVVSSShmaWxlbmFtZSk/bmV3IFVSTChmaWxlbmFtZSk6bm9kZVBhdGgubm9ybWFsaXplKGZpbGVuYW1lKTtmcy5yZWFkRmlsZShmaWxlbmFtZSxiaW5hcnk/dW5kZWZpbmVkOiJ1dGY4IiwoZXJyLGRhdGEpPT57aWYoZXJyKW9uZXJyb3IoZXJyKTtlbHNlIG9ubG9hZChiaW5hcnk/ZGF0YS5idWZmZXI6ZGF0YSl9KX07aWYoIU1vZHVsZVsidGhpc1Byb2dyYW0iXSYmcHJvY2Vzcy5hcmd2Lmxlbmd0aD4xKXt0aGlzUHJvZ3JhbT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpfWFyZ3VtZW50c189cHJvY2Vzcy5hcmd2LnNsaWNlKDIpO3F1aXRfPShzdGF0dXMsdG9UaHJvdyk9Pntwcm9jZXNzLmV4aXRDb2RlPXN0YXR1czt0aHJvdyB0b1Rocm93fX1lbHNlIGlmKEVOVklST05NRU5UX0lTX1dFQnx8RU5WSVJPTk1FTlRfSVNfV09SS0VSKXtpZihFTlZJUk9OTUVOVF9JU19XT1JLRVIpe3NjcmlwdERpcmVjdG9yeT1zZWxmLmxvY2F0aW9uLmhyZWZ9ZWxzZSBpZih0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0KXtzY3JpcHREaXJlY3Rvcnk9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmN9aWYoX3NjcmlwdERpcil7c2NyaXB0RGlyZWN0b3J5PV9zY3JpcHREaXJ9aWYoc2NyaXB0RGlyZWN0b3J5LnN0YXJ0c1dpdGgoImJsb2I6Iikpe3NjcmlwdERpcmVjdG9yeT0iIn1lbHNle3NjcmlwdERpcmVjdG9yeT1zY3JpcHREaXJlY3Rvcnkuc3Vic3RyKDAsc2NyaXB0RGlyZWN0b3J5LnJlcGxhY2UoL1s/I10uKi8sIiIpLmxhc3RJbmRleE9mKCIvIikrMSl9e3JlYWRfPXVybD0+e3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3hoci5vcGVuKCJHRVQiLHVybCxmYWxzZSk7eGhyLnNlbmQobnVsbCk7cmV0dXJuIHhoci5yZXNwb25zZVRleHR9O2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7cmVhZEJpbmFyeT11cmw9Pnt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbigiR0VUIix1cmwsZmFsc2UpO3hoci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIjt4aHIuc2VuZChudWxsKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeGhyLnJlc3BvbnNlKX19cmVhZEFzeW5jPSh1cmwsb25sb2FkLG9uZXJyb3IpPT57dmFyIHhocj1uZXcgWE1MSHR0cFJlcXVlc3Q7eGhyLm9wZW4oIkdFVCIsdXJsLHRydWUpO3hoci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIjt4aHIub25sb2FkPSgpPT57aWYoeGhyLnN0YXR1cz09MjAwfHx4aHIuc3RhdHVzPT0wJiZ4aHIucmVzcG9uc2Upe29ubG9hZCh4aHIucmVzcG9uc2UpO3JldHVybn1vbmVycm9yKCl9O3hoci5vbmVycm9yPW9uZXJyb3I7eGhyLnNlbmQobnVsbCl9fX1lbHNle312YXIgb3V0PU1vZHVsZVsicHJpbnQiXXx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKTt2YXIgZXJyPU1vZHVsZVsicHJpbnRFcnIiXXx8Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oTW9kdWxlLG1vZHVsZU92ZXJyaWRlcyk7bW9kdWxlT3ZlcnJpZGVzPW51bGw7aWYoTW9kdWxlWyJhcmd1bWVudHMiXSlhcmd1bWVudHNfPU1vZHVsZVsiYXJndW1lbnRzIl07aWYoTW9kdWxlWyJ0aGlzUHJvZ3JhbSJdKXRoaXNQcm9ncmFtPU1vZHVsZVsidGhpc1Byb2dyYW0iXTtpZihNb2R1bGVbInF1aXQiXSlxdWl0Xz1Nb2R1bGVbInF1aXQiXTt2YXIgd2FzbUJpbmFyeTtpZihNb2R1bGVbIndhc21CaW5hcnkiXSl3YXNtQmluYXJ5PU1vZHVsZVsid2FzbUJpbmFyeSJdO2Z1bmN0aW9uIGludEFycmF5RnJvbUJhc2U2NChzKXtpZih0eXBlb2YgRU5WSVJPTk1FTlRfSVNfTk9ERSE9InVuZGVmaW5lZCImJkVOVklST05NRU5UX0lTX05PREUpe3ZhciBidWY9QnVmZmVyLmZyb20ocywiYmFzZTY0Iik7cmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsYnVmLmJ5dGVPZmZzZXQsYnVmLmxlbmd0aCl9dmFyIGRlY29kZWQ9YXRvYihzKTt2YXIgYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoZGVjb2RlZC5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8ZGVjb2RlZC5sZW5ndGg7KytpKXtieXRlc1tpXT1kZWNvZGVkLmNoYXJDb2RlQXQoaSl9cmV0dXJuIGJ5dGVzfWZ1bmN0aW9uIHRyeVBhcnNlQXNEYXRhVVJJKGZpbGVuYW1lKXtpZighaXNEYXRhVVJJKGZpbGVuYW1lKSl7cmV0dXJufXJldHVybiBpbnRBcnJheUZyb21CYXNlNjQoZmlsZW5hbWUuc2xpY2UoZGF0YVVSSVByZWZpeC5sZW5ndGgpKX12YXIgd2FzbU1lbW9yeTt2YXIgQUJPUlQ9ZmFsc2U7dmFyIEVYSVRTVEFUVVM7dmFyIEhFQVA4LEhFQVBVOCxIRUFQMTYsSEVBUFUxNixIRUFQMzIsSEVBUFUzMixIRUFQRjMyLEhFQVBGNjQ7ZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKXt2YXIgYj13YXNtTWVtb3J5LmJ1ZmZlcjtNb2R1bGVbIkhFQVA4Il09SEVBUDg9bmV3IEludDhBcnJheShiKTtNb2R1bGVbIkhFQVAxNiJdPUhFQVAxNj1uZXcgSW50MTZBcnJheShiKTtNb2R1bGVbIkhFQVBVOCJdPUhFQVBVOD1uZXcgVWludDhBcnJheShiKTtNb2R1bGVbIkhFQVBVMTYiXT1IRUFQVTE2PW5ldyBVaW50MTZBcnJheShiKTtNb2R1bGVbIkhFQVAzMiJdPUhFQVAzMj1uZXcgSW50MzJBcnJheShiKTtNb2R1bGVbIkhFQVBVMzIiXT1IRUFQVTMyPW5ldyBVaW50MzJBcnJheShiKTtNb2R1bGVbIkhFQVBGMzIiXT1IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYik7TW9kdWxlWyJIRUFQRjY0Il09SEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGIpfXZhciBfX0FUUFJFUlVOX189W107dmFyIF9fQVRJTklUX189W107dmFyIF9fQVRNQUlOX189W107dmFyIF9fQVRQT1NUUlVOX189W107dmFyIHJ1bnRpbWVJbml0aWFsaXplZD1mYWxzZTtmdW5jdGlvbiBwcmVSdW4oKXtpZihNb2R1bGVbInByZVJ1biJdKXtpZih0eXBlb2YgTW9kdWxlWyJwcmVSdW4iXT09ImZ1bmN0aW9uIilNb2R1bGVbInByZVJ1biJdPVtNb2R1bGVbInByZVJ1biJdXTt3aGlsZShNb2R1bGVbInByZVJ1biJdLmxlbmd0aCl7YWRkT25QcmVSdW4oTW9kdWxlWyJwcmVSdW4iXS5zaGlmdCgpKX19Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKX1mdW5jdGlvbiBpbml0UnVudGltZSgpe3J1bnRpbWVJbml0aWFsaXplZD10cnVlO2NhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pfWZ1bmN0aW9uIHByZU1haW4oKXtjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUTUFJTl9fKX1mdW5jdGlvbiBwb3N0UnVuKCl7aWYoTW9kdWxlWyJwb3N0UnVuIl0pe2lmKHR5cGVvZiBNb2R1bGVbInBvc3RSdW4iXT09ImZ1bmN0aW9uIilNb2R1bGVbInBvc3RSdW4iXT1bTW9kdWxlWyJwb3N0UnVuIl1dO3doaWxlKE1vZHVsZVsicG9zdFJ1biJdLmxlbmd0aCl7YWRkT25Qb3N0UnVuKE1vZHVsZVsicG9zdFJ1biJdLnNoaWZ0KCkpfX1jYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKX1mdW5jdGlvbiBhZGRPblByZVJ1bihjYil7X19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpfWZ1bmN0aW9uIGFkZE9uSW5pdChjYil7X19BVElOSVRfXy51bnNoaWZ0KGNiKX1mdW5jdGlvbiBhZGRPblBvc3RSdW4oY2Ipe19fQVRQT1NUUlVOX18udW5zaGlmdChjYil9dmFyIHJ1bkRlcGVuZGVuY2llcz0wO3ZhciBydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsO3ZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtmdW5jdGlvbiBhZGRSdW5EZXBlbmRlbmN5KGlkKXtydW5EZXBlbmRlbmNpZXMrKztNb2R1bGVbIm1vbml0b3JSdW5EZXBlbmRlbmNpZXMiXT8uKHJ1bkRlcGVuZGVuY2llcyl9ZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeShpZCl7cnVuRGVwZW5kZW5jaWVzLS07TW9kdWxlWyJtb25pdG9yUnVuRGVwZW5kZW5jaWVzIl0/LihydW5EZXBlbmRlbmNpZXMpO2lmKHJ1bkRlcGVuZGVuY2llcz09MCl7aWYocnVuRGVwZW5kZW5jeVdhdGNoZXIhPT1udWxsKXtjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsfWlmKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCl7dmFyIGNhbGxiYWNrPWRlcGVuZGVuY2llc0Z1bGZpbGxlZDtkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtjYWxsYmFjaygpfX19ZnVuY3Rpb24gYWJvcnQod2hhdCl7TW9kdWxlWyJvbkFib3J0Il0/Lih3aGF0KTt3aGF0PSJBYm9ydGVkKCIrd2hhdCsiKSI7ZXJyKHdoYXQpO0FCT1JUPXRydWU7RVhJVFNUQVRVUz0xO3doYXQrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgZT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHdoYXQpO3JlYWR5UHJvbWlzZVJlamVjdChlKTt0aHJvdyBlfXZhciBkYXRhVVJJUHJlZml4PSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjt2YXIgaXNEYXRhVVJJPWZpbGVuYW1lPT5maWxlbmFtZS5zdGFydHNXaXRoKGRhdGFVUklQcmVmaXgpO3ZhciBpc0ZpbGVVUkk9ZmlsZW5hbWU9PmZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKTt2YXIgd2FzbUJpbmFyeUZpbGU7d2FzbUJpbmFyeUZpbGU9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxBR0Z6YlFFQUFBQUJwQUVhWUFGL0FYOWdBbjkvQUdBRGYzOS9BWDlnQTM5L2Z3QmdBWDhBWUFBQVlBVi9mMzkvZndCZ0JIOS9mMzhBWUFKL2Z3Ri9ZQVovZjM5L2YzOEFZQUFCZjJBRWYzOS9mUUJnQkg5L2YzOEJmMkFCZkFGOVlBSjhmd0Y4WUFGOUFYMWdBWHdCZkdBQ2ZuOEJmMkFEZkh4L0FYeGdBbng4QVh4Z0JuOThmMzkvZndGL1lBSjlmd0YvWUFKOGZ3Ri9ZQVYvZjM5L2Z3Ri9ZQU4vZm44QmZtQURmMzk5QUFJZkJRRmhBV0VBREFGaEFXSUFBd0ZoQVdNQUJRRmhBV1FBQUFGaEFXVUFBd05ZVndNR0FnME5BZ0FFQUJFRUVoTUZCUTRDQkE4UUFnQVBFQVVFQUFjRENBQUFBQWdVQXdBTURnQUVCQlVXRndFSUFRZ0JBQUFBQUFFQkJBQUFBQUFBQ2dBSkNRWUdCd2NLQWdvS0dBQUNCQXNCQXdzQkF3Z1pBd1FGQVhBQkxDd0ZCd0VCZ2dLQWdBSUdDQUYvQVVId3VBUUxCemtPQVdZQ0FBRm5BQjBCYUFCYkFXa0FVZ0ZxQUU0QmF3Qk5BV3dBU3dGdEFFTUJiZ0E5QVc4QVdnRndBRmtCY1FFQUFYSUFQZ0Z6QUVRSk1RRUFRUUVMS3lNZldEWTZPVGczVjFaVk1qbzVPRGRVVTFCUlR5Y2pEeTB0VEVWSFNnOUdTRWtQUVE5QUQwSWVQeDRLaXZzQlZ4Y0FJQUF0QUFCQklIRkZCRUFnQVNBQ0lBQVFHUm9MQzJzQkFYOGpBRUdBQW1zaUJTUUFBa0FnQWlBRFRBMEFJQVJCZ01BRWNRMEFJQVVnQVNBQ0lBTnJJZ05CZ0FJZ0EwR0FBa2tpQVJzUUJ4b2dBVVVFUUFOQUlBQWdCVUdBQWhBRklBTkJnQUpySWdOQi93RkxEUUFMQ3lBQUlBVWdBeEFGQ3lBRlFZQUNhaVFBQy9JQ0FnSi9BWDRDUUNBQ1JRMEFJQUFnQVRvQUFDQUFJQUpxSWdOQkFXc2dBVG9BQUNBQ1FRTkpEUUFnQUNBQk9nQUNJQUFnQVRvQUFTQURRUU5ySUFFNkFBQWdBMEVDYXlBQk9nQUFJQUpCQjBrTkFDQUFJQUU2QUFNZ0EwRUVheUFCT2dBQUlBSkJDVWtOQUNBQVFRQWdBR3RCQTNFaUJHb2lBeUFCUWY4QmNVR0Jnb1FJYkNJQk5nSUFJQU1nQWlBRWEwRjhjU0lFYWlJQ1FRUnJJQUUyQWdBZ0JFRUpTUTBBSUFNZ0FUWUNDQ0FESUFFMkFnUWdBa0VJYXlBQk5nSUFJQUpCREdzZ0FUWUNBQ0FFUVJsSkRRQWdBeUFCTmdJWUlBTWdBVFlDRkNBRElBRTJBaEFnQXlBQk5nSU1JQUpCRUdzZ0FUWUNBQ0FDUVJScklBRTJBZ0FnQWtFWWF5QUJOZ0lBSUFKQkhHc2dBVFlDQUNBRUlBTkJCSEZCR0hJaUJHc2lBa0VnU1EwQUlBR3RRb0dBZ0lBUWZpRUZJQU1nQkdvaEFRTkFJQUVnQlRjREdDQUJJQVUzQXhBZ0FTQUZOd01JSUFFZ0JUY0RBQ0FCUVNCcUlRRWdBa0VnYXlJQ1FSOUxEUUFMQ3lBQUMwc0JBbndnQUNBQW9pSUJJQUNpSWdJZ0FTQUJvcUlnQVVTblJqdU1oODNHUHFKRWRPZks0dmtBS3IrZ29pQUNJQUZFc3Z0dWlSQVJnVCtpUkhlc3kxUlZWY1cvb0tJZ0FLQ2d0Z3RQQVFGOElBQWdBS0lpQUNBQUlBQ2lJZ0dpSUFCRWFWRHU0RUtUK1Q2aVJDY2VEK2lId0ZhL29LSWdBVVJDT2dYaFUxV2xQNklnQUVTQlhnejkvLy9mdjZKRUFBQUFBQUFBOEQrZ29LQzJDM1FCQVg4Z0FrVUVRQ0FBS0FJRUlBRW9BZ1JHRHdzZ0FDQUJSZ1JBUVFFUEN5QUJLQUlFSWdJdEFBQWhBUUpBSUFBb0FnUWlBeTBBQUNJQVJRMEFJQUFnQVVjTkFBTkFJQUl0QUFFaEFTQURMUUFCSWdCRkRRRWdBa0VCYWlFQ0lBTkJBV29oQXlBQUlBRkdEUUFMQ3lBQUlBRkdDelVCQVg5QkFTQUFJQUJCQVUwYklRQUNRQU5BSUFBUUpTSUJEUUZCNkRnb0FnQWlBUVJBSUFFUkJRQU1BUXNMRUFJQUN5QUJDOWtMQVFkL0FrQWdBRVVOQUNBQVFRaHJJZ01nQUVFRWF5Z0NBQ0lCUVhoeElnQnFJUVVDUUNBQlFRRnhEUUFnQVVFQ2NVVU5BU0FESUFNb0FnQWlBV3NpQTBHSU5TZ0NBRWtOQVNBQUlBRnFJUUFDUUFKQVFZdzFLQUlBSUFOSEJFQWdBeWdDRENFQ0lBRkIvd0ZOQkVBZ0FVRURkaUVCSUFNb0FnZ2lCQ0FDUmdSQVFmZzBRZmcwS0FJQVFYNGdBWGR4TmdJQURBVUxJQVFnQWpZQ0RDQUNJQVEyQWdnTUJBc2dBeWdDR0NFR0lBSWdBMGNFUUNBREtBSUlJZ0VnQWpZQ0RDQUNJQUUyQWdnTUF3c2dBeWdDRkNJQkJIOGdBMEVVYWdVZ0F5Z0NFQ0lCUlEwQ0lBTkJFR29MSVFRRFFDQUVJUWNnQVNJQ1FSUnFJUVFnQWlnQ0ZDSUJEUUFnQWtFUWFpRUVJQUlvQWhBaUFRMEFDeUFIUVFBMkFnQU1BZ3NnQlNnQ0JDSUJRUU54UVFOSERRSkJnRFVnQURZQ0FDQUZJQUZCZm5FMkFnUWdBeUFBUVFGeU5nSUVJQVVnQURZQ0FBOExRUUFoQWdzZ0JrVU5BQUpBSUFNb0Fod2lBVUVDZEVHb04yb2lCQ2dDQUNBRFJnUkFJQVFnQWpZQ0FDQUNEUUZCL0RSQi9EUW9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0JrRVFRUlFnQmlnQ0VDQURSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUdOZ0lZSUFNb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQU1vQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QURJQVZQRFFBZ0JTZ0NCQ0lCUVFGeFJRMEFBa0FDUUFKQUFrQWdBVUVDY1VVRVFFR1FOU2dDQUNBRlJnUkFRWkExSUFNMkFnQkJoRFZCaERVb0FnQWdBR29pQURZQ0FDQURJQUJCQVhJMkFnUWdBMEdNTlNnQ0FFY05Ca0dBTlVFQU5nSUFRWXcxUVFBMkFnQVBDMEdNTlNnQ0FDQUZSZ1JBUVl3MUlBTTJBZ0JCZ0RWQmdEVW9BZ0FnQUdvaUFEWUNBQ0FESUFCQkFYSTJBZ1FnQUNBRGFpQUFOZ0lBRHdzZ0FVRjRjU0FBYWlFQUlBVW9BZ3doQWlBQlFmOEJUUVJBSUFGQkEzWWhBU0FGS0FJSUlnUWdBa1lFUUVINE5FSDROQ2dDQUVGK0lBRjNjVFlDQUF3RkN5QUVJQUkyQWd3Z0FpQUVOZ0lJREFRTElBVW9BaGdoQmlBQ0lBVkhCRUJCaURVb0FnQWFJQVVvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdEQ3lBRktBSVVJZ0VFZnlBRlFSUnFCU0FGS0FJUUlnRkZEUUlnQlVFUWFnc2hCQU5BSUFRaEJ5QUJJZ0pCRkdvaEJDQUNLQUlVSWdFTkFDQUNRUkJxSVFRZ0FpZ0NFQ0lCRFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBeUFBUVFGeU5nSUVJQUFnQTJvZ0FEWUNBQXdEQzBFQUlRSUxJQVpGRFFBQ1FDQUZLQUljSWdGQkFuUkJxRGRxSWdRb0FnQWdCVVlFUUNBRUlBSTJBZ0FnQWcwQlFmdzBRZncwS0FJQVFYNGdBWGR4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUNOZ0lBSUFKRkRRRUxJQUlnQmpZQ0dDQUZLQUlRSWdFRVFDQUNJQUUyQWhBZ0FTQUNOZ0lZQ3lBRktBSVVJZ0ZGRFFBZ0FpQUJOZ0lVSUFFZ0FqWUNHQXNnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUNBRFFZdzFLQUlBUncwQVFZQTFJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCb0RWcUlRRUNmMEg0TkNnQ0FDSUVRUUVnQUVFRGRuUWlBSEZGQkVCQitEUWdBQ0FFY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBRE5nSUlJQUFnQXpZQ0RDQURJQUUyQWd3Z0F5QUFOZ0lJRHd0Qkh5RUNJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUUlMSUFNZ0FqWUNIQ0FEUWdBM0FoQWdBa0VDZEVHb04yb2hCd0ovQWtBQ2YwSDhOQ2dDQUNJQlFRRWdBblFpQkhGRkJFQkIvRFFnQVNBRWNqWUNBRUVZSVFJZ0J5RUVRUWdNQVFzZ0FFRVpJQUpCQVhaclFRQWdBa0VmUnh0MElRSWdCeWdDQUNFRUEwQWdCQ0lCS0FJRVFYaHhJQUJHRFFJZ0FrRWRkaUVFSUFKQkFYUWhBaUFCSUFSQkJIRnFRUkJxSWdjb0FnQWlCQTBBQzBFWUlRSWdBU0VFUVFnTElRQWdBeUlCREFFTElBRW9BZ2dpQkNBRE5nSU1RUWdoQWlBQlFRaHFJUWRCR0NFQVFRQUxJUVVnQnlBRE5nSUFJQUlnQTJvZ0JEWUNBQ0FESUFFMkFnd2dBQ0FEYWlBRk5nSUFRWmcxUVpnMUtBSUFRUUZySWdCQmZ5QUFHellDQUFzTFR3RUNmMEdZS3lnQ0FDSUJJQUJCQjJwQmVIRWlBbW9oQUFKQUlBSkJBQ0FBSUFGTkcwVUVRQ0FBUHdCQkVIUk5EUUVnQUJBRERRRUxRYmd6UVRBMkFnQkJmdzhMUVpncklBQTJBZ0FnQVF1REFRSUZmd0YrQWtBZ0FFS0FnSUNBRUZRRVFDQUFJUWNNQVFzRFFDQUJRUUZySWdFZ0FDQUFRZ3FBSWdkQ0NuNTlwMEV3Y2pvQUFDQUFRdi8vLy8rZkFWWWhCU0FISVFBZ0JRMEFDd3NnQjZjaUFnUkFBMEFnQVVFQmF5SUJJQUlnQWtFS2JpSURRUXBzYTBFd2Nqb0FBQ0FDUVFsTElRWWdBeUVDSUFZTkFBc0xJQUVMQmdBZ0FCQU1DNWtCQVFOOElBQWdBS0lpQXlBRElBT2lvaUFEUkh6VnoxbzYyZVU5b2tUcm5DdUs1dVZhdnFDaUlBTWdBMFI5L3JGWDR4M0hQcUpFMVdIQkdhQUJLcitnb2tTbStCQVJFUkdCUDZDZ0lRVWdBeUFBb2lFRUlBSkZCRUFnQkNBRElBV2lSRWxWVlZWVlZjVy9vS0lnQUtBUEN5QUFJQU1nQVVRQUFBQUFBQURnUDZJZ0JTQUVvcUdpSUFHaElBUkVTVlZWVlZWVnhUK2lvS0VMa2dFQkEzeEVBQUFBQUFBQThEOGdBQ0FBb2lJQ1JBQUFBQUFBQU9BL29pSURvU0lFUkFBQUFBQUFBUEEvSUFTaElBT2hJQUlnQWlBQ0lBSkVrQlhMR2FBQitqNmlSSGRSd1Jac3dWYS9vS0pFVEZWVlZWVlZwVCtnb2lBQ0lBS2lJZ01nQTZJZ0FpQUNSTlE0aUw3cCtxaTlva1RFc2JTOW51NGhQcUNpUksxU25JQlBmcEsrb0tLZ29pQUFJQUdpb2FDZ0N5b0JBWDlCQkJBa0lnQkJwQ2cyQWdBZ0FFSDhKellDQUNBQVFaQW9OZ0lBSUFCQmdDbEJBUkFCQUF0ZkFRTi9RUWdRSkNJQVFhUW9OZ0lBSUFCQmxDazJBZ0JCaVFrUUxDSUJRUTFxRUFzaUFrRUFOZ0lJSUFJZ0FUWUNCQ0FDSUFFMkFnQWdBQ0FDUVF4cVFZa0pJQUZCQVdvUUZUWUNCQ0FBUWNRcE5nSUFJQUJCNUNsQkFoQUJBQXVvQVFBQ1FDQUJRWUFJVGdSQUlBQkVBQUFBQUFBQTRIK2lJUUFnQVVIL0Qwa0VRQ0FCUWY4SGF5RUJEQUlMSUFCRUFBQUFBQUFBNEgraUlRQkIvUmNnQVNBQlFmMFhUeHRCL2c5cklRRU1BUXNnQVVHQmVFb05BQ0FBUkFBQUFBQUFBR0FEb2lFQUlBRkJ1SEJMQkVBZ0FVSEpCMm9oQVF3QkN5QUFSQUFBQUFBQUFHQURvaUVBUWZCb0lBRWdBVUh3YUUwYlFaSVBhaUVCQ3lBQUlBRkIvd2RxclVJMGhyK2lDNEFFQVFOL0lBSkJnQVJQQkVBZ0FDQUJJQUlRQkNBQUR3c2dBQ0FDYWlFREFrQWdBQ0FCYzBFRGNVVUVRQUpBSUFCQkEzRkZCRUFnQUNFQ0RBRUxJQUpGQkVBZ0FDRUNEQUVMSUFBaEFnTkFJQUlnQVMwQUFEb0FBQ0FCUVFGcUlRRWdBa0VCYWlJQ1FRTnhSUTBCSUFJZ0Ewa05BQXNMQWtBZ0EwRjhjU0lFUWNBQVNRMEFJQUlnQkVGQWFpSUZTdzBBQTBBZ0FpQUJLQUlBTmdJQUlBSWdBU2dDQkRZQ0JDQUNJQUVvQWdnMkFnZ2dBaUFCS0FJTU5nSU1JQUlnQVNnQ0VEWUNFQ0FDSUFFb0FoUTJBaFFnQWlBQktBSVlOZ0lZSUFJZ0FTZ0NIRFlDSENBQ0lBRW9BaUEyQWlBZ0FpQUJLQUlrTmdJa0lBSWdBU2dDS0RZQ0tDQUNJQUVvQWl3MkFpd2dBaUFCS0FJd05nSXdJQUlnQVNnQ05EWUNOQ0FDSUFFb0FqZzJBamdnQWlBQktBSThOZ0k4SUFGQlFHc2hBU0FDUVVCcklnSWdCVTBOQUFzTElBSWdCRThOQVFOQUlBSWdBU2dDQURZQ0FDQUJRUVJxSVFFZ0FrRUVhaUlDSUFSSkRRQUxEQUVMSUFOQkJFa0VRQ0FBSVFJTUFRc2dBQ0FEUVFScklnUkxCRUFnQUNFQ0RBRUxJQUFoQWdOQUlBSWdBUzBBQURvQUFDQUNJQUV0QUFFNkFBRWdBaUFCTFFBQ09nQUNJQUlnQVMwQUF6b0FBeUFCUVFScUlRRWdBa0VFYWlJQ0lBUk5EUUFMQ3lBQ0lBTkpCRUFEUUNBQ0lBRXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2lBaUFEUncwQUN3c2dBQXNHQUNBQUVBd0wvUUlDQVh3RGZ5TUFRUkJySWdRa0FBSkFJQUM4SWdOQi8vLy8vd2R4SWdKQjJwK2srZ05OQkVBZ0FrR0FnSURNQTBrTkFTQUF1eEFJSVFBTUFRc2dBa0hScCsyREJFMEVRQ0FBdXlFQklBSkI0NWZiZ0FSTkJFQWdBMEVBU0FSQUlBRkVHQzFFVlBzaCtUK2dFQW1NSVFBTUF3c2dBVVFZTFVSVSt5SDV2NkFRQ1NFQURBSUxSQmd0UkZUN0lRbkFSQmd0UkZUN0lRbEFJQU5CQUU0YklBR2dtaEFJSVFBTUFRc2dBa0hWNDRpSEJFMEVRQ0FDUWQvYnY0VUVUUVJBSUFDN0lRRWdBMEVBU0FSQUlBRkUwaUV6ZjN6WkVrQ2dFQWtoQUF3REN5QUJSTkloTTM5ODJSTEFvQkFKakNFQURBSUxSQmd0UkZUN0lSbEFSQmd0UkZUN0lSbkFJQU5CQUVnYklBQzdvQkFJSVFBTUFRc2dBa0dBZ0lEOEIwOEVRQ0FBSUFDVElRQU1BUXNnQUNBRVFRaHFFQzhoQWlBRUt3TUlJUUVDUUFKQUFrQUNRQ0FDUVFOeERnTUFBUUlEQ3lBQkVBZ2hBQXdEQ3lBQkVBa2hBQXdDQ3lBQm1oQUlJUUFNQVFzZ0FSQUpqQ0VBQ3lBRVFSQnFKQUFnQUF2QkFRSUNmd0Y4SXdCQkVHc2lBU1FBQWtBZ0FMMUNJSWluUWYvLy8vOEhjU0lDUWZ2RHBQOERUUVJBSUFKQmdJREE4Z05KRFFFZ0FFUUFBQUFBQUFBQUFFRUFFQkFoQUF3QkN5QUNRWUNBd1A4SFR3UkFJQUFnQUtFaEFBd0JDeUFBSUFFUU1DRUNJQUVyQXdnaEFDQUJLd01BSVFNQ1FBSkFBa0FDUUNBQ1FRTnhEZ01BQVFJREN5QURJQUJCQVJBUUlRQU1Bd3NnQXlBQUVCRWhBQXdDQ3lBRElBQkJBUkFRbWlFQURBRUxJQU1nQUJBUm1pRUFDeUFCUVJCcUpBQWdBQXZDQVFFRGZ3SkFJQUVnQWlnQ0VDSURCSDhnQXdVZ0FoQWFEUUVnQWlnQ0VBc2dBaWdDRkNJRWEwc0VRQ0FDSUFBZ0FTQUNLQUlrRVFJQUR3c0NRQUpBSUFJb0FsQkJBRWdOQUNBQlJRMEFJQUVoQXdOQUlBQWdBMm9pQlVFQmF5MEFBRUVLUndSQUlBTkJBV3NpQXcwQkRBSUxDeUFDSUFBZ0F5QUNLQUlrRVFJQUlnUWdBMGtOQWlBQklBTnJJUUVnQWlnQ0ZDRUVEQUVMSUFBaEJVRUFJUU1MSUFRZ0JTQUJFQlVhSUFJZ0FpZ0NGQ0FCYWpZQ0ZDQUJJQU5xSVFRTElBUUxXUUVCZnlBQUlBQW9Ba2dpQVVFQmF5QUJjallDU0NBQUtBSUFJZ0ZCQ0hFRVFDQUFJQUZCSUhJMkFnQkJmdzhMSUFCQ0FEY0NCQ0FBSUFBb0Fpd2lBVFlDSENBQUlBRTJBaFFnQUNBQklBQW9BakJxTmdJUVFRQUw2UUlEQTM4QmZBRjlJd0JCRUdzaUF5UUFBbjBnQUx3aUFrSC8vLy8vQjNFaUFVSGFuNlQ2QTAwRVFFTUFBSUEvSUFGQmdJQ0F6QU5KRFFFYUlBQzdFQWtNQVFzZ0FVSFJwKzJEQkUwRVFDQUJRZVNYMjRBRVR3UkFSQmd0UkZUN0lRbEFSQmd0UkZUN0lRbkFJQUpCQUVnYklBQzdvQkFKakF3Q0N5QUF1eUVFSUFKQkFFZ0VRQ0FFUkJndFJGVDdJZmsvb0JBSURBSUxSQmd0UkZUN0lmay9JQVNoRUFnTUFRc2dBVUhWNDRpSEJFMEVRQ0FCUWVEYnY0VUVUd1JBUkJndFJGVDdJUmxBUkJndFJGVDdJUm5BSUFKQkFFZ2JJQUM3b0JBSkRBSUxJQUpCQUVnRVFFVFNJVE4vZk5rU3dDQUF1NkVRQ0F3Q0N5QUF1MFRTSVROL2ZOa1N3S0FRQ0F3QkN5QUFJQUNUSUFGQmdJQ0EvQWRQRFFBYUlBQWdBMEVJYWhBdklRRWdBeXNEQ0NFRUFrQUNRQUpBQWtBZ0FVRURjUTREQUFFQ0F3c2dCQkFKREFNTElBU2FFQWdNQWdzZ0JCQUpqQXdCQ3lBRUVBZ0xJUVVnQTBFUWFpUUFJQVVMdlFFQ0Fud0NmeU1BUVJCcklnTWtBQUo4SUFDOVFpQ0lwMEgvLy8vL0IzRWlCRUg3dzZUL0EwMEVRRVFBQUFBQUFBRHdQeUFFUVo3Qm12SURTUTBCR2lBQVJBQUFBQUFBQUFBQUVCRU1BUXNnQUNBQW9TQUVRWUNBd1A4SFR3MEFHaUFBSUFNUU1DRUVJQU1yQXdnaEFDQURLd01BSVFFQ1FBSkFBa0FDUUNBRVFRTnhEZ01BQVFJREN5QUJJQUFRRVF3REN5QUJJQUJCQVJBUW1nd0NDeUFCSUFBUUVab01BUXNnQVNBQVFRRVFFQXNoQWlBRFFSQnFKQUFnQWdzVEFFSFVORUhjTXpZQ0FFR01ORUVxTmdJQUN3c0FJQUFRSHhvZ0FCQU1DekVCQW44Z0FFR1VLVFlDQUNBQUtBSUVRUXhySWdFZ0FTZ0NDRUVCYXlJQ05nSUlJQUpCQUVnRVFDQUJFQllMSUFBTG1nRUFJQUJCQVRvQU5RSkFJQUFvQWdRZ0FrY05BQ0FBUVFFNkFEUUNRQ0FBS0FJUUlnSkZCRUFnQUVFQk5nSWtJQUFnQXpZQ0dDQUFJQUUyQWhBZ0EwRUJSdzBDSUFBb0FqQkJBVVlOQVF3Q0N5QUJJQUpHQkVBZ0FDZ0NHQ0lDUVFKR0JFQWdBQ0FETmdJWUlBTWhBZ3NnQUNnQ01FRUJSdzBDSUFKQkFVWU5BUXdDQ3lBQUlBQW9BaVJCQVdvMkFpUUxJQUJCQVRvQU5nc0xYUUVCZnlBQUtBSVFJZ05GQkVBZ0FFRUJOZ0lrSUFBZ0FqWUNHQ0FBSUFFMkFoQVBDd0pBSUFFZ0EwWUVRQ0FBS0FJWVFRSkhEUUVnQUNBQ05nSVlEd3NnQUVFQk9nQTJJQUJCQWpZQ0dDQUFJQUFvQWlSQkFXbzJBaVFMQzRBREFRUi9Jd0JCOEFCcklnSWtBQ0FBS0FJQUlnTkJCR3NvQWdBaEJDQURRUWhyS0FJQUlRVWdBa0lBTndKUUlBSkNBRGNDV0NBQ1FnQTNBbUFnQWtJQU53Qm5JQUpDQURjQ1NDQUNRUUEyQWtRZ0FrSFVKVFlDUUNBQ0lBQTJBandnQWlBQk5nSTRJQUFnQldvaEF3SkFJQVFnQVVFQUVBb0VRRUVBSUFNZ0JSc2hBQXdCQ3lBQUlBTk9CRUFnQWtJQU53QXZJQUpDQURjQ0dDQUNRZ0EzQWlBZ0FrSUFOd0lvSUFKQ0FEY0NFQ0FDUVFBMkFnd2dBaUFCTmdJSUlBSWdBRFlDQkNBQ0lBUTJBZ0FnQWtFQk5nSXdJQVFnQWlBRElBTkJBVUVBSUFRb0FnQW9BaFFSQ1FBZ0FpZ0NHQTBCQzBFQUlRQWdCQ0FDUVRocUlBTkJBVUVBSUFRb0FnQW9BaGdSQmdBQ1FBSkFJQUlvQWx3T0FnQUJBZ3NnQWlnQ1RFRUFJQUlvQWxoQkFVWWJRUUFnQWlnQ1ZFRUJSaHRCQUNBQ0tBSmdRUUZHR3lFQURBRUxJQUlvQWxCQkFVY0VRQ0FDS0FKZ0RRRWdBaWdDVkVFQlJ3MEJJQUlvQWxoQkFVY05BUXNnQWlnQ1NDRUFDeUFDUWZBQWFpUUFJQUFMQkFBZ0FBc09BQ0FBUWRBQWFoQWxRZEFBYWd2Z0p3RU1meU1BUVJCcklnb2tBQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCK0RRb0FnQWlCRUVRSUFCQkMycEIrQU54SUFCQkMwa2JJZ1pCQTNZaUFIWWlBVUVEY1FSQUFrQWdBVUYvYzBFQmNTQUFhaUlDUVFOMElnRkJvRFZxSWdBZ0FVR29OV29vQWdBaUFTZ0NDQ0lGUmdSQVFmZzBJQVJCZmlBQ2QzRTJBZ0FNQVFzZ0JTQUFOZ0lNSUFBZ0JUWUNDQXNnQVVFSWFpRUFJQUVnQWtFRGRDSUNRUU55TmdJRUlBRWdBbW9pQVNBQktBSUVRUUZ5TmdJRURBc0xJQVpCZ0RVb0FnQWlDRTBOQVNBQkJFQUNRRUVDSUFCMElnSkJBQ0FDYTNJZ0FTQUFkSEZvSWdGQkEzUWlBRUdnTldvaUFpQUFRYWcxYWlnQ0FDSUFLQUlJSWdWR0JFQkIrRFFnQkVGK0lBRjNjU0lFTmdJQURBRUxJQVVnQWpZQ0RDQUNJQVUyQWdnTElBQWdCa0VEY2pZQ0JDQUFJQVpxSWdjZ0FVRURkQ0lCSUFacklnVkJBWEkyQWdRZ0FDQUJhaUFGTmdJQUlBZ0VRQ0FJUVhoeFFhQTFhaUVCUVl3MUtBSUFJUUlDZnlBRVFRRWdDRUVEZG5RaUEzRkZCRUJCK0RRZ0F5QUVjallDQUNBQkRBRUxJQUVvQWdnTElRTWdBU0FDTmdJSUlBTWdBallDRENBQ0lBRTJBZ3dnQWlBRE5nSUlDeUFBUVFocUlRQkJqRFVnQnpZQ0FFR0FOU0FGTmdJQURBc0xRZncwS0FJQUlndEZEUUVnQzJoQkFuUkJxRGRxS0FJQUlnSW9BZ1JCZUhFZ0Jtc2hBeUFDSVFFRFFBSkFJQUVvQWhBaUFFVUVRQ0FCS0FJVUlnQkZEUUVMSUFBb0FnUkJlSEVnQm1zaUFTQURJQUVnQTBraUFSc2hBeUFBSUFJZ0FSc2hBaUFBSVFFTUFRc0xJQUlvQWhnaENTQUNJQUlvQWd3aUFFY0VRRUdJTlNnQ0FCb2dBaWdDQ0NJQklBQTJBZ3dnQUNBQk5nSUlEQW9MSUFJb0FoUWlBUVIvSUFKQkZHb0ZJQUlvQWhBaUFVVU5BeUFDUVJCcUN5RUZBMEFnQlNFSElBRWlBRUVVYWlFRklBQW9BaFFpQVEwQUlBQkJFR29oQlNBQUtBSVFJZ0VOQUFzZ0IwRUFOZ0lBREFrTFFYOGhCaUFBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VHUWZ3MEtBSUFJZ2RGRFFCQkFDQUdheUVEQWtBQ1FBSkFBbjlCQUNBR1FZQUNTUTBBR2tFZklBWkIvLy8vQjBzTkFCb2dCa0VtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lDRUVDZEVHb04yb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVpCR1NBSVFRRjJhMEVBSUFoQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBWnJJZ1FnQTA4TkFDQUJJUVVnQkNJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCQ0FFSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0JCc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUZja1VFUUVFQUlRVkJBaUFJZENJQVFRQWdBR3R5SUFkeElnQkZEUU1nQUdoQkFuUkJxRGRxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUdheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FGSUFFYklRVWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JVVU5BQ0FEUVlBMUtBSUFJQVpyVHcwQUlBVW9BaGdoQ0NBRklBVW9BZ3dpQUVjRVFFR0lOU2dDQUJvZ0JTZ0NDQ0lCSUFBMkFnd2dBQ0FCTmdJSURBZ0xJQVVvQWhRaUFRUi9JQVZCRkdvRklBVW9BaEFpQVVVTkF5QUZRUkJxQ3lFQ0EwQWdBaUVFSUFFaUFFRVVhaUVDSUFBb0FoUWlBUTBBSUFCQkVHb2hBaUFBS0FJUUlnRU5BQXNnQkVFQU5nSUFEQWNMSUFaQmdEVW9BZ0FpQlUwRVFFR01OU2dDQUNFQUFrQWdCU0FHYXlJQlFSQlBCRUFnQUNBR2FpSUNJQUZCQVhJMkFnUWdBQ0FGYWlBQk5nSUFJQUFnQmtFRGNqWUNCQXdCQ3lBQUlBVkJBM0kyQWdRZ0FDQUZhaUlCSUFFb0FnUkJBWEkyQWdSQkFDRUNRUUFoQVF0QmdEVWdBVFlDQUVHTU5TQUNOZ0lBSUFCQkNHb2hBQXdKQ3lBR1FZUTFLQUlBSWdKSkJFQkJoRFVnQWlBR2F5SUJOZ0lBUVpBMVFaQTFLQUlBSWdBZ0Jtb2lBallDQUNBQ0lBRkJBWEkyQWdRZ0FDQUdRUU55TmdJRUlBQkJDR29oQUF3SkMwRUFJUUFnQmtFdmFpSURBbjlCMERnb0FnQUVRRUhZT0NnQ0FBd0JDMEhjT0VKL053SUFRZFE0UW9DZ2dJQ0FnQVEzQWdCQjBEZ2dDa0VNYWtGd2NVSFlxdFdxQlhNMkFnQkI1RGhCQURZQ0FFRzBPRUVBTmdJQVFZQWdDeUlCYWlJRVFRQWdBV3NpQjNFaUFTQUdUUTBJUWJBNEtBSUFJZ1VFUUVHb09DZ0NBQ0lJSUFGcUlna2dDRTBOQ1NBRklBbEpEUWtMQWtCQnREZ3RBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR1FOU2dDQUNJRkJFQkJ1RGdoQUFOQUlBVWdBQ2dDQUNJSVR3UkFJQWdnQUNnQ0JHb2dCVXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQTBpQWtGL1JnMERJQUVoQkVIVU9DZ0NBQ0lBUVFGcklnVWdBbkVFUUNBQklBSnJJQUlnQldwQkFDQUFhM0ZxSVFRTElBUWdCazBOQTBHd09DZ0NBQ0lBQkVCQnFEZ29BZ0FpQlNBRWFpSUhJQVZORFFRZ0FDQUhTUTBFQ3lBRUVBMGlBQ0FDUncwQkRBVUxJQVFnQW1zZ0IzRWlCQkFOSWdJZ0FDZ0NBQ0FBS0FJRWFrWU5BU0FDSVFBTElBQkJmMFlOQVNBR1FUQnFJQVJOQkVBZ0FDRUNEQVFMUWRnNEtBSUFJZ0lnQXlBRWEycEJBQ0FDYTNFaUFoQU5RWDlHRFFFZ0FpQUVhaUVFSUFBaEFnd0RDeUFDUVg5SERRSUxRYlE0UWJRNEtBSUFRUVJ5TmdJQUN5QUJFQTBoQWtFQUVBMGhBQ0FDUVg5R0RRVWdBRUYvUmcwRklBQWdBazBOQlNBQUlBSnJJZ1FnQmtFb2FrME5CUXRCcURoQnFEZ29BZ0FnQkdvaUFEWUNBRUdzT0NnQ0FDQUFTUVJBUWF3NElBQTJBZ0FMQWtCQmtEVW9BZ0FpQXdSQVFiZzRJUUFEUUNBQ0lBQW9BZ0FpQVNBQUtBSUVJZ1ZxUmcwQ0lBQW9BZ2dpQUEwQUN3d0VDMEdJTlNnQ0FDSUFRUUFnQUNBQ1RSdEZCRUJCaURVZ0FqWUNBQXRCQUNFQVFidzRJQVEyQWdCQnVEZ2dBallDQUVHWU5VRi9OZ0lBUVp3MVFkQTRLQUlBTmdJQVFjUTRRUUEyQWdBRFFDQUFRUU4wSWdGQnFEVnFJQUZCb0RWcUlnVTJBZ0FnQVVHc05Xb2dCVFlDQUNBQVFRRnFJZ0JCSUVjTkFBdEJoRFVnQkVFb2F5SUFRWGdnQW10QkIzRWlBV3NpQlRZQ0FFR1FOU0FCSUFKcUlnRTJBZ0FnQVNBRlFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHVU5VSGdPQ2dDQURZQ0FBd0VDeUFDSUFOTkRRSWdBU0FEU3cwQ0lBQW9BZ3hCQ0hFTkFpQUFJQVFnQldvMkFnUkJrRFVnQTBGNElBTnJRUWR4SWdCcUlnRTJBZ0JCaERWQmhEVW9BZ0FnQkdvaUFpQUFheUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUNJQU5xUVNnMkFnUkJsRFZCNERnb0FnQTJBZ0FNQXd0QkFDRUFEQVlMUVFBaEFBd0VDMEdJTlNnQ0FDQUNTd1JBUVlnMUlBSTJBZ0FMSUFJZ0JHb2hBVUc0T0NFQUFrQURRQ0FCSUFBb0FnQkhCRUFnQUNnQ0NDSUFEUUVNQWdzTElBQXRBQXhCQ0hGRkRRTUxRYmc0SVFBRFFBSkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQlNBRFN3MEJDeUFBS0FJSUlRQU1BUXNMUVlRMUlBUkJLR3NpQUVGNElBSnJRUWR4SWdGcklnYzJBZ0JCa0RVZ0FTQUNhaUlCTmdJQUlBRWdCMEVCY2pZQ0JDQUFJQUpxUVNnMkFnUkJsRFZCNERnb0FnQTJBZ0FnQXlBRlFTY2dCV3RCQjNGcVFTOXJJZ0FnQUNBRFFSQnFTUnNpQVVFYk5nSUVJQUZCd0RncEFnQTNBaEFnQVVHNE9Da0NBRGNDQ0VIQU9DQUJRUWhxTmdJQVFidzRJQVEyQWdCQnVEZ2dBallDQUVIRU9FRUFOZ0lBSUFGQkdHb2hBQU5BSUFCQkJ6WUNCQ0FBUVFocUlRd2dBRUVFYWlFQUlBd2dCVWtOQUFzZ0FTQURSZzBBSUFFZ0FTZ0NCRUYrY1RZQ0JDQURJQUVnQTJzaUFrRUJjallDQkNBQklBSTJBZ0FDZnlBQ1FmOEJUUVJBSUFKQmVIRkJvRFZxSVFBQ2YwSDROQ2dDQUNJQlFRRWdBa0VEZG5RaUFuRkZCRUJCK0RRZ0FTQUNjallDQUNBQURBRUxJQUFvQWdnTElRRWdBQ0FETmdJSUlBRWdBellDREVFTUlRSkJDQXdCQzBFZklRQWdBa0gvLy84SFRRUkFJQUpCSmlBQ1FRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQXlBQU5nSWNJQU5DQURjQ0VDQUFRUUowUWFnM2FpRUJBa0FDUUVIOE5DZ0NBQ0lGUVFFZ0FIUWlCSEZGQkVCQi9EUWdCQ0FGY2pZQ0FDQUJJQU0yQWdBTUFRc2dBa0VaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFKR0RRSWdBRUVkZGlFRklBQkJBWFFoQUNBQklBVkJCSEZxSWdRb0FoQWlCUTBBQ3lBRUlBTTJBaEFMSUFNZ0FUWUNHRUVJSVFJZ0F5SUJJUUJCREF3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBeUFBTmdJSVFRQWhBRUVZSVFKQkRBc2dBMm9nQVRZQ0FDQUNJQU5xSUFBMkFnQUxRWVExS0FJQUlnQWdCazBOQUVHRU5TQUFJQVpySWdFMkFnQkJrRFZCa0RVb0FnQWlBQ0FHYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFaQkEzSTJBZ1FnQUVFSWFpRUFEQVFMUWJnelFUQTJBZ0JCQUNFQURBTUxJQUFnQWpZQ0FDQUFJQUFvQWdRZ0JHbzJBZ1FnQWtGNElBSnJRUWR4YWlJSUlBWkJBM0kyQWdRZ0FVRjRJQUZyUVFkeGFpSUVJQVlnQ0dvaUEyc2hCd0pBUVpBMUtBSUFJQVJHQkVCQmtEVWdBellDQUVHRU5VR0VOU2dDQUNBSGFpSUFOZ0lBSUFNZ0FFRUJjallDQkF3QkMwR01OU2dDQUNBRVJnUkFRWXcxSUFNMkFnQkJnRFZCZ0RVb0FnQWdCMm9pQURZQ0FDQURJQUJCQVhJMkFnUWdBQ0FEYWlBQU5nSUFEQUVMSUFRb0FnUWlBRUVEY1VFQlJnUkFJQUJCZUhFaENTQUVLQUlNSVFJQ1FDQUFRZjhCVFFSQUlBUW9BZ2dpQVNBQ1JnUkFRZmcwUWZnMEtBSUFRWDRnQUVFRGRuZHhOZ0lBREFJTElBRWdBallDRENBQ0lBRTJBZ2dNQVFzZ0JDZ0NHQ0VHQWtBZ0FpQUVSd1JBUVlnMUtBSUFHaUFFS0FJSUlnQWdBallDRENBQ0lBQTJBZ2dNQVFzQ1FDQUVLQUlVSWdBRWZ5QUVRUlJxQlNBRUtBSVFJZ0JGRFFFZ0JFRVFhZ3NoQVFOQUlBRWhCU0FBSWdKQkZHb2hBU0FBS0FJVUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVZCQURZQ0FBd0JDMEVBSVFJTElBWkZEUUFDUUNBRUtBSWNJZ0JCQW5SQnFEZHFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUWZ3MFFmdzBLQUlBUVg0Z0FIZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCRVliYWlBQ05nSUFJQUpGRFFFTElBSWdCallDR0NBRUtBSVFJZ0FFUUNBQ0lBQTJBaEFnQUNBQ05nSVlDeUFFS0FJVUlnQkZEUUFnQWlBQU5nSVVJQUFnQWpZQ0dBc2dCeUFKYWlFSElBUWdDV29pQkNnQ0JDRUFDeUFFSUFCQmZuRTJBZ1FnQXlBSFFRRnlOZ0lFSUFNZ0Iyb2dCellDQUNBSFFmOEJUUVJBSUFkQmVIRkJvRFZxSVFBQ2YwSDROQ2dDQUNJQlFRRWdCMEVEZG5RaUFuRkZCRUJCK0RRZ0FTQUNjallDQUNBQURBRUxJQUFvQWdnTElRRWdBQ0FETmdJSUlBRWdBellDRENBRElBQTJBZ3dnQXlBQk5nSUlEQUVMUVI4aEFpQUhRZi8vL3dkTkJFQWdCMEVtSUFkQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2FpRUNDeUFESUFJMkFod2dBMElBTndJUUlBSkJBblJCcURkcUlRQUNRQUpBUWZ3MEtBSUFJZ0ZCQVNBQ2RDSUZjVVVFUUVIOE5DQUJJQVZ5TmdJQUlBQWdBellDQUF3QkN5QUhRUmtnQWtFQmRtdEJBQ0FDUVI5SEczUWhBaUFBS0FJQUlRRURRQ0FCSWdBb0FnUkJlSEVnQjBZTkFpQUNRUjEySVFFZ0FrRUJkQ0VDSUFBZ0FVRUVjV29pQlNnQ0VDSUJEUUFMSUFVZ0F6WUNFQXNnQXlBQU5nSVlJQU1nQXpZQ0RDQURJQU0yQWdnTUFRc2dBQ2dDQ0NJQklBTTJBZ3dnQUNBRE5nSUlJQU5CQURZQ0dDQURJQUEyQWd3Z0F5QUJOZ0lJQ3lBSVFRaHFJUUFNQWdzQ1FDQUlSUTBBQWtBZ0JTZ0NIQ0lCUVFKMFFhZzNhaUlDS0FJQUlBVkdCRUFnQWlBQU5nSUFJQUFOQVVIOE5DQUhRWDRnQVhkeElnYzJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUZSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUlOZ0lZSUFVb0FoQWlBUVJBSUFBZ0FUWUNFQ0FCSUFBMkFoZ0xJQVVvQWhRaUFVVU5BQ0FBSUFFMkFoUWdBU0FBTmdJWUN3SkFJQU5CRDAwRVFDQUZJQU1nQm1vaUFFRURjallDQkNBQUlBVnFJZ0FnQUNnQ0JFRUJjallDQkF3QkN5QUZJQVpCQTNJMkFnUWdCU0FHYWlJRUlBTkJBWEkyQWdRZ0F5QUVhaUFETmdJQUlBTkIvd0ZOQkVBZ0EwRjRjVUdnTldvaEFBSi9RZmcwS0FJQUlnRkJBU0FEUVFOMmRDSUNjVVVFUUVINE5DQUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFRMkFnZ2dBU0FFTmdJTUlBUWdBRFlDRENBRUlBRTJBZ2dNQVF0Qkh5RUFJQU5CLy8vL0IwMEVRQ0FEUVNZZ0EwRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFRZ0FEWUNIQ0FFUWdBM0FoQWdBRUVDZEVHb04yb2hBUUpBQWtBZ0IwRUJJQUIwSWdKeFJRUkFRZncwSUFJZ0IzSTJBZ0FnQVNBRU5nSUFJQVFnQVRZQ0dBd0JDeUFEUVJrZ0FFRUJkbXRCQUNBQVFSOUhHM1FoQUNBQktBSUFJUUVEUUNBQklnSW9BZ1JCZUhFZ0EwWU5BaUFBUVIxMklRRWdBRUVCZENFQUlBSWdBVUVFY1dvaUJ5Z0NFQ0lCRFFBTElBY2dCRFlDRUNBRUlBSTJBaGdMSUFRZ0JEWUNEQ0FFSUFRMkFnZ01BUXNnQWlnQ0NDSUFJQVEyQWd3Z0FpQUVOZ0lJSUFSQkFEWUNHQ0FFSUFJMkFnd2dCQ0FBTmdJSUN5QUZRUWhxSVFBTUFRc0NRQ0FKUlEwQUFrQWdBaWdDSENJQlFRSjBRYWczYWlJRktBSUFJQUpHQkVBZ0JTQUFOZ0lBSUFBTkFVSDhOQ0FMUVg0Z0FYZHhOZ0lBREFJTElBbEJFRUVVSUFrb0FoQWdBa1liYWlBQU5nSUFJQUJGRFFFTElBQWdDVFlDR0NBQ0tBSVFJZ0VFUUNBQUlBRTJBaEFnQVNBQU5nSVlDeUFDS0FJVUlnRkZEUUFnQUNBQk5nSVVJQUVnQURZQ0dBc0NRQ0FEUVE5TkJFQWdBaUFESUFacUlnQkJBM0kyQWdRZ0FDQUNhaUlBSUFBb0FnUkJBWEkyQWdRTUFRc2dBaUFHUVFOeU5nSUVJQUlnQm1vaUJTQURRUUZ5TmdJRUlBTWdCV29nQXpZQ0FDQUlCRUFnQ0VGNGNVR2dOV29oQUVHTU5TZ0NBQ0VCQW45QkFTQUlRUU4yZENJSElBUnhSUVJBUWZnMElBUWdCM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUVJQUFnQVRZQ0NDQUVJQUUyQWd3Z0FTQUFOZ0lNSUFFZ0JEWUNDQXRCakRVZ0JUWUNBRUdBTlNBRE5nSUFDeUFDUVFocUlRQUxJQXBCRUdva0FDQUFDNWNDQUNBQVJRUkFRUUFQQ3dKL0FrQWdBQVIvSUFGQi93Qk5EUUVDUUVIVU5DZ0NBQ2dDQUVVRVFDQUJRWUIvY1VHQXZ3TkdEUU1NQVFzZ0FVSC9EMDBFUUNBQUlBRkJQM0ZCZ0FGeU9nQUJJQUFnQVVFR2RrSEFBWEk2QUFCQkFnd0VDeUFCUVlCQWNVR0F3QU5ISUFGQmdMQURUM0ZGQkVBZ0FDQUJRVDl4UVlBQmNqb0FBaUFBSUFGQkRIWkI0QUZ5T2dBQUlBQWdBVUVHZGtFL2NVR0FBWEk2QUFGQkF3d0VDeUFCUVlDQUJHdEIvLzgvVFFSQUlBQWdBVUUvY1VHQUFYSTZBQU1nQUNBQlFSSjJRZkFCY2pvQUFDQUFJQUZCQm5aQlAzRkJnQUZ5T2dBQ0lBQWdBVUVNZGtFL2NVR0FBWEk2QUFGQkJBd0VDd3RCdUROQkdUWUNBRUYvQlVFQkN3d0JDeUFBSUFFNkFBQkJBUXNMb1JnREUzOEJmQUorSXdCQnNBUnJJZ3drQUNBTVFRQTJBaXdDUUNBQnZTSWFRZ0JUQkVCQkFTRVBRZllJSVJNZ0Fab2lBYjBoR2d3QkN5QUVRWUFRY1FSQVFRRWhEMEg1Q0NFVERBRUxRZndJUWZjSUlBUkJBWEVpRHhzaEV5QVBSU0VWQ3dKQUlCcENnSUNBZ0lDQWdQai9BSU5DZ0lDQWdJQ0FnUGovQUZFRVFDQUFRU0FnQWlBUFFRTnFJZ01nQkVILy8zdHhFQVlnQUNBVElBOFFCU0FBUVo4SlFkd0pJQVZCSUhFaUJSdEJ1QWxCNEFrZ0JSc2dBU0FCWWh0QkF4QUZJQUJCSUNBQ0lBTWdCRUdBd0FCekVBWWdBeUFDSUFJZ0EwZ2JJUWtNQVFzZ0RFRVFhaUVTQWtBQ2Z3SkFJQUVnREVFc2FoQXJJZ0VnQWFBaUFVUUFBQUFBQUFBQUFHSUVRQ0FNSUF3b0Fpd2lCa0VCYXpZQ0xDQUZRU0J5SWc1QjRRQkhEUUVNQXdzZ0JVRWdjaUlPUWVFQVJnMENJQXdvQWl3aENrRUdJQU1nQTBFQVNCc01BUXNnRENBR1FSMXJJZ28yQWl3Z0FVUUFBQUFBQUFDd1FhSWhBVUVHSUFNZ0EwRUFTQnNMSVFzZ0RFRXdha0dnQWtFQUlBcEJBRTRiYWlJTklRY0RRQ0FIQW44Z0FVUUFBQUFBQUFEd1FXTWdBVVFBQUFBQUFBQUFBR1p4QkVBZ0Fhc01BUXRCQUFzaUF6WUNBQ0FIUVFScUlRY2dBU0FEdUtGRUFBQUFBR1hOelVHaUlnRkVBQUFBQUFBQUFBQmlEUUFMQWtBZ0NrRUFUQVJBSUFvaEF5QUhJUVlnRFNFSURBRUxJQTBoQ0NBS0lRTURRRUVkSUFNZ0EwRWRUeHNoQXdKQUlBZEJCR3NpQmlBSVNRMEFJQU90SVJ0Q0FDRWFBMEFnQmlBYVF2Ly8vLzhQZ3lBR05RSUFJQnVHZkNJYUlCcENnSlRyM0FPQUlocENnSlRyM0FOK2ZUNENBQ0FHUVFScklnWWdDRThOQUFzZ0dxY2lCa1VOQUNBSVFRUnJJZ2dnQmpZQ0FBc0RRQ0FJSUFjaUJra0VRQ0FHUVFScklnY29BZ0JGRFFFTEN5QU1JQXdvQWl3Z0Eyc2lBellDTENBR0lRY2dBMEVBU2cwQUN3c2dBMEVBU0FSQUlBdEJHV3BCQ1c1QkFXb2hFQ0FPUWVZQVJpRVJBMEJCQ1VFQUlBTnJJZ01nQTBFSlR4c2hDUUpBSUFZZ0NFMEVRQ0FJS0FJQVJVRUNkQ0VIREFFTFFZQ1U2OXdESUFsMklSUkJmeUFKZEVGL2N5RVdRUUFoQXlBSUlRY0RRQ0FISUFNZ0J5Z0NBQ0lYSUFsMmFqWUNBQ0FXSUJkeElCUnNJUU1nQjBFRWFpSUhJQVpKRFFBTElBZ29BZ0JGUVFKMElRY2dBMFVOQUNBR0lBTTJBZ0FnQmtFRWFpRUdDeUFNSUF3b0Fpd2dDV29pQXpZQ0xDQU5JQWNnQ0dvaUNDQVJHeUlISUJCQkFuUnFJQVlnQmlBSGEwRUNkU0FRU2hzaEJpQURRUUJJRFFBTEMwRUFJUU1DUUNBR0lBaE5EUUFnRFNBSWEwRUNkVUVKYkNFRFFRb2hCeUFJS0FJQUlnbEJDa2tOQUFOQUlBTkJBV29oQXlBSklBZEJDbXdpQjA4TkFBc0xJQXNnQTBFQUlBNUI1Z0JIRzJzZ0RrSG5BRVlnQzBFQVIzRnJJZ2NnQmlBTmEwRUNkVUVKYkVFSmEwZ0VRQ0FNUVRCcVFRUkJwQUlnQ2tFQVNCdHFJQWRCZ01nQWFpSUpRUWx0SWhGQkFuUnFJaEJCZ0NCcklRcEJDaUVISUFrZ0VVRUpiR3NpQ1VFSFRBUkFBMEFnQjBFS2JDRUhJQWxCQVdvaUNVRUlSdzBBQ3dzQ1FDQUtLQUlBSWhFZ0VTQUhiaUlVSUFkc2F5SUpSU0FRUWZ3ZmF5SVdJQVpHY1EwQUFrQWdGRUVCY1VVRVFFUUFBQUFBQUFCQVF5RUJJQWRCZ0pUcjNBTkhEUUVnQ0NBS1R3MEJJQkJCaENCckxRQUFRUUZ4UlEwQkMwUUJBQUFBQUFCQVF5RUJDMFFBQUFBQUFBRGdQMFFBQUFBQUFBRHdQMFFBQUFBQUFBRDRQeUFHSUJaR0cwUUFBQUFBQUFENFB5QUpJQWRCQVhZaUZFWWJJQWtnRkVrYklSa0NRQ0FWRFFBZ0V5MEFBRUV0UncwQUlCbWFJUmtnQVpvaEFRc2dDaUFSSUFscklnazJBZ0FnQVNBWm9DQUJZUTBBSUFvZ0J5QUphaUlETmdJQUlBTkJnSlRyM0FOUEJFQURRQ0FLUVFBMkFnQWdDQ0FLUVFScklncExCRUFnQ0VFRWF5SUlRUUEyQWdBTElBb2dDaWdDQUVFQmFpSUROZ0lBSUFOQi81UHIzQU5MRFFBTEN5QU5JQWhyUVFKMVFRbHNJUU5CQ2lFSElBZ29BZ0FpQ1VFS1NRMEFBMEFnQTBFQmFpRURJQWtnQjBFS2JDSUhUdzBBQ3dzZ0NrRUVhaUlISUFZZ0JpQUhTeHNoQmdzRFFDQUdJZ2NnQ0UwaUNVVUVRQ0FHUVFScklnWW9BZ0JGRFFFTEN3SkFJQTVCNXdCSEJFQWdCRUVJY1NFS0RBRUxJQU5CZjNOQmZ5QUxRUUVnQ3hzaUJpQURTaUFEUVh0S2NTSUtHeUFHYWlFTFFYOUJmaUFLR3lBRmFpRUZJQVJCQ0hFaUNnMEFRWGNoQmdKQUlBa05BQ0FIUVFScktBSUFJZzVGRFFCQkNpRUpRUUFoQmlBT1FRcHdEUUFEUUNBR0lncEJBV29oQmlBT0lBbEJDbXdpQ1hCRkRRQUxJQXBCZjNNaEJnc2dCeUFOYTBFQ2RVRUpiQ0VKSUFWQlgzRkJ4Z0JHQkVCQkFDRUtJQXNnQmlBSmFrRUpheUlHUVFBZ0JrRUFTaHNpQmlBR0lBdEtHeUVMREFFTFFRQWhDaUFMSUFNZ0NXb2dCbXBCQ1dzaUJrRUFJQVpCQUVvYklnWWdCaUFMU2hzaEN3dEJmeUVKSUF0Qi9mLy8vd2RCL3YvLy93Y2dDaUFMY2lJUkcwb05BU0FMSUJGQkFFZHFRUUZxSVE0Q1FDQUZRVjl4SWhWQnhnQkdCRUFnQXlBT1FmLy8vLzhIYzBvTkF5QURRUUFnQTBFQVNoc2hCZ3dCQ3lBU0lBTWdBMEVmZFNJR2N5QUdhNjBnRWhBT0lnWnJRUUZNQkVBRFFDQUdRUUZySWdaQk1Eb0FBQ0FTSUFaclFRSklEUUFMQ3lBR1FRSnJJaEFnQlRvQUFDQUdRUUZyUVMxQkt5QURRUUJJR3pvQUFDQVNJQkJySWdZZ0RrSC8vLy8vQjNOS0RRSUxJQVlnRG1vaUF5QVBRZi8vLy84SGMwb05BU0FBUVNBZ0FpQURJQTlxSWdVZ0JCQUdJQUFnRXlBUEVBVWdBRUV3SUFJZ0JTQUVRWUNBQkhNUUJnSkFBa0FDUUNBVlFjWUFSZ1JBSUF4QkVHb2lCa0VJY2lFRElBWkJDWEloQ2lBTklBZ2dDQ0FOU3hzaUNTRUlBMEFnQ0RVQ0FDQUtFQTRoQmdKQUlBZ2dDVWNFUUNBR0lBeEJFR3BORFFFRFFDQUdRUUZySWdaQk1Eb0FBQ0FHSUF4QkVHcExEUUFMREFFTElBWWdDa2NOQUNBTVFUQTZBQmdnQXlFR0N5QUFJQVlnQ2lBR2F4QUZJQWhCQkdvaUNDQU5UUTBBQ3lBUkJFQWdBRUhrQ1VFQkVBVUxJQWNnQ0UwTkFTQUxRUUJNRFFFRFFDQUlOUUlBSUFvUURpSUdJQXhCRUdwTEJFQURRQ0FHUVFGcklnWkJNRG9BQUNBR0lBeEJFR3BMRFFBTEN5QUFJQVpCQ1NBTElBdEJDVTRiRUFVZ0MwRUpheUVHSUFoQkJHb2lDQ0FIVHcwRElBdEJDVW9oR0NBR0lRc2dHQTBBQ3d3Q0N3SkFJQXRCQUVnTkFDQUhJQWhCQkdvZ0J5QUlTeHNoQ1NBTVFSQnFJZ1pCQ0hJaEF5QUdRUWx5SVEwZ0NDRUhBMEFnRFNBSE5RSUFJQTBRRGlJR1JnUkFJQXhCTURvQUdDQURJUVlMQWtBZ0J5QUlSd1JBSUFZZ0RFRVFhazBOQVFOQUlBWkJBV3NpQmtFd09nQUFJQVlnREVFUWFrc05BQXNNQVFzZ0FDQUdRUUVRQlNBR1FRRnFJUVlnQ2lBTGNrVU5BQ0FBUWVRSlFRRVFCUXNnQUNBR0lBMGdCbXNpQmlBTElBWWdDMGdiRUFVZ0N5QUdheUVMSUFkQkJHb2lCeUFKVHcwQklBdEJBRTROQUFzTElBQkJNQ0FMUVJKcVFSSkJBQkFHSUFBZ0VDQVNJQkJyRUFVTUFnc2dDeUVHQ3lBQVFUQWdCa0VKYWtFSlFRQVFCZ3NnQUVFZ0lBSWdCU0FFUVlEQUFITVFCaUFGSUFJZ0FpQUZTQnNoQ1F3QkN5QVRJQVZCR25SQkgzVkJDWEZxSVFnQ1FDQURRUXRMRFFCQkRDQURheUVHUkFBQUFBQUFBREJBSVJrRFFDQVpSQUFBQUFBQUFEQkFvaUVaSUFaQkFXc2lCZzBBQ3lBSUxRQUFRUzFHQkVBZ0dTQUJtaUFab2FDYUlRRU1BUXNnQVNBWm9DQVpvU0VCQ3lBU0lBd29BaXdpQmlBR1FSOTFJZ1p6SUFacnJTQVNFQTRpQmtZRVFDQU1RVEE2QUE4Z0RFRVBhaUVHQ3lBUFFRSnlJUXNnQlVFZ2NTRU5JQXdvQWl3aEJ5QUdRUUpySWdvZ0JVRVBham9BQUNBR1FRRnJRUzFCS3lBSFFRQklHem9BQUNBRVFRaHhJUVlnREVFUWFpRUhBMEFnQnlJRkFuOGdBWmxFQUFBQUFBQUE0RUZqQkVBZ0Fhb01BUXRCZ0lDQWdIZ0xJZ2RCb0NWcUxRQUFJQTF5T2dBQUlBRWdCN2VoUkFBQUFBQUFBREJBb2lFQkFrQWdCVUVCYWlJSElBeEJFR3ByUVFGSERRQUNRQ0FHRFFBZ0EwRUFTZzBBSUFGRUFBQUFBQUFBQUFCaERRRUxJQVZCTGpvQUFTQUZRUUpxSVFjTElBRkVBQUFBQUFBQUFBQmlEUUFMUVg4aENVSDkvLy8vQnlBTElCSWdDbXNpQm1vaURXc2dBMGdOQUNBQVFTQWdBaUFOSUFOQkFtb2dCeUFNUVJCcUlnZHJJZ1VnQlVFQ2F5QURTQnNnQlNBREd5SUphaUlESUFRUUJpQUFJQWdnQ3hBRklBQkJNQ0FDSUFNZ0JFR0FnQVJ6RUFZZ0FDQUhJQVVRQlNBQVFUQWdDU0FGYTBFQVFRQVFCaUFBSUFvZ0JoQUZJQUJCSUNBQ0lBTWdCRUdBd0FCekVBWWdBeUFDSUFJZ0EwZ2JJUWtMSUF4QnNBUnFKQUFnQ1F1MEFnQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFGQkNXc09FZ0FJQ1FvSUNRRUNBd1FLQ1FvS0NBa0ZCZ2NMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVNnQ0FEWUNBQThMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVRJQkFEY0RBQThMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVRNQkFEY0RBQThMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVRBQUFEY0RBQThMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVRFQUFEY0RBQThMSUFJZ0FpZ0NBRUVIYWtGNGNTSUJRUWhxTmdJQUlBQWdBU3NEQURrREFBOExBQXNQQ3lBQ0lBSW9BZ0FpQVVFRWFqWUNBQ0FBSUFFMEFnQTNBd0FQQ3lBQ0lBSW9BZ0FpQVVFRWFqWUNBQ0FBSUFFMUFnQTNBd0FQQ3lBQ0lBSW9BZ0JCQjJwQmVIRWlBVUVJYWpZQ0FDQUFJQUVwQXdBM0F3QUxjd0VHZnlBQUtBSUFJZ01zQUFCQk1Hc2lBVUVKU3dSQVFRQVBDd05BUVg4aEJDQUNRY3lacytZQVRRUkFRWDhnQVNBQ1FRcHNJZ1ZxSUFFZ0JVSC8vLy8vQjNOTEd5RUVDeUFBSUFOQkFXb2lCVFlDQUNBRExBQUJJUVlnQkNFQ0lBVWhBeUFHUVRCcklnRkJDa2tOQUFzZ0FndVRGQUlXZndGK1FlMEpJUVVqQUVIUUFHc2lCaVFBSUFaQjdRazJBa3dnQmtFM2FpRVVJQVpCT0dvaER3SkFBa0FDUUFKQUEwQkJBQ0VFQTBBZ0JTRUxJQVFnREVILy8vLy9CM05LRFFJZ0JDQU1haUVNQWtBQ1FBSkFJQVVpQkMwQUFDSUpCRUFEUUFKQUFrQWdDVUgvQVhFaUJVVUVRQ0FFSVFVTUFRc2dCVUVsUncwQklBUWhDUU5BSUFrdEFBRkJKVWNFUUNBSklRVU1BZ3NnQkVFQmFpRUVJQWt0QUFJaEZ5QUpRUUpxSWdVaENTQVhRU1ZHRFFBTEN5QUVJQXRySWdRZ0RFSC8vLy8vQjNNaUZVb05DQ0FBQkVBZ0FDQUxJQVFRQlFzZ0JBMEdJQVlnQlRZQ1RDQUZRUUZxSVFSQmZ5RU9Ba0FnQlN3QUFVRXdheUlIUVFsTERRQWdCUzBBQWtFa1J3MEFJQVZCQTJvaEJFRUJJUkFnQnlFT0N5QUdJQVEyQWt4QkFDRUtBa0FnQkN3QUFDSUpRU0JySWdWQkgwc0VRQ0FFSVFjTUFRc2dCQ0VIUVFFZ0JYUWlCVUdKMFFSeFJRMEFBMEFnQmlBRVFRRnFJZ2MyQWt3Z0JTQUtjaUVLSUFRc0FBRWlDVUVnYXlJRlFTQlBEUUVnQnlFRVFRRWdCWFFpQlVHSjBRUnhEUUFMQ3dKQUlBbEJLa1lFUUFKL0FrQWdCeXdBQVVFd2F5SUVRUWxMRFFBZ0J5MEFBa0VrUncwQUFuOGdBRVVFUUNBRElBUkJBblJxUVFvMkFnQkJBQXdCQ3lBQ0lBUkJBM1JxS0FJQUN5RU5JQWRCQTJvaEJVRUJEQUVMSUJBTkJpQUhRUUZxSVFVZ0FFVUVRQ0FHSUFVMkFreEJBQ0VRUVFBaERRd0RDeUFCSUFFb0FnQWlCRUVFYWpZQ0FDQUVLQUlBSVExQkFBc2hFQ0FHSUFVMkFrd2dEVUVBVGcwQlFRQWdEV3NoRFNBS1FZREFBSEloQ2d3QkN5QUdRY3dBYWhBcElnMUJBRWdOQ1NBR0tBSk1JUVVMUVFBaEJFRi9JUWdDZjBFQUlBVXRBQUJCTGtjTkFCb2dCUzBBQVVFcVJnUkFBbjhDUUNBRkxBQUNRVEJySWdkQkNVc05BQ0FGTFFBRFFTUkhEUUFnQlVFRWFpRUZBbjhnQUVVRVFDQURJQWRCQW5ScVFRbzJBZ0JCQUF3QkN5QUNJQWRCQTNScUtBSUFDd3dCQ3lBUURRWWdCVUVDYWlFRlFRQWdBRVVOQUJvZ0FTQUJLQUlBSWdkQkJHbzJBZ0FnQnlnQ0FBc2hDQ0FHSUFVMkFrd2dDRUVBVGd3QkN5QUdJQVZCQVdvMkFrd2dCa0hNQUdvUUtTRUlJQVlvQWt3aEJVRUJDeUVSQTBBZ0JDRVNRUndoQnlBRkloWXNBQUFpQkVIN0FHdEJSa2tOQ2lBRlFRRnFJUVVnQkNBU1FUcHNha0dQSVdvdEFBQWlCRUVCYTBFSVNRMEFDeUFHSUFVMkFrd0NRQ0FFUVJ0SEJFQWdCRVVOQ3lBT1FRQk9CRUFnQUVVRVFDQURJQTVCQW5ScUlBUTJBZ0FNQ3dzZ0JpQUNJQTVCQTNScUtRTUFOd05BREFJTElBQkZEUWNnQmtGQWF5QUVJQUVRS0F3QkN5QU9RUUJPRFFwQkFDRUVJQUJGRFFjTElBQXRBQUJCSUhFTkNpQUtRZi8vZTNFaUNTQUtJQXBCZ01BQWNSc2hDa0VBSVE1QjdBZ2hFeUFQSVFjQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQ0FXTEFBQUlnUkJVM0VnQkNBRVFROXhRUU5HR3lBRUlCSWJJZ1JCMkFCckRpRUVGQlFVRkJRVUZCUU9GQThHRGc0T0ZBWVVGQlFVQWdVREZCUUpGQUVVRkFRQUN3SkFJQVJCd1FCckRnY09GQXNVRGc0T0FBc2dCRUhUQUVZTkNRd1RDeUFHS1FOQUlScEI3QWdNQlF0QkFDRUVBa0FDUUFKQUFrQUNRQUpBQWtBZ0VrSC9BWEVPQ0FBQkFnTUVHZ1VHR2dzZ0JpZ0NRQ0FNTmdJQURCa0xJQVlvQWtBZ0REWUNBQXdZQ3lBR0tBSkFJQXlzTndNQURCY0xJQVlvQWtBZ0REc0JBQXdXQ3lBR0tBSkFJQXc2QUFBTUZRc2dCaWdDUUNBTU5nSUFEQlFMSUFZb0FrQWdES3czQXdBTUV3dEJDQ0FJSUFoQkNFMGJJUWdnQ2tFSWNpRUtRZmdBSVFRTElBOGhDeUFHS1FOQUlocENBRklFUUNBRVFTQnhJUVVEUUNBTFFRRnJJZ3NnR3FkQkQzRkJvQ1ZxTFFBQUlBVnlPZ0FBSUJwQ0QxWWhHQ0FhUWdTSUlSb2dHQTBBQ3dzZ0Jpa0RRRkFOQXlBS1FRaHhSUTBESUFSQkJIWkI3QWhxSVJOQkFpRU9EQU1MSUE4aEJDQUdLUU5BSWhwQ0FGSUVRQU5BSUFSQkFXc2lCQ0FhcDBFSGNVRXdjam9BQUNBYVFnZFdJUmtnR2tJRGlDRWFJQmtOQUFzTElBUWhDeUFLUVFoeFJRMENJQWdnRHlBRWF5SUVRUUZxSUFRZ0NFZ2JJUWdNQWdzZ0Jpa0RRQ0lhUWdCVEJFQWdCa0lBSUJwOUlobzNBMEJCQVNFT1Fld0lEQUVMSUFwQmdCQnhCRUJCQVNFT1FlMElEQUVMUWU0SVFld0lJQXBCQVhFaURoc0xJUk1nR2lBUEVBNGhDd3NnRVNBSVFRQkljUTBQSUFwQi8vOTdjU0FLSUJFYklRb0NRQ0FHS1FOQUlocENBRklOQUNBSURRQWdEeUVMUVFBaENBd01DeUFJSUJwUUlBOGdDMnRxSWdRZ0JDQUlTQnNoQ0F3TEN3Si9RZi8vLy84SElBZ2dDRUgvLy8vL0IwOGJJZ29pQlVFQVJ5RUhBa0FDUUFKQUlBWW9Ba0FpQkVIbUNTQUVHeUlMSWdSQkEzRkZEUUFnQlVVTkFBTkFJQVF0QUFCRkRRSWdCVUVCYXlJRlFRQkhJUWNnQkVFQmFpSUVRUU54UlEwQklBVU5BQXNMSUFkRkRRRUNRQ0FFTFFBQVJRMEFJQVZCQkVrTkFBTkFJQVFvQWdBaUIwRi9jeUFIUVlHQ2hBaHJjVUdBZ1lLRWVIRU5BaUFFUVFScUlRUWdCVUVFYXlJRlFRTkxEUUFMQ3lBRlJRMEJDd05BSUFRZ0JDMEFBRVVOQWhvZ0JFRUJhaUVFSUFWQkFXc2lCUTBBQ3d0QkFBc2lCQ0FMYXlBS0lBUWJJZ1FnQzJvaEJ5QUlRUUJPQkVBZ0NTRUtJQVFoQ0F3TEN5QUpJUW9nQkNFSUlBY3RBQUFORGd3S0N5QUlCRUFnQmlnQ1FBd0NDMEVBSVFRZ0FFRWdJQTFCQUNBS0VBWU1BZ3NnQmtFQU5nSU1JQVlnQmlrRFFENENDQ0FHSUFaQkNHb2lCRFlDUUVGL0lRZ2dCQXNoQ1VFQUlRUURRQUpBSUFrb0FnQWlDMFVOQUNBR1FRUnFJQXNRSmlJTFFRQklEUThnQ3lBSUlBUnJTdzBBSUFsQkJHb2hDU0FFSUF0cUlnUWdDRWtOQVFzTFFUMGhCeUFFUVFCSURRd2dBRUVnSUEwZ0JDQUtFQVlnQkVVRVFFRUFJUVFNQVF0QkFDRUhJQVlvQWtBaENRTkFJQWtvQWdBaUMwVU5BU0FHUVFScUlnZ2dDeEFtSWdzZ0Iyb2lCeUFFU3cwQklBQWdDQ0FMRUFVZ0NVRUVhaUVKSUFRZ0Iwc05BQXNMSUFCQklDQU5JQVFnQ2tHQXdBQnpFQVlnRFNBRUlBUWdEVWdiSVFRTUNBc2dFU0FJUVFCSWNRMEpRVDBoQnlBQUlBWXJBMEFnRFNBSUlBb2dCQkFuSWdSQkFFNE5Cd3dLQ3lBR0lBWXBBMEE4QURkQkFTRUlJQlFoQ3lBSklRb01CQXNnQkMwQUFTRUpJQVJCQVdvaEJBd0FDd0FMSUFBTkNDQVFSUTBDUVFFaEJBTkFJQU1nQkVFQ2RHb29BZ0FpQUFSQUlBSWdCRUVEZEdvZ0FDQUJFQ2hCQVNFTUlBUkJBV29pQkVFS1J3MEJEQW9MQzBFQklRd2dCRUVLVHcwSUEwQWdBeUFFUVFKMGFpZ0NBQTBCSUFSQkFXb2lCRUVLUncwQUN3d0lDMEVjSVFjTUJRc2dDQ0FISUF0cklna2dDQ0FKU2hzaUNDQU9RZi8vLy84SGMwb05BMEU5SVFjZ0RTQUlJQTVxSWdVZ0JTQU5TQnNpQkNBVlNnMEVJQUJCSUNBRUlBVWdDaEFHSUFBZ0V5QU9FQVVnQUVFd0lBUWdCU0FLUVlDQUJITVFCaUFBUVRBZ0NDQUpRUUFRQmlBQUlBc2dDUkFGSUFCQklDQUVJQVVnQ2tHQXdBQnpFQVlnQmlnQ1RDRUZEQUVMQ3d0QkFDRU1EQU1MUVQwaEJ3dEJ1RE1nQnpZQ0FBdEJmeUVNQ3lBR1FkQUFhaVFBSUF3TGZnSUJmd0YrSUFDOUlnTkNOSWluUWY4UGNTSUNRZjhQUndSOElBSkZCRUFnQVNBQVJBQUFBQUFBQUFBQVlRUi9RUUFGSUFCRUFBQUFBQUFBOEVPaUlBRVFLeUVBSUFFb0FnQkJRR29MTmdJQUlBQVBDeUFCSUFKQi9nZHJOZ0lBSUFOQy8vLy8vLy8vLzRlQWY0TkNnSUNBZ0lDQWdQQS9oTDhGSUFBTEMzb0JBMzhDUUFKQUlBQWlBVUVEY1VVTkFDQUJMUUFBUlFSQVFRQVBDd05BSUFGQkFXb2lBVUVEY1VVTkFTQUJMUUFBRFFBTERBRUxBMEFnQVNJQ1FRUnFJUUVnQWlnQ0FDSURRWDl6SUFOQmdZS0VDR3R4UVlDQmdvUjRjVVVOQUFzRFFDQUNJZ0ZCQVdvaEFpQUJMUUFBRFFBTEN5QUJJQUJyQ3dJQUM4Z0NBUVovSXdCQkVHc2lBeVFBSUFNZ0FEWUNEQ01BUWRBQmF5SUJKQUFnQVNBQU5nTE1BU0FCUWFBQmFpSUFRUUJCS0JBSEdpQUJJQUVvQXN3Qk5nTElBUUpBUVFBZ0FVSElBV29nQVVIUUFHb2dBQkFxUVFCSURRQkIxQ29vQWdCQkFFZ2hCa0dJS2tHSUtpZ0NBQ0lFUVY5eE5nSUFBbjhDUUFKQVFiZ3FLQUlBUlFSQVFiZ3FRZEFBTmdJQVFhUXFRUUEyQWdCQm1DcENBRGNEQUVHMEtpZ0NBQ0VDUWJRcUlBRTJBZ0FNQVF0Qm1Db29BZ0FOQVF0QmYwR0lLaEFhRFFFYUMwR0lLaUFCUWNnQmFpQUJRZEFBYWlBQlFhQUJhaEFxQ3lFRklBSUVmMEdJS2tFQVFRQkJyQ29vQWdBUkFnQWFRYmdxUVFBMkFnQkJ0Q29nQWpZQ0FFR2tLa0VBTmdJQVFad3FLQUlBR2tHWUtrSUFOd01BUVFBRklBVUxHa0dJS2tHSUtpZ0NBQ0FFUVNCeGNqWUNBQ0FHRFFBTElBRkIwQUZxSkFBZ0EwRVFhaVFBQzVRREFnUi9BM3dqQUVFUWF5SURKQUFDUUNBQXZDSUVRZi8vLy84SGNTSUNRZHFmcE80RVRRUkFJQUVnQUxzaUJ5QUhSSVBJeVcwd1grUS9va1FBQUFBQUFBQTRRNkJFQUFBQUFBQUFPTU9nSWdaRUFBQUFVUHNoK2IraW9DQUdSR05pR21HMEVGRytvcUFpQ0RrREFDQUlSQUFBQUdEN0llbS9ZeUVGQW44Z0JwbEVBQUFBQUFBQTRFRmpCRUFnQnFvTUFRdEJnSUNBZ0hnTElRSWdCUVJBSUFFZ0J5QUdSQUFBQUFBQUFQQy9vQ0lHUkFBQUFGRDdJZm0vb3FBZ0JrUmpZaHBodEJCUnZxS2dPUU1BSUFKQkFXc2hBZ3dDQ3lBSVJBQUFBR0Q3SWVrL1pFVU5BU0FCSUFjZ0JrUUFBQUFBQUFEd1A2QWlCa1FBQUFCUSt5SDV2NktnSUFaRVkySWFZYlFRVWI2aW9Ea0RBQ0FDUVFGcUlRSU1BUXNnQWtHQWdJRDhCMDhFUUNBQklBQWdBSk83T1FNQVFRQWhBZ3dCQ3lBRElBSWdBa0VYZGtHV0FXc2lBa0VYZEd1K3V6a0RDQ0FEUVFocUlBTWdBa0VCUVFBUU1TRUNJQU1yQXdBaEJpQUVRUUJJQkVBZ0FTQUdtamtEQUVFQUlBSnJJUUlNQVFzZ0FTQUdPUU1BQ3lBRFFSQnFKQUFnQWd1OENnTUhmd1I4QVg0akFFRXdheUlFSkFBQ1FBSkFBa0FnQUwwaURVSWdpS2NpQWtILy8vLy9CM0VpQTBINjFMMkFCRTBFUUNBQ1FmLy9QM0ZCKzhNa1JnMEJJQU5CL0xLTGdBUk5CRUFnRFVJQVdRUkFJQUVnQUVRQUFFQlUreUg1djZBaUNVUXhZMklhWWJUUXZhQWlBRGtEQUNBQklBa2dBS0ZFTVdOaUdtRzAwTDJnT1FNSVFRRWhBZ3dGQ3lBQklBQkVBQUJBVlBzaCtUK2dJZ2xFTVdOaUdtRzAwRDJnSWdBNUF3QWdBU0FKSUFDaFJERmpZaHBodE5BOW9Ea0RDRUYvSVFJTUJBc2dEVUlBV1FSQUlBRWdBRVFBQUVCVSt5RUp3S0FpQ1VReFkySWFZYlRndmFBaUFEa0RBQ0FCSUFrZ0FLRkVNV05pR21HMDRMMmdPUU1JUVFJaEFnd0VDeUFCSUFCRUFBQkFWUHNoQ1VDZ0lnbEVNV05pR21HMDREMmdJZ0E1QXdBZ0FTQUpJQUNoUkRGallocGh0T0E5b0RrRENFRitJUUlNQXdzZ0EwRzdqUEdBQkUwRVFDQURRYno3MTRBRVRRUkFJQU5CL0xMTGdBUkdEUUlnRFVJQVdRUkFJQUVnQUVRQUFEQi9mTmtTd0tBaUNVVEtsSk9ua1E3cHZhQWlBRGtEQUNBQklBa2dBS0ZFeXBTVHA1RU82YjJnT1FNSVFRTWhBZ3dGQ3lBQklBQkVBQUF3ZjN6WkVrQ2dJZ2xFeXBTVHA1RU82VDJnSWdBNUF3QWdBU0FKSUFDaFJNcVVrNmVSRHVrOW9Ea0RDRUY5SVFJTUJBc2dBMEg3dytTQUJFWU5BU0FOUWdCWkJFQWdBU0FBUkFBQVFGVDdJUm5Bb0NJSlJERmpZaHBodFBDOW9DSUFPUU1BSUFFZ0NTQUFvVVF4WTJJYVliVHd2YUE1QXdoQkJDRUNEQVFMSUFFZ0FFUUFBRUJVK3lFWlFLQWlDVVF4WTJJYVliVHdQYUFpQURrREFDQUJJQWtnQUtGRU1XTmlHbUcwOEQyZ09RTUlRWHdoQWd3REN5QURRZnJENUlrRVN3MEJDeUFBSUFCRWc4akpiVEJmNUQraVJBQUFBQUFBQURoRG9FUUFBQUFBQUFBNHc2QWlDa1FBQUVCVSt5SDV2NktnSWdzZ0NrUXhZMklhWWJUUVBhSWlES0VpQ1VRWUxVUlUreUhwdjJNaEJRSi9JQXFaUkFBQUFBQUFBT0JCWXdSQUlBcXFEQUVMUVlDQWdJQjRDeUVDQWtBZ0JRUkFJQUpCQVdzaEFpQUtSQUFBQUFBQUFQQy9vQ0lLUkRGallocGh0TkE5b2lFTUlBQWdDa1FBQUVCVSt5SDV2NktnSVFzTUFRc2dDVVFZTFVSVSt5SHBQMlJGRFFBZ0FrRUJhaUVDSUFwRUFBQUFBQUFBOEQrZ0lncEVNV05pR21HMDBEMmlJUXdnQUNBS1JBQUFRRlQ3SWZtL29xQWhDd3NnQVNBTElBeWhJZ0E1QXdBQ1FDQURRUlIySWdVZ0FMMUNOSWluUWY4UGNXdEJFVWdOQUNBQklBc2dDa1FBQUdBYVliVFFQYUlpQUtFaUNTQUtSSE53QXk2S0dhTTdvaUFMSUFtaElBQ2hvU0lNb1NJQU9RTUFJQVVnQUwxQ05JaW5RZjhQY1d0Qk1rZ0VRQ0FKSVFzTUFRc2dBU0FKSUFwRUFBQUFMb29ab3p1aUlnQ2hJZ3NnQ2tUQlNTQWxtb043T2FJZ0NTQUxvU0FBb2FFaURLRWlBRGtEQUFzZ0FTQUxJQUNoSUF5aE9RTUlEQUVMSUFOQmdJREEvd2RQQkVBZ0FTQUFJQUNoSWdBNUF3QWdBU0FBT1FNSVFRQWhBZ3dCQ3lBRVFSQnFJZ0pCQ0hJaEJ5QU5Rdi8vLy8vLy8vOEhnMEtBZ0lDQWdJQ0FzTUVBaEw4aEFFRUJJUVlEUUNBQ0FuOGdBSmxFQUFBQUFBQUE0RUZqQkVBZ0FLb01BUXRCZ0lDQWdIZ0x0eUlKT1FNQUlBQWdDYUZFQUFBQUFBQUFjRUdpSVFBZ0JpRUlRUUFoQmlBSElRSWdDQTBBQ3lBRUlBQTVBeUJCQWlFQ0EwQWdBaUlGUVFGcklRSWdCRUVRYWlJR0lBVkJBM1JxS3dNQVJBQUFBQUFBQUFBQVlRMEFDeUFHSUFRZ0EwRVVka0dXQ0dzZ0JVRUJha0VCRURFaEFpQUVLd01BSVFBZ0RVSUFVd1JBSUFFZ0FKbzVBd0FnQVNBRUt3TUltamtEQ0VFQUlBSnJJUUlNQVFzZ0FTQUFPUU1BSUFFZ0JDc0RDRGtEQ0FzZ0JFRXdhaVFBSUFJTHdCRUNBM3dYZnlNQVFiQUVheUlKSkFBZ0FpQUNRUU5yUVJodElnaEJBQ0FJUVFCS0d5SVNRV2hzYWlFTUlBUkJBblJCc0F0cUtBSUFJZzBnQTBFQmF5SUxha0VBVGdSQUlBTWdEV29oQ0NBU0lBdHJJUUlEUUNBSlFjQUNhaUFLUVFOMGFpQUNRUUJJQkh4RUFBQUFBQUFBQUFBRklBSkJBblJCd0F0cUtBSUF0d3M1QXdBZ0FrRUJhaUVDSUFwQkFXb2lDaUFJUncwQUN3c2dERUVZYXlFUFFRQWhDQ0FOUVFBZ0RVRUFTaHNoQ2lBRFFRQk1JUTREUUFKQUlBNEVRRVFBQUFBQUFBQUFBQ0VGREFFTElBZ2dDMm9oRVVFQUlRSkVBQUFBQUFBQUFBQWhCUU5BSUFBZ0FrRURkR29yQXdBZ0NVSEFBbW9nRVNBQ2EwRURkR29yQXdDaUlBV2dJUVVnQWtFQmFpSUNJQU5IRFFBTEN5QUpJQWhCQTNScUlBVTVBd0FnQ0NBS1JpRVlJQWhCQVdvaENDQVlSUTBBQzBFdklBeHJJUlJCTUNBTWF5RVJJQXhCR1dzaEZTQU5JUWdDUUFOQUlBa2dDRUVEZEdvckF3QWhCVUVBSVFJZ0NDRUtJQWhCQUV3aUVFVUVRQU5BSUFsQjRBTnFJQUpCQW5ScUFuOENmeUFGUkFBQUFBQUFBSEErb2lJR21VUUFBQUFBQUFEZ1FXTUVRQ0FHcWd3QkMwR0FnSUNBZUF1M0lnWkVBQUFBQUFBQWNNR2lJQVdnSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Q3pZQ0FDQUpJQXBCQVdzaUNrRURkR29yQXdBZ0JxQWhCU0FDUVFGcUlnSWdDRWNOQUFzTEFuOGdCU0FQRUJRaUJTQUZSQUFBQUFBQUFNQS9vcHhFQUFBQUFBQUFJTUNpb0NJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUFzaERpQUZJQTYzb1NFRkFrQUNRQUpBQW44Z0QwRUFUQ0lXUlFSQUlBaEJBblFnQ1dvaUFpQUNLQUxjQXlJQ0lBSWdFWFVpQWlBUmRHc2lDallDM0FNZ0FpQU9haUVPSUFvZ0ZIVU1BUXNnRHcwQklBaEJBblFnQ1dvb0F0d0RRUmQxQ3lJTFFRQk1EUUlNQVF0QkFpRUxJQVZFQUFBQUFBQUE0RDltRFFCQkFDRUxEQUVMUVFBaEFrRUFJUW9nRUVVRVFBTkFJQWxCNEFOcUlBSkJBblJxSWhjb0FnQWhFRUgvLy84SElSTUNmd0pBSUFvTkFFR0FnSUFJSVJNZ0VBMEFRUUFNQVFzZ0Z5QVRJQkJyTmdJQVFRRUxJUW9nQWtFQmFpSUNJQWhIRFFBTEN3SkFJQllOQUVILy8vOERJUUlDUUFKQUlCVU9BZ0VBQWd0Qi8vLy9BU0VDQ3lBSVFRSjBJQWxxSWhBZ0VDZ0MzQU1nQW5FMkF0d0RDeUFPUVFGcUlRNGdDMEVDUncwQVJBQUFBQUFBQVBBL0lBV2hJUVZCQWlFTElBcEZEUUFnQlVRQUFBQUFBQUR3UHlBUEVCU2hJUVVMSUFWRUFBQUFBQUFBQUFCaEJFQkJBQ0VLSUFnaEFnSkFJQWdnRFV3TkFBTkFJQWxCNEFOcUlBSkJBV3NpQWtFQ2RHb29BZ0FnQ25JaENpQUNJQTFLRFFBTElBcEZEUUFnRHlFTUEwQWdERUVZYXlFTUlBbEI0QU5xSUFoQkFXc2lDRUVDZEdvb0FnQkZEUUFMREFNTFFRRWhBZ05BSUFJaUNrRUJhaUVDSUFsQjRBTnFJQTBnQ210QkFuUnFLQUlBUlEwQUN5QUlJQXBxSVFvRFFDQUpRY0FDYWlBRElBaHFJZ3RCQTNScUlBaEJBV29pQ0NBU2FrRUNkRUhBQzJvb0FnQzNPUU1BUVFBaEFrUUFBQUFBQUFBQUFDRUZJQU5CQUVvRVFBTkFJQUFnQWtFRGRHb3JBd0FnQ1VIQUFtb2dDeUFDYTBFRGRHb3JBd0NpSUFXZ0lRVWdBa0VCYWlJQ0lBTkhEUUFMQ3lBSklBaEJBM1JxSUFVNUF3QWdDQ0FLU0EwQUN5QUtJUWdNQVFzTEFrQWdCVUVZSUF4ckVCUWlCVVFBQUFBQUFBQndRV1lFUUNBSlFlQURhaUFJUVFKMGFnSi9BbjhnQlVRQUFBQUFBQUJ3UHFJaUJwbEVBQUFBQUFBQTRFRmpCRUFnQnFvTUFRdEJnSUNBZ0hnTElnSzNSQUFBQUFBQUFIREJvaUFGb0NJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUFzMkFnQWdDRUVCYWlFSURBRUxBbjhnQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdMSVFJZ0R5RU1DeUFKUWVBRGFpQUlRUUowYWlBQ05nSUFDMFFBQUFBQUFBRHdQeUFNRUJRaEJRSkFJQWhCQUVnTkFDQUlJUU1EUUNBSklBTWlBRUVEZEdvZ0JTQUpRZUFEYWlBQVFRSjBhaWdDQUxlaU9RTUFJQUJCQVdzaEF5QUZSQUFBQUFBQUFIQStvaUVGSUFBTkFBc2dDRUVBU0EwQUlBZ2hDZ05BUkFBQUFBQUFBQUFBSVFWQkFDRUNJQTBnQ0NBS2F5SUFJQUFnRFVvYklnTkJBRTRFUUFOQUlBSkJBM1JCa0NGcUt3TUFJQWtnQWlBS2FrRURkR29yQXdDaUlBV2dJUVVnQWlBRFJ5RVpJQUpCQVdvaEFpQVpEUUFMQ3lBSlFhQUJhaUFBUVFOMGFpQUZPUU1BSUFwQkFFb2hHaUFLUVFGcklRb2dHZzBBQ3dzQ1FBSkFBa0FDUUFKQUlBUU9CQUVDQWdBRUMwUUFBQUFBQUFBQUFDRUdBa0FnQ0VFQVRBMEFJQWxCb0FGcUlBaEJBM1JxS3dNQUlRVWdDQ0VDQTBBZ0NVR2dBV29pQXlBQ1FRTjBhaUFGSUFKQkFXc2lBRUVEZENBRGFpSUVLd01BSWdjZ0J5QUZvQ0lGb2FBNUF3QWdCQ0FGT1FNQUlBSkJBVXNoR3lBQUlRSWdHdzBBQ3lBSVFRRkdEUUFnQ0VFRGRDQURhaXNEQUNFRklBZ2hBZ05BSUFsQm9BRnFJZ01nQWtFRGRHb2dCU0FESUFKQkFXc2lBRUVEZEdvaUF5c0RBQ0lHSUFZZ0JhQWlCYUdnT1FNQUlBTWdCVGtEQUNBQ1FRSkxJUndnQUNFQ0lCd05BQXRFQUFBQUFBQUFBQUFoQmlBSVFRRkdEUUFEUUNBR0lBbEJvQUZxSUFoQkEzUnFLd01Bb0NFR0lBaEJBa29oSFNBSVFRRnJJUWdnSFEwQUN3c2dDU3NEb0FFaEJTQUxEUUlnQVNBRk9RTUFJQWtyQTZnQklRVWdBU0FHT1FNUUlBRWdCVGtEQ0F3REMwUUFBQUFBQUFBQUFDRUZJQWhCQUU0RVFBTkFJQWdpQUVFQmF5RUlJQVVnQ1VHZ0FXb2dBRUVEZEdvckF3Q2dJUVVnQUEwQUN3c2dBU0FGbWlBRklBc2JPUU1BREFJTFJBQUFBQUFBQUFBQUlRVWdDRUVBVGdSQUlBZ2hBd05BSUFNaUFFRUJheUVESUFVZ0NVR2dBV29nQUVFRGRHb3JBd0NnSVFVZ0FBMEFDd3NnQVNBRm1pQUZJQXNiT1FNQUlBa3JBNkFCSUFXaElRVkJBU0VDSUFoQkFFb0VRQU5BSUFVZ0NVR2dBV29nQWtFRGRHb3JBd0NnSVFVZ0FpQUlSeUVlSUFKQkFXb2hBaUFlRFFBTEN5QUJJQVdhSUFVZ0N4czVBd2dNQVFzZ0FTQUZtamtEQUNBSkt3T29BU0VGSUFFZ0JwbzVBeEFnQVNBRm1qa0RDQXNnQ1VHd0JHb2tBQ0FPUVFkeEM0NFBBUWgvQWtBZ0FTQUFLQUlNSWdRZ0FDZ0NDQ0lEYTBFR2RTSUNSZzBBQWtBZ0FTQUNTd1JBSUFFZ0Ftc2lCaUFBS0FJUUlnVWdCQ0lEYTBFR2RVMEVRQUpBSUFaRkRRQWdBeUVDSUFaQkEzRWlCUVJBUVFBaEJBTkFJQUw5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5Q3dJa0lBTDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0lVSUFMOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3SUVJQUpCZ0lDQS9BTTJBandnQWtHQWdJRDhBellDQUNBQ1FnQTNBalFnQWtHQWdJRDhBellDS0NBQ1FZQ0FnUHdETmdJVUlBSkJRR3NoQWlBRVFRRnFJZ1FnQlVjTkFBc0xJQVpCQm5RZ0Eyb2hBeUFHUVFGclFmLy8veDl4UVFOSkRRQURRQ0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ0pDQUMvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDRkNBQy9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0NUQ0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ1hDQUMvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDQkNBQ1FnQTNBa1FnQWtHQWdJRDhBellDQUNBQ1FvQ0FnUHlEZ0lEQVB6Y0NQQ0FDUVlDQWdQd0ROZ0o4SUFMOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3S0VBU0FDUWdBM0FqUWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQW13Z0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBcFFCSUFKQ0FEY0N0QUVnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFxUUJJQUpCZ0lDQS9BTTJBaWdnQWtHQWdJRDhBellDRkNBQ1FZQ0FnUHdETmdKVUlBSkJnSUNBL0FNMkFtZ2dBa0dBZ0lEOEF6WUN2QUVnQWtHQWdJRDhBellDcUFFZ0FrR0FnSUQ4QXpZQ2xBRWdBa0dBZ0lEOEF6WUNnQUVnQWtJQU53TDBBU0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQzVBRWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQXRRQklBTDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0xFQVNBQ1FZQ0FnUHdETmdMOEFTQUNRWUNBZ1B3RE5nTG9BU0FDUVlDQWdQd0ROZ0xVQVNBQ1FZQ0FnUHdETmdMQUFTQUNRWUFDYWlJQ0lBTkhEUUFMQ3lBQUlBTTJBZ3dNQWdzQ1FDQURJQUFvQWdnaUFtdEJCblVpQ0NBR2FpSUhRWUNBZ0NCSkJFQkJBQ0VEUWYvLy94OGdCU0FDYXlJRlFRVjFJZ0lnQnlBQ0lBZExHeUFGUWNELy8vOEhUeHNpQndSQUlBZEJnSUNBSUU4TkFpQUhRUVowRUFzaEF3c2dBeUFJUVFaMGFpSUVJUUlnQmtFRGNTSUZCRUFEUUNBQy9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0NKQ0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ0ZDQUMvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDQkNBQ1FZQ0FnUHdETmdJOElBSkJnSUNBL0FNMkFnQWdBa0lBTndJMElBSkJnSUNBL0FNMkFpZ2dBa0dBZ0lEOEF6WUNGQ0FDUVVCcklRSWdDVUVCYWlJSklBVkhEUUFMQ3lBR1FRWjBJQVJxSVFnZ0JrRUJhMEgvLy84ZmNVRURUd1JBQTBBZ0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBaVFnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFoUWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQWt3Z0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBbHdnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFnUWdBa0lBTndKRUlBSkJnSUNBL0FNMkFnQWdBa0tBZ0lEOGc0Q0F3RDgzQWp3Z0FrR0FnSUQ4QXpZQ2ZDQUMvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDaEFFZ0FrSUFOd0kwSUFMOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3SnNJQUw5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5Q3dLVUFTQUNRZ0EzQXJRQklBTDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0trQVNBQ1FZQ0FnUHdETmdJb0lBSkJnSUNBL0FNMkFoUWdBa0dBZ0lEOEF6WUNWQ0FDUVlDQWdQd0ROZ0pvSUFKQmdJQ0EvQU0yQXJ3QklBSkJnSUNBL0FNMkFxZ0JJQUpCZ0lDQS9BTTJBcFFCSUFKQmdJQ0EvQU0yQW9BQklBSkNBRGNDOUFFZ0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBdVFCSUFMOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3TFVBU0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ3hBRWdBa0dBZ0lEOEF6WUMvQUVnQWtHQWdJRDhBellDNkFFZ0FrR0FnSUQ4QXpZQzFBRWdBa0dBZ0lEOEF6WUN3QUVnQWtHQUFtb2lBaUFJUncwQUN3c2dBQ2dDRENJQ0lBQW9BZ2dpQlVjRVFBTkFJQVJCUUdvaUJDQUNRVUJxSWdMOUFBSUEvUXNDQUNBRUlBTDlBQUl3L1FzQ01DQUVJQUw5QUFJZy9Rc0NJQ0FFSUFMOUFBSVEvUXNDRUNBQ0lBVkhEUUFMSUFBb0FnZ2hBZ3NnQUNBRElBZEJCblJxTmdJUUlBQWdDRFlDRENBQUlBUTJBZ2dnQWdSQUlBSVFGZ3NNQXdzUUV3QUxFQklBQ3lBQklBSlBEUUFnQUNBRElBRkJCblJxTmdJTUN3SkFJQUFvQWhnZ0FDZ0NGQ0lEYTBFa2JTSUNJQUZKQkVBZ0FFRVVhaUFCSUFKckVEUU1BUXNnQVNBQ1R3MEFJQUFnQXlBQlFTUnNhallDR0FzQ1FDQUFLQUlrSUFBb0FpQWlBMnRCQkhVaUFpQUJTUVJBSUFCQklHb2dBU0FDYXhBN0RBRUxJQUVnQWs4TkFDQUFJQU1nQVVFRWRHbzJBaVFMSUFBb0FqQWdBQ2dDTENJRGEwRWtiU0lDSUFGSkJFQWdBRUVzYWlBQklBSnJFRFFQQ3lBQklBSlBEUUFnQUNBRElBRkJKR3hxTmdJd0N3dm1DUU1FZnc1OUVIc2pBRUZBYWlJREpBQWdBQ2dDQ0NBQlFRWjBhaUVDSUFBb0FpQWdBVUVFZEdvaUJTZ0NBQVJBSUFGQkpHd2lCQ0FBS0FJVWFpSUJLZ0lNSVFjQ1FDQUZLQUlFUVFGSEJFQWdBU29DQ0NFTElBRXFBZ1FoRGlBQktnSUFJUkFnQVNvQ0ZDRUtJQUVxQWhBaENBd0JDeUFBS0FJc0lBUnFJZ1FxQWdnaEN5QUVLZ0lFSVE0Z0FTQUFLZ0lFSWdZZ0JDb0NBSlFnQVNvQ0FKSWlFRGdDQUNBQklBWWdEcFFnQVNvQ0JKSWlEamdDQkNBQklBWWdDNVFnQVNvQ0NKSWlDemdDQ0NBRUtnSVVJUW9nQkNvQ0VDRUlJQUVnQmlBRUtnSU1sQ0FIa2lJSE9BSU1JQUVnQmlBSWxDQUJLZ0lRa2lJSU9BSVFJQUVnQmlBS2xDQUJLZ0lVa2lJS09BSVVJQVFxQWlBaERTQUVLZ0ljSVFrZ0FTQUdJQVFxQWhpVUlBRXFBaGlTT0FJWUlBRWdCaUFKbENBQktnSWNramdDSENBQklBWWdEWlFnQVNvQ0lKSTRBaUFMSUFKQkFEWUNMQ0FDUVFBMkFod2dBa0VBTmdJTUlBZEROZnFPUEpSREFBQUFQNVFpQnhBWElRMGdDRU0xK280OGxFTUFBQUEvbENJTUVCY2hDQ0FLUXpYNmpqeVVRd0FBQUQrVUlnb1FGeUVHSUFjUUd5RUpJQXdRR3lFTUlBSWdDeUFKSUFpVUlnOGdDaEFiSWdlVUlBWWdEU0FNbENJUmxKSWlDaUFHSUFrZ0RKUWlDWlFnQnlBTklBaVVJZ3lVa3lJTklBMlNJZ2lVSWhJZ0NTQUhsQ0FNSUFhVWtpSUpJQkVnQjVRZ0JpQVBsSk1pQmlBR2tpSU1sQ0lQazVRNEFpUWdBaUFMSUFZZ0NKUWlFU0FKSUFvZ0NwSWlCNVFpRTVLVU9BSWdJQUlnRGlBU0lBK1NsRGdDR0NBQ0lBNGdCaUFIbENJUElBa2dDSlFpQ1pPVU9BSVFJQUlnRUNBUklCT1RsRGdDQ0NBQ0lCQWdEeUFKa3BRNEFnUWdBaUFMUXdBQWdEOGdCaUFNbENJR0lBb2dCNVFpQzVLVGxEZ0NLQ0FDSUE1REFBQ0FQeUFHSUEwZ0NKUWlCcEtUbERnQ0ZDQUNJQkJEQUFDQVB5QUxJQWFTazVRNEFnQWdBaUFCS2dJWU9BSXdJQUlnQVNvQ0hEZ0NOQ0FCS2dJZ0lRWWdBa0dBZ0lEOEF6WUNQQ0FDSUFZNEFqZ2dCU2dDQ0NJQlFYOUhCRUFnQUNBQkVETWhBQ0FEL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ0pDQUQvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDRkNBRFFnQTNBalFnQTBHQWdJRDhBellDS0NBRFFZQ0FnUHdETmdJVUlBUDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0lFSUFOQmdJQ0EvQU0yQWp3Z0EwR0FnSUQ4QXpZQ0FDQUMvUWtDRENFWUlBTDlDUUlJSVJrZ0F2MEpBZ0FoR2lBQy9Ra0NCQ0ViSUFMOUNRSWNJUndnQXYwSkFoZ2hIU0FDL1FrQ0VDRWVJQUw5Q1FJVUlSOGdBdjBKQWl3aElDQUMvUWtDS0NFaElBTDlDUUlnSVNJZ0F2MEpBaVFoSXlBRElBRDlBQUl3SWhRZ0F2MEpBano5NWdFZ0FQMEFBaUFpRlNBQy9Ra0NPUDNtQVNBQS9RQUNBQ0lXSUFMOUNRSXcvZVlCSUFEOUFBSVFJaGNnQXYwSkFqVDk1Z0g5NUFIOTVBSDk1QUg5Q3dJd0lBTWdGQ0FnL2VZQklCVWdJZjNtQVNBV0lDTDk1Z0VnRnlBai9lWUIvZVFCL2VRQi9lUUIvUXNDSUNBRElCUWdIUDNtQVNBVklCMzk1Z0VnRmlBZS9lWUJJQmNnSC8zbUFmM2tBZjNrQWYza0FmMExBaEFnQXlBVUlCajk1Z0VnRlNBWi9lWUJJQllnR3YzbUFTQWJJQmY5NWdIOTVBSDk1QUg5NUFIOUN3SUFJQUlnQS8wQUFqRDlDd0l3SUFJZ0EvMEFBaUQ5Q3dJZ0lBSWdBLzBBQWhEOUN3SVFJQUlnQS8wQUFnRDlDd0lBQ3lBRlFRQTJBZ0FMSUFOQlFHc2tBQ0FDQzdNREFRZC9JQUVnQUNnQ0NDSUVJQUFvQWdRaUFtdEJKRzFOQkVBZ0FDQUJCSDhnQWtFQUlBRkJKR3hCSkdzaUFDQUFRU1J3YTBFa2FpSUFFQWNnQUdvRklBSUxOZ0lFRHdzQ1FDQUNJQUFvQWdBaUJtdEJKRzBpQnlBQmFpSURRY2pqOFRoSkJFQkJ4K1B4T0NBRUlBWnJRU1J0SWdSQkFYUWlDQ0FESUFNZ0NFa2JJQVJCNC9HNEhFOGJJZ1FFUUNBRVFjamo4VGhQRFFJZ0JFRWtiQkFMSVFVTElBZEJKR3dnQldvaUEwRUFJQUZCSkd4QkpHc2lBU0FCUVNSd2EwRWthaUlIRUFjaUFTQUhhaUVISUFVZ0JFRWtiR29oQkFKQUlBSWdCa1lFUUNBQklRVU1BUXNEUUNBRFFTUnJJZ1VnQWtFa2F5SUJLZ0lBT0FJQUlBTkJJR3NnQWtFZ2F5b0NBRGdDQUNBRFFSeHJJQUpCSEdzcUFnQTRBZ0FnQTBFWWF5QUNRUmhyS2dJQU9BSUFJQU5CRkdzZ0FrRVVheW9DQURnQ0FDQURRUkJySUFKQkVHc3FBZ0E0QWdBZ0EwRU1heUFDUVF4cktnSUFPQUlBSUFOQkNHc2dBa0VJYXlvQ0FEZ0NBQ0FEUVFScklBSkJCR3NxQWdBNEFnQWdCU0VESUFFaUFpQUdSdzBBQ3dzZ0FDQUVOZ0lJSUFBZ0J6WUNCQ0FBSUFVMkFnQWdCZ1JBSUFZUURBc1BDeEFUQUFzUUVnQUwvQXNEQkg4Z2ZBTjdJd0JCZ0FGcklnTWtBQ0FBS0FJSUlBRkJCM1JxSVFJZ0FDZ0NJQ0FCUVFSMGFpSUZLQUlBQkVBZ0FVSElBR3dpQVNBQUtBSVVhaUlFS3dNWUlRZ0NmQ0FGS0FJRVFRRkhCRUFnQkNzREVDRUxJQVFyQXdBaERDQUVLd01vSVFvZ0JDc0RJQ0VHSUFRckF3Z01BUXNnQUNnQ0xDQUJhaUlCS3dNUUlRWWdCQ0FCL1FBREFDQUFLZ0lFdXlJSC9SUWlKdjN5QVNBRS9RQURBUDN3QVNJbi9Rc0RBQ0FFSUFZZ0I2SWdCQ3NERUtBaUN6a0RFQ0FFSUFFckF4Z2dCNklnQ0tBaUNEa0RHQ0FFSUFIOUFBTWdJQ2I5OGdFZ0JQMEFBeUQ5OEFFaUtQMExBeUFnQVNzRFFDRUdJQVFnQWYwQUF6QWdKdjN5QVNBRS9RQURNUDN3QWYwTEF6QWdCQ0FHSUFlaUlBUXJBMENnT1FOQUlDZjlJUUFoRENBby9TRUJJUW9nS1AwaEFDRUdJQ2Y5SVFFTElSQWdBa0lBTndOWUlBSkNBRGNET0NBQ1FnQTNBeGdnQ0VRQUFBQ2dSdCtSUDZKRUFBQUFBQUFBNEQraUlnZ1FHQ0VOSUFaRUFBQUFvRWJma1QraVJBQUFBQUFBQU9BL29pSUhFQmdoRGlBS1JBQUFBS0JHMzVFL29rUUFBQUFBQUFEZ1A2SWlCaEFZSVE4Z0NCQWNJUWdnQnhBY0lRY2dBaUFMSUFnZ0RxSWlFeUFHRUJ3aUNhSWdEeUFOSUFlaUlncWlvQ0lSSUE4Z0NDQUhvaUlJb2lBSklBMGdEcUlpQnFLaEloUWdGS0FpRXFJaUJ5QUlJQW1pSUFZZ0Q2S2dJZzBnQ2lBSm9pQVBJQk9pb1NJSklBbWdJaE9pSWdhaG9qa0RTQ0FDSUFzZ0NTQVNvaUlLSUEwZ0VTQVJvQ0lPb2lJSW9LSTVBMEFnQWlBUUlBY2dCcUNpT1FNd0lBSWdFQ0FKSUE2aUlnY2dEU0FTb2lJR29hSTVBeUFnQWlBTUlBb2dDS0dpT1FNUUlBSWdEQ0FISUFhZ29qa0RDQ0FDSUF0RUFBQUFBQUFBOEQ4Z0NTQVRvaUlHSUJFZ0RxSWlCNkNob2prRFVDQUNJQkJFQUFBQUFBQUE4RDhnQmlBVUlCS2lJZ2Fnb2FJNUF5Z2dBaUFNUkFBQUFBQUFBUEEvSUFjZ0JxQ2hvamtEQUNBQ0lBUXJBekE1QTJBZ0FpQUVLd000T1FOb0lBUXJBMEFoQmlBQ1FvQ0FnSUNBZ0lENFB6Y0RlQ0FDSUFZNUEzQWdCU2dDQ0NJQlFYOUhCRUFnQUNBQkVEVWhBQ0FEUVFocVFRQkI4QUFRQnhvZ0EwS0FnSUNBZ0lDQStEODNBM2dnQTBLQWdJQ0FnSUNBK0Q4M0ExQWdBMEtBZ0lDQWdJQ0ErRDgzQXlnZ0EwS0FnSUNBZ0lDQStEODNBd0FnQWlzREdDRVZJQUlyQXhBaEZpQUNLd01BSVJjZ0Fpc0RDQ0VZSUFJckF6Z2hHU0FDS3dNd0lSb2dBaXNESUNFYklBSXJBeWdoSENBQ0t3TllJUjBnQWlzRFVDRWVJQUlyQTBBaEh5QUNLd05JSVNBZ0FDc0RZQ0VoSUFBckEwQWhJaUFBS3dNQUlTTWdBQ3NESUNFa0lBQXJBMmdoSlNBQUt3TklJUXNnQUNzRENDRU1JQUFyQXlnaER5QUFLd053SVJBZ0FDc0RVQ0VKSUFBckF4QWhFU0FBS3dNd0lSSWdBeUFBS3dONEloUWdBaXNEZUNJTm9pQUFLd05ZSWc0Z0Fpc0RjQ0lUb2lBQUt3TVlJZ29nQWlzRFlDSUlvaUFBS3dNNElnY2dBaXNEYUNJR29xQ2dvRGtEZUNBRElCQWdEYUlnQ1NBVG9pQVJJQWlpSUJJZ0JxS2dvS0E1QTNBZ0F5QWxJQTJpSUFzZ0U2SWdEQ0FJb2lBUElBYWlvS0NnT1FOb0lBTWdJU0FOb2lBaUlCT2lJQ01nQ0tJZ0pDQUdvcUNnb0RrRFlDQURJQlFnSGFJZ0RpQWVvaUFLSUIraUlBY2dJS0tnb0tBNUExZ2dBeUFRSUIyaUlBa2dIcUlnRVNBZm9pQVNJQ0Npb0tDZ09RTlFJQU1nSlNBZG9pQUxJQjZpSUF3Z0g2SWdEeUFnb3FDZ29Ea0RTQ0FESUNFZ0hhSWdJaUFlb2lBaklCK2lJQ1FnSUtLZ29LQTVBMEFnQXlBVUlCbWlJQTRnR3FJZ0NpQWJvaUFISUJ5aW9LQ2dPUU00SUFNZ0VDQVpvaUFKSUJxaUlCRWdHNklnRWlBY29xQ2dvRGtETUNBRElDVWdHYUlnQ3lBYW9pQU1JQnVpSUE4Z0hLS2dvS0E1QXlnZ0F5QWhJQm1pSUNJZ0dxSWdJeUFib2lBa0lCeWlvS0NnT1FNZ0lBTWdGQ0FWb2lBT0lCYWlJQW9nRjZJZ0dDQUhvcUNnb0RrREdDQURJQkFnRmFJZ0NTQVdvaUFSSUJlaUlCZ2dFcUtnb0tBNUF4QWdBeUFsSUJXaUlBc2dGcUlnRENBWG9pQVlJQStpb0tDZ09RTUlJQU1nSVNBVm9pQWlJQmFpSUNNZ0Y2SWdKQ0FZb3FDZ29Ea0RBQ0FDSUFOQmdBRVFGUm9MSUFWQkFEWUNBQXNnQTBHQUFXb2tBQ0FDQzRnTEFRZC9Ba0FnQVNBQUtBSU1JZ1FnQUNnQ0NDSURhMEVIZFNJQ1JnMEFBa0FnQVNBQ1N3UkFJQUVnQW1zaUJpQUFLQUlRSWdVZ0JDSURhMEVIZFUwRVFBSkFJQVpGRFFBZ0F5RUNJQVpCQTNFaUJRUkFRUUFoQkFOQUlBSkJDR3BCQUVId0FCQUhHaUFDUW9DQWdJQ0FnSUQ0UHpjRGVDQUNRb0NBZ0lDQWdJRDRQemNEVUNBQ1FvQ0FnSUNBZ0lENFB6Y0RLQ0FDUW9DQWdJQ0FnSUQ0UHpjREFDQUNRWUFCYWlFQ0lBUkJBV29pQkNBRlJ3MEFDd3NnQmtFSGRDQURhaUVESUFaQkFXdEIvLy8vRDNGQkEwa05BQU5BSUFKQkNHcEJBRUh3QUJBSEdpQUNRb0NBZ0lDQWdJRDRQemNEZUNBQ1FvQ0FnSUNBZ0lENFB6Y0RVQ0FDUW9DQWdJQ0FnSUQ0UHpjREtDQUNRb0NBZ0lDQWdJRDRQemNEQUNBQ1FZZ0Jha0VBUWZBQUVBY2FJQUpDZ0lDQWdJQ0FnUGcvTndQNEFTQUNRb0NBZ0lDQWdJRDRQemNEMEFFZ0FrS0FnSUNBZ0lDQStEODNBNmdCSUFKQ2dJQ0FnSUNBZ1BnL053T0FBU0FDUVlnQ2FrRUFRZkFBRUFjYUlBSkNnSUNBZ0lDQWdQZy9Od1A0QWlBQ1FvQ0FnSUNBZ0lENFB6Y0QwQUlnQWtLQWdJQ0FnSUNBK0Q4M0E2Z0NJQUpDZ0lDQWdJQ0FnUGcvTndPQUFpQUNRWWdEYWtFQVFmQUFFQWNhSUFKQ2dJQ0FnSUNBZ1BnL053UDRBeUFDUW9DQWdJQ0FnSUQ0UHpjRDBBTWdBa0tBZ0lDQWdJQ0ErRDgzQTZnRElBSkNnSUNBZ0lDQWdQZy9Od09BQXlBQ1FZQUVhaUlDSUFOSERRQUxDeUFBSUFNMkFnd01BZ3NDUUNBRElBQW9BZ2dpQW10QkIzVWlCQ0FHYWlJSFFZQ0FnQkJKQkVCQkFDRURRZi8vL3c4Z0JTQUNheUlGUVFaMUlnSWdCeUFDSUFkTEd5QUZRWUQvLy84SFR4c2lCd1JBSUFkQmdJQ0FFRThOQWlBSFFRZDBFQXNoQ0FzZ0NDQUVRUWQwYWlJRUlRSWdCa0VEY1NJRkJFQURRQ0FDUVFocVFRQkI4QUFRQnhvZ0FrS0FnSUNBZ0lDQStEODNBM2dnQWtLQWdJQ0FnSUNBK0Q4M0ExQWdBa0tBZ0lDQWdJQ0ErRDgzQXlnZ0FrS0FnSUNBZ0lDQStEODNBd0FnQWtHQUFXb2hBaUFEUVFGcUlnTWdCVWNOQUFzTElBWkJCM1FnQkdvaEJTQUdRUUZyUWYvLy93OXhRUU5QQkVBRFFDQUNRUWhxUVFCQjhBQVFCeG9nQWtLQWdJQ0FnSUNBK0Q4M0EzZ2dBa0tBZ0lDQWdJQ0ErRDgzQTFBZ0FrS0FnSUNBZ0lDQStEODNBeWdnQWtLQWdJQ0FnSUNBK0Q4M0F3QWdBa0dJQVdwQkFFSHdBQkFIR2lBQ1FvQ0FnSUNBZ0lENFB6Y0QrQUVnQWtLQWdJQ0FnSUNBK0Q4M0E5QUJJQUpDZ0lDQWdJQ0FnUGcvTndPb0FTQUNRb0NBZ0lDQWdJRDRQemNEZ0FFZ0FrR0lBbXBCQUVId0FCQUhHaUFDUW9DQWdJQ0FnSUQ0UHpjRCtBSWdBa0tBZ0lDQWdJQ0ErRDgzQTlBQ0lBSkNnSUNBZ0lDQWdQZy9Od09vQWlBQ1FvQ0FnSUNBZ0lENFB6Y0RnQUlnQWtHSUEycEJBRUh3QUJBSEdpQUNRb0NBZ0lDQWdJRDRQemNEK0FNZ0FrS0FnSUNBZ0lDQStEODNBOUFESUFKQ2dJQ0FnSUNBZ1BnL053T29BeUFDUW9DQWdJQ0FnSUQ0UHpjRGdBTWdBa0dBQkdvaUFpQUZSdzBBQ3dzZ0FDZ0NEQ0lDSUFBb0FnZ2lBMGNFUUFOQUlBUkJnQUZySWdRZ0FrR0FBV3NpQWtHQUFSQVZHaUFDSUFOSERRQUxJQUFvQWdnaEFnc2dBQ0FJSUFkQkIzUnFOZ0lRSUFBZ0JUWUNEQ0FBSUFRMkFnZ2dBZ1JBSUFJUUZnc01Bd3NRRXdBTEVCSUFDeUFCSUFKUERRQWdBQ0FESUFGQkIzUnFOZ0lNQ3dKQUlBQW9BaGdnQUNnQ0ZDSURhMEhJQUcwaUFpQUJTUVJBSUFCQkZHb2dBU0FDYXhBOERBRUxJQUVnQWs4TkFDQUFJQU1nQVVISUFHeHFOZ0lZQ3dKQUlBQW9BaVFnQUNnQ0lDSURhMEVFZFNJQ0lBRkpCRUFnQUVFZ2FpQUJJQUpyRURzTUFRc2dBU0FDVHcwQUlBQWdBeUFCUVFSMGFqWUNKQXNnQUNnQ01DQUFLQUlzSWdOclFjZ0FiU0lDSUFGSkJFQWdBRUVzYWlBQklBSnJFRHdQQ3lBQklBSlBEUUFnQUNBRElBRkJ5QUJzYWpZQ01Bc0xCd0FnQUNnQ0xBc0hBQ0FBS0FJZ0N3Y0FJQUFvQWhRTEJ3QWdBQ2dDQ0F2VUJRRUhmeUFCSUFBb0FnZ2lCeUFBS0FJRUlnTnJRUVIxVFFSQUFrQWdBVVVOQUNBRElRSWdBVUVIY1NJRkJFQURRQ0FDUXYvLy8vOFBOd0lJSUFKQ0FEY0NBQ0FDUVJCcUlRSWdCRUVCYWlJRUlBVkhEUUFMQ3lBQlFRUjBJQU5xSVFNZ0FVRUJhMEgvLy8vL0FIRkJCMGtOQUFOQUlBSkMvLy8vL3c4M0FuZ2dBa0lBTndKd0lBSkMvLy8vL3c4M0FtZ2dBa0lBTndKZ0lBSkMvLy8vL3c4M0FsZ2dBa0lBTndKUUlBSkMvLy8vL3c4M0FrZ2dBa0lBTndKQUlBSkMvLy8vL3c4M0FqZ2dBa0lBTndJd0lBSkMvLy8vL3c4M0FpZ2dBa0lBTndJZ0lBSkMvLy8vL3c4M0FoZ2dBa0lBTndJUUlBSkMvLy8vL3c4M0FnZ2dBa0lBTndJQUlBSkJnQUZxSWdJZ0EwY05BQXNMSUFBZ0F6WUNCQThMQWtBZ0F5QUFLQUlBSWdKclFRUjFJZ1FnQVdvaUJrR0FnSUNBQVVrRVFFSC8vLy8vQUNBSElBSnJJZ2RCQTNVaUFpQUdJQUlnQmtzYklBZEI4UC8vL3dkUEd5SUdCRUFnQmtHQWdJQ0FBVThOQWlBR1FRUjBFQXNoQ0FzZ0NDQUVRUVIwYWlJRUlRSWdBVUVIY1NJSEJFQURRQ0FDUXYvLy8vOFBOd0lJSUFKQ0FEY0NBQ0FDUVJCcUlRSWdCVUVCYWlJRklBZEhEUUFMQ3lBQlFRUjBJQVJxSVFVZ0FVRUJhMEgvLy8vL0FIRkJCMDhFUUFOQUlBSkMvLy8vL3c4M0FuZ2dBa0lBTndKd0lBSkMvLy8vL3c4M0FtZ2dBa0lBTndKZ0lBSkMvLy8vL3c4M0FsZ2dBa0lBTndKUUlBSkMvLy8vL3c4M0FrZ2dBa0lBTndKQUlBSkMvLy8vL3c4M0FqZ2dBa0lBTndJd0lBSkMvLy8vL3c4M0FpZ2dBa0lBTndJZ0lBSkMvLy8vL3c4M0FoZ2dBa0lBTndJUUlBSkMvLy8vL3c4M0FnZ2dBa0lBTndJQUlBSkJnQUZxSWdJZ0JVY05BQXNMSUFBb0FnQWlBU0FEUndSQUEwQWdCRUVRYXlJRUlBTkJFR3NpQS8wQUFnRDlDd0lBSUFFZ0EwY05BQXNnQUNnQ0FDRURDeUFBSUFnZ0JrRUVkR28yQWdnZ0FDQUZOZ0lFSUFBZ0JEWUNBQ0FEQkVBZ0F4QU1DdzhMRUJNQUN4QVNBQXVMQXdFSGZ5QUJJQUFvQWdnaUFpQUFLQUlFSWdOclFjZ0FiVTBFUUNBQUlBRUVmeUFEUVFBZ0FVSElBR3hCeUFCcklnQWdBRUhJQUhCclFjZ0FhaUlBRUFjZ0FHb0ZJQU1MTmdJRUR3c0NRQ0FESUFBb0FnQWlCbXRCeUFCdElnZ2dBV29pQkVIazhiZ2NTUVJBUWVQeHVCd2dBaUFHYTBISUFHMGlCMEVCZENJQ0lBUWdBaUFFU3hzZ0IwSHh1SndPVHhzaUJBUkFJQVJCNVBHNEhFOE5BaUFFUWNnQWJCQUxJUVVMSUFVZ0NFSElBR3hxSWdKQkFDQUJRY2dBYkVISUFHc2lBU0FCUWNnQWNHdEJ5QUJxSWdjUUJ5SUJJQWRxSVFnZ0JTQUVRY2dBYkdvaEJ3SkFJQU1nQmtZRVFDQUJJUVVNQVFzRFFDQUNRY2dBYXlJRklBTkJ5QUJySWdIOUFBTUEvUXNEQUNBQ1FUaHJJQU5CT0d2OUFBTUEvUXNEQUNBQ1FTaHJJQU5CS0d2OUFBTUEvUXNEQUNBQ1FSaHJJQU5CR0d2OUFBTUEvUXNEQUNBQ1FRaHJJQU5CQ0dzckF3QTVBd0FnQlNFQ0lBRWlBeUFHUncwQUN3c2dBQ0FITmdJSUlBQWdDRFlDQkNBQUlBVTJBZ0FnQmdSQUlBWVFEQXNQQ3hBVEFBc1FFZ0FMR1FFQmYwR2dLeWdDQUNJQklBQWdBU2dDQUNnQ0dCRUJBQXNRQUNNQUlBQnJRWEJ4SWdBa0FDQUFDd2NBSUFBb0FnUUxCUUJCb3drTEJRQkJ6UWtMQlFCQmtBa0xGd0VCZjBHZ0t5Z0NBQ0lBSUFBb0FnQW9BaFFSQUFBTEZRQWdBRVVFUUVFQUR3c2dBRUhrSmhBaVFRQkhDeG9BSUFBZ0FTZ0NDQ0FGRUFvRVFDQUJJQUlnQXlBRUVDQUxDemNBSUFBZ0FTZ0NDQ0FGRUFvRVFDQUJJQUlnQXlBRUVDQVBDeUFBS0FJSUlnQWdBU0FDSUFNZ0JDQUZJQUFvQWdBb0FoUVJDUUFMcHdFQUlBQWdBU2dDQ0NBRUVBb0VRQUpBSUFFb0FnUWdBa2NOQUNBQktBSWNRUUZHRFFBZ0FTQUROZ0ljQ3c4TEFrQWdBQ0FCS0FJQUlBUVFDa1VOQUFKQUlBSWdBU2dDRUVjRVFDQUJLQUlVSUFKSERRRUxJQU5CQVVjTkFTQUJRUUUyQWlBUEN5QUJJQUkyQWhRZ0FTQUROZ0lnSUFFZ0FTZ0NLRUVCYWpZQ0tBSkFJQUVvQWlSQkFVY05BQ0FCS0FJWVFRSkhEUUFnQVVFQk9nQTJDeUFCUVFRMkFpd0xDNGdDQUNBQUlBRW9BZ2dnQkJBS0JFQUNRQ0FCS0FJRUlBSkhEUUFnQVNnQ0hFRUJSZzBBSUFFZ0F6WUNIQXNQQ3dKQUlBQWdBU2dDQUNBRUVBb0VRQUpBSUFJZ0FTZ0NFRWNFUUNBQktBSVVJQUpIRFFFTElBTkJBVWNOQWlBQlFRRTJBaUFQQ3lBQklBTTJBaUFDUUNBQktBSXNRUVJHRFFBZ0FVRUFPd0UwSUFBb0FnZ2lBQ0FCSUFJZ0FrRUJJQVFnQUNnQ0FDZ0NGQkVKQUNBQkxRQTFCRUFnQVVFRE5nSXNJQUV0QURSRkRRRU1Bd3NnQVVFRU5nSXNDeUFCSUFJMkFoUWdBU0FCS0FJb1FRRnFOZ0lvSUFFb0FpUkJBVWNOQVNBQktBSVlRUUpIRFFFZ0FVRUJPZ0EyRHdzZ0FDZ0NDQ0lBSUFFZ0FpQURJQVFnQUNnQ0FDZ0NHQkVHQUFzTE1RQWdBQ0FCS0FJSVFRQVFDZ1JBSUFFZ0FpQURFQ0VQQ3lBQUtBSUlJZ0FnQVNBQ0lBTWdBQ2dDQUNnQ0hCRUhBQXNZQUNBQUlBRW9BZ2hCQUJBS0JFQWdBU0FDSUFNUUlRc0xGd0VCZjBHZ0t5Z0NBQ0lBSUFBb0FnQW9BaEFSQUFBTG5BRUJBbjhqQUVGQWFpSURKQUFDZjBFQklBQWdBVUVBRUFvTkFCcEJBQ0FCUlEwQUdrRUFJQUZCaENZUUlpSUJSUTBBR2lBRFFReHFRUUJCTkJBSEdpQURRUUUyQWpnZ0EwRi9OZ0lVSUFNZ0FEWUNFQ0FESUFFMkFnZ2dBU0FEUVFocUlBSW9BZ0JCQVNBQktBSUFLQUljRVFjQUlBTW9BaUFpQUVFQlJnUkFJQUlnQXlnQ0dEWUNBQXNnQUVFQlJnc2hCQ0FEUVVCckpBQWdCQXNYQVFGL1FhQXJLQUlBSWdBZ0FDZ0NBQ2dDREJFQUFBc1hBUUYvUWFBcktBSUFJZ0FnQUNnQ0FDZ0NDQkVBQUFzRUFFSUFDd1FBUVFBTDlBSUJDSDhqQUVFZ2F5SURKQUFnQXlBQUtBSWNJZ1EyQWhBZ0FDZ0NGQ0VGSUFNZ0FqWUNIQ0FESUFFMkFoZ2dBeUFGSUFScklnRTJBaFFnQVNBQ2FpRUZRUUloQndKL0FrQUNRQUpBSUFBb0Fqd2dBMEVRYWlJQlFRSWdBMEVNYWhBQUlnUUVmMEc0TXlBRU5nSUFRWDhGUVFBTEJFQWdBU0VFREFFTEEwQWdCU0FES0FJTUlnWkdEUUlnQmtFQVNBUkFJQUVoQkF3RUN5QUJJQVlnQVNnQ0JDSUlTeUlKUVFOMGFpSUVJQVlnQ0VFQUlBa2JheUlJSUFRb0FnQnFOZ0lBSUFGQkRFRUVJQWtiYWlJQklBRW9BZ0FnQ0dzMkFnQWdCU0FHYXlFRklBQW9BandnQkNJQklBY2dDV3NpQnlBRFFReHFFQUFpQmdSL1FiZ3pJQVkyQWdCQmZ3VkJBQXRGRFFBTEN5QUZRWDlIRFFFTElBQWdBQ2dDTENJQk5nSWNJQUFnQVRZQ0ZDQUFJQUVnQUNnQ01HbzJBaEFnQWd3QkN5QUFRUUEyQWh3Z0FFSUFOd01RSUFBZ0FDZ0NBRUVnY2pZQ0FFRUFJQWRCQWtZTkFCb2dBaUFFS0FJRWF3c2hDaUFEUVNCcUpBQWdDZ3NaQVFGL1FhQXJLQUlBSWdFZ0FDQUJLQUlBS0FJRUVRRUFDeWNBSUFBZ0F6Z0NCQ0FCSUFKSUJFQURRQ0FBSUFFUU14b2dBVUVCYWlJQklBSkhEUUFMQ3d1V0FnSUJmdzk5SXdCQmdBRnJJZ0lrQUNBQUtBSUlJQUZCQm5ScUlnQXFBZ0FoQXlBQUtnSUVJUVFnQUNvQ0NDRUZJQUFxQWd3aEJpQUFLZ0lRSVFjZ0FDb0NGQ0VJSUFBcUFoZ2hDU0FBS2dJY0lRb2dBQ29DSUNFTElBQXFBaVFoRENBQUtnSW9JUTBnQUNvQ0xDRU9JQUFxQWpBaER5QUFLZ0kwSVJBZ0FDb0NPQ0VSSUFJZ0FDb0NQTHM1QTNnZ0FpQVJ1emtEY0NBQ0lCQzdPUU5vSUFJZ0Q3czVBMkFnQWlBT3V6a0RXQ0FDSUEyN09RTlFJQUlnRExzNUEwZ2dBa0ZBYXlBTHV6a0RBQ0FDSUFxN09RTTRJQUlnQ2JzNUF6QWdBaUFJdXprREtDQUNJQWU3T1FNZ0lBSWdCcnM1QXhnZ0FpQUZ1emtERUNBQ0lBUzdPUU1JSUFJZ0E3czVBd0FnQWhBdUlBSkJnQUZxSkFBTEpRQWdBU0FBS0FJTUlBQW9BZ2hyUVFaMVJ3UkFJQUFnQVNBQUtBSUFLQUlFRVFFQUN3c25BQ0FBSUFNNEFnUWdBU0FDU0FSQUEwQWdBQ0FCRURVYUlBRkJBV29pQVNBQ1J3MEFDd3NMcGdFQ0FYOEhleU1BUVlBQmF5SUNKQUFnQUNnQ0NDQUJRUWQwYWlJQS9RQURBQ0VESUFEOUFBTVFJUVFnQVAwQUF5QWhCU0FBL1FBRE1DRUdJQUQ5QUFOQUlRY2dBUDBBQTFBaENDQUEvUUFEWUNFSklBSWdBUDBBQTNEOUN3UndJQUlnQ2YwTEJHQWdBaUFJL1FzRVVDQUNRVUJySUFmOUN3UUFJQUlnQnYwTEJEQWdBaUFGL1FzRUlDQUNJQVQ5Q3dRUUlBSWdBLzBMQkFBZ0FoQXVJQUpCZ0FGcUpBQUxKUUFnQVNBQUtBSU1JQUFvQWdoclFRZDFSd1JBSUFBZ0FTQUFLQUlBS0FJRUVRRUFDd3YvQVFCQjFDb29BZ0FhQWtBQ2YwRzhDUkFzSWdBQ2YwSFVLaWdDQUVFQVNBUkFRYndKSUFCQmlDb1FHUXdCQzBHOENTQUFRWWdxRUJrTElnRWdBRVlOQUJvZ0FRc2dBRWNOQUFKQVFkZ3FLQUlBUVFwR0RRQkJuQ29vQWdBaUFFR1lLaWdDQUVZTkFFR2NLaUFBUVFGcU5nSUFJQUJCQ2pvQUFBd0JDeU1BUVJCcklnQWtBQ0FBUVFvNkFBOENRQUpBUVpncUtBSUFJZ0VFZnlBQkJVR0lLaEFhRFFKQm1Db29BZ0FMUVp3cUtBSUFJZ0ZHRFFCQjJDb29BZ0JCQ2tZTkFFR2NLaUFCUVFGcU5nSUFJQUZCQ2pvQUFBd0JDMEdJS2lBQVFROXFRUUZCckNvb0FnQVJBZ0JCQVVjTkFDQUFMUUFQR2dzZ0FFRVFhaVFBQzBFQUN4MEJBWDlCb0Nzb0FnQWlBeUFBSUFFZ0FpQURLQUlBS0FJY0VRc0FDNGNDQVFGL1FhQXJLQUlBSWdKRkJFQkJPQkFMSWdOQkJHb2hBaUFCQkVBZ0EwR0lDRFlDQUNBQ1FRQTJBakFnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFpQWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQWhBZ0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBZ0FnQUFSQUlBTWdBQkEyQzBHZ0t5QUROZ0lBRHdzZ0EwSGdDallDQUNBQ1FRQTJBakFnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFpQWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQWhBZ0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBZ0FnQUFSQUlBTWdBQkF5QzBHZ0t5QUROZ0lBRHdzZ0FpQUFRUUFnQWlnQ0FDZ0NBQkVEQUFzTG9DRVZBRUdFQ0F1aUEyQUVBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFERTVUV0YwY21sNFFtRjBZMmhEYjIxd2RYUmxja2xrUlFBeU1FbE5ZWFJ5YVhoQ1lYUmphRU52YlhCMWRHVnlBSGdUQUFCQkJBQUFvQk1BQUNnRUFBQllCQUFBTFNzZ0lDQXdXREI0QUMwd1dDc3dXQ0F3V0Mwd2VDc3dlQ0F3ZUFCMlpXTjBiM0lBYzNSa09qcGxlR05sY0hScGIyNEFibUZ1QUdKaFpGOWhjbkpoZVY5dVpYZGZiR1Z1WjNSb0FHbHVaZ0IzWVhOdElHaGhkbVVnYkc5aFpHVmtBSE4wWkRvNlltRmtYMkZzYkc5akFFNUJUZ0JKVGtZQUxnQW9iblZzYkNrQVd5VXVNbVlzSUNVdU1tWXNJQ1V1TW1Zc0lDVXVNbVpkRFFwYkpTNHlaaXdnSlM0eVppd2dKUzR5Wml3Z0pTNHlabDBOQ2xzbExqSm1MQ0FsTGpKbUxDQWxMakptTENBbExqSm1YUTBLV3lVdU1tWXNJQ1V1TW1Zc0lDVXVNbVlzSUNVdU1tWmREUW9BQUFBQUFBQUFuQVVBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFNVGxOWVhSeWFYaENZWFJqYUVOdmJYQjFkR1Z5U1daRkFBQUFBS0FUQUFDQUJRQUFXQVFBUWJBTEM5Y1ZBd0FBQUFRQUFBQUVBQUFBQmdBQUFJUDVvZ0JFVG00QS9Da1ZBTkZYSndEZE5QVUFZdHZBQUR5WmxRQkJrRU1BWTFIK0FMdmVxd0MzWWNVQU9tNGtBTkpOUWdCSkJ1QUFDZW91QUJ5UzBRRHJIZjRBS2JFY0FPZytwd0QxTllJQVJMc3VBSnpwaEFDMEpuQUFRWDVmQU5hUk9RQlRnemtBblBRNUFJdGZoQUFvK2IwQStCODdBTjcvbHdBUG1BVUFFUy92QUFwYWl3QnRIMjBBejM0MkFBbkxKd0JHVDdjQW5tWS9BQzNxWHdDNkozVUE1ZXZIQUQxNzhRRDNPUWNBa2xLS0FQdHI2Z0Fmc1Y4QUNGMk5BREFEVmdCNy9FWUE4S3RyQUNDOHp3QTI5Sm9BNDZrZEFGNWhrUUFJRytZQWhabGxBS0FVWHdDTlFHZ0FnTmovQUNkelRRQUdCakVBeWxZVkFNbW9jd0I3NG1BQWE0ekFBQm5FUndETlo4TUFDZWpjQUZtREtnQ0xkc1FBcGh5V0FFU3YzUUFaVjlFQXBUNEZBQVVIL3dBemZqOEF3akxvQUpoUDNnQzdmVElBSmozREFCNXI3d0NmK0Y0QU5SODZBSC95eWdEeGh4MEFmSkFoQUdva2ZBRFZidm9BTUMxM0FCVTdRd0MxRk1ZQXd4bWRBSzNFd2dBc1RVRUFEQUJkQUlaOVJnRGpjUzBBbThhYUFETmlBQUMwMG53QXRLZVhBRGRWMVFEWFB2WUFveEFZQUUxMi9BQmtuU29BY05lckFHTjgrQUI2c0ZjQUZ4WG5BTUJKVmdBNzF0a0FwNFE0QUNRanl3RFdpbmNBV2xRakFBQWZ1UUR4Q2hzQUdjN2ZBSjh4L3dCbUhtb0FtVmRoQUt6N1J3QitmOWdBSW1XM0FETG9pUURtdjJBQTc4VE5BR3cyQ1FCZFA5UUFGdDdYQUZnNzNnRGVtNUlBMGlJb0FDaUc2QURpV0UwQXhzb3lBQWpqRmdEZ2Zjc0FGOEJRQVBNZHB3QVk0RnNBTGhNMEFJTVNZZ0NEU0FFQTlZNWJBSzJ3ZndBZTZmSUFTRXBEQUJCbjB3Q3EzZGdBcmw5Q0FHcGh6Z0FLS0tRQTA1bTBBQWFtOGdCY2QzOEFvOEtEQUdFOGlBQ0tjM2dBcjR4YUFHL1h2UUF0cG1NQTlML0xBSTJCN3dBbXdXY0FWY3BGQU1yWk5nQW9xTklBd21HTkFCTEpkd0FFSmhRQUVrYWJBTVJaeEFESXhVUUFUYktSQUFBWDh3RFVRNjBBS1VubEFQM1ZFQUFBdnZ3QUhwVE1BSERPN2dBVFB2VUE3UEdBQUxQbnd3REgrQ2dBa3dXVUFNRnhQZ0F1Q2JNQUMwWHpBSWdTbkFDcklIc0FMcldmQUVlU3dnQjdNaThBREZWdEFIS25rQUJyNXg4QU1jdVdBSGtXU2dCQmVlSUE5TitKQU9pVWx3RGk1b1FBbVRHWEFJanRhd0JmWHpZQXUvME9BRWlhdEFCbnBHd0FjWEpDQUkxZE1nQ2ZGYmdBdk9VSkFJMHhKUUQzZERrQU1BVWNBQTBNQVFCTENHZ0FMTzVZQUVlcWtBQjA1d0lBdmRZa0FQZDlwZ0J1U0hJQW54YnZBSTZVcGdDMGtmWUEwVk5SQU04SzhnQWdtRE1BOVV0K0FMSmphQURkUGw4QVFGMERBSVdKZndCVlVpa0FOMlRBQUczWUVBQXlTRElBVzB4MUFFNXgxQUJGVkc0QUN3bkJBQ3IxYVFBVVp0VUFKd2VkQUYwRVVBQzBPOXNBNm5iRkFJZjVGd0JKYTMwQUhTZTZBSlpwS1FER3pLd0FyUlJVQUpEaWFnQ0kyWWtBTEhKUUFBU2t2Z0IzQjVRQTh6QndBQUQ4SndEcWNhZ0Fac0pKQUdUZ1BRQ1gzWU1Bb3orWEFFT1UvUUFOaG93QU1VSGVBSkk1blFEZGNJd0FGN2ZuQUFqZk93QVZOeXNBWElDZ0FGcUFrd0FRRVpJQUQrallBR3lBcndEYi8wc0FPSkFQQUZrWWRnQmlwUlVBWWN1N0FNZUp1UUFRUUwwQTB2SUVBRWwxSndEcnR2WUEyeUs3QUFvVXFnQ0pKaThBWklOMkFBazdNd0FPbEJvQVVUcXFBQjJqd2dDdjdhNEFYQ1lTQUczQ1RRQXRlcHdBd0ZhWEFBTS9nd0FKOFBZQUswQ01BRzB4bVFBNXRBY0FEQ0FWQU5qRFd3RDFrc1FBeHExTEFFN0twUUNuTjgwQTVxazJBS3VTbEFEZFFtZ0FHV1BlQUhhTTd3Qm9pMUlBL05zM0FLNmhxd0RmRlRFQUFLNmhBQXo3MmdCa1RXWUE3UVczQUNsbE1BQlhWcjhBUi84NkFHcjV1UUIxdnZNQUtKUGZBS3VBTUFCbWpQWUFCTXNWQVBvaUJnRFo1QjBBUGJPa0FGY2Jqd0EyelFrQVRrTHBBQk8rcEFBekk3VUE4S29hQUU5bHFBRFN3YVVBQ3o4UEFGdDR6UUFqK1hZQWU0c0VBSWtYY2dER3BsTUFiMjdpQU8vckFBQ2JTbGdBeE5xM0FLcG11Z0Iyejg4QTBRSWRBTEh4TFFDTW1jRUF3NjEzQUlaSTJnRDNYYUFBeG9EMEFLendMd0RkN0pvQVAxeThBTkRlYlFDUXh4OEFLdHUyQUtNbE9nQUFyNW9BclZPVEFMWlhCQUFwTGJRQVM0QitBTm9IcHdCMnFnNEFlMW1oQUJZU0tnRGN0eTBBK3VYOUFJbmIvZ0NKdnYwQTVIWnNBQWFwL0FBK2dIQUFoVzRWQVAySC93QW9QZ2NBWVdjekFDb1loZ0JOdmVvQXMrZXZBSTl0YmdDVlp6a0FNYjliQUlUWFNBQXczeFlBeHkxREFDVmhOUURKY000QU1NdTRBTDlzL1FDa0FLSUFCV3prQUZyZG9BQWhiMGNBWWhMU0FMbGNoQUJ3WVVrQWExYmdBSmxTQVFCUVZUY0FIdFczQURQeHhBQVRibDhBWFREa0FJVXVxUUFkc3NNQW9USTJBQWkzcEFEcXNkUUFGdmNoQUk5cDVBQW4vM2NBREFPQUFJMUFMUUJQemFBQUlLV1pBTE9pMHdBdlhRb0F0UGxDQUJIYXl3Qjl2dEFBbTl2QkFLc1h2UURLb29FQUNHcGNBQzVWRndBbkFGVUFmeFR3QU9FSGhnQVVDMlFBbGtHTkFJZSszZ0RhL1NvQWF5VzJBSHVKTkFBRjgvNEF1YitlQUdocVR3QktLcWdBVDhSYUFDMzR2QURYV3BnQTlNZVZBQTFOalFBZ09xWUFwRmRmQUJRL3NRQ0FPSlVBekNBQkFISGRoZ0RKM3JZQXYyRDFBRTFsRVFBQkIyc0FqTENzQUxMQTBBQlJWVWdBSHZzT0FKVnl3d0NqQmpzQXdFQTFBQWJjZXdEZ1Jjd0FUaW42QU5iS3lBRG84MEVBZkdUZUFKdGsyQURadmpFQXBKZkRBSGRZMUFCcDQ4VUE4Tm9UQUxvNlBBQkdHRVlBVlhWZkFOSzk5UUJ1a3NZQXJDNWRBQTVFN1FBY1BrSUFZY1NIQUNuOTZRRG4xdk1BSW56S0FHK1JOUUFJNE1VQS85ZU5BRzVxNGdDdy9jWUFrd2pCQUh4ZGRBQnJyYklBelc2ZEFENXlld0RHRVdvQTk4K3BBQ2x6M3dDMXlib0F0d0JSQU9LeURRQjB1aVFBNVgxZ0FIVFlpZ0FORlN3QWdSZ01BSDVtbEFBQktSWUFuM3AyQVAzOXZnQldSZThBMlg0MkFPelpFd0NMdXJrQXhKZjhBREdvSndEeGJzTUFsTVUyQU5pb1ZnQzBxTFVBejh3T0FCS0pMUUJ2VnpRQUxGYUpBSm5PNHdEV0lMa0FhMTZxQUQ0cW5BQVJYOHdBL1F0S0FPSDArd0NPTzIwQTRvWXNBT25VaEFEOHRLa0E3KzdSQUM0MXlRQXZPV0VBT0NGRUFCdlp5QUNCL0FvQSswcHFBQzhjMkFCVHRJUUFUcG1NQUZRaXpBQXFWZHdBd01iV0FBc1psZ0FhY0xnQWFaVmtBQ1phWUFBL1V1NEFmeEVQQVBTMUVRRDh5L1VBTkx3dEFEUzg3Z0RvWGN3QTNWNWdBR2VPbXdDU00rOEF5UmU0QUdGWW13RGhWN3dBVVlQR0FOZytFQURkY1VnQUxSemRBSzhZb1FBaExFWUFXZlBYQU5sNm1BQ2VWTUFBVDRiNkFGWUcvQURsZWE0QWlTSTJBRGl0SWdCbms5d0FWZWlxQUlJbU9BREs1NXNBVVEya0FKa3pzUUNwMXc0QWFRVklBR1d5OEFCL2lLY0FpRXlYQVBuUk5nQWhrck1BZTRKS0FKalBJUUJBbjl3QTNFZFZBT0YwT2dCbjYwSUEvcDNmQUY3VVh3QjdaNlFBdXF4NkFGWDJvZ0FyaUNNQVFicFZBRmx1Q0FBaEtvWUFPVWVEQUluajVnRGxudFFBU2Z0QUFQOVc2UUFjRDhvQXhWbUtBSlQ2S3dEVHdjVUFEOFhQQU50YXJnQkh4WVlBaFVOaUFDR0dPd0FzZVpRQUVHR0hBQ3BNZXdDQUxCb0FRNzhTQUlnbWtBQjRQSWtBcU1Ua0FPWGJld0RFT3NJQUp2VHFBUGRuaWdBTmtyOEFaYU1yQUQyVHNRQzlmQXNBcEZIY0FDZmRZd0JwNGQwQW1wUVpBS2dwbFFCb3ppZ0FDZTIwQUVTZklBQk9tTW9BY0lKakFINThJd0FQdVRJQXAvV09BQlJXNXdBaDhRZ0F0WjBxQUc5K1RRQ2xHVkVBdGZtckFJTGYxZ0NXM1dFQUZqWUNBTVE2bndDRG9xRUFjdTF0QURtTmVnQ0N1S2tBYXpKY0FFWW5Xd0FBTk8wQTBnQjNBUHowVlFBQldVMEE0SEdBQUVHVElRdCtRUHNoK1Q4QUFBQUFMVVIwUGdBQUFJQ1lSdmc4QUFBQVlGSE1lRHNBQUFDQWd4dndPUUFBQUVBZ0pYbzRBQUFBZ0NLQzR6WUFBQUFBSGZOcE5Sa0FDZ0FaR1JrQUFBQUFCUUFBQUFBQUFBa0FBQUFBQ3dBQUFBQUFBQUFBR1FBUkNoa1pHUU1LQndBQkFBa0xHQUFBQ1FZTEFBQUxBQVlaQUFBQUdSa1pBRUdoSWdzaERnQUFBQUFBQUFBQUdRQUtEUmtaR1FBTkFBQUNBQWtPQUFBQUNRQU9BQUFPQUVIYklnc0JEQUJCNXlJTEZSTUFBQUFBRXdBQUFBQUpEQUFBQUFBQURBQUFEQUJCbFNNTEFSQUFRYUVqQ3hVUEFBQUFCQThBQUFBQUNSQUFBQUFBQUJBQUFCQUFRYzhqQ3dFU0FFSGJJd3NlRVFBQUFBQVJBQUFBQUFrU0FBQUFBQUFTQUFBU0FBQWFBQUFBR2hvYUFFR1NKQXNPR2dBQUFCb2FHZ0FBQUFBQUFBa0FRY01rQ3dFVUFFSFBKQXNWRndBQUFBQVhBQUFBQUFrVUFBQUFBQUFVQUFBVUFFSDlKQXNCRmdCQmlTVUwvUVFWQUFBQUFCVUFBQUFBQ1JZQUFBQUFBQllBQUJZQUFEQXhNak0wTlRZM09EbEJRa05FUlVaT01UQmZYMk40ZUdGaWFYWXhNVFpmWDNOb2FXMWZkSGx3WlY5cGJtWnZSUUFBQUFDZ0V3QUFzQklBQUFBVkFBQk9NVEJmWDJONGVHRmlhWFl4TVRkZlgyTnNZWE56WDNSNWNHVmZhVzVtYjBVQUFBQ2dFd0FBNEJJQUFOUVNBQUJPTVRCZlgyTjRlR0ZpYVhZeE1UZGZYM0JpWVhObFgzUjVjR1ZmYVc1bWIwVUFBQUNnRXdBQUVCTUFBTlFTQUFCT01UQmZYMk40ZUdGaWFYWXhNVGxmWDNCdmFXNTBaWEpmZEhsd1pWOXBibVp2UlFDZ0V3QUFRQk1BQURRVEFBQUFBQUFBQkJNQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBQUFBQUFPZ1RBQUFYQUFBQUh3QUFBQmtBQUFBYUFBQUFHd0FBQUNBQUFBQWhBQUFBSWdBQUFFNHhNRjlmWTNoNFlXSnBkakV5TUY5ZmMybGZZMnhoYzNOZmRIbHdaVjlwYm1adlJRQUFBQUNnRXdBQXdCTUFBQVFUQUFBQUFBQUFXQlFBQUFFQUFBQWpBQUFBSkFBQUFBQUFBQUNBRkFBQUFRQUFBQ1VBQUFBbUFBQUFBQUFBQUVBVUFBQUJBQUFBSndBQUFDZ0FBQUJUZERsbGVHTmxjSFJwYjI0QUFBQUFlQk1BQURBVUFBQlRkRGxpWVdSZllXeHNiMk1BQUFBQW9CTUFBRWdVQUFCQUZBQUFVM1F5TUdKaFpGOWhjbkpoZVY5dVpYZGZiR1Z1WjNSb0FBQUFBS0FUQUFCa0ZBQUFXQlFBQUFBQUFBQ3dGQUFBQWdBQUFDa0FBQUFxQUFBQVUzUXhNV3h2WjJsalgyVnljbTl5QUtBVEFBQ2dGQUFBUUJRQUFBQUFBQURrRkFBQUFnQUFBQ3NBQUFBcUFBQUFVM1F4TW14bGJtZDBhRjlsY25KdmNnQUFBQUNnRXdBQTBCUUFBTEFVQUFCVGREbDBlWEJsWDJsdVptOEFBQUFBZUJNQUFQQVVBRUdJS2dzQkJRQkJsQ29MQVJNQVFhd3FDdzRVQUFBQUZRQUFBTGdWQUFBQUJBQkJ4Q29MQVFFQVFkUXFDd1gvLy8vL0NnQkJtQ3NMQTNBY0FRPT0iO2lmKCFpc0RhdGFVUkkod2FzbUJpbmFyeUZpbGUpKXt3YXNtQmluYXJ5RmlsZT1sb2NhdGVGaWxlKHdhc21CaW5hcnlGaWxlKX1mdW5jdGlvbiBnZXRCaW5hcnlTeW5jKGZpbGUpe2lmKGZpbGU9PXdhc21CaW5hcnlGaWxlJiZ3YXNtQmluYXJ5KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSl9dmFyIGJpbmFyeT10cnlQYXJzZUFzRGF0YVVSSShmaWxlKTtpZihiaW5hcnkpe3JldHVybiBiaW5hcnl9aWYocmVhZEJpbmFyeSl7cmV0dXJuIHJlYWRCaW5hcnkoZmlsZSl9dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmdldEJpbmFyeVN5bmMoYmluYXJ5RmlsZSkpfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSxpbXBvcnRzLHJlY2VpdmVyKXtyZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKS50aGVuKGJpbmFyeT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LGltcG9ydHMpKS50aGVuKHJlY2VpdmVyLHJlYXNvbj0+e2VycihgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHtyZWFzb259YCk7YWJvcnQocmVhc29uKX0pfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LGJpbmFyeUZpbGUsaW1wb3J0cyxjYWxsYmFjayl7cmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSxpbXBvcnRzLGNhbGxiYWNrKX1mdW5jdGlvbiBjcmVhdGVXYXNtKCl7dmFyIGluZm89eyJhIjp3YXNtSW1wb3J0c307ZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLG1vZHVsZSl7d2FzbUV4cG9ydHM9aW5zdGFuY2UuZXhwb3J0czt3YXNtTWVtb3J5PXdhc21FeHBvcnRzWyJmIl07dXBkYXRlTWVtb3J5Vmlld3MoKTthZGRPbkluaXQod2FzbUV4cG9ydHNbImciXSk7cmVtb3ZlUnVuRGVwZW5kZW5jeSgid2FzbS1pbnN0YW50aWF0ZSIpO3JldHVybiB3YXNtRXhwb3J0c31hZGRSdW5EZXBlbmRlbmN5KCJ3YXNtLWluc3RhbnRpYXRlIik7ZnVuY3Rpb24gcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQocmVzdWx0KXtyZWNlaXZlSW5zdGFuY2UocmVzdWx0WyJpbnN0YW5jZSJdKX1pZihNb2R1bGVbImluc3RhbnRpYXRlV2FzbSJdKXt0cnl7cmV0dXJuIE1vZHVsZVsiaW5zdGFudGlhdGVXYXNtIl0oaW5mbyxyZWNlaXZlSW5zdGFuY2UpfWNhdGNoKGUpe2VycihgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtlfWApO3JlYWR5UHJvbWlzZVJlamVjdChlKX19aW5zdGFudGlhdGVBc3luYyh3YXNtQmluYXJ5LHdhc21CaW5hcnlGaWxlLGluZm8scmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQpLmNhdGNoKHJlYWR5UHJvbWlzZVJlamVjdCk7cmV0dXJue319ZnVuY3Rpb24gRXhpdFN0YXR1cyhzdGF0dXMpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyI7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7c3RhdHVzfSlgO3RoaXMuc3RhdHVzPXN0YXR1c312YXIgY2FsbFJ1bnRpbWVDYWxsYmFja3M9Y2FsbGJhY2tzPT57d2hpbGUoY2FsbGJhY2tzLmxlbmd0aD4wKXtjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpfX07dmFyIG5vRXhpdFJ1bnRpbWU9TW9kdWxlWyJub0V4aXRSdW50aW1lIl18fHRydWU7Y2xhc3MgRXhjZXB0aW9uSW5mb3tjb25zdHJ1Y3RvcihleGNQdHIpe3RoaXMuZXhjUHRyPWV4Y1B0cjt0aGlzLnB0cj1leGNQdHItMjR9c2V0X3R5cGUodHlwZSl7SEVBUFUzMlt0aGlzLnB0cis0Pj4yXT10eXBlfWdldF90eXBlKCl7cmV0dXJuIEhFQVBVMzJbdGhpcy5wdHIrND4+Ml19c2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcil7SEVBUFUzMlt0aGlzLnB0cis4Pj4yXT1kZXN0cnVjdG9yfWdldF9kZXN0cnVjdG9yKCl7cmV0dXJuIEhFQVBVMzJbdGhpcy5wdHIrOD4+Ml19c2V0X2NhdWdodChjYXVnaHQpe2NhdWdodD1jYXVnaHQ/MTowO0hFQVA4W3RoaXMucHRyKzEyXT1jYXVnaHR9Z2V0X2NhdWdodCgpe3JldHVybiBIRUFQOFt0aGlzLnB0cisxMl0hPTB9c2V0X3JldGhyb3duKHJldGhyb3duKXtyZXRocm93bj1yZXRocm93bj8xOjA7SEVBUDhbdGhpcy5wdHIrMTNdPXJldGhyb3dufWdldF9yZXRocm93bigpe3JldHVybiBIRUFQOFt0aGlzLnB0cisxM10hPTB9aW5pdCh0eXBlLGRlc3RydWN0b3Ipe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKTt0aGlzLnNldF90eXBlKHR5cGUpO3RoaXMuc2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcil9c2V0X2FkanVzdGVkX3B0cihhZGp1c3RlZFB0cil7SEVBUFUzMlt0aGlzLnB0cisxNj4+Ml09YWRqdXN0ZWRQdHJ9Z2V0X2FkanVzdGVkX3B0cigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzE2Pj4yXX1nZXRfZXhjZXB0aW9uX3B0cigpe3ZhciBpc1BvaW50ZXI9X19fY3hhX2lzX3BvaW50ZXJfdHlwZSh0aGlzLmdldF90eXBlKCkpO2lmKGlzUG9pbnRlcil7cmV0dXJuIEhFQVBVMzJbdGhpcy5leGNQdHI+PjJdfXZhciBhZGp1c3RlZD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtpZihhZGp1c3RlZCE9PTApcmV0dXJuIGFkanVzdGVkO3JldHVybiB0aGlzLmV4Y1B0cn19dmFyIGV4Y2VwdGlvbkxhc3Q9MDt2YXIgdW5jYXVnaHRFeGNlcHRpb25Db3VudD0wO3ZhciBfX19jeGFfdGhyb3c9KHB0cix0eXBlLGRlc3RydWN0b3IpPT57dmFyIGluZm89bmV3IEV4Y2VwdGlvbkluZm8ocHRyKTtpbmZvLmluaXQodHlwZSxkZXN0cnVjdG9yKTtleGNlcHRpb25MYXN0PXB0cjt1bmNhdWdodEV4Y2VwdGlvbkNvdW50Kys7dGhyb3cgZXhjZXB0aW9uTGFzdH07dmFyIF9hYm9ydD0oKT0+e2Fib3J0KCIiKX07dmFyIF9lbXNjcmlwdGVuX21lbWNweV9qcz0oZGVzdCxzcmMsbnVtKT0+SEVBUFU4LmNvcHlXaXRoaW4oZGVzdCxzcmMsc3JjK251bSk7dmFyIGdldEhlYXBNYXg9KCk9PjIxNDc0ODM2NDg7dmFyIGdyb3dNZW1vcnk9c2l6ZT0+e3ZhciBiPXdhc21NZW1vcnkuYnVmZmVyO3ZhciBwYWdlcz0oc2l6ZS1iLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2O3RyeXt3YXNtTWVtb3J5Lmdyb3cocGFnZXMpO3VwZGF0ZU1lbW9yeVZpZXdzKCk7cmV0dXJuIDF9Y2F0Y2goZSl7fX07dmFyIF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwPXJlcXVlc3RlZFNpemU9Pnt2YXIgb2xkU2l6ZT1IRUFQVTgubGVuZ3RoO3JlcXVlc3RlZFNpemU+Pj49MDt2YXIgbWF4SGVhcFNpemU9Z2V0SGVhcE1heCgpO2lmKHJlcXVlc3RlZFNpemU+bWF4SGVhcFNpemUpe3JldHVybiBmYWxzZX12YXIgYWxpZ25VcD0oeCxtdWx0aXBsZSk9PngrKG11bHRpcGxlLXglbXVsdGlwbGUpJW11bHRpcGxlO2Zvcih2YXIgY3V0RG93bj0xO2N1dERvd248PTQ7Y3V0RG93bio9Mil7dmFyIG92ZXJHcm93bkhlYXBTaXplPW9sZFNpemUqKDErLjIvY3V0RG93bik7b3Zlckdyb3duSGVhcFNpemU9TWF0aC5taW4ob3Zlckdyb3duSGVhcFNpemUscmVxdWVzdGVkU2l6ZSsxMDA2NjMyOTYpO3ZhciBuZXdTaXplPU1hdGgubWluKG1heEhlYXBTaXplLGFsaWduVXAoTWF0aC5tYXgocmVxdWVzdGVkU2l6ZSxvdmVyR3Jvd25IZWFwU2l6ZSksNjU1MzYpKTt2YXIgcmVwbGFjZW1lbnQ9Z3Jvd01lbW9yeShuZXdTaXplKTtpZihyZXBsYWNlbWVudCl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX07dmFyIHByaW50Q2hhckJ1ZmZlcnM9W251bGwsW10sW11dO3ZhciBVVEY4RGVjb2Rlcj10eXBlb2YgVGV4dERlY29kZXIhPSJ1bmRlZmluZWQiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnVuZGVmaW5lZDt2YXIgVVRGOEFycmF5VG9TdHJpbmc9KGhlYXBPckFycmF5LGlkeCxtYXhCeXRlc1RvUmVhZCk9Pnt2YXIgZW5kSWR4PWlkeCttYXhCeXRlc1RvUmVhZDt2YXIgZW5kUHRyPWlkeDt3aGlsZShoZWFwT3JBcnJheVtlbmRQdHJdJiYhKGVuZFB0cj49ZW5kSWR4KSkrK2VuZFB0cjtpZihlbmRQdHItaWR4PjE2JiZoZWFwT3JBcnJheS5idWZmZXImJlVURjhEZWNvZGVyKXtyZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCxlbmRQdHIpKX12YXIgc3RyPSIiO3doaWxlKGlkeDxlbmRQdHIpe3ZhciB1MD1oZWFwT3JBcnJheVtpZHgrK107aWYoISh1MCYxMjgpKXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUodTApO2NvbnRpbnVlfXZhciB1MT1oZWFwT3JBcnJheVtpZHgrK10mNjM7aWYoKHUwJjIyNCk9PTE5Mil7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCh1MCYzMSk8PDZ8dTEpO2NvbnRpbnVlfXZhciB1Mj1oZWFwT3JBcnJheVtpZHgrK10mNjM7aWYoKHUwJjI0MCk9PTIyNCl7dTA9KHUwJjE1KTw8MTJ8dTE8PDZ8dTJ9ZWxzZXt1MD0odTAmNyk8PDE4fHUxPDwxMnx1Mjw8NnxoZWFwT3JBcnJheVtpZHgrK10mNjN9aWYodTA8NjU1MzYpe3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh1MCl9ZWxzZXt2YXIgY2g9dTAtNjU1MzY7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGNoPj4xMCw1NjMyMHxjaCYxMDIzKX19cmV0dXJuIHN0cn07dmFyIHByaW50Q2hhcj0oc3RyZWFtLGN1cnIpPT57dmFyIGJ1ZmZlcj1wcmludENoYXJCdWZmZXJzW3N0cmVhbV07aWYoY3Vycj09PTB8fGN1cnI9PT0xMCl7KHN0cmVhbT09PTE/b3V0OmVycikoVVRGOEFycmF5VG9TdHJpbmcoYnVmZmVyLDApKTtidWZmZXIubGVuZ3RoPTB9ZWxzZXtidWZmZXIucHVzaChjdXJyKX19O3ZhciBVVEY4VG9TdHJpbmc9KHB0cixtYXhCeXRlc1RvUmVhZCk9PnB0cj9VVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgscHRyLG1heEJ5dGVzVG9SZWFkKToiIjt2YXIgU1lTQ0FMTFM9e3ZhcmFyZ3M6dW5kZWZpbmVkLGdldCgpe3ZhciByZXQ9SEVBUDMyWytTWVNDQUxMUy52YXJhcmdzPj4yXTtTWVNDQUxMUy52YXJhcmdzKz00O3JldHVybiByZXR9LGdldHAoKXtyZXR1cm4gU1lTQ0FMTFMuZ2V0KCl9LGdldFN0cihwdHIpe3ZhciByZXQ9VVRGOFRvU3RyaW5nKHB0cik7cmV0dXJuIHJldH19O3ZhciBfZmRfd3JpdGU9KGZkLGlvdixpb3ZjbnQscG51bSk9Pnt2YXIgbnVtPTA7Zm9yKHZhciBpPTA7aTxpb3ZjbnQ7aSsrKXt2YXIgcHRyPUhFQVBVMzJbaW92Pj4yXTt2YXIgbGVuPUhFQVBVMzJbaW92KzQ+PjJdO2lvdis9ODtmb3IodmFyIGo9MDtqPGxlbjtqKyspe3ByaW50Q2hhcihmZCxIRUFQVThbcHRyK2pdKX1udW0rPWxlbn1IRUFQVTMyW3BudW0+PjJdPW51bTtyZXR1cm4gMH07dmFyIHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyPTA7dmFyIGtlZXBSdW50aW1lQWxpdmU9KCk9Pm5vRXhpdFJ1bnRpbWV8fHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyPjA7dmFyIF9wcm9jX2V4aXQ9Y29kZT0+e0VYSVRTVEFUVVM9Y29kZTtpZigha2VlcFJ1bnRpbWVBbGl2ZSgpKXtNb2R1bGVbIm9uRXhpdCJdPy4oY29kZSk7QUJPUlQ9dHJ1ZX1xdWl0Xyhjb2RlLG5ldyBFeGl0U3RhdHVzKGNvZGUpKX07dmFyIGV4aXRKUz0oc3RhdHVzLGltcGxpY2l0KT0+e0VYSVRTVEFUVVM9c3RhdHVzO19wcm9jX2V4aXQoc3RhdHVzKX07dmFyIGhhbmRsZUV4Y2VwdGlvbj1lPT57aWYoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXN8fGU9PSJ1bndpbmQiKXtyZXR1cm4gRVhJVFNUQVRVU31xdWl0XygxLGUpfTt2YXIgbGVuZ3RoQnl0ZXNVVEY4PXN0cj0+e3ZhciBsZW49MDtmb3IodmFyIGk9MDtpPHN0ci5sZW5ndGg7KytpKXt2YXIgYz1zdHIuY2hhckNvZGVBdChpKTtpZihjPD0xMjcpe2xlbisrfWVsc2UgaWYoYzw9MjA0Nyl7bGVuKz0yfWVsc2UgaWYoYz49NTUyOTYmJmM8PTU3MzQzKXtsZW4rPTQ7KytpfWVsc2V7bGVuKz0zfX1yZXR1cm4gbGVufTt2YXIgc3RyaW5nVG9VVEY4QXJyYXk9KHN0cixoZWFwLG91dElkeCxtYXhCeXRlc1RvV3JpdGUpPT57aWYoIShtYXhCeXRlc1RvV3JpdGU+MCkpcmV0dXJuIDA7dmFyIHN0YXJ0SWR4PW91dElkeDt2YXIgZW5kSWR4PW91dElkeCttYXhCeXRlc1RvV3JpdGUtMTtmb3IodmFyIGk9MDtpPHN0ci5sZW5ndGg7KytpKXt2YXIgdT1zdHIuY2hhckNvZGVBdChpKTtpZih1Pj01NTI5NiYmdTw9NTczNDMpe3ZhciB1MT1zdHIuY2hhckNvZGVBdCgrK2kpO3U9NjU1MzYrKCh1JjEwMjMpPDwxMCl8dTEmMTAyM31pZih1PD0xMjcpe2lmKG91dElkeD49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPXV9ZWxzZSBpZih1PD0yMDQ3KXtpZihvdXRJZHgrMT49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPTE5Mnx1Pj42O2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2UgaWYodTw9NjU1MzUpe2lmKG91dElkeCsyPj1lbmRJZHgpYnJlYWs7aGVhcFtvdXRJZHgrK109MjI0fHU+PjEyO2hlYXBbb3V0SWR4KytdPTEyOHx1Pj42JjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2V7aWYob3V0SWR4KzM+PWVuZElkeClicmVhaztoZWFwW291dElkeCsrXT0yNDB8dT4+MTg7aGVhcFtvdXRJZHgrK109MTI4fHU+PjEyJjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1Pj42JjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfX1oZWFwW291dElkeF09MDtyZXR1cm4gb3V0SWR4LXN0YXJ0SWR4fTt2YXIgc3RyaW5nVG9VVEY4PShzdHIsb3V0UHRyLG1heEJ5dGVzVG9Xcml0ZSk9PnN0cmluZ1RvVVRGOEFycmF5KHN0cixIRUFQVTgsb3V0UHRyLG1heEJ5dGVzVG9Xcml0ZSk7dmFyIHN0cmluZ1RvVVRGOE9uU3RhY2s9c3RyPT57dmFyIHNpemU9bGVuZ3RoQnl0ZXNVVEY4KHN0cikrMTt2YXIgcmV0PXN0YWNrQWxsb2Moc2l6ZSk7c3RyaW5nVG9VVEY4KHN0cixyZXQsc2l6ZSk7cmV0dXJuIHJldH07dmFyIHdhc21JbXBvcnRzPXtiOl9fX2N4YV90aHJvdyxjOl9hYm9ydCxlOl9lbXNjcmlwdGVuX21lbWNweV9qcyxkOl9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwLGE6X2ZkX3dyaXRlfTt2YXIgd2FzbUV4cG9ydHM9Y3JlYXRlV2FzbSgpO3ZhciBfX193YXNtX2NhbGxfY3RvcnM9KCk9PihfX193YXNtX2NhbGxfY3RvcnM9d2FzbUV4cG9ydHNbImciXSkoKTt2YXIgX2luaXRpYWxpemU9TW9kdWxlWyJfaW5pdGlhbGl6ZSJdPShhMCxhMSxhMik9PihfaW5pdGlhbGl6ZT1Nb2R1bGVbIl9pbml0aWFsaXplIl09d2FzbUV4cG9ydHNbImgiXSkoYTAsYTEsYTIpO3ZhciBfYWxsb2NNYXRyaXg9TW9kdWxlWyJfYWxsb2NNYXRyaXgiXT1hMD0+KF9hbGxvY01hdHJpeD1Nb2R1bGVbIl9hbGxvY01hdHJpeCJdPXdhc21FeHBvcnRzWyJpIl0pKGEwKTt2YXIgX2dldE1hdHJpeEJ1ZmZlclB0cj1Nb2R1bGVbIl9nZXRNYXRyaXhCdWZmZXJQdHIiXT0oKT0+KF9nZXRNYXRyaXhCdWZmZXJQdHI9TW9kdWxlWyJfZ2V0TWF0cml4QnVmZmVyUHRyIl09d2FzbUV4cG9ydHNbImoiXSkoKTt2YXIgX2dldFNSVFB0cj1Nb2R1bGVbIl9nZXRTUlRQdHIiXT0oKT0+KF9nZXRTUlRQdHI9TW9kdWxlWyJfZ2V0U1JUUHRyIl09d2FzbUV4cG9ydHNbImsiXSkoKTt2YXIgX2dldEluZm9QdHI9TW9kdWxlWyJfZ2V0SW5mb1B0ciJdPSgpPT4oX2dldEluZm9QdHI9TW9kdWxlWyJfZ2V0SW5mb1B0ciJdPXdhc21FeHBvcnRzWyJsIl0pKCk7dmFyIF9nZXRDb250aW51ZWRTUlRQdHI9TW9kdWxlWyJfZ2V0Q29udGludWVkU1JUUHRyIl09KCk9PihfZ2V0Q29udGludWVkU1JUUHRyPU1vZHVsZVsiX2dldENvbnRpbnVlZFNSVFB0ciJdPXdhc21FeHBvcnRzWyJtIl0pKCk7dmFyIF9wcmludE1hdHJpeD1Nb2R1bGVbIl9wcmludE1hdHJpeCJdPWEwPT4oX3ByaW50TWF0cml4PU1vZHVsZVsiX3ByaW50TWF0cml4Il09d2FzbUV4cG9ydHNbIm4iXSkoYTApO3ZhciBfdXBkYXRlQWxsTWF0cml4Q29udGludWVUcmFuc2Zvcm09TW9kdWxlWyJfdXBkYXRlQWxsTWF0cml4Q29udGludWVUcmFuc2Zvcm0iXT0oYTAsYTEsYTIpPT4oX3VwZGF0ZUFsbE1hdHJpeENvbnRpbnVlVHJhbnNmb3JtPU1vZHVsZVsiX3VwZGF0ZUFsbE1hdHJpeENvbnRpbnVlVHJhbnNmb3JtIl09d2FzbUV4cG9ydHNbIm8iXSkoYTAsYTEsYTIpO3ZhciBfbWFpbj1Nb2R1bGVbIl9tYWluIl09KGEwLGExKT0+KF9tYWluPU1vZHVsZVsiX21haW4iXT13YXNtRXhwb3J0c1sicCJdKShhMCxhMSk7dmFyIHN0YWNrQWxsb2M9YTA9PihzdGFja0FsbG9jPXdhc21FeHBvcnRzWyJyIl0pKGEwKTt2YXIgX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1hMD0+KF9fX2N4YV9pc19wb2ludGVyX3R5cGU9d2FzbUV4cG9ydHNbInMiXSkoYTApO3ZhciBjYWxsZWRSdW47ZGVwZW5kZW5jaWVzRnVsZmlsbGVkPWZ1bmN0aW9uIHJ1bkNhbGxlcigpe2lmKCFjYWxsZWRSdW4pcnVuKCk7aWYoIWNhbGxlZFJ1bilkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9cnVuQ2FsbGVyfTtmdW5jdGlvbiBjYWxsTWFpbihhcmdzPVtdKXt2YXIgZW50cnlGdW5jdGlvbj1fbWFpbjthcmdzLnVuc2hpZnQodGhpc1Byb2dyYW0pO3ZhciBhcmdjPWFyZ3MubGVuZ3RoO3ZhciBhcmd2PXN0YWNrQWxsb2MoKGFyZ2MrMSkqNCk7dmFyIGFyZ3ZfcHRyPWFyZ3Y7YXJncy5mb3JFYWNoKGFyZz0+e0hFQVBVMzJbYXJndl9wdHI+PjJdPXN0cmluZ1RvVVRGOE9uU3RhY2soYXJnKTthcmd2X3B0cis9NH0pO0hFQVBVMzJbYXJndl9wdHI+PjJdPTA7dHJ5e3ZhciByZXQ9ZW50cnlGdW5jdGlvbihhcmdjLGFyZ3YpO2V4aXRKUyhyZXQsdHJ1ZSk7cmV0dXJuIHJldH1jYXRjaChlKXtyZXR1cm4gaGFuZGxlRXhjZXB0aW9uKGUpfX1mdW5jdGlvbiBydW4oYXJncz1hcmd1bWVudHNfKXtpZihydW5EZXBlbmRlbmNpZXM+MCl7cmV0dXJufXByZVJ1bigpO2lmKHJ1bkRlcGVuZGVuY2llcz4wKXtyZXR1cm59ZnVuY3Rpb24gZG9SdW4oKXtpZihjYWxsZWRSdW4pcmV0dXJuO2NhbGxlZFJ1bj10cnVlO01vZHVsZVsiY2FsbGVkUnVuIl09dHJ1ZTtpZihBQk9SVClyZXR1cm47aW5pdFJ1bnRpbWUoKTtwcmVNYWluKCk7cmVhZHlQcm9taXNlUmVzb2x2ZShNb2R1bGUpO2lmKE1vZHVsZVsib25SdW50aW1lSW5pdGlhbGl6ZWQiXSlNb2R1bGVbIm9uUnVudGltZUluaXRpYWxpemVkIl0oKTtpZihzaG91bGRSdW5Ob3cpY2FsbE1haW4oYXJncyk7cG9zdFJ1bigpfWlmKE1vZHVsZVsic2V0U3RhdHVzIl0pe01vZHVsZVsic2V0U3RhdHVzIl0oIlJ1bm5pbmcuLi4iKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe01vZHVsZVsic2V0U3RhdHVzIl0oIiIpfSwxKTtkb1J1bigpfSwxKX1lbHNle2RvUnVuKCl9fWlmKE1vZHVsZVsicHJlSW5pdCJdKXtpZih0eXBlb2YgTW9kdWxlWyJwcmVJbml0Il09PSJmdW5jdGlvbiIpTW9kdWxlWyJwcmVJbml0Il09W01vZHVsZVsicHJlSW5pdCJdXTt3aGlsZShNb2R1bGVbInByZUluaXQiXS5sZW5ndGg+MCl7TW9kdWxlWyJwcmVJbml0Il0ucG9wKCkoKX19dmFyIHNob3VsZFJ1bk5vdz10cnVlO2lmKE1vZHVsZVsibm9Jbml0aWFsUnVuIl0pc2hvdWxkUnVuTm93PWZhbHNlO3J1bigpOw0KDQoNCiAgcmV0dXJuIG1vZHVsZUFyZy5yZWFkeQ0KfQ0KKTsNCn0pKCk7DQpleHBvcnQgZGVmYXVsdCBNb2R1bGU7",import.meta.url)),p=(N,W)=>(N=Nt(N)?new URL(N):B.normalize(N),x.readFileSync(N,W?void 0:"utf8")),A=N=>{var W=p(N,!0);return W.buffer||(W=new Uint8Array(W)),W},!t.thisProgram&&process.argv.length>1&&(n=process.argv[1].replace(/\\/g,"/")),o=process.argv.slice(2),l=(N,W)=>{throw process.exitCode=N,W}}else(h||u)&&(u?f=self.location.href:typeof document<"u"&&document.currentScript&&(f=document.currentScript.src),s&&(f=s),f.startsWith("blob:")?f="":f=f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1),p=D=>{var N=new XMLHttpRequest;return N.open("GET",D,!1),N.send(null),N.responseText},u&&(A=D=>{var N=new XMLHttpRequest;return N.open("GET",D,!1),N.responseType="arraybuffer",N.send(null),new Uint8Array(N.response)}));var S=t.print||console.log.bind(console),C=t.printErr||console.error.bind(console);Object.assign(t,a),a=null,t.arguments&&(o=t.arguments),t.thisProgram&&(n=t.thisProgram),t.quit&&(l=t.quit);var _;t.wasmBinary&&(_=t.wasmBinary);function y(D){if(typeof c<"u"&&c){var N=Buffer.from(D,"base64");return new Uint8Array(N.buffer,N.byteOffset,N.length)}for(var W=atob(D),fe=new Uint8Array(W.length),Ee=0;Ee<W.length;++Ee)fe[Ee]=W.charCodeAt(Ee);return fe}function b(D){if(Rt(D))return y(D.slice(Qt.length))}var w,Q=!1,E,M,z,Y;function ee(){var D=w.buffer;t.HEAP8=M=new Int8Array(D),t.HEAP16=new Int16Array(D),t.HEAPU8=z=new Uint8Array(D),t.HEAPU16=new Uint16Array(D),t.HEAP32=new Int32Array(D),t.HEAPU32=Y=new Uint32Array(D),t.HEAPF32=new Float32Array(D),t.HEAPF64=new Float64Array(D)}var oe=[],te=[],ge=[],Ce=[];function J(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)xe(t.preRun.shift());vr(oe)}function ce(){vr(te)}function he(){vr(ge)}function Ue(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)Ie(t.postRun.shift());vr(Ce)}function xe(D){oe.unshift(D)}function Ve(D){te.unshift(D)}function Ie(D){Ce.unshift(D)}var Fe=0,Me=null;function nt(D){Fe++,t.monitorRunDependencies?.(Fe)}function mr(D){if(Fe--,t.monitorRunDependencies?.(Fe),Fe==0&&Me){var N=Me;Me=null,N()}}function Mt(D){t.onAbort?.(D),D="Aborted("+D+")",C(D),Q=!0,E=1,D+=". Build with -sASSERTIONS for more info.";var N=new WebAssembly.RuntimeError(D);throw i(N),N}var Qt="data:application/octet-stream;base64,",Rt=D=>D.startsWith(Qt),Nt=D=>D.startsWith("file://"),Ct;Ct="data:application/octet-stream;base64,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gICAgID4PzcD0AIgAkKAgICAgICA+D83A6gCIAJCgICAgICAgPg/NwOAAiACQYgDakEAQfAAEAcaIAJCgICAgICAgPg/NwP4AyACQoCAgICAgID4PzcD0AMgAkKAgICAgICA+D83A6gDIAJCgICAgICAgPg/NwOAAyACQYAEaiICIANHDQALCyAAIAM2AgwMAgsCQCADIAAoAggiAmtBB3UiBCAGaiIHQYCAgBBJBEBBACEDQf///w8gBSACayIFQQZ1IgIgByACIAdLGyAFQYD///8HTxsiBwRAIAdBgICAEE8NAiAHQQd0EAshCAsgCCAEQQd0aiIEIQIgBkEDcSIFBEADQCACQQhqQQBB8AAQBxogAkKAgICAgICA+D83A3ggAkKAgICAgICA+D83A1AgAkKAgICAgICA+D83AyggAkKAgICAgICA+D83AwAgAkGAAWohAiADQQFqIgMgBUcNAAsLIAZBB3QgBGohBSAGQQFrQf///w9xQQNPBEADQCACQQhqQQBB8AAQBxogAkKAgICAgICA+D83A3ggAkKAgICAgICA+D83A1AgAkKAgICAgICA+D83AyggAkKAgICAgICA+D83AwAgAkGIAWpBAEHwABAHGiACQoCAgICAgID4PzcD+AEgAkKAgICAgICA+D83A9ABIAJCgICAgICAgPg/NwOoASACQoCAgICAgID4PzcDgAEgAkGIAmpBAEHwABAHGiACQoCAgICAgID4PzcD+AIgAkKAgICAgICA+D83A9ACIAJCgICAgICAgPg/NwOoAiACQoCAgICAgID4PzcDgAIgAkGIA2pBAEHwABAHGiACQoCAgICAgID4PzcD+AMgAkKAgICAgICA+D83A9ADIAJCgICAgICAgPg/NwOoAyACQoCAgICAgID4PzcDgAMgAkGABGoiAiAFRw0ACwsgACgCDCICIAAoAggiA0cEQANAIARBgAFrIgQgAkGAAWsiAkGAARAVGiACIANHDQALIAAoAgghAgsgACAIIAdBB3RqNgIQIAAgBTYCDCAAIAQ2AgggAgRAIAIQFgsMAwsQEwALEBIACyABIAJPDQAgACADIAFBB3RqNgIMCwJAIAAoAhggACgCFCIDa0HIAG0iAiABSQRAIABBFGogASACaxA8DAELIAEgAk8NACAAIAMgAUHIAGxqNgIYCwJAIAAoAiQgACgCICIDa0EEdSICIAFJBEAgAEEgaiABIAJrEDsMAQsgASACTw0AIAAgAyABQQR0ajYCJAsgACgCMCAAKAIsIgNrQcgAbSICIAFJBEAgAEEsaiABIAJrEDwPCyABIAJPDQAgACADIAFByABsajYCMAsLBwAgACgCLAsHACAAKAIgCwcAIAAoAhQLBwAgACgCCAvUBQEHfyABIAAoAggiByAAKAIEIgNrQQR1TQRAAkAgAUUNACADIQIgAUEHcSIFBEADQCACQv////8PNwIIIAJCADcCACACQRBqIQIgBEEBaiIEIAVHDQALCyABQQR0IANqIQMgAUEBa0H/////AHFBB0kNAANAIAJC/////w83AnggAkIANwJwIAJC/////w83AmggAkIANwJgIAJC/////w83AlggAkIANwJQIAJC/////w83AkggAkIANwJAIAJC/////w83AjggAkIANwIwIAJC/////w83AiggAkIANwIgIAJC/////w83AhggAkIANwIQIAJC/////w83AgggAkIANwIAIAJBgAFqIgIgA0cNAAsLIAAgAzYCBA8LAkAgAyAAKAIAIgJrQQR1IgQgAWoiBkGAgICAAUkEQEH/////ACAHIAJrIgdBA3UiAiAGIAIgBksbIAdB8P///wdPGyIGBEAgBkGAgICAAU8NAiAGQQR0EAshCAsgCCAEQQR0aiIEIQIgAUEHcSIHBEADQCACQv////8PNwIIIAJCADcCACACQRBqIQIgBUEBaiIFIAdHDQALCyABQQR0IARqIQUgAUEBa0H/////AHFBB08EQANAIAJC/////w83AnggAkIANwJwIAJC/////w83AmggAkIANwJgIAJC/////w83AlggAkIANwJQIAJC/////w83AkggAkIANwJAIAJC/////w83AjggAkIANwIwIAJC/////w83AiggAkIANwIgIAJC/////w83AhggAkIANwIQIAJC/////w83AgggAkIANwIAIAJBgAFqIgIgBUcNAAsLIAAoAgAiASADRwRAA0AgBEEQayIEIANBEGsiA/0AAgD9CwIAIAEgA0cNAAsgACgCACEDCyAAIAggBkEEdGo2AgggACAFNgIEIAAgBDYCACADBEAgAxAMCw8LEBMACxASAAuLAwEHfyABIAAoAggiAiAAKAIEIgNrQcgAbU0EQCAAIAEEfyADQQAgAUHIAGxByABrIgAgAEHIAHBrQcgAaiIAEAcgAGoFIAMLNgIEDwsCQCADIAAoAgAiBmtByABtIgggAWoiBEHk8bgcSQRAQePxuBwgAiAGa0HIAG0iB0EBdCICIAQgAiAESxsgB0HxuJwOTxsiBARAIARB5PG4HE8NAiAEQcgAbBALIQULIAUgCEHIAGxqIgJBACABQcgAbEHIAGsiASABQcgAcGtByABqIgcQByIBIAdqIQggBSAEQcgAbGohBwJAIAMgBkYEQCABIQUMAQsDQCACQcgAayIFIANByABrIgH9AAMA/QsDACACQThrIANBOGv9AAMA/QsDACACQShrIANBKGv9AAMA/QsDACACQRhrIANBGGv9AAMA/QsDACACQQhrIANBCGsrAwA5AwAgBSECIAEiAyAGRw0ACwsgACAHNgIIIAAgCDYCBCAAIAU2AgAgBgRAIAYQDAsPCxATAAsQEgALGQEBf0GgKygCACIBIAAgASgCACgCGBEBAAsQACMAIABrQXBxIgAkACAACwcAIAAoAgQLBQBBowkLBQBBzQkLBQBBkAkLFwEBf0GgKygCACIAIAAoAgAoAhQRAAALFQAgAEUEQEEADwsgAEHkJhAiQQBHCxoAIAAgASgCCCAFEAoEQCABIAIgAyAEECALCzcAIAAgASgCCCAFEAoEQCABIAIgAyAEECAPCyAAKAIIIgAgASACIAMgBCAFIAAoAgAoAhQRCQALpwEAIAAgASgCCCAEEAoEQAJAIAEoAgQgAkcNACABKAIcQQFGDQAgASADNgIcCw8LAkAgACABKAIAIAQQCkUNAAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNASABQQE2AiAPCyABIAI2AhQgASADNgIgIAEgASgCKEEBajYCKAJAIAEoAiRBAUcNACABKAIYQQJHDQAgAUEBOgA2CyABQQQ2AiwLC4gCACAAIAEoAgggBBAKBEACQCABKAIEIAJHDQAgASgCHEEBRg0AIAEgAzYCHAsPCwJAIAAgASgCACAEEAoEQAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNAiABQQE2AiAPCyABIAM2AiACQCABKAIsQQRGDQAgAUEAOwE0IAAoAggiACABIAIgAkEBIAQgACgCACgCFBEJACABLQA1BEAgAUEDNgIsIAEtADRFDQEMAwsgAUEENgIsCyABIAI2AhQgASABKAIoQQFqNgIoIAEoAiRBAUcNASABKAIYQQJHDQEgAUEBOgA2DwsgACgCCCIAIAEgAiADIAQgACgCACgCGBEGAAsLMQAgACABKAIIQQAQCgRAIAEgAiADECEPCyAAKAIIIgAgASACIAMgACgCACgCHBEHAAsYACAAIAEoAghBABAKBEAgASACIAMQIQsLFwEBf0GgKygCACIAIAAoAgAoAhARAAALnAEBAn8jAEFAaiIDJAACf0EBIAAgAUEAEAoNABpBACABRQ0AGkEAIAFBhCYQIiIBRQ0AGiADQQxqQQBBNBAHGiADQQE2AjggA0F/NgIUIAMgADYCECADIAE2AgggASADQQhqIAIoAgBBASABKAIAKAIcEQcAIAMoAiAiAEEBRgRAIAIgAygCGDYCAAsgAEEBRgshBCADQUBrJAAgBAsXAQF/QaArKAIAIgAgACgCACgCDBEAAAsXAQF/QaArKAIAIgAgACgCACgCCBEAAAsEAEIACwQAQQAL9AIBCH8jAEEgayIDJAAgAyAAKAIcIgQ2AhAgACgCFCEFIAMgAjYCHCADIAE2AhggAyAFIARrIgE2AhQgASACaiEFQQIhBwJ/AkACQAJAIAAoAjwgA0EQaiIBQQIgA0EMahAAIgQEf0G4MyAENgIAQX8FQQALBEAgASEEDAELA0AgBSADKAIMIgZGDQIgBkEASARAIAEhBAwECyABIAYgASgCBCIISyIJQQN0aiIEIAYgCEEAIAkbayIIIAQoAgBqNgIAIAFBDEEEIAkbaiIBIAEoAgAgCGs2AgAgBSAGayEFIAAoAjwgBCIBIAcgCWsiByADQQxqEAAiBgR/QbgzIAY2AgBBfwVBAAtFDQALCyAFQX9HDQELIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhAgAgwBCyAAQQA2AhwgAEIANwMQIAAgACgCAEEgcjYCAEEAIAdBAkYNABogAiAEKAIEawshCiADQSBqJAAgCgsZAQF/QaArKAIAIgEgACABKAIAKAIEEQEACycAIAAgAzgCBCABIAJIBEADQCAAIAEQMxogAUEBaiIBIAJHDQALCwuWAgIBfw99IwBBgAFrIgIkACAAKAIIIAFBBnRqIgAqAgAhAyAAKgIEIQQgACoCCCEFIAAqAgwhBiAAKgIQIQcgACoCFCEIIAAqAhghCSAAKgIcIQogACoCICELIAAqAiQhDCAAKgIoIQ0gACoCLCEOIAAqAjAhDyAAKgI0IRAgACoCOCERIAIgACoCPLs5A3ggAiARuzkDcCACIBC7OQNoIAIgD7s5A2AgAiAOuzkDWCACIA27OQNQIAIgDLs5A0ggAkFAayALuzkDACACIAq7OQM4IAIgCbs5AzAgAiAIuzkDKCACIAe7OQMgIAIgBrs5AxggAiAFuzkDECACIAS7OQMIIAIgA7s5AwAgAhAuIAJBgAFqJAALJQAgASAAKAIMIAAoAghrQQZ1RwRAIAAgASAAKAIAKAIEEQEACwsnACAAIAM4AgQgASACSARAA0AgACABEDUaIAFBAWoiASACRw0ACwsLpgECAX8HeyMAQYABayICJAAgACgCCCABQQd0aiIA/QADACEDIAD9AAMQIQQgAP0AAyAhBSAA/QADMCEGIAD9AANAIQcgAP0AA1AhCCAA/QADYCEJIAIgAP0AA3D9CwRwIAIgCf0LBGAgAiAI/QsEUCACQUBrIAf9CwQAIAIgBv0LBDAgAiAF/QsEICACIAT9CwQQIAIgA/0LBAAgAhAuIAJBgAFqJAALJQAgASAAKAIMIAAoAghrQQd1RwRAIAAgASAAKAIAKAIEEQEACwv/AQBB1CooAgAaAkACf0G8CRAsIgACf0HUKigCAEEASARAQbwJIABBiCoQGQwBC0G8CSAAQYgqEBkLIgEgAEYNABogAQsgAEcNAAJAQdgqKAIAQQpGDQBBnCooAgAiAEGYKigCAEYNAEGcKiAAQQFqNgIAIABBCjoAAAwBCyMAQRBrIgAkACAAQQo6AA8CQAJAQZgqKAIAIgEEfyABBUGIKhAaDQJBmCooAgALQZwqKAIAIgFGDQBB2CooAgBBCkYNAEGcKiABQQFqNgIAIAFBCjoAAAwBC0GIKiAAQQ9qQQFBrCooAgARAgBBAUcNACAALQAPGgsgAEEQaiQAC0EACx0BAX9BoCsoAgAiAyAAIAEgAiADKAIAKAIcEQsAC4cCAQF/QaArKAIAIgJFBEBBOBALIgNBBGohAiABBEAgA0GICDYCACACQQA2AjAgAv0MAAAAAAAAAAAAAAAAAAAAAP0LAiAgAv0MAAAAAAAAAAAAAAAAAAAAAP0LAhAgAv0MAAAAAAAAAAAAAAAAAAAAAP0LAgAgAARAIAMgABA2C0GgKyADNgIADwsgA0HgCjYCACACQQA2AjAgAv0MAAAAAAAAAAAAAAAAAAAAAP0LAiAgAv0MAAAAAAAAAAAAAAAAAAAAAP0LAhAgAv0MAAAAAAAAAAAAAAAAAAAAAP0LAgAgAARAIAMgABAyC0GgKyADNgIADwsgAiAAQQAgAigCACgCABEDAAsLoCEVAEGECAuiA2AEAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAADE5TWF0cml4QmF0Y2hDb21wdXRlcklkRQAyMElNYXRyaXhCYXRjaENvbXB1dGVyAHgTAABBBAAAoBMAACgEAABYBAAALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweAB2ZWN0b3IAc3RkOjpleGNlcHRpb24AbmFuAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGluZgB3YXNtIGhhdmUgbG9hZGVkAHN0ZDo6YmFkX2FsbG9jAE5BTgBJTkYALgAobnVsbCkAWyUuMmYsICUuMmYsICUuMmYsICUuMmZdDQpbJS4yZiwgJS4yZiwgJS4yZiwgJS4yZl0NClslLjJmLCAlLjJmLCAlLjJmLCAlLjJmXQ0KWyUuMmYsICUuMmYsICUuMmYsICUuMmZdDQoAAAAAAAAAnAUAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAMTlNYXRyaXhCYXRjaENvbXB1dGVySWZFAAAAAKATAACABQAAWAQAQbALC9cVAwAAAAQAAAAEAAAABgAAAIP5ogBETm4A/CkVANFXJwDdNPUAYtvAADyZlQBBkEMAY1H+ALveqwC3YcUAOm4kANJNQgBJBuAACeouAByS0QDrHf4AKbEcAOg+pwD1NYIARLsuAJzphAC0JnAAQX5fANaROQBTgzkAnPQ5AItfhAAo+b0A+B87AN7/lwAPmAUAES/vAApaiwBtH20Az342AAnLJwBGT7cAnmY/AC3qXwC6J3UA5evHAD178QD3OQcAklKKAPtr6gAfsV8ACF2NADADVgB7/EYA8KtrACC8zwA29JoA46kdAF5hkQAIG+YAhZllAKAUXwCNQGgAgNj/ACdzTQAGBjEAylYVAMmocwB74mAAa4zAABnERwDNZ8MACejcAFmDKgCLdsQAphyWAESv3QAZV9EApT4FAAUH/wAzfj8AwjLoAJhP3gC7fTIAJj3DAB5r7wCf+F4ANR86AH/yygDxhx0AfJAhAGokfADVbvoAMC13ABU7QwC1FMYAwxmdAK3EwgAsTUEADABdAIZ9RgDjcS0Am8aaADNiAAC00nwAtKeXADdV1QDXPvYAoxAYAE12/ABknSoAcNerAGN8+AB6sFcAFxXnAMBJVgA71tkAp4Q4ACQjywDWincAWlQjAAAfuQDxChsAGc7fAJ8x/wBmHmoAmVdhAKz7RwB+f9gAImW3ADLoiQDmv2AA78TNAGw2CQBdP9QAFt7XAFg73gDem5IA0iIoACiG6ADiWE0AxsoyAAjjFgDgfcsAF8BQAPMdpwAY4FsALhM0AIMSYgCDSAEA9Y5bAK2wfwAe6fIASEpDABBn0wCq3dgArl9CAGphzgAKKKQA05m0AAam8gBcd38Ao8KDAGE8iACKc3gAr4xaAG/XvQAtpmMA9L/LAI2B7wAmwWcAVcpFAMrZNgAoqNIAwmGNABLJdwAEJhQAEkabAMRZxADIxUQATbKRAAAX8wDUQ60AKUnlAP3VEAAAvvwAHpTMAHDO7gATPvUA7PGAALPnwwDH+CgAkwWUAMFxPgAuCbMAC0XzAIgSnACrIHsALrWfAEeSwgB7Mi8ADFVtAHKnkABr5x8AMcuWAHkWSgBBeeIA9N+JAOiUlwDi5oQAmTGXAIjtawBfXzYAu/0OAEiatABnpGwAcXJCAI1dMgCfFbgAvOUJAI0xJQD3dDkAMAUcAA0MAQBLCGgALO5YAEeqkAB05wIAvdYkAPd9pgBuSHIAnxbvAI6UpgC0kfYA0VNRAM8K8gAgmDMA9Ut+ALJjaADdPl8AQF0DAIWJfwBVUikAN2TAAG3YEAAySDIAW0x1AE5x1ABFVG4ACwnBACr1aQAUZtUAJwedAF0EUAC0O9sA6nbFAIf5FwBJa30AHSe6AJZpKQDGzKwArRRUAJDiagCI2YkALHJQAASkvgB3B5QA8zBwAAD8JwDqcagAZsJJAGTgPQCX3YMAoz+XAEOU/QANhowAMUHeAJI5nQDdcIwAF7fnAAjfOwAVNysAXICgAFqAkwAQEZIAD+jYAGyArwDb/0sAOJAPAFkYdgBipRUAYcu7AMeJuQAQQL0A0vIEAEl1JwDrtvYA2yK7AAoUqgCJJi8AZIN2AAk7MwAOlBoAUTqqAB2jwgCv7a4AXCYSAG3CTQAtepwAwFaXAAM/gwAJ8PYAK0CMAG0xmQA5tAcADCAVANjDWwD1ksQAxq1LAE7KpQCnN80A5qk2AKuSlADdQmgAGWPeAHaM7wBoi1IA/Ns3AK6hqwDfFTEAAK6hAAz72gBkTWYA7QW3ACllMABXVr8AR/86AGr5uQB1vvMAKJPfAKuAMABmjPYABMsVAPoiBgDZ5B0APbOkAFcbjwA2zQkATkLpABO+pAAzI7UA8KoaAE9lqADSwaUACz8PAFt4zQAj+XYAe4sEAIkXcgDGplMAb27iAO/rAACbSlgAxNq3AKpmugB2z88A0QIdALHxLQCMmcEAw613AIZI2gD3XaAAxoD0AKzwLwDd7JoAP1y8ANDebQCQxx8AKtu2AKMlOgAAr5oArVOTALZXBAApLbQAS4B+ANoHpwB2qg4Ae1mhABYSKgDcty0A+uX9AInb/gCJvv0A5HZsAAap/AA+gHAAhW4VAP2H/wAoPgcAYWczACoYhgBNveoAs+evAI9tbgCVZzkAMb9bAITXSAAw3xYAxy1DACVhNQDJcM4AMMu4AL9s/QCkAKIABWzkAFrdoAAhb0cAYhLSALlchABwYUkAa1bgAJlSAQBQVTcAHtW3ADPxxAATbl8AXTDkAIUuqQAdssMAoTI2AAi3pADqsdQAFvchAI9p5AAn/3cADAOAAI1ALQBPzaAAIKWZALOi0wAvXQoAtPlCABHaywB9vtAAm9vBAKsXvQDKooEACGpcAC5VFwAnAFUAfxTwAOEHhgAUC2QAlkGNAIe+3gDa/SoAayW2AHuJNAAF8/4Aub+eAGhqTwBKKqgAT8RaAC34vADXWpgA9MeVAA1NjQAgOqYApFdfABQ/sQCAOJUAzCABAHHdhgDJ3rYAv2D1AE1lEQABB2sAjLCsALLA0ABRVUgAHvsOAJVywwCjBjsAwEA1AAbcewDgRcwATin6ANbKyADo80EAfGTeAJtk2ADZvjEApJfDAHdY1ABp48UA8NoTALo6PABGGEYAVXVfANK99QBuksYArC5dAA5E7QAcPkIAYcSHACn96QDn1vMAInzKAG+RNQAI4MUA/9eNAG5q4gCw/cYAkwjBAHxddABrrbIAzW6dAD5yewDGEWoA98+pAClz3wC1yboAtwBRAOKyDQB0uiQA5X1gAHTYigANFSwAgRgMAH5mlAABKRYAn3p2AP39vgBWRe8A2X42AOzZEwCLurkAxJf8ADGoJwDxbsMAlMU2ANioVgC0qLUAz8wOABKJLQBvVzQALFaJAJnO4wDWILkAa16qAD4qnAARX8wA/QtKAOH0+wCOO20A4oYsAOnUhAD8tKkA7+7RAC41yQAvOWEAOCFEABvZyACB/AoA+0pqAC8c2ABTtIQATpmMAFQizAAqVdwAwMbWAAsZlgAacLgAaZVkACZaYAA/Uu4AfxEPAPS1EQD8y/UANLwtADS87gDoXcwA3V5gAGeOmwCSM+8AyRe4AGFYmwDhV7wAUYPGANg+EADdcUgALRzdAK8YoQAhLEYAWfPXANl6mACeVMAAT4b6AFYG/ADlea4AiSI2ADitIgBnk9wAVeiqAIImOADK55sAUQ2kAJkzsQCp1w4AaQVIAGWy8AB/iKcAiEyXAPnRNgAhkrMAe4JKAJjPIQBAn9wA3EdVAOF0OgBn60IA/p3fAF7UXwB7Z6QAuqx6AFX2ogAriCMAQbpVAFluCAAhKoYAOUeDAInj5gDlntQASftAAP9W6QAcD8oAxVmKAJT6KwDTwcUAD8XPANtargBHxYYAhUNiACGGOwAseZQAEGGHACpMewCALBoAQ78SAIgmkAB4PIkAqMTkAOXbewDEOsIAJvTqAPdnigANkr8AZaMrAD2TsQC9fAsApFHcACfdYwBp4d0AmpQZAKgplQBozigACe20AESfIABOmMoAcIJjAH58IwAPuTIAp/WOABRW5wAh8QgAtZ0qAG9+TQClGVEAtfmrAILf1gCW3WEAFjYCAMQ6nwCDoqEAcu1tADmNegCCuKkAazJcAEYnWwAANO0A0gB3APz0VQABWU0A4HGAAEGTIQt+QPsh+T8AAAAALUR0PgAAAICYRvg8AAAAYFHMeDsAAACAgxvwOQAAAEAgJXo4AAAAgCKC4zYAAAAAHfNpNRkACgAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQARChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEGhIgshDgAAAAAAAAAAGQAKDRkZGQANAAACAAkOAAAACQAOAAAOAEHbIgsBDABB5yILFRMAAAAAEwAAAAAJDAAAAAAADAAADABBlSMLARAAQaEjCxUPAAAABA8AAAAACRAAAAAAABAAABAAQc8jCwESAEHbIwseEQAAAAARAAAAAAkSAAAAAAASAAASAAAaAAAAGhoaAEGSJAsOGgAAABoaGgAAAAAAAAkAQcMkCwEUAEHPJAsVFwAAAAAXAAAAAAkUAAAAAAAUAAAUAEH9JAsBFgBBiSUL/QQVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUZOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQAAAACgEwAAsBIAAAAVAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAACgEwAA4BIAANQSAABOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UAAACgEwAAEBMAANQSAABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQCgEwAAQBMAADQTAAAAAAAABBMAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAAAAAAOgTAAAXAAAAHwAAABkAAAAaAAAAGwAAACAAAAAhAAAAIgAAAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQAAAACgEwAAwBMAAAQTAAAAAAAAWBQAAAEAAAAjAAAAJAAAAAAAAACAFAAAAQAAACUAAAAmAAAAAAAAAEAUAAABAAAAJwAAACgAAABTdDlleGNlcHRpb24AAAAAeBMAADAUAABTdDliYWRfYWxsb2MAAAAAoBMAAEgUAABAFAAAU3QyMGJhZF9hcnJheV9uZXdfbGVuZ3RoAAAAAKATAABkFAAAWBQAAAAAAACwFAAAAgAAACkAAAAqAAAAU3QxMWxvZ2ljX2Vycm9yAKATAACgFAAAQBQAAAAAAADkFAAAAgAAACsAAAAqAAAAU3QxMmxlbmd0aF9lcnJvcgAAAACgEwAA0BQAALAUAABTdDl0eXBlX2luZm8AAAAAeBMAAPAUAEGIKgsBBQBBlCoLARMAQawqCw4UAAAAFQAAALgVAAAABABBxCoLAQEAQdQqCwX/////CgBBmCsLA3AcAQ==",Rt(Ct)||(Ct=g(Ct));function Ar(D){if(D==Ct&&_)return new Uint8Array(_);var N=b(D);if(N)return N;if(A)return A(D);throw"both async and sync fetching of the wasm failed"}function Ur(D){return Promise.resolve().then(()=>Ar(D))}function xr(D,N,W){return Ur(D).then(fe=>WebAssembly.instantiate(fe,N)).then(W,fe=>{C(`failed to asynchronously prepare wasm: ${fe}`),Mt(fe)})}function Br(D,N,W,fe){return xr(N,W,fe)}function gi(){var D={a:Nd};function N(fe,Ee){return St=fe.exports,w=St.f,ee(),Ve(St.g),mr(),St}nt();function W(fe){N(fe.instance)}if(t.instantiateWasm)try{return t.instantiateWasm(D,N)}catch(fe){C(`Module.instantiateWasm callback failed with error: ${fe}`),i(fe)}return Br(_,Ct,D,W).catch(i),{}}function Wr(D){this.name="ExitStatus",this.message=`Program terminated with exit(${D})`,this.status=D}var vr=D=>{for(;D.length>0;)D.shift()(t)};t.noExitRuntime;class pi{constructor(N){this.excPtr=N,this.ptr=N-24}set_type(N){Y[this.ptr+4>>2]=N}get_type(){return Y[this.ptr+4>>2]}set_destructor(N){Y[this.ptr+8>>2]=N}get_destructor(){return Y[this.ptr+8>>2]}set_caught(N){N=N?1:0,M[this.ptr+12]=N}get_caught(){return M[this.ptr+12]!=0}set_rethrown(N){N=N?1:0,M[this.ptr+13]=N}get_rethrown(){return M[this.ptr+13]!=0}init(N,W){this.set_adjusted_ptr(0),this.set_type(N),this.set_destructor(W)}set_adjusted_ptr(N){Y[this.ptr+16>>2]=N}get_adjusted_ptr(){return Y[this.ptr+16>>2]}get_exception_ptr(){var N=Nn(this.get_type());if(N)return Y[this.excPtr>>2];var W=this.get_adjusted_ptr();return W!==0?W:this.excPtr}}var Jr=0,mi=(D,N,W)=>{var fe=new pi(D);throw fe.init(N,W),Jr=D,Jr},Cr=()=>{Mt("")},Ai=(D,N,W)=>z.copyWithin(D,N,N+W),Ui=()=>2147483648,zt=D=>{var N=w.buffer,W=(D-N.byteLength+65535)/65536;try{return w.grow(W),ee(),1}catch{}},xi=D=>{var N=z.length;D>>>=0;var W=Ui();if(D>W)return!1;for(var fe=(er,Oi)=>er+(Oi-er%Oi)%Oi,Ee=1;Ee<=4;Ee*=2){var We=N*(1+.2/Ee);We=Math.min(We,D+100663296);var we=Math.min(W,fe(Math.max(D,We),65536)),ye=zt(we);if(ye)return!0}return!1},Bi=[null,[],[]],Zr=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,vi=(D,N,W)=>{for(var fe=N+W,Ee=N;D[Ee]&&!(Ee>=fe);)++Ee;if(Ee-N>16&&D.buffer&&Zr)return Zr.decode(D.subarray(N,Ee));for(var We="";N<Ee;){var we=D[N++];if(!(we&128)){We+=String.fromCharCode(we);continue}var ye=D[N++]&63;if((we&224)==192){We+=String.fromCharCode((we&31)<<6|ye);continue}var er=D[N++]&63;if((we&240)==224?we=(we&15)<<12|ye<<6|er:we=(we&7)<<18|ye<<12|er<<6|D[N++]&63,we<65536)We+=String.fromCharCode(we);else{var Oi=we-65536;We+=String.fromCharCode(55296|Oi>>10,56320|Oi&1023)}}return We},Ci=(D,N)=>{var W=Bi[D];N===0||N===10?((D===1?S:C)(vi(W,0)),W.length=0):W.push(N)},Si=(D,N,W,fe)=>{for(var Ee=0,We=0;We<W;We++){var we=Y[N>>2],ye=Y[N+4>>2];N+=8;for(var er=0;er<ye;er++)Ci(D,z[we+er]);Ee+=ye}return Y[fe>>2]=Ee,0},_i=D=>{E=D,l(D,new Wr(D))},Fi=(D,N)=>{E=D,_i(D)},Ed=D=>{if(D instanceof Wr||D=="unwind")return E;l(1,D)},wd=D=>{for(var N=0,W=0;W<D.length;++W){var fe=D.charCodeAt(W);fe<=127?N++:fe<=2047?N+=2:fe>=55296&&fe<=57343?(N+=4,++W):N+=3}return N},Td=(D,N,W,fe)=>{if(!(fe>0))return 0;for(var Ee=W,We=W+fe-1,we=0;we<D.length;++we){var ye=D.charCodeAt(we);if(ye>=55296&&ye<=57343){var er=D.charCodeAt(++we);ye=65536+((ye&1023)<<10)|er&1023}if(ye<=127){if(W>=We)break;N[W++]=ye}else if(ye<=2047){if(W+1>=We)break;N[W++]=192|ye>>6,N[W++]=128|ye&63}else if(ye<=65535){if(W+2>=We)break;N[W++]=224|ye>>12,N[W++]=128|ye>>6&63,N[W++]=128|ye&63}else{if(W+3>=We)break;N[W++]=240|ye>>18,N[W++]=128|ye>>12&63,N[W++]=128|ye>>6&63,N[W++]=128|ye&63}}return N[W]=0,W-Ee},Dd=(D,N,W)=>Td(D,z,N,W),Md=D=>{var N=wd(D)+1,W=Zs(N);return Dd(D,W,N),W},Nd={b:mi,c:Cr,e:Ai,d:xi,a:Si},St=gi();t._initialize=(D,N,W)=>(t._initialize=St.h)(D,N,W),t._allocMatrix=D=>(t._allocMatrix=St.i)(D),t._getMatrixBufferPtr=()=>(t._getMatrixBufferPtr=St.j)(),t._getSRTPtr=()=>(t._getSRTPtr=St.k)(),t._getInfoPtr=()=>(t._getInfoPtr=St.l)(),t._getContinuedSRTPtr=()=>(t._getContinuedSRTPtr=St.m)(),t._printMatrix=D=>(t._printMatrix=St.n)(D),t._updateAllMatrixContinueTransform=(D,N,W)=>(t._updateAllMatrixContinueTransform=St.o)(D,N,W);var Mn=t._main=(D,N)=>(Mn=t._main=St.p)(D,N),Zs=D=>(Zs=St.r)(D),Nn=D=>(Nn=St.s)(D),is;Me=function D(){is||Vn(),is||(Me=D)};function Vd(D=[]){var N=Mn;D.unshift(n);var W=D.length,fe=Zs((W+1)*4),Ee=fe;D.forEach(we=>{Y[Ee>>2]=Md(we),Ee+=4}),Y[Ee>>2]=0;try{var We=N(W,fe);return Fi(We,!0),We}catch(we){return Ed(we)}}function Vn(D=o){if(Fe>0||(J(),Fe>0))return;function N(){is||(is=!0,t.calledRun=!0,!Q&&(ce(),he(),r(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Pn&&Vd(D),Ue()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),N()},1)):N()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();var Pn=!0;return t.noInitialRun&&(Pn=!1),Vn(),e.ready})})();function qr(s,e,t){return m.setting.doublePrecision?new Float64Array(s,e,t):new Float32Array(s,e,t)}class pe{static matrixBuffer;static matrixSRTBuffer;static matrixContinuedSRTBuffer;static matrixStateBuffer;static matrixBufferPtr;static matrixSRTBufferPtr;static matrixContinuedSRTBufferPtr;static matrixStateBufferPtr;static wasm;static stateStruct=4;static useDoublePrecision=!1;static async init(e,t=!1){this.wasm=await Yd(),this.useDoublePrecision=t,this.wasm._initialize(e,t,0),this.allocMatrix(e)}static allocMatrix(e){e>I.maxCount&&console.error(`The maximum allocation size is exceeded! current:${e}, limit:${I.maxCount}`),this.wasm._allocMatrix(e),this.matrixBufferPtr=this.wasm._getMatrixBufferPtr(),this.matrixSRTBufferPtr=this.wasm._getSRTPtr(),this.matrixStateBufferPtr=this.wasm._getInfoPtr(),this.matrixContinuedSRTBufferPtr=this.wasm._getContinuedSRTPtr(),this.useDoublePrecision?(this.matrixBuffer=qr(this.wasm.HEAPF64.buffer,this.matrixBufferPtr,16*e),this.matrixSRTBuffer=qr(this.wasm.HEAPF64.buffer,this.matrixSRTBufferPtr,9*e),this.matrixContinuedSRTBuffer=qr(this.wasm.HEAPF64.buffer,this.matrixContinuedSRTBufferPtr,9*e),I.blockBytes=I.block*8):(this.matrixBuffer=qr(this.wasm.HEAPF32.buffer,this.matrixBufferPtr,16*e),this.matrixSRTBuffer=qr(this.wasm.HEAPF32.buffer,this.matrixSRTBufferPtr,9*e),this.matrixContinuedSRTBuffer=qr(this.wasm.HEAPF32.buffer,this.matrixContinuedSRTBufferPtr,9*e),I.blockBytes=I.block*4),this.matrixStateBuffer=new Int32Array(this.wasm.HEAP32.buffer,this.matrixStateBufferPtr,pe.stateStruct*e),I.allocMatrix(e)}static updateAllContinueTransform(e,t,r){this.wasm._updateAllMatrixContinueTransform(e,t,r)}static setParent(e,t,r){this.matrixStateBuffer[e*pe.stateStruct+2]=t>=0?t:-1,this.matrixStateBuffer[e*pe.stateStruct+3]=r}static setTranslate(e,t,r,i){this.matrixSRTBuffer[e*9+6]=t,this.matrixSRTBuffer[e*9+7]=r,this.matrixSRTBuffer[e*9+8]=i}static setRotation(e,t,r,i){this.matrixSRTBuffer[e*9+3]=t%360,this.matrixSRTBuffer[e*9+4]=r%360,this.matrixSRTBuffer[e*9+5]=i%360}static setScale(e,t,r,i){this.matrixSRTBuffer[e*9+0]=t,this.matrixSRTBuffer[e*9+1]=r,this.matrixSRTBuffer[e*9+2]=i}static setContinueTranslate(e,t,r,i){(t!=0||r!=0||i!=0)&&(this.matrixContinuedSRTBuffer[e*9+6]=t,this.matrixContinuedSRTBuffer[e*9+7]=r,this.matrixContinuedSRTBuffer[e*9+8]=i,this.matrixStateBuffer[e*pe.stateStruct+1]=1)}static setContinueRotation(e,t,r,i){(t!=0||r!=0||i!=0)&&(this.matrixContinuedSRTBuffer[e*9+3]=t,this.matrixContinuedSRTBuffer[e*9+4]=r,this.matrixContinuedSRTBuffer[e*9+5]=i,this.matrixStateBuffer[e*pe.stateStruct+1]=1)}static setContinueScale(e,t,r,i){(t!=0||r!=0||i!=0)&&(this.matrixContinuedSRTBuffer[e*9+0]=t,this.matrixContinuedSRTBuffer[e*9+1]=r,this.matrixContinuedSRTBuffer[e*9+2]=i,this.matrixStateBuffer[e*pe.stateStruct+1]=1)}}class ir{static AXIS_ANGLE="axisAngle";static EULER_ANGLES="eulerAngles";static QUATERNION="quaternion"}class Z{static HELP_0=new Z(0,0,0,1);static HELP_1=new Z(0,0,0,1);static HELP_2=new Z(0,0,0,1);static _zero=new Z(0,0,0,1);static CALCULATION_QUATERNION=new Z;x=0;y=0;z=0;w=1;constructor(e=0,t=0,r=0,i=1){this.x=e,this.y=t,this.z=r,this.w=i}static identity(){return Z._zero}static quaternionToMatrix(e,t){let r=e.x*2,i=e.y*2,a=e.z*2,o=e.x*r,n=e.y*i,l=e.z*a,h=e.x*i,u=e.x*a,c=e.y*a,f=e.w*r,g=e.w*i,p=e.w*a;t.rawData[0]=1-(n+l),t.rawData[1]=h+p,t.rawData[2]=u-g,t.rawData[3]=0,t.rawData[4]=h-p,t.rawData[5]=1-(o+l),t.rawData[6]=c+f,t.rawData[7]=0,t.rawData[8]=u+g,t.rawData[9]=c-f,t.rawData[10]=1-(o+n),t.rawData[11]=0,t.rawData[12]=0,t.rawData[13]=0,t.rawData[14]=0,t.rawData[15]=1}get magnitude(){return Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z)}set(e=0,t=0,r=0,i=1){return this.x=e,this.y=t,this.z=r,this.w=i,this}divide(e){return e instanceof Z?new Z(this.x/e.x,this.y/e.y,this.z/e.z):(this.x=this.x/e,this.y=this.y/e,this.z=this.z/e,this)}setFromArray(e){return this.x=e[0],this.y=e[1],this.z=e[2],this.w=e[3],this}multiply(e,t){var r=e.w,i=e.x,a=e.y,o=e.z,n=t.w,l=t.x,h=t.y,u=t.z;this.w=r*n-i*l-a*h-o*u,this.x=r*l+i*n+a*u-o*h,this.y=r*h-i*u+a*n+o*l,this.z=r*u+i*h-a*l+o*n}multiplyVector(e,t=null){t||=new Z;var r=e.x,i=e.y,a=e.z;return t.w=-this.x*r-this.y*i-this.z*a,t.x=this.w*r+this.y*a-this.z*i,t.y=this.w*i-this.x*a+this.z*r,t.z=this.w*a+this.x*i-this.y*r,t}fromAxisAngle(e,t){t*=Math.PI/180;var r=t*.5,i=Math.sin(r);this.w=Math.cos(r),this.x=e.x*i,this.y=e.y*i,this.z=e.z*i,this.normalize()}toAxisAngle(e){var t=this.x*this.x+this.y*this.y+this.z*this.z,r=0;return t>0?(r=2*Math.acos(this.w),t=1/Math.sqrt(t),e.x=this.x*t,e.y=this.y*t,e.z=this.z*t):(r=0,e.x=1,e.y=0,e.z=0),r}slerp(e,t,r){var i=e.w,a=e.x,o=e.y,n=e.z,l=t.w,h=t.x,u=t.y,c=t.z,f=i*l+a*h+o*u+n*c;if(f<0&&(f=-f,l=-l,h=-h,u=-u,c=-c),f<.95){var g=Math.acos(f),p=1/Math.sin(g),A=Math.sin(g*(1-r))*p,U=Math.sin(g*r)*p;this.w=i*A+l*U,this.x=a*A+h*U,this.y=o*A+u*U,this.z=n*A+c*U}else{this.w=i+r*(l-i),this.x=a+r*(h-a),this.y=o+r*(u-o),this.z=n+r*(c-n);var x=1/Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z);this.w*=x,this.x*=x,this.y*=x,this.z*=x}}lerp(e,t,r){var i=e.w,a=e.x,o=e.y,n=e.z,l=t.w,h=t.x,u=t.y,c=t.z,f;i*l+a*h+o*u+n*c<0&&(l=-l,h=-h,u=-u,c=-c),this.w=i+r*(l-i),this.x=a+r*(h-a),this.y=o+r*(u-o),this.z=n+r*(c-n),f=1/Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z),this.w*=f,this.x*=f,this.y*=f,this.z*=f}fromEulerAngles(e,t,r){e*=it,t*=it,r*=it;var i=e*.5,a=t*.5,o=r*.5,n=Math.cos(i),l=Math.sin(i),h=Math.cos(a),u=Math.sin(a),c=Math.cos(o),f=Math.sin(o);return this.w=n*h*c+l*u*f,this.x=l*h*c-n*u*f,this.y=n*u*c+l*h*f,this.z=n*h*f-l*u*c,this}setFromRotationMatrix(e){const t=e.rawData,r=t[0],i=t[4],a=t[8],o=t[1],n=t[5],l=t[9],h=t[2],u=t[6],c=t[10],f=r+n+c;if(f>0){const g=.5/Math.sqrt(f+1);this.w=.25/g,this.x=(u-l)*g,this.y=(a-h)*g,this.z=(o-i)*g}else if(r>n&&r>c){const g=2*Math.sqrt(1+r-n-c);this.w=(u-l)/g,this.x=.25*g,this.y=(i+o)/g,this.z=(a+h)/g}else if(n>c){const g=2*Math.sqrt(1+n-r-c);this.w=(a-h)/g,this.x=(i+o)/g,this.y=.25*g,this.z=(l+u)/g}else{const g=2*Math.sqrt(1+c-r-n);this.w=(o-i)/g,this.x=(a+h)/g,this.y=(l+u)/g,this.z=.25*g}return this}getEulerAngles(e){var t,r,i,a,o,n,l,h;return e||=new d,a=this.x,o=this.y,n=this.z,l=this.w,h=2*(l*o-a*n),h<=-.99999?(t=2*Math.atan2(a,l),r=-Math.PI/2,i=0):h>=.99999?(t=2*Math.atan2(a,l),r=Math.PI/2,i=0):(t=Math.atan2(2*(l*a+o*n),1-2*(a*a+o*o)),r=Math.asin(h),i=Math.atan2(2*(l*n+a*o),1-2*(o*o+n*n))),e.set(t,r,i).scaleBy(Wi)}normalize(e=1){var t=e/Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);this.x*=t,this.y*=t,this.z*=t,this.w*=t}toString(){return"{x:"+this.x+" y:"+this.y+" z:"+this.z+" w:"+this.w+"}"}fromMatrix(e){var t=e.decompose(ir.QUATERNION)[1];this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w}inverse(e=null){e||=new Z;var t=this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z;if(t>0){var r=1/t;e.w=this.w*r,e.x=-this.x*r,e.y=-this.y*r,e.z=-this.z*r}return e}clone(){return new Z(this.x,this.y,this.z,this.w)}transformVector(e,t=null){var r,i,a,o,n=e.x,l=e.y,h=e.z;return t||=new d,o=-this.x*n-this.y*l-this.z*h,r=this.w*n+this.y*h-this.z*l,i=this.w*l-this.x*h+this.z*n,a=this.w*h+this.x*l-this.y*n,t.x=-o*this.x+r*this.w-i*this.z+a*this.y,t.y=-o*this.y+r*this.z+i*this.w-a*this.x,t.z=-o*this.z-r*this.y+i*this.x+a*this.w,t}copyFrom(e){var t=this;return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,this}mul(e,t,r){let i=r||new Z;return i.x=e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,i.y=e.w*t.y+e.y*t.w+e.z*t.x-e.x*t.z,i.z=e.w*t.z+e.z*t.w+e.x*t.y-e.y*t.x,i.w=e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,i}clampf(e,t,r){if(t>r){var i=t;t=r,r=i}return e<t?t:e<r?e:r}static serialize(e){return new Z(e.x,e.y,e.z,e.w)}}function Xd(s,e,t){let r=s.x*2,i=s.y*2,a=s.z*2,o=s.x*r,n=s.y*i,l=s.z*a,h=s.x*i,u=s.x*a,c=s.y*a,f=s.w*r,g=s.w*i,p=s.w*a,A=t||new d;return A.x=(1-(n+l))*e.x+(h-p)*e.y+(u+g)*e.z,A.y=(h+p)*e.x+(1-(o+l))*e.y+(c-f)*e.z,A.z=(u-g)*e.x+(c+f)*e.y+(1-(o+n))*e.z,A}class ka{_x=0;_y=0;_z=0;_w=0;constructor(e=0){this.seed=e}get seed(){return this._x}set seed(e){this._x=e,this._y=this._x*1812433253+1,this._z=this._y*1812433253+1,this._w=this._z*1812433253+1}static getFloatFromInt(e){return Math.floor((e&8388607)*(1/8388607))}static getByteFromInt(e){return e>>15}clone(){let e=new ka;return e._x=this._x,e._y=this._y,e._z=this._z,e._w=this._w,e}get(){let e=this._x^this._x<<11;return this._x=this._y,this._y=this._z,this._z=this._w,this._w=this._w^this._w>>19^(e^e>>8)}getFloat(){return Kl(this.get())}getSignedFloat(){return this.getFloat()*2-1}}let Wi=180/Math.PI,it=Math.PI/180,Hd=2147483647,jd=-2147483647;function ie(s,e,t){return Math.max(e,Math.min(t,s))}class bt{static gaussFunction(e,t,r,i){let a=Math.pow(e-r,2),o=2*Math.pow(i,2),n=-1*(a/o),l=Math.pow(Math.E,n);return Math.round(l*t)}static computeGaussian(e,t){return 1/Math.sqrt(2*Math.PI*t)*Math.exp(-(e*e)/(2*t*t))}static gaussCoef(e){e<.5&&(e=.5);let t=Math.exp(.726*.726)/e,r=Math.exp(-t),i=Math.exp(-2*t),a=(1-r)*(1-r)/(1+2*t*r-i),o=a,n=a*(t-1)*r,l=a*(t+1)*r,h=-a*i,u=2*r,c=-i,f=(o+n)/(1-u-c),g=(l+h)/(1-u-c);return new Float32Array([o,n,l,h,u,c,f,g])}static clampf(e,t,r){if(t>r){let i=t;t=r,r=i}return e<t?t:e<r?e:r}static normalizeAngle(e){for(;e>180;)e-=360;for(;e<-180;)e+=360;return e}static fract(e){return e-Math.floor(e)}static getRandDirXZ(e){let t=e*Math.random(),r=360*Math.random()*it,i=Math.cos(r)*t,a=Math.sin(r)*t;return{x:i,z:a}}static getRandDirXYZ(e){let t=e*Math.random(),r=360*Math.random()*it,i=Math.cos(r)*t,a=Math.tan(r)*t,o=Math.sin(r)*t;return new d(i,a,o)}static getCycleXYZ(e){let t=e*Math.random(),r=360*Math.random()*it,i=Math.cos(r)*t,a=e*Math.random()-e*.5,o=Math.sin(r)*t;return new d(i,a,o)}static angle(e,t){let r=K.HELP_0,i=K.HELP_1;return r.set(e.x,e.z),i.set(t.x,t.z),Math.acos((r.x*i.x+r.y*i.y)/(r.abs()*i.abs()))}static angle_360(e,t){let r=d.HELP_0;return e.crossProduct(t,r),r.z>0?bt.angle(e,t):360-bt.angle(e,t)}getRotationY(e){return bt.normalizeAngle(Math.atan2(e.z,e.x)*Wi)}static fromToRotation(e,t,r=null){r||=new Z;let i=I.help_matrix_2;return I.fromToRotation(e,t,i),r.fromMatrix(i),r}static getEularDir_yUp(e){let t=Z.HELP_0;return t.fromEulerAngles(0,e,0),t.transformVector(d.Z_AXIS,d.HELP_5),d.HELP_5}static transformVector(e,t,r=null){r||=new d;let i=e.rawData,a=i[0],o=i[1],n=i[2],l=i[3],h=i[4],u=i[5],c=i[6],f=i[7],g=i[8],p=i[9],A=i[10],U=i[11],x=i[12],B=i[13],S=i[14],C=i[15],_=t.x,y=t.y,b=t.z;return r.x=a*_+h*y+g*b+x,r.y=o*_+u*y+p*b+B,r.z=n*_+c*y+A*b+S,r.w=l*_+f*y+U*b+C,r}}let bi=function(s,e,t){return s*(1-t)+e*t};function Kd(s,e,t){let r=new d,i=s.x,a=s.y,o=s.z,n=s.w,l=e.x,h=e.y,u=e.z,c=e.w;return r.x=(l-i)*t+i,r.y=(h-a)*t+a,r.z=(u-o)*t+o,r.w=(c-n)*t+n,r}function qd(s,e,t){let r=new P;return r.r=(1-t)*s.r+t*e.r,r.g=(1-t)*s.g+t*e.g,r.b=(1-t)*s.b+t*e.b,r.a=(1-t)*s.a+t*e.a,r}function $d(s,e,t){return s+((e-s)*t>>8)&255}let ao=function(s,e,t){let r=t-e;return Math.floor(s/r)%2==0?s%r+e:t-s%r+e},so=function(s,e,t){let r=t-e;return s%r+e},eg=function(s,e){let t=0;for(let r in s)r==e&&t++;return t};class tg{x=0;y=0;z=0;w=0;randSeedList;constructor(){this.randSeedList=[]}reset(){this.x=Math.random()*1,this.y=Math.random()*1,this.z=Math.random()*1,this.w=Math.random()*1,this.randSeedList.length=0;for(let e=0;e<20;e++)this.randSeedList.push(Math.random()*1)}}function ct(s,e){return s instanceof d&&e instanceof d||s instanceof Z&&e instanceof Z?s.x*e.x+s.y*e.y+s.z*e.z:s.x*e.x+s.y*e.y}function oo(s,e){return new d(s.x*e.x,s.y*e.y,s.z*e.z)}function Hl(s){return Math.sqrt(s)}function no(s){return Hl(ct(s,s))}function jl(s,e){if(no(s)>d.EPSILON)return s.divide(no(s));if(s instanceof K)return new K;if(s instanceof d)return new d;if(s instanceof Z)return new Z}function Kl(s){return(s&8388607)*(1/8388607)}function Ji(s){return s.getFloat()}function at(s,e,t){let r=s.getFloat();return r=e*r+(1-r)*t,r}function rg(s,e,t){let r;if(e<t){r=t-e;let i=s.get()%r;return i+=e,i}else if(e>t){r=e-t;let i=s.get()%r;return i=e-i,i}else return e}function ns(s){let e=at(s,-1,1),t=at(s,0,2*Math.PI),r=Math.sqrt(1-e*e),i=r*Math.cos(t),a=r*Math.sin(t);return new d(i,a,e)}function ql(s){let e=at(s,0,2*Math.PI),t=Math.cos(e),r=Math.sin(e);return new K(t,r)}function ig(s){let e=new Z;return e.x=at(s,-1,1),e.y=at(s,-1,1),e.z=at(s,-1,1),e.w=at(s,-1,1),e=jl(e),ct(e,Z.identity())<0?-e:e}function ag(s){const e=2*Math.PI;let t=at(s,0,1),r=at(s,0,e),i=at(s,0,e),a=Math.sqrt(1-t),o=Math.sqrt(t),n=new Z(a*Math.sin(r),a*Math.cos(r),o*Math.sin(i),o*Math.cos(i));return ct(n,Z.identity())<0?-n:n}function sg(s,e){return new d(at(s,-e.x,e.x),at(s,-e.y,e.y),at(s,-e.z,e.z))}function $l(s){let e=ns(s);return e.scaleBy(Math.pow(Ji(s),1/3)),e}function og(s,e){return oo($l(s),e)}function ng(s,e,t){let r=ns(s),i=Math.pow(at(s,0,1),1/3);return r.scaleBy(e+(t-e)*i),r}function lg(s){let e=ql(s);return e.multiply(Math.pow(at(s,0,1),1/2),e),e}function hg(s,e,t){let r=oo(ns(s),e),i=Math.pow(at(s,t,1),1/3);return r.scaleBy(i),r}function ug(s){let e=s.getFloat(),t=s.getFloat();e+t>1&&(e=1-e,t=1-t);let r=1-e-t;return new d(e,t,r)}function cg(s){return s/360*2*Math.PI}function fg(s){return 180*s/Math.PI}function dg(s){return Math.sin(s)}function gg(s){return Math.cos(s)}let eh=4919;function pg(){return++eh}function mg(s,e,t){let r=s[e],i=s[t];s[e]=i,s[t]=r}function th(s){return Math.floor(s)}function lo(s){return th(s+.5)}function Ag(s){return s=Math.max(s,0),s=Math.min(s,1),lo(s*65535)}function Ug(s){return s=Math.max(s,0),s=Math.min(s,1),lo(s*255)}function rh(s){return Math.abs(s)==0?s:1/Math.sqrt(s)}function xg(s){let e=ho(s);return s.scaleBy(rh(e))}function Bg(s,e){return s.crossProduct(e)}function ho(s){return ct(s,s)}function vg(s){let e=new ka(s);return Ji(e)}function Cg(s,e){let t=new ka(e);s.x=Ji(t),s.y=Ji(t),s.z=Ji(t)}function Sg(s,e,t){return s<e?t:s>t?e:s}function uo(s,e){return s-Math.floor(s/e)*e}const _g=1e-6;class I{static blockBytes=64;static block=16;static allocCount=1e3;static allocOnceCount=1e3;static maxCount=50*1e4;static useCount=0;static buffer;static wasmMatrixPtr=0;static dynamicMatrixBytes;static dynamicGlobalMatrixRef;static wasm;static help_matrix_0;static help_matrix_1;static help_matrix_2;static helpMatrix;static helpMatrix2;static _getEulerMatrix;static _zero=new d(0,0,0);static _one=new d(1,1,1);static _prs=[new d,new d,new d];index=0;offset=0;rawData;_position;static allocMatrix(e){this.allocCount=e,I.dynamicMatrixBytes=pe.matrixBuffer,I.buffer=I.dynamicMatrixBytes.buffer,I.wasmMatrixPtr=pe.matrixBufferPtr,this.dynamicGlobalMatrixRef||=[],this.dynamicGlobalMatrixRef.forEach(t=>{t.offset=I.wasmMatrixPtr+t.index*I.blockBytes,t.rawData=qr(I.dynamicMatrixBytes.buffer,t.offset,16)}),I.help_matrix_0||=new I,I.help_matrix_1||=new I,I.help_matrix_2||=new I,I.helpMatrix||=new I,I.helpMatrix2||=new I,I._getEulerMatrix||=new I,I._getEulerMatrix.identity()}static fromToRotation(e,t,r){return r||=new I,r.transformDir(e,t),r}static fromArray(e){if(e.length!==16)throw new Error("Array must contain exactly 16 elements");const t=new I;for(let r=0;r<16;r++)t.rawData[r]=e[r];return t}static getAxisRotation(e,t,r,i){let a=new I,o=i*(Math.PI/180),n=Math.cos(o),l=Math.sin(o),h=1-n,u,c;return a.rawData[0]=n+e*e*h,a.rawData[5]=n+t*t*h,a.rawData[10]=n+r*r*h,u=e*t*h,c=r*l,a.rawData[1]=u+c,a.rawData[4]=u-c,u=e*r*h,c=t*l,a.rawData[8]=u+c,a.rawData[2]=u-c,u=t*r*h,c=e*l,a.rawData[9]=u-c,a.rawData[6]=u+c,a}static sanitizeEuler(e){I.makePositive(e)}static makePositive(e){let t=-1e-4,r=Math.PI*2-1e-4;e.x<t?e.x+=2*Math.PI:e.x>r&&(e.x-=2*Math.PI),e.y<t?e.y+=2*Math.PI:e.y>r&&(e.y-=2*Math.PI),e.z<t?e.z+=2*Math.PI:e.z>r&&(e.z-=2*Math.PI)}static matrixToEuler(e,t){return e.get(1,2)<.999?e.get(1,2)>-.999?(t.x=Math.asin(-e.get(1,2)),t.y=Math.atan2(e.get(0,2),e.get(2,2)),t.z=Math.atan2(e.get(1,0),e.get(1,1)),I.sanitizeEuler(t),!0):(t.x=Math.PI*.5,t.y=Math.atan2(e.get(0,1),e.get(0,0)),t.z=0,I.sanitizeEuler(t),!1):(t.x=-Math.PI*.5,t.y=Math.atan2(-e.get(0,1),e.get(0,0)),t.z=0,I.sanitizeEuler(t),!1)}static matrixMultiply(e,t,r){I.wasm.Matrix_Multiply(e.index,t.index,r.index)}static matrixAppend(e,t,r){I.wasm.Matrix_Append(e.index,t.index,r.index)}static matrixRotateY(e,t){I.wasm.Matrix_Append(e,t.index)}static matrixRotate(e,t,r){I.wasm.Matrix_Rotate(e,t,r.index)}constructor(e=!1){if(I.useCount>=I.allocCount){let t=I.allocCount+I.allocOnceCount;pe.allocMatrix(t)}this.index=I.useCount,this.offset=I.wasmMatrixPtr+this.index*I.blockBytes,I.dynamicGlobalMatrixRef[this.index]=this,I.useCount++,this.rawData=qr(I.dynamicMatrixBytes.buffer,this.offset,16),this._position=new d,this.identity()}lookAt(e,t,r=d.Y_AXIS){let i=this.rawData,a=t.subtract(e,d.HELP_0);a.length===0&&(a.z=1),a.normalize();let o=r.crossProduct(a,d.HELP_1);o.length===0&&(Math.abs(r.z)===1?a.x+=1e-4:a.z-=1e-4,a.normalize(),o=r.crossProduct(a,d.HELP_1)),o.normalize();let n=a.crossProduct(o,d.HELP_2);i[0]=o.x,i[1]=n.x,i[2]=a.x,i[3]=0,i[4]=o.y,i[5]=n.y,i[6]=a.y,i[7]=0,i[8]=o.z,i[9]=n.z,i[10]=a.z,i[11]=0,i[12]=-o.dotProduct(e),i[13]=-n.dotProduct(e),i[14]=-a.dotProduct(e),i[15]=1}static floatArray=new Float64Array(16).fill(0);multiply(e){let t=this.rawData,r=e.rawData,i=I.floatArray;i[0]=t[0]*r[0]+t[1]*r[4]+t[2]*r[8]+t[3]*r[12],i[1]=t[0]*r[1]+t[1]*r[5]+t[2]*r[9]+t[3]*r[13],i[2]=t[0]*r[2]+t[1]*r[6]+t[2]*r[10]+t[3]*r[14],i[3]=t[0]*r[3]+t[1]*r[7]+t[2]*r[11]+t[3]*r[15],i[4]=t[4]*r[0]+t[5]*r[4]+t[6]*r[8]+t[7]*r[12],i[5]=t[4]*r[1]+t[5]*r[5]+t[6]*r[9]+t[7]*r[13],i[6]=t[4]*r[2]+t[5]*r[6]+t[6]*r[10]+t[7]*r[14],i[7]=t[4]*r[3]+t[5]*r[7]+t[6]*r[11]+t[7]*r[15],i[8]=t[8]*r[0]+t[9]*r[4]+t[10]*r[8]+t[11]*r[12],i[9]=t[8]*r[1]+t[9]*r[5]+t[10]*r[9]+t[11]*r[13],i[10]=t[8]*r[2]+t[9]*r[6]+t[10]*r[10]+t[11]*r[14],i[11]=t[8]*r[3]+t[9]*r[7]+t[10]*r[11]+t[11]*r[15],i[12]=t[12]*r[0]+t[13]*r[4]+t[14]*r[8]+t[15]*r[12],i[13]=t[12]*r[1]+t[13]*r[5]+t[14]*r[9]+t[15]*r[13],i[14]=t[12]*r[2]+t[13]*r[6]+t[14]*r[10]+t[15]*r[14],i[15]=t[12]*r[3]+t[13]*r[7]+t[14]*r[11]+t[15]*r[15],t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15]}multiplyMatrices(e,t){const r=e.rawData,i=t.rawData,a=this.rawData,o=r[0],n=r[4],l=r[8],h=r[12],u=r[1],c=r[5],f=r[9],g=r[13],p=r[2],A=r[6],U=r[10],x=r[14],B=r[3],S=r[7],C=r[11],_=r[15],y=i[0],b=i[4],w=i[8],Q=i[12],E=i[1],M=i[5],z=i[9],Y=i[13],ee=i[2],oe=i[6],te=i[10],ge=i[14],Ce=i[3],J=i[7],ce=i[11],he=i[15];return a[0]=o*y+n*E+l*ee+h*Ce,a[4]=o*b+n*M+l*oe+h*J,a[8]=o*w+n*z+l*te+h*ce,a[12]=o*Q+n*Y+l*ge+h*he,a[1]=u*y+c*E+f*ee+g*Ce,a[5]=u*b+c*M+f*oe+g*J,a[9]=u*w+c*z+f*te+g*ce,a[13]=u*Q+c*Y+f*ge+g*he,a[2]=p*y+A*E+U*ee+x*Ce,a[6]=p*b+A*M+U*oe+x*J,a[10]=p*w+A*z+U*te+x*ce,a[14]=p*Q+A*Y+U*ge+x*he,a[3]=B*y+S*E+C*ee+_*Ce,a[7]=B*b+S*M+C*oe+_*J,a[11]=B*w+S*z+C*te+_*ce,a[15]=B*Q+S*Y+C*ge+_*he,this}multiplyPoint3(e,t){t||=new d;let r=this.rawData;return t.x=r[0]*e.x+r[4]*e.y+r[8]*e.z+r[12],t.y=r[1]*e.x+r[5]*e.y+r[9]*e.z+r[13],t.z=r[2]*e.x+r[6]*e.y+r[10]*e.z+r[14],t}multiplyVector4(e,t){t||=new d;let r=this.rawData,i=e.x,a=e.y,o=e.z,n=r[3]*i+r[7]*a+r[11]*o+r[15];return n=n||1,t.x=(r[0]*i+r[4]*a+r[8]*o+r[12])/n,t.y=(r[1]*i+r[5]*a+r[9]*o+r[13])/n,t.z=(r[2]*i+r[6]*a+r[10]*o+r[14])/n,t.w=1,t}transformVector4(e,t){let r=this.rawData;t||=new d;let i=e.x,a=e.y,o=e.z,n=e.w;return t.x=i*r[0]+a*r[4]+o*r[8]+n*r[12],t.y=i*r[1]+a*r[5]+o*r[9]+n*r[13],t.z=i*r[2]+a*r[6]+o*r[10]+n*r[14],t.w=i*r[3]+a*r[7]+o*r[11]+n*r[15],t}perspectiveMultiplyPoint3(e,t){let r=d.HELP_2,i,a=this.rawData;if(r.x=a[0]*e.x+a[4]*e.y+a[8]*e.z+a[12],r.y=a[1]*e.x+a[5]*e.y+a[9]*e.z+a[13],r.z=a[2]*e.x+a[6]*e.y+a[10]*e.z+a[14],i=a[3]*e.x+a[7]*e.y+a[11]*e.z+a[15],Math.abs(i)>1e-7){let o=1/i;return t.x=r.x*o,t.y=r.y*o,t.z=r.z*o,!0}else return t.x=0,t.y=0,t.z=0,!1}perspective(e,t,r,i){let a=this.rawData,o=e*it/2,n=Math.cos(o)/Math.sin(o);a[0]=-n/t,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=n,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=i/(i-r),a[11]=1,a[12]=0,a[13]=0,a[14]=-r*i/(i-r),a[15]=0}perspective3(e,t,r,i){let a=Math.tan(e*Math.PI/360)*r,o=a*t;this.frustum(-o,o,-a,a,r,i)}frustum(e,t,r,i,a,o){let n=this.rawData;n[0]=-2*a/(t-e),n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=2*a/(i-r),n[6]=0,n[7]=0,n[8]=(t+e)/(t-e),n[9]=(i+r)/(i-r),n[10]=o/(o-a),n[11]=1,n[12]=0,n[13]=0,n[14]=-o*a/(o-a),n[15]=0}ortho(e,t,r,i){let a=this.rawData;return a[0]=2/e,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=2/t,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1/(i-r),a[11]=0,a[12]=0,a[13]=0,a[14]=r/(r-i),a[15]=1,this}orthoZO(e,t,r,i,a,o){let n=this.rawData,l=1/(e-t),h=1/(r-i),u=1/(a-o);return n[0]=-2*l,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=-2*h,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=u,n[11]=0,n[12]=(e+t)*l,n[13]=(i+r)*h,n[14]=a*u,n[15]=1,this}orthoOffCenter(e,t,r,i,a,o){let n=this.rawData;n[0]=2/(t-e),n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=2/(i-r),n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=1/(o-a),n[11]=0,n[12]=(e+t)/(e-t),n[13]=(i+r)/(r-i),n[14]=a/(a-o),n[15]=1}transformDir(e,t){let r=this.rawData,i=1e-6,a=d.ZERO;t.crossProduct(e,a);let o=t.dotProduct(e);if(o>1-i)this.identity();else if(o<-1+i){let n=d.HELP_1,l=d.HELP_2,h=0,u,c,f,g,p,A,U,x,B,S,C,_,y,b,w,Q,E,M;l.x=0,l.y=e.z,l.z=-e.y,l.dotProduct(l)<i&&(l.x=-e.z,l.y=0,l.z=e.x),h=1/Math.sqrt(l.dotProduct(l)),l.x*=h,l.y*=h,l.z*=h,l.crossProduct(e,n),u=-e.x*e.x,c=-e.y*e.y,f=-e.z*e.z,g=-e.x*e.y,p=-e.x*e.z,A=-e.y*e.z,U=n.x*n.x,x=n.y*n.y,B=n.z*n.z,S=n.x*n.y,C=n.x*n.z,_=n.y*n.z,y=-l.x*l.x,b=-l.y*l.y,w=-l.z*l.z,Q=-l.x*l.y,E=-l.x*l.z,M=-l.y*l.z,r[0]=u+U+y,r[1]=g+S+Q,r[2]=p+C+E,r[4]=r[1],r[5]=c+x+b,r[6]=A+_+M,r[8]=r[2],r[9]=r[6],r[10]=f+B+w,r[3]=0,r[7]=0,r[11]=0,r[15]=1}else{let n,l,h,u,c,f=a.dotProduct(a),g=(1-o)/f;n=g*a.x,l=g*a.z,h=n*a.y,u=n*a.z,c=l*a.y,r[0]=o+n*a.x,r[1]=h-a.z,r[2]=u+a.y,r[4]=h+a.z,r[5]=o+g*a.y*a.y,r[6]=c-a.x,r[8]=u-a.y,r[9]=c+a.x,r[10]=o+l*a.z,r[3]=0,r[7]=0,r[11]=0,r[15]=1}return this}append(e){let t=this.rawData,r=t[0],i=t[4],a=t[8],o=t[12],n=t[1],l=t[5],h=t[9],u=t[13],c=t[2],f=t[6],g=t[10],p=t[14],A=t[3],U=t[7],x=t[11],B=t[15];t[0]=r*e.rawData[0]+n*e.rawData[4]+c*e.rawData[8]+A*e.rawData[12],t[1]=r*e.rawData[1]+n*e.rawData[5]+c*e.rawData[9]+A*e.rawData[13],t[2]=r*e.rawData[2]+n*e.rawData[6]+c*e.rawData[10]+A*e.rawData[14],t[3]=r*e.rawData[3]+n*e.rawData[7]+c*e.rawData[11]+A*e.rawData[15],t[4]=i*e.rawData[0]+l*e.rawData[4]+f*e.rawData[8]+U*e.rawData[12],t[5]=i*e.rawData[1]+l*e.rawData[5]+f*e.rawData[9]+U*e.rawData[13],t[6]=i*e.rawData[2]+l*e.rawData[6]+f*e.rawData[10]+U*e.rawData[14],t[7]=i*e.rawData[3]+l*e.rawData[7]+f*e.rawData[11]+U*e.rawData[15],t[8]=a*e.rawData[0]+h*e.rawData[4]+g*e.rawData[8]+x*e.rawData[12],t[9]=a*e.rawData[1]+h*e.rawData[5]+g*e.rawData[9]+x*e.rawData[13],t[10]=a*e.rawData[2]+h*e.rawData[6]+g*e.rawData[10]+x*e.rawData[14],t[11]=a*e.rawData[3]+h*e.rawData[7]+g*e.rawData[11]+x*e.rawData[15],t[12]=o*e.rawData[0]+u*e.rawData[4]+p*e.rawData[8]+B*e.rawData[12],t[13]=o*e.rawData[1]+u*e.rawData[5]+p*e.rawData[9]+B*e.rawData[13],t[14]=o*e.rawData[2]+u*e.rawData[6]+p*e.rawData[10]+B*e.rawData[14],t[15]=o*e.rawData[3]+u*e.rawData[7]+p*e.rawData[11]+B*e.rawData[15]}add(e){let t=this.rawData,r=t[0],i=t[4],a=t[8],o=t[12],n=t[1],l=t[5],h=t[9],u=t[13],c=t[2],f=t[6],g=t[10],p=t[14],A=t[3],U=t[7],x=t[11],B=t[15],S=e.rawData[0],C=e.rawData[4],_=e.rawData[8],y=e.rawData[12],b=e.rawData[1],w=e.rawData[5],Q=e.rawData[9],E=e.rawData[13],M=e.rawData[2],z=e.rawData[6],Y=e.rawData[10],ee=e.rawData[14],oe=e.rawData[3],te=e.rawData[7],ge=e.rawData[11],Ce=e.rawData[15];return t[0]=r+S,t[1]=n+b,t[2]=c+M,t[3]=A+oe,t[4]=i+C,t[5]=l+w,t[6]=f+z,t[7]=U+te,t[8]=a+_,t[9]=h+Q,t[10]=g+Y,t[11]=x+ge,t[12]=o+y,t[13]=u+E,t[14]=p+ee,t[15]=B+Ce,this}sub(e){let t=this.rawData,r=t[0],i=t[4],a=t[8],o=t[12],n=t[1],l=t[5],h=t[9],u=t[13],c=t[2],f=t[6],g=t[10],p=t[14],A=t[3],U=t[7],x=t[11],B=t[15],S=e.rawData[0],C=e.rawData[4],_=e.rawData[8],y=e.rawData[12],b=e.rawData[1],w=e.rawData[5],Q=e.rawData[9],E=e.rawData[13],M=e.rawData[2],z=e.rawData[6],Y=e.rawData[10],ee=e.rawData[14],oe=e.rawData[3],te=e.rawData[7],ge=e.rawData[11],Ce=e.rawData[15];return t[0]=r-S,t[1]=n-b,t[2]=c-M,t[3]=A-oe,t[4]=i-C,t[5]=l-w,t[6]=f-z,t[7]=U-te,t[8]=a-_,t[9]=h-Q,t[10]=g-Y,t[11]=x-ge,t[12]=o-y,t[13]=u-E,t[14]=p-ee,t[15]=B-Ce,this}mult(e){let t=this.rawData;return t[0]*=e,t[1]*=e,t[2]*=e,t[3]*=e,t[4]*=e,t[5]*=e,t[6]*=e,t[7]*=e,t[8]*=e,t[9]*=e,t[10]*=e,t[11]*=e,t[12]*=e,t[13]*=e,t[14]*=e,t[15]*=e,this}appendRotation(e,t){let r=I.getAxisRotation(t.x,t.y,t.z,e);this.append(r)}createByRotation(e,t){let r=I.helpMatrix,i,a,o=e*it;return i=Math.sin(o),a=Math.cos(o),t.x==1&&(r.rawData[0]=1,r.rawData[1]=0,r.rawData[2]=0,r.rawData[3]=0,r.rawData[4]=0,r.rawData[5]=a,r.rawData[6]=i,r.rawData[7]=0,r.rawData[8]=0,r.rawData[9]=-i,r.rawData[10]=a,r.rawData[11]=0,r.rawData[12]=0,r.rawData[13]=0,r.rawData[14]=0,r.rawData[15]=1),t.y==1&&(r.rawData[0]=a,r.rawData[1]=0,r.rawData[2]=-i,r.rawData[3]=0,r.rawData[4]=0,r.rawData[5]=1,r.rawData[6]=0,r.rawData[7]=0,r.rawData[8]=i,r.rawData[9]=0,r.rawData[10]=a,r.rawData[11]=0,r.rawData[12]=0,r.rawData[13]=0,r.rawData[14]=0,r.rawData[15]=1),t.z==1&&(r.rawData[0]=a,r.rawData[1]=i,r.rawData[2]=0,r.rawData[3]=0,r.rawData[4]=-i,r.rawData[5]=a,r.rawData[6]=0,r.rawData[7]=0,r.rawData[8]=0,r.rawData[9]=0,r.rawData[10]=1,r.rawData[11]=0,r.rawData[12]=0,r.rawData[13]=0,r.rawData[14]=0,r.rawData[15]=1),this.append(r),this}appendScale(e,t,r){I.helpMatrix.createByScale(e,t,r),this.append(I.helpMatrix)}createByScale(e,t,r){let i=this.rawData;i[0]=e,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=t,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=r,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1}appendTranslation(e,t,r){let i=this.rawData;i[12]+=e,i[13]+=t,i[14]+=r}clone(){let e=new I;return e.copyFrom(this),e}copyRowFrom(e,t){let r=this.rawData;switch(e){case 0:r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=t.w;break;case 1:r[4]=t.x,r[5]=t.y,r[6]=t.z,r[7]=t.w;break;case 2:r[8]=t.x,r[9]=t.y,r[10]=t.z,r[11]=t.w;break;case 3:r[12]=t.x,r[13]=t.y,r[14]=t.z,r[15]=t.w;break}}copyRowTo(e,t){let r=this.rawData;switch(e){case 0:t.x=r[0],t.y=r[1],t.z=r[2],t.w=r[3];break;case 1:t.x=r[4],t.y=r[5],t.z=r[6],t.w=r[7];break;case 2:t.x=r[8],t.y=r[9],t.z=r[10],t.w=r[11];break;case 3:t.x=r[12],t.y=r[13],t.z=r[14],t.w=r[15];break}}copyFrom(e){let t=this.rawData;return t[0]=e.rawData[0],t[1]=e.rawData[1],t[2]=e.rawData[2],t[3]=e.rawData[3],t[4]=e.rawData[4],t[5]=e.rawData[5],t[6]=e.rawData[6],t[7]=e.rawData[7],t[8]=e.rawData[8],t[9]=e.rawData[9],t[10]=e.rawData[10],t[11]=e.rawData[11],t[12]=e.rawData[12],t[13]=e.rawData[13],t[14]=e.rawData[14],t[15]=e.rawData[15],this}copyRawDataTo(e,t=0,r=!1){let i=this.rawData;e[0+t]=i[0],e[1+t]=i[1],e[2+t]=i[2],e[3+t]=i[3],e[4+t]=i[4],e[5+t]=i[5],e[6+t]=i[6],e[7+t]=i[7],e[8+t]=i[8],e[9+t]=i[9],e[10+t]=i[10],e[11+t]=i[11],e[12+t]=i[12],e[13+t]=i[13],e[14+t]=i[14],e[15+t]=i[15]}copyColFrom(e,t){let r=this.rawData;switch(e){case 0:r[0]=t.x,r[4]=t.y,r[8]=t.z,r[12]=t.w;break;case 1:r[1]=t.x,r[5]=t.y,r[9]=t.z,r[13]=t.w;break;case 2:r[2]=t.x,r[6]=t.y,r[10]=t.z,r[14]=t.w;break;case 3:r[3]=t.x,r[7]=t.y,r[11]=t.z,r[15]=t.w;break}}copyColTo(e,t){let r=this.rawData;switch(e){case 0:t.x=r[0],t.y=r[4],t.z=r[8],t.w=r[12];break;case 1:t.x=r[1],t.y=r[5],t.z=r[9],t.w=r[13];break;case 2:t.x=r[2],t.y=r[6],t.z=r[10],t.w=r[14];break;case 3:t.x=r[3],t.y=r[7],t.z=r[11],t.w=r[15];break}}copyToMatrix3D(e){e.rawData=this.rawData.slice(0)}makeRotationFromQuaternion(e){return this.compose(I._zero,e,I._one),this}static decomposeRawData=new Float64Array(16).fill(0);decompose(e="eulerAngles",t){let r=Z.CALCULATION_QUATERNION,i=t||I._prs;this.copyRawDataTo(I.decomposeRawData);let a=I.decomposeRawData,o=i[0];o.x=a[12],o.y=a[13],o.z=a[14],a[12]=0,a[13]=0,a[14]=0;let n=i[2];n.x=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),n.y=Math.sqrt(a[4]*a[4]+a[5]*a[5]+a[6]*a[6]),n.z=Math.sqrt(a[8]*a[8]+a[9]*a[9]+a[10]*a[10]),a[0]*(a[5]*a[10]-a[6]*a[9])-a[1]*(a[4]*a[10]-a[6]*a[8])+a[2]*(a[4]*a[9]-a[5]*a[8])<0&&(n.z=-n.z),a[0]/=n.x,a[1]/=n.x,a[2]/=n.x,a[4]/=n.y,a[5]/=n.y,a[6]/=n.y,a[8]/=n.z,a[9]/=n.z,a[10]/=n.z;let l=i[1],h;switch(e){case ir.AXIS_ANGLE:l.w=Math.acos((a[0]+a[5]+a[10]-1)/2);let u=Math.sqrt((a[6]-a[9])*(a[6]-a[9])+(a[8]-a[2])*(a[8]-a[2])+(a[1]-a[4])*(a[1]-a[4]));l.x=(a[6]-a[9])/u,l.y=(a[8]-a[2])/u,l.z=(a[1]-a[4])/u;break;case ir.QUATERNION:h=a[0]+a[5]+a[10],h>0?(l.w=Math.sqrt(1+h)/2,l.x=(a[6]-a[9])/(4*l.w),l.y=(a[8]-a[2])/(4*l.w),l.z=(a[1]-a[4])/(4*l.w)):a[0]>a[5]&&a[0]>a[10]?(l.x=Math.sqrt(1+a[0]-a[5]-a[10])/2,l.w=(a[6]-a[9])/(4*l.x),l.y=(a[1]+a[4])/(4*l.x),l.z=(a[8]+a[2])/(4*l.x)):a[5]>a[10]?(l.y=Math.sqrt(1+a[5]-a[0]-a[10])/2,l.x=(a[1]+a[4])/(4*l.y),l.w=(a[8]-a[2])/(4*l.y),l.z=(a[6]+a[9])/(4*l.y)):(l.z=Math.sqrt(1+a[10]-a[0]-a[5])/2,l.x=(a[8]+a[2])/(4*l.z),l.y=(a[6]+a[9])/(4*l.z),l.w=(a[1]-a[4])/(4*l.z));break;case ir.EULER_ANGLES:h=a[0]+a[5]+a[10],h>0?(r.w=Math.sqrt(1+h)/2,r.x=(a[6]-a[9])/(4*r.w),r.y=(a[8]-a[2])/(4*r.w),r.z=(a[1]-a[4])/(4*r.w)):a[0]>a[5]&&a[0]>a[10]?(r.x=Math.sqrt(1+a[0]-a[5]-a[10])/2,r.w=(a[6]-a[9])/(4*r.x),r.y=(a[1]+a[4])/(4*r.x),r.z=(a[8]+a[2])/(4*r.x)):a[5]>a[10]?(l.y=Math.sqrt(1+a[5]-a[0]-a[10])/2,r.x=(a[1]+a[4])/(4*r.y),r.w=(a[8]-a[2])/(4*r.y),r.z=(a[6]+a[9])/(4*r.y)):(r.z=Math.sqrt(1+a[10]-a[0]-a[5])/2,r.x=(a[8]+a[2])/(4*r.z),r.y=(a[6]+a[9])/(4*r.z),r.w=(a[1]-a[4])/(4*r.z)),r.getEulerAngles(l);break}return i[0]=o,i[1]=l,i[2]=n,i}static getEuler(e,t,r=!0,i){return e||=new d,I._getEulerMatrix.makeRotationFromQuaternion(t).makeEuler(e,r,i),e}compose(e,t,r){const i=this.rawData,a=t.x,o=t.y,n=t.z,l=t.w,h=a+a,u=o+o,c=n+n,f=a*h,g=a*u,p=a*c,A=o*u,U=o*c,x=n*c,B=l*h,S=l*u,C=l*c,_=r.x,y=r.y,b=r.z;return i[0]=(1-(A+x))*_,i[1]=(g+C)*_,i[2]=(p-S)*_,i[3]=0,i[4]=(g-C)*y,i[5]=(1-(f+x))*y,i[6]=(U+B)*y,i[7]=0,i[8]=(p+S)*b,i[9]=(U-B)*b,i[10]=(1-(f+A))*b,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}deltaTransformVector(e,t){t||=new d;let r=this.rawData,i=e.x,a=e.y,o=e.z;return t.x=i*r[0]+a*r[4]+o*r[8],t.y=i*r[1]+a*r[5]+o*r[9],t.z=i*r[2]+a*r[6]+o*r[10],t.w=i*r[3]+a*r[7]+o*r[11],t}identity(){let e=this.rawData;return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}fill(e){let t=this.rawData;t[1]=e,t[2]=e,t[3]=e,t[4]=e,t[6]=e,t[7]=e,t[8]=e,t[9]=e,t[11]=e,t[12]=e,t[13]=e,t[14]=e,t[0]=e,t[5]=e,t[10]=e,t[15]=e}invers33(){let e=this.rawData,t=e[5]*e[10]-e[9]*e[6],r=e[8]*e[6]-e[4]*e[10],i=e[4]*e[9]-e[8]*e[5],a=e[9]*e[2]-e[1]*e[10],o=e[0]*e[10]-e[8]*e[2],n=e[8]*e[1]-e[0]*e[9],l=e[1]*e[6]-e[5]*e[2],h=e[4]*e[2]-e[0]*e[6],u=e[0]*e[5]-e[4]*e[1],c=e[0]*t+e[4]*a+e[8]*l;if(Math.abs(c)>1e-11){let f=1/c;e[0]=f*t,e[4]=f*r,e[8]=f*i,e[1]=f*a,e[5]=f*o,e[9]=f*n,e[2]=f*l,e[6]=f*h,e[10]=f*u}}invert(){let e=this.determinant,t=Math.abs(e)>1e-11,r=this.rawData;if(t){e=1/e;let i=r[0],a=r[4],o=r[8],n=r[12],l=r[1],h=r[5],u=r[9],c=r[13],f=r[2],g=r[6],p=r[10],A=r[14],U=r[3],x=r[7],B=r[11],S=r[15];r[0]=e*(h*(p*S-A*B)-u*(g*S-A*x)+c*(g*B-p*x)),r[1]=-e*(l*(p*S-A*B)-u*(f*S-A*U)+c*(f*B-p*U)),r[2]=e*(l*(g*S-A*x)-h*(f*S-A*U)+c*(f*x-g*U)),r[3]=-e*(l*(g*B-p*x)-h*(f*B-p*U)+u*(f*x-g*U)),r[4]=-e*(a*(p*S-A*B)-o*(g*S-A*x)+n*(g*B-p*x)),r[5]=e*(i*(p*S-A*B)-o*(f*S-A*U)+n*(f*B-p*U)),r[6]=-e*(i*(g*S-A*x)-a*(f*S-A*U)+n*(f*x-g*U)),r[7]=e*(i*(g*B-p*x)-a*(f*B-p*U)+o*(f*x-g*U)),r[8]=e*(a*(u*S-c*B)-o*(h*S-c*x)+n*(h*B-u*x)),r[9]=-e*(i*(u*S-c*B)-o*(l*S-c*U)+n*(l*B-u*U)),r[10]=e*(i*(h*S-c*x)-a*(l*S-c*U)+n*(l*x-h*U)),r[11]=-e*(i*(h*B-u*x)-a*(l*B-u*U)+o*(l*x-h*U)),r[12]=-e*(a*(u*A-c*p)-o*(h*A-c*g)+n*(h*p-u*g)),r[13]=e*(i*(u*A-c*p)-o*(l*A-c*f)+n*(l*p-u*f)),r[14]=-e*(i*(h*A-c*g)-a*(l*A-c*f)+n*(l*g-h*f)),r[15]=e*(i*(h*p-u*g)-a*(l*p-u*f)+o*(l*g-h*f))}return t}transformPoint(e,t){let r=this.rawData;t||=new d;let i=e.x,a=e.y,o=e.z;return t.x=i*r[0]+a*r[4]+o*r[8]+r[12],t.y=i*r[1]+a*r[5]+o*r[9]+r[13],t.z=i*r[2]+a*r[6]+o*r[10]+r[14],t}transformVector(e,t){let r=this.rawData;t||=new d;let i=e.x,a=e.y,o=e.z;return t.x=i*r[0]+a*r[4]+o*r[8],t.y=i*r[1]+a*r[5]+o*r[9],t.z=i*r[2]+a*r[6]+o*r[10],t}transpose(){let e=this.rawData;for(let t=0;t<I.helpMatrix.rawData.length;t++)I.helpMatrix.rawData[t]=e[t];e[1]=I.helpMatrix.rawData[4],e[2]=I.helpMatrix.rawData[8],e[3]=I.helpMatrix.rawData[12],e[4]=I.helpMatrix.rawData[1],e[6]=I.helpMatrix.rawData[9],e[7]=I.helpMatrix.rawData[13],e[8]=I.helpMatrix.rawData[2],e[9]=I.helpMatrix.rawData[6],e[11]=I.helpMatrix.rawData[14],e[12]=I.helpMatrix.rawData[3],e[13]=I.helpMatrix.rawData[7],e[14]=I.helpMatrix.rawData[11]}get determinant(){let e=this.rawData;return(e[0]*e[5]-e[4]*e[1])*(e[10]*e[15]-e[14]*e[11])-(e[0]*e[9]-e[8]*e[1])*(e[6]*e[15]-e[14]*e[7])+(e[0]*e[13]-e[12]*e[1])*(e[6]*e[11]-e[10]*e[7])+(e[4]*e[9]-e[8]*e[5])*(e[2]*e[15]-e[14]*e[3])-(e[4]*e[13]-e[12]*e[5])*(e[2]*e[11]-e[10]*e[3])+(e[8]*e[13]-e[12]*e[9])*(e[2]*e[7]-e[6]*e[3])}getPosition(e){e||=new d;let t=this.rawData;return e.x=t[12],e.y=t[13],e.z=t[14],e}get position(){return this._position.set(this.rawData[12],this.rawData[13],this.rawData[14]),this._position}set position(e){let t=this.rawData;t[12]=e.x,t[13]=e.y,t[14]=e.z}get scale(){let e=this.rawData;return new d(e[0],e[5],e[10])}set scale(e){let t=this.rawData;t[0]=e.x,t[5]=e.y,t[10]=e.z}toString(){let e=this.rawData;return"matrix3d("+Math.round(e[0]*1e3)/1e3+","+Math.round(e[1]*1e3)/1e3+","+Math.round(e[2]*1e3)/1e3+","+Math.round(e[3]*1e3)/1e3+","+Math.round(e[4]*1e3)/1e3+","+Math.round(e[5]*1e3)/1e3+","+Math.round(e[6]*1e3)/1e3+","+Math.round(e[7]*1e3)/1e3+","+Math.round(e[8]*1e3)/1e3+","+Math.round(e[9]*1e3)/1e3+","+Math.round(e[10]*1e3)/1e3+","+Math.round(e[11]*1e3)/1e3+","+Math.round(e[12]*1e3)/1e3+","+Math.round(e[13]*1e3)/1e3+","+Math.round(e[14]*1e3)/1e3+","+Math.round(e[15]*1e3)/1e3+")"}lerp(e,t,r){this.copyFrom(t).sub(e).mult(r).add(e)}get(e,t){return this.rawData[e+t*4]}set(e,t,r){this.rawData[e+t*4]=r}getMaxScaleOnAxis(){let e=this.rawData,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],r=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],i=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,r,i))}translate(e){let t=this.get(0,0)*e.x+this.get(0,1)*e.y+this.get(0,2)*e.z+this.get(0,3),r=this.get(1,0)*e.x+this.get(1,1)*e.y+this.get(1,2)*e.z+this.get(1,3),i=this.get(2,0)*e.x+this.get(2,1)*e.y+this.get(2,2)*e.z+this.get(2,3),a=this.get(3,0)*e.x+this.get(3,1)*e.y+this.get(3,2)*e.z+this.get(3,3);return this.set(0,3,t),this.set(1,3,r),this.set(2,3,i),this.set(3,3,a),this}setTRInverse(e,t){t=t.inverse(),Z.quaternionToMatrix(t,this),this.translate(new d(-e.x,-e.y,-e.z))}setScale(e){return this.set(0,0,e.x),this.set(0,1,0),this.set(0,2,0),this.set(0,3,0),this.set(1,0,0),this.set(1,1,e.y),this.set(1,2,0),this.set(1,3,0),this.set(2,0,0),this.set(2,1,0),this.set(2,2,e.z),this.set(2,3,0),this.set(3,0,0),this.set(3,1,0),this.set(3,2,0),this.set(3,3,1),this}makeBasis(e,t,r){return this.setElements(e.x,t.x,r.x,0,e.y,t.y,r.y,0,e.z,t.z,r.z,0,0,0,0,1),this}makeRotationAxis(e,t){const r=Math.cos(t),i=Math.sin(t),a=1-r,o=e.x,n=e.y,l=e.z,h=a*o,u=a*n;return this.setElements(h*o+r,h*n-i*l,h*l+i*n,0,h*n+i*l,u*n+r,u*l-i*o,0,h*l-i*n,u*l+i*o,a*l*l+r,0,0,0,0,1),this}static transpose(e,t){t||=new I;let r=e.rawData,i=t.rawData;return i[0]=r[0],i[1]=r[4],i[2]=r[8],i[3]=r[12],i[4]=r[1],i[5]=r[5],i[6]=r[9],i[7]=r[13],i[8]=r[2],i[9]=r[6],i[10]=r[10],i[11]=r[14],i[12]=r[3],i[13]=r[7],i[14]=r[11],i[15]=r[15],t}static inverse(e,t){t||=new I;let r=e.rawData,i=t.rawData;i[0]=r[5]*r[10]*r[15]-r[5]*r[14]*r[11]-r[6]*r[9]*r[15]+r[6]*r[13]*r[11]+r[7]*r[9]*r[14]-r[7]*r[13]*r[10],i[1]=-r[1]*r[10]*r[15]+r[1]*r[14]*r[11]+r[2]*r[9]*r[15]-r[2]*r[13]*r[11]-r[3]*r[9]*r[14]+r[3]*r[13]*r[10],i[2]=r[1]*r[6]*r[15]-r[1]*r[14]*r[7]-r[2]*r[5]*r[15]+r[2]*r[13]*r[7]+r[3]*r[5]*r[14]-r[3]*r[13]*r[6],i[3]=-r[1]*r[6]*r[11]+r[1]*r[10]*r[7]+r[2]*r[5]*r[11]-r[2]*r[9]*r[7]-r[3]*r[5]*r[10]+r[3]*r[9]*r[6],i[4]=-r[4]*r[10]*r[15]+r[4]*r[14]*r[11]+r[6]*r[8]*r[15]-r[6]*r[12]*r[11]-r[7]*r[8]*r[14]+r[7]*r[12]*r[10],i[5]=r[0]*r[10]*r[15]-r[0]*r[14]*r[11]-r[2]*r[8]*r[15]+r[2]*r[12]*r[11]+r[3]*r[8]*r[14]-r[3]*r[12]*r[10],i[6]=-r[0]*r[6]*r[15]+r[0]*r[14]*r[7]+r[2]*r[4]*r[15]-r[2]*r[12]*r[7]-r[3]*r[4]*r[14]+r[3]*r[12]*r[6],i[7]=r[0]*r[6]*r[11]-r[0]*r[10]*r[7]-r[2]*r[4]*r[11]+r[2]*r[8]*r[7]+r[3]*r[4]*r[10]-r[3]*r[8]*r[6],i[8]=r[4]*r[9]*r[15]-r[4]*r[13]*r[11]-r[5]*r[8]*r[15]+r[5]*r[12]*r[11]+r[7]*r[8]*r[13]-r[7]*r[12]*r[9],i[9]=-r[0]*r[9]*r[15]+r[0]*r[13]*r[11]+r[1]*r[8]*r[15]-r[1]*r[12]*r[11]-r[3]*r[8]*r[13]+r[3]*r[12]*r[9],i[10]=r[0]*r[5]*r[15]-r[0]*r[13]*r[7]-r[1]*r[4]*r[15]+r[1]*r[12]*r[7]+r[3]*r[4]*r[13]-r[3]*r[12]*r[5],i[11]=-r[0]*r[5]*r[11]+r[0]*r[9]*r[7]+r[1]*r[4]*r[11]-r[1]*r[8]*r[7]-r[3]*r[4]*r[9]+r[3]*r[8]*r[5],i[12]=-r[4]*r[9]*r[14]+r[4]*r[13]*r[10]+r[5]*r[8]*r[14]-r[5]*r[12]*r[10]-r[6]*r[8]*r[13]+r[6]*r[12]*r[9],i[13]=r[0]*r[9]*r[14]-r[0]*r[13]*r[10]-r[1]*r[8]*r[14]+r[1]*r[12]*r[10]+r[2]*r[8]*r[13]-r[2]*r[12]*r[9],i[14]=-r[0]*r[5]*r[14]+r[0]*r[13]*r[6]+r[1]*r[4]*r[14]-r[1]*r[12]*r[6]-r[2]*r[4]*r[13]+r[2]*r[12]*r[5],i[15]=r[0]*r[5]*r[10]-r[0]*r[9]*r[6]-r[1]*r[4]*r[10]+r[1]*r[8]*r[6]+r[2]*r[4]*r[9]-r[2]*r[8]*r[5];let a=r[0]*i[0]+r[1]*i[4]+r[2]*i[8]+r[3]*i[12];for(let o=0;o<16;o++)i[o]/=a;return t}makeEuler(e,t,r="XYZ"){const i=this.rawData,a=i[0],o=i[4],n=i[8],l=i[1],h=i[5],u=i[9],c=i[2],f=i[6],g=i[10];switch(r){case"XYZ":e.y=Math.asin(ie(n,-1,1)),Math.abs(n)<.9999999?(e.x=Math.atan2(-u,g),e.z=Math.atan2(-o,a)):(e.x=Math.atan2(f,h),e.z=0);break;case"YXZ":e.x=Math.asin(-ie(u,-1,1)),Math.abs(u)<.9999999?(e.y=Math.atan2(n,g),e.z=Math.atan2(l,h)):(e.y=Math.atan2(-c,a),e.z=0);break;case"ZXY":e.x=Math.asin(ie(f,-1,1)),Math.abs(f)<.9999999?(e.y=Math.atan2(-c,g),e.z=Math.atan2(-o,h)):(e.y=0,e.z=Math.atan2(l,a));break;case"ZYX":e.y=Math.asin(-ie(c,-1,1)),Math.abs(c)<.9999999?(e.x=Math.atan2(f,g),e.z=Math.atan2(l,a)):(e.x=0,e.z=Math.atan2(-o,h));break;case"YZX":e.z=Math.asin(ie(l,-1,1)),Math.abs(l)<.9999999?(e.x=Math.atan2(-u,h),e.y=Math.atan2(-c,a)):(e.x=0,e.y=Math.atan2(n,g));break;case"XZY":e.z=Math.asin(-ie(o,-1,1)),Math.abs(o)<.9999999?(e.x=Math.atan2(f,h),e.y=Math.atan2(n,a)):(e.x=Math.atan2(-u,g),e.y=0);break}return t&&e.multiplyScalar(Wi),e}setElements(e,t,r,i,a,o,n,l,h,u,c,f,g,p,A,U){const x=this.rawData;return x[0]=e,x[4]=t,x[8]=r,x[12]=i,x[1]=a,x[5]=o,x[9]=n,x[13]=l,x[2]=h,x[6]=u,x[10]=c,x[14]=f,x[3]=g,x[7]=p,x[11]=A,x[15]=U,this}makeMatrix44ByQuaternion(e,t,r){this.identity(),Z.quaternionToMatrix(r,this),this.appendTranslation(e.x,e.y,e.z),this.appendScale(t.x,t.y,t.z)}}function ih(s,e,t){for(let r=0;r<4;r++)t.rawData[r]=s.rawData[r]*e.rawData[0]+s.rawData[r+4]*e.rawData[1]+s.rawData[r+8]*e.rawData[2]+s.rawData[r+12]*e.rawData[3],t.rawData[r+4]=s.rawData[r]*e.rawData[4]+s.rawData[r+4]*e.rawData[5]+s.rawData[r+8]*e.rawData[6]+s.rawData[r+12]*e.rawData[7],t.rawData[r+8]=s.rawData[r]*e.rawData[8]+s.rawData[r+4]*e.rawData[9]+s.rawData[r+8]*e.rawData[10]+s.rawData[r+12]*e.rawData[11],t.rawData[r+12]=s.rawData[r]*e.rawData[12]+s.rawData[r+4]*e.rawData[13]+s.rawData[r+8]*e.rawData[14]+s.rawData[r+12]*e.rawData[15]}function ls(s,e,t,r){let i=r.rawData,a=s.x*it,o=s.y*it,n=s.z*it,l=0,h=a*.5,u=o*.5,c=n*.5,f=Math.cos(h),g=Math.sin(h),p=Math.cos(u),A=Math.sin(u),U=Math.cos(c),x=Math.sin(c);l=f*p*U+g*A*x,a=g*p*U-f*A*x,o=f*A*U+g*p*x,n=f*p*x-g*A*U;let B=a+a,S=o+o,C=n+n,_=a*B,y=a*S,b=a*C,w=o*S,Q=o*C,E=n*C,M=l*B,z=l*S,Y=l*C,ee=t.x,oe=t.y,te=t.z;i[0]=(1-(w+E))*ee,i[1]=(y+Y)*ee,i[2]=(b-z)*ee,i[3]=0,i[4]=(y-Y)*oe,i[5]=(1-(_+E))*oe,i[6]=(Q+M)*oe,i[7]=0,i[8]=(b+z)*te,i[9]=(Q-M)*te,i[10]=(1-(_+w))*te,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1}function ah(s,e,t){let r=s.rawData,i=t.rawData,a=r[0],o=r[4],n=r[8],l=r[12],h=r[1],u=r[5],c=r[9],f=r[13],g=r[2],p=r[6],A=r[10],U=r[14],x=r[3],B=r[7],S=r[11],C=r[15];i[0]=a*e.rawData[0]+h*e.rawData[4]+g*e.rawData[8]+x*e.rawData[12],i[1]=a*e.rawData[1]+h*e.rawData[5]+g*e.rawData[9]+x*e.rawData[13],i[2]=a*e.rawData[2]+h*e.rawData[6]+g*e.rawData[10]+x*e.rawData[14],i[3]=a*e.rawData[3]+h*e.rawData[7]+g*e.rawData[11]+x*e.rawData[15],i[4]=o*e.rawData[0]+u*e.rawData[4]+p*e.rawData[8]+B*e.rawData[12],i[5]=o*e.rawData[1]+u*e.rawData[5]+p*e.rawData[9]+B*e.rawData[13],i[6]=o*e.rawData[2]+u*e.rawData[6]+p*e.rawData[10]+B*e.rawData[14],i[7]=o*e.rawData[3]+u*e.rawData[7]+p*e.rawData[11]+B*e.rawData[15],i[8]=n*e.rawData[0]+c*e.rawData[4]+A*e.rawData[8]+S*e.rawData[12],i[9]=n*e.rawData[1]+c*e.rawData[5]+A*e.rawData[9]+S*e.rawData[13],i[10]=n*e.rawData[2]+c*e.rawData[6]+A*e.rawData[10]+S*e.rawData[14],i[11]=n*e.rawData[3]+c*e.rawData[7]+A*e.rawData[11]+S*e.rawData[15],i[12]=l*e.rawData[0]+f*e.rawData[4]+U*e.rawData[8]+C*e.rawData[12],i[13]=l*e.rawData[1]+f*e.rawData[5]+U*e.rawData[9]+C*e.rawData[13],i[14]=l*e.rawData[2]+f*e.rawData[6]+U*e.rawData[10]+C*e.rawData[14],i[15]=l*e.rawData[3]+f*e.rawData[7]+U*e.rawData[11]+C*e.rawData[15]}function Fg(s,e){let t=e.x,r=e.y,i=e.z,a=e.w,o=s.rawData,n=2*t*r,l=2*t*i,h=2*t*a,u=2*r*i,c=2*r*a,f=2*i*a,g=t*t,p=r*r,A=i*i,U=a*a;return o[0]=g-p-A+U,o[4]=n-f,o[8]=l+c,o[12]=0,o[1]=n+f,o[5]=-g+p-A+U,o[9]=u-h,o[13]=0,o[2]=l-c,o[6]=u+h,o[10]=-g-p+A+U,o[14]=0,o[3]=0,o[7]=0,o[11]=0,o[15]=1,s}function yg(s,e){let t=e.rawData,r=Math.sin(s),i=Math.cos(s);return t[0]=i,t[1]=0,t[2]=-r,t[3]=0,t[8]=r,t[9]=0,t[10]=i,t[11]=0,t}function bg(s,e,t){let r=e.x,i=e.y,a=e.z,o=Math.hypot(r,i,a),n,l,h,u,c,f,g,p,A,U,x,B;if(o<_g)return null;o=1/o,r*=o,i*=o,a*=o,n=Math.sin(s),l=Math.cos(s),h=1-l,u=r*r*h+l,c=i*r*h+a*n,f=a*r*h-i*n,g=r*i*h-a*n,p=i*i*h+l,A=a*i*h+r*n,U=r*a*h+i*n,x=i*a*h-r*n,B=a*a*h+l;let S=t.rawData;return S[0]=u,S[1]=c,S[2]=f,S[3]=0,S[4]=g,S[5]=p,S[6]=A,S[7]=0,S[8]=U,S[9]=x,S[10]=B,S[11]=0,S[12]=0,S[13]=0,S[14]=0,S[15]=1,S}function co(s,e,t){let r=s.rawData,i=r[0],a=r[1],o=r[2],n=r[3],l=r[4],h=r[5],u=r[6],c=r[7],f=r[8],g=r[9],p=r[10],A=r[11],U=r[12],x=r[13],B=r[14],S=r[15],C=e.rawData,_=t.rawData,y=C[0],b=C[1],w=C[2],Q=C[3];return _[0]=y*i+b*l+w*f+Q*U,_[1]=y*a+b*h+w*g+Q*x,_[2]=y*o+b*u+w*p+Q*B,_[3]=y*n+b*c+w*A+Q*S,y=C[4],b=C[5],w=C[6],Q=C[7],_[4]=y*i+b*l+w*f+Q*U,_[5]=y*a+b*h+w*g+Q*x,_[6]=y*o+b*u+w*p+Q*B,_[7]=y*n+b*c+w*A+Q*S,y=C[8],b=C[9],w=C[10],Q=C[11],_[8]=y*i+b*l+w*f+Q*U,_[9]=y*a+b*h+w*g+Q*x,_[10]=y*o+b*u+w*p+Q*B,_[11]=y*n+b*c+w*A+Q*S,y=C[12],b=C[13],w=C[14],Q=C[15],_[12]=y*i+b*l+w*f+Q*U,_[13]=y*a+b*h+w*g+Q*x,_[14]=y*o+b*u+w*p+Q*B,_[15]=y*n+b*c+w*A+Q*S,_}var Xe=(s=>(s[s.None=0]="None",s[s.PointLight=1]="PointLight",s[s.DirectionLight=2]="DirectionLight",s[s.SpotLight=3]="SpotLight",s[s.SkyLight=4]="SkyLight",s))(Xe||{});class hs extends la{static lightSize=24;index=-1;lightType=-1;radius=.001;linear=8;lightPosition=new d;lightMatrixIndex=-1;direction=new d;quadratic=.032;lightColor=new P(1,1,1,1);intensity=1;innerAngle=0;outerAngle=1;range=100;castShadowIndex=-1;lightTangent=d.FORWARD;iesIndex=-1}class Se{static componentsUpdateList;static componentsLateUpdateList;static componentsBeforeUpdateList;static componentsComputeList;static componentsEnablePickerList;static graphicComponent;static waitStartComponent;static _init=!1;static init(){this._init||(this._init=!0,this.componentsUpdateList=new Map,this.componentsLateUpdateList=new Map,this.componentsBeforeUpdateList=new Map,this.componentsComputeList=new Map,this.componentsEnablePickerList=new Map,this.graphicComponent=new Map,this.waitStartComponent=new Map)}static bindUpdate(e,t,r){this.init();let i=this.componentsUpdateList.get(e);i||(i=new Map,this.componentsUpdateList.set(e,i)),i.set(t,r)}static unBindUpdate(e,t){this.init();let r=this.componentsUpdateList.get(e);r&&r.delete(t)}static bindLateUpdate(e,t,r){this.init();let i=this.componentsLateUpdateList.get(e);i||(i=new Map,this.componentsLateUpdateList.set(e,i)),i.set(t,r)}static unBindLateUpdate(e,t){this.init();let r=this.componentsLateUpdateList.get(e);r&&r.delete(t)}static bindBeforeUpdate(e,t,r){this.init();let i=this.componentsBeforeUpdateList.get(e);i||(i=new Map,this.componentsBeforeUpdateList.set(e,i)),i.set(t,r)}static unBindBeforeUpdate(e,t){this.init();let r=this.componentsBeforeUpdateList.get(e);r&&r.delete(t)}static bindCompute(e,t,r){this.init();let i=this.componentsComputeList.get(e);i||(i=new Map,this.componentsComputeList.set(e,i)),i.set(t,r)}static unBindCompute(e,t){this.init();let r=this.componentsComputeList.get(e);r&&r.delete(t)}static bindGraphic(e,t,r){this.init();let i=this.graphicComponent.get(e);i||(i=new Map,this.graphicComponent.set(e,i)),i.set(t,r)}static unBindGraphic(e,t){this.init();let r=this.graphicComponent.get(e);r&&r.delete(t)}static appendWaitStart(e){this.init();let t=this.waitStartComponent.get(e.object3D);t?t.indexOf(e)==-1&&t.push(e):this.waitStartComponent.set(e.object3D,[e])}static removeWaitStart(e,t){this.init();let r=Se.waitStartComponent.get(e);if(r){let i=r.indexOf(t);i!=-1&&r.splice(i)}}static bindEnablePick(e,t,r){this.init();let i=this.componentsEnablePickerList.get(e);i||(i=new Map,this.componentsEnablePickerList.set(e,i)),i.set(t,r)}static unBindEnablePick(e,t){this.init();let r=this.componentsEnablePickerList.get(e);r&&r.delete(t)}}class Pe{object3D=null;_eventDispatcher;get eventDispatcher(){return this._eventDispatcher||=new Er,this._eventDispatcher}set eventDispatcher(e){console.error("The eventDispatcher should not be set externally!")}_enable=!0;__isStart=!1;isDestroyed=!1;get isStart(){return this.__isStart}get transform(){return this.object3D.transform}set enable(e){this._enable!=e&&(this._enable=e,this._enable?this.onEnable?.(this.transform.view3D):this.onDisable?.(this.transform.view3D))}get enable(){return this._enable}__init(e){this.init(e)}__start(){this.transform&&this.transform.scene3D&&this._enable&&this.onEnable?.(this.transform.view3D),this.transform&&this.transform.scene3D&&this.__isStart==!1&&(this.start?.(),this.__isStart=!0),this.onUpdate&&this._onUpdate(this.onUpdate.bind(this)),this.onLateUpdate&&this._onLateUpdate(this.onLateUpdate.bind(this)),this.onBeforeUpdate&&this._onBeforeUpdate(this.onBeforeUpdate.bind(this)),this.onCompute&&this._onCompute(this.onCompute.bind(this)),this.onGraphic&&this._onGraphic(this.onGraphic.bind(this))}__stop(){this.transform&&this.transform.scene3D&&this.onDisable?.(this.transform.view3D),this._onUpdate(null),this._onLateUpdate(null),this._onBeforeUpdate(null),this._onCompute(null),this._onGraphic(null)}init(e){}start(){}stop(){}cloneTo(e){}copyComponent(e){return this}_onUpdate(e){e!=null?Se.bindUpdate(this.transform.view3D,this,e):Se.unBindUpdate(this.transform.view3D,this)}_onLateUpdate(e){e!=null?Se.bindLateUpdate(this.transform.view3D,this,e):Se.unBindLateUpdate(this.transform.view3D,this)}_onBeforeUpdate(e){e!=null?Se.bindBeforeUpdate(this.transform.view3D,this,e):Se.unBindBeforeUpdate(this.transform.view3D,this)}_onCompute(e){e!=null?Se.bindCompute(this.transform.view3D,this,e):Se.unBindCompute(this.transform.view3D,this)}_onGraphic(e){e!=null?Se.bindGraphic(this.transform.view3D,this,e):Se.unBindGraphic(this.transform.view3D,this)}beforeDestroy(e){Se.removeWaitStart(this.object3D,this)}destroy(e){this.isDestroyed||(this.isDestroyed=!0,this.enable=!1,this.stop(),this._onBeforeUpdate(null),this._onUpdate(null),this._onLateUpdate(null),this.onEnable=null,this.onDisable=null,this.onUpdate=null,this.onLateUpdate=null,this.onBeforeUpdate=null,this.onCompute=null,this.onGraphic=null)}}class us{value=0;inv_base=0;static get(e,t){let r=0,i=1/t;for(;e>0;)r+=e%t*i,e/=t,i/=t;return r}getBase(e,t){let r=this.inv_base=1/t;for(;e>0;)this.value+=r*(e%t),e/=t,r*=this.inv_base}next(){let e=1-this.value-1e-7;if(this.inv_base<e)this.value+=this.inv_base;else{let t=this.inv_base,r;do r=t,t*=this.inv_base;while(t>=e);this.value+=r+t-1}}get(){return this.value}}class $t{origin=new d;length=Number.MAX_VALUE;static _rayl=1e9;static _smallnum=1e-8;_vector=new d;_dir=new d;constructor(e,t){this.origin.copyFrom(e||new d),this._dir.copyFrom(t||new d),this._dir.normalize()}get direction(){return this._dir}set direction(e){this._dir.copyFrom(e),this._dir.normalize()}clone(){return new $t(this.origin,this.direction)}intersectBox(e,t){let r=this.direction,i=this.origin,a,o,n,l,h,u;const c=1/r.x,f=1/r.y,g=1/r.z,p=e.min,A=e.max;return a=((c>=0?p.x:A.x)-i.x)*c,o=((c>=0?A.x:p.x)-i.x)*c,n=((f>=0?p.y:A.y)-i.y)*f,l=((f>=0?A.y:p.y)-i.y)*f,a>l||n>o||(n>a&&(a=n),l<o&&(o=l),h=((g>=0?p.z:A.z)-i.z)*g,u=((g>=0?A.z:p.z)-i.z)*g,a>u||h>o)||(h>a&&(a=h),u<o&&(o=u),o<0)?null:(t||=new d,this.pointAt(a>=0?a:o,t))}pointAt(e,t){return t||=new d,t.copy(this.direction),t.multiplyScalar(e),t.add(this.origin,t),t}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this._dir.copy(e._dir),this.length=e.length,this}setApproxDirection(e){this._dir=e.normalize()}setOrigin(e){this.origin.copyFrom(e)}getOrigin(){return this.origin}getPoint(e){return this._dir.scaleBy(e),this.origin.add(this._dir)}sqrDistToPoint(e){let t=this._dir,r=e.subtract(this.origin),i=ct(r,t),a=ct(t,t),o=i/a,n=this.getPoint(o);return ho(e.subtract(n))}applyMatrix(e){this.origin=e.transformPoint(this.origin),this._dir=e.transformVector(this._dir)}_v0=new d;_v1=new d;_v2=new d;pointInTriangle(e,t,r,i){let a=this._v0,o=this._v1,n=this._v2;i.subtract(t,a),r.subtract(t,o),e.subtract(t,n);let l=d.dot(a,a),h=d.dot(a,o),u=d.dot(a,n),c=d.dot(o,o),f=d.dot(o,n),g=1/(l*c-h*h),p=(c*u-h*f)*g,A=(l*f-h*u)*g;return p>=0&&A>=0&&p+A<1}_E1=new d;_E2=new d;_P=new d;_T=new d;_Q=new d;intersectTriangle(e,t,r){let i=r.v1,a=r.v2,o=r.v3;a.subtract(i,this._E1),o.subtract(i,this._E2),t.crossProduct(this._E2,this._P);let n=this._E1.dotProduct(this._P);if(n>0?e.subtract(i,this._T):(i.subtract(e,this._T),n=-n),n<1e-4||(r.u=this._T.dotProduct(this._P),r.u<0||r.u>n)||(this._T.crossProduct(this._E1,this._Q),r.v=t.dotProduct(this._Q),r.v<0||r.u+r.v>n))return null;let l=new d;r.t0=r.t=this._E2.dotProduct(this._Q);let h=1/n;return r.t*=h,r.u*=h,r.v*=h,l.x=e.x+r.t*t.x,l.y=e.y+r.t*t.y,l.z=e.z+r.t*t.z,l}intersectSphere(e,t,r,i){let a=e.subtract(r),o=d.dot(t,t),n=2*d.dot(a,t),l=d.dot(a,a)-i*i,h=n*n-4*o*l,u=d.HELP_3;if(h<0)return null;{let c=(-n-Math.sqrt(h))/(o*2);return c<0?null:(u.x=e.x+c*t.x,u.y=e.y+c*t.y,u.z=e.z+c*t.z,u)}}intersectionSegment(e,t,r){const i=this.origin,a=d.HELP_0,o=d.HELP_1,n=d.HELP_2,l=d.HELP_3;t.subtract(e,a),this._dir.scaleToRef($t._rayl,n),i.add(n,o),e.subtract(i,l);var h=d.dot(a,a),u=d.dot(a,n),c=d.dot(n,n),f=d.dot(a,l),g=d.dot(n,l),p=h*c-u*u,A,U,x=p,B,S,C=p;p<$t._smallnum?(U=0,x=1,S=g,C=c):(U=u*g-c*f,S=h*g-u*f,U<0?(U=0,S=g,C=c):U>x&&(U=x,S=g+u,C=c)),S<0?(S=0,-f<0?U=0:-f>h?U=x:(U=-f,x=h)):S>C&&(S=C,-f+u<0?U=0:-f+u>h?U=x:(U=-f+u,x=h)),A=Math.abs(U)<$t._smallnum?0:U/x,B=Math.abs(S)<$t._smallnum?0:S/C;const _=d.HELP_4;n.scaleToRef(B,_);const y=d.HELP_5;a.scaleToRef(A,y),y.add(l,y);const b=d.HELP_6;y.subtract(_,b);var w=B>0&&B<=this._dir.length&&b.lengthSquared<r*r;if(w){let Q=new d;return Q.copyFrom(t.subtract(e)),Q.scaleBy(A),Q.add(e,Q),{out:Q,length:y.length}}return{out:null,length:-1}}get_vec(e,t){let r=d.HELP_1;return r.x=e.x-t.x,r.y=e.y-t.y,r.z=e.z-t.z,r}}class ja{x;y;w;h;constructor(e=0,t=0,r=0,i=0){this.x=e,this.y=t,this.w=r,this.h=i}get width(){return this.w}set width(e){this.w=e}get height(){return this.h}set height(e){this.h=e}static pointInRect(e,t,r,i,a,o){return!(e<r||e>a||t<i||t>o)}clone(){return new ja(this.x,this.y,this.w,this.h)}copyFrom(e){this.x=e.x,this.y=e.y,this.w=e.w,this.h=e.h}copyTo(e){e.copyFrom(this)}inner(e,t){return!(e<this.x||e>this.x+this.width||t<this.y||t>this.y+this.height)}equal(e){return!(this.x!=e.x||this.y!=e.y||this.width!=e.width||this.height!=e.height)}equalArea(e,t,r,i){return!(this.x!=e||this.y!=t||this.width!=r||this.height!=i)}equalInnerArea(e){var t=this.x,r=this.y,i=this.x+this.width,a=this.y+this.height,o=e.x,n=e.y,l=e.x+e.width,h=e.y+e.height;return Math.max(t,o)<=Math.min(i,l)&&Math.max(r,n)<=Math.min(a,h)}innerArea(e,t){t=t||new ja;var r=this.x,i=this.y,a=this.x+this.width,o=this.y+this.height,n=e.x,l=e.y,h=e.x+e.width,u=e.y+e.height,c=Math.max(i,l),f=Math.min(o,u),g=Math.max(r,n),p=Math.min(h,a);return c>=0&&f>=0&&f-c>=0&&p-g>0?(t.x=g,t.y=c,t.width=p-g,t.height=f-c):(t.x=0,t.y=0,t.width=0,t.height=0),t}setTo(e,t,r,i){this.x=e,this.y=t,this.width=r,this.height=i}}class Re{center;extents;max;min;size;static maxVector3=new d(1,1,1).multiplyScalar(Number.MAX_VALUE*.1);static minVector3=new d(1,1,1).multiplyScalar(-Number.MAX_VALUE*.1);constructor(e,t){e||=d.ZERO.clone(),t||=d.ZERO.clone(),this.setFromCenterAndSize(e,t)}makeEmpty(){return this.setFromMinMax(Re.maxVector3,Re.minVector3),this}setFromMinMax(e,t){return this.init(),t.subtract(e,this.size),e.add(t,this.center).multiplyScalar(.5),this.extents.copyFrom(this.size).multiplyScalar(.5),this.min.copyFrom(e),this.max.copyFrom(t),this}init(){return this.min||=new d,this.max||=new d,this.size||=new d,this.center||=new d,this.extents||=new d,this}setFromCenterAndSize(e,t){return this.size=t,this.center=e,this.init(),this.extents.copy(t).multiplyScalar(.5),this.center.subtract(this.extents,this.min),this.center.add(this.extents,this.max),this}inFrustum(e,t){return t.containsBox(e.bound)}merge(e){e.min.x<this.min.x&&(this.min.x=e.min.x),e.min.y<this.min.y&&(this.min.y=e.min.y),e.min.z<this.min.z&&(this.min.z=e.min.z),e.max.x>this.max.x&&(this.max.x=e.max.x),e.max.y>this.max.y&&(this.max.y=e.max.y),e.max.z>this.max.z&&(this.max.z=e.max.z),this.size.x=e.max.x-e.min.x,this.size.y=e.max.y-e.min.y,this.size.z=e.max.z-e.min.z,this.extents.x=this.size.x*.5,this.extents.y=this.size.y*.5,this.extents.z=this.size.z*.5,this.center.x=this.extents.x+e.min.x,this.center.y=this.extents.y+e.min.y,this.center.z=this.extents.z+e.min.z}intersects(e){return this.min.x<=e.max.x&&this.max.x>=e.min.x&&this.min.y<=e.max.y&&this.max.y>=e.min.y&&this.min.z<=e.max.z&&this.max.z>=e.min.z}intersectsSphere(e){return this.min.x<=e.max.x&&this.max.x>=e.min.x&&this.min.y<=e.max.y&&this.max.y>=e.min.y&&this.min.z<=e.max.z&&this.max.z>=e.min.z}intersectsBox(e){return this.min.x<=e.max.x&&this.max.x>=e.min.x&&this.min.y<=e.max.y&&this.max.y>=e.min.y&&this.min.z<=e.max.z&&this.max.z>=e.min.z}equals(e){return this.center.equals(e.center)&&this.extents.equals(e.extents)}expandByPoint(e){e.x<this.min.x&&(this.min.x=e.x),e.x>this.max.x&&(this.max.x=e.x),e.y<this.min.y&&(this.min.y=e.y),e.y>this.max.y&&(this.max.y=e.y),e.z<this.min.z&&(this.min.z=e.z),e.z>this.max.z&&(this.max.z=e.z)}static fromPoints(e){for(var t=new Re(new d,new d),r=0;r<e.length;r++)t.expandByPoint(e[r]);return t}calculateTransform(e){}clone(){var e=new Re(this.center.clone(),this.size.clone());return e}intersectsRay(e,t){throw new Error("Method not implemented.")}containsPoint(e){return this.min.x<=e.x&&this.max.x>=e.x&&this.min.y<=e.y&&this.max.y>=e.y&&this.min.z<=e.z&&this.max.z>=e.z}containsBox(e){let t=this.min,r=this.max;return t.x<=e.min.x&&t.y<=e.min.y&&t.z<=e.min.z&&r.x>=e.max.x&&r.y>=e.max.y&&r.z>=e.max.z}updateBound(){}destroy(e){this.center=null,this.extents=null,this.min=null,this.max=null,this.size=null}}class sh{planes;corners;boundingBox=new Re;constructor(){this.planes=[],this.corners=[];for(var e=0;e<6;e++)this.planes[e]=new d;for(var e=0;e<8;e++)this.corners[e]=new d}updateBoundBox(e){this.boundingBox.makeEmpty();let t=this.boundingBox.min,r=this.boundingBox.max,i=0;for(let a=0;a<2;++a)for(let o=0;o<2;++o)for(let n=0;n<2;++n){let l=this.corners[i];i++,l.set(2*a-1,2*o-1,n,1),e.transformVector4(l,l),l.div(l.w,l),t.x=Math.min(l.x,t.x),t.y=Math.min(l.y,t.y),t.z=Math.min(l.z,t.z),r.x=Math.max(l.x,r.x),r.y=Math.max(l.y,r.y),r.z=Math.max(l.z,r.z)}return this.boundingBox.setFromMinMax(t,r),this}setFrustumCorners(e){let t=0;for(let r=0;r<2;++r)for(let i=0;i<2;++i)for(let a=0;a<2;++a){let o=this.corners[t];o.set(2*r-1,2*i-1,a,1),e.transformVector4(o,o),o.div(o.w,o),t++}}update(e){var t=e.rawData;this.planes[0].x=t[3]-t[0],this.planes[0].y=t[7]-t[4],this.planes[0].z=t[11]-t[8],this.planes[0].w=t[15]-t[12];var r=Math.sqrt(this.planes[0].x*this.planes[0].x+this.planes[0].y*this.planes[0].y+this.planes[0].z*this.planes[0].z);this.planes[0].x/=r,this.planes[0].y/=r,this.planes[0].z/=r,this.planes[0].w/=r,this.planes[1].x=t[3]+t[0],this.planes[1].y=t[7]+t[4],this.planes[1].z=t[11]+t[8],this.planes[1].w=t[15]+t[12],r=Math.sqrt(this.planes[1].x*this.planes[1].x+this.planes[1].y*this.planes[1].y+this.planes[1].z*this.planes[1].z),this.planes[1].x/=r,this.planes[1].y/=r,this.planes[1].z/=r,this.planes[1].w/=r,this.planes[2].x=t[3]+t[1],this.planes[2].y=t[7]+t[5],this.planes[2].z=t[11]+t[9],this.planes[2].w=t[15]+t[13],r=Math.sqrt(this.planes[2].x*this.planes[2].x+this.planes[2].y*this.planes[2].y+this.planes[2].z*this.planes[2].z),this.planes[2].x/=r,this.planes[2].y/=r,this.planes[2].z/=r,this.planes[2].w/=r,this.planes[3].x=t[3]-t[1],this.planes[3].y=t[7]-t[5],this.planes[3].z=t[11]-t[9],this.planes[3].w=t[15]-t[13],r=Math.sqrt(this.planes[3].x*this.planes[3].x+this.planes[3].y*this.planes[3].y+this.planes[3].z*this.planes[3].z),this.planes[3].x/=r,this.planes[3].y/=r,this.planes[3].z/=r,this.planes[3].w/=r,this.planes[4].x=t[3]-t[2],this.planes[4].y=t[7]-t[6],this.planes[4].z=t[11]-t[10],this.planes[4].w=t[15]-t[14],r=Math.sqrt(this.planes[4].x*this.planes[4].x+this.planes[4].y*this.planes[4].y+this.planes[4].z*this.planes[4].z),this.planes[4].x/=r,this.planes[4].y/=r,this.planes[4].z/=r,this.planes[4].w/=r,this.planes[5].x=t[3]+t[2],this.planes[5].y=t[7]+t[6],this.planes[5].z=t[11]+t[10],this.planes[5].w=t[15]+t[14],r=Math.sqrt(this.planes[5].x*this.planes[5].x+this.planes[5].y*this.planes[5].y+this.planes[5].z*this.planes[5].z),this.planes[5].x/=r,this.planes[5].y/=r,this.planes[5].z/=r,this.planes[5].w/=r}containsPoint(e){for(var t=0;t<6;t++)if(this.planes[t].x*e.x+this.planes[t].y*e.y+this.planes[t].z*e.z+this.planes[t].w<=0)return!1;return!0}containsSphere(e){let t=e.bound,r=0,i,a=e.transform.worldPosition,o=t.radius,n=t.center.x+a.x,l=t.center.y+a.y,h=t.center.z+a.z;for(let u of this.planes){if(i=u.x*n+u.y*l+u.z*h+u.w,i<=-o)return 0;i>o&&r++}return r===6?2:1}containsBox(e){let t=0,r,a=Math.max(e.size.x,e.size.y,e.size.z)*2,o=e.center.x,n=e.center.y,l=e.center.z;for(let h of this.planes){if(r=h.x*o+h.y*n+h.z*l+h.w,r<=-a)return 0;r>a&&t++}return t===6?2:1}containsBox2(e){let t=0,r,i=1.74*Math.max(e.extents.x,e.extents.y,e.extents.z);for(let a of this.planes){if(r=a.x*e.center.x+a.y*e.center.y+a.z*e.center.z+a.w,r<=-i)return 0;r>i&&t++}return t===6?2:1}}var He=(s=>(s[s.ortho=0]="ortho",s[s.perspective=1]="perspective",s[s.shadow=2]="shadow",s))(He||{});class Qg{corners;index;constructor(e){this.index=e,this.corners=[];for(let t=0;t<4;t++)this.corners.push(new d)}}class Rg{bound;twoSections;name;color;shadowCamera;index;constructor(e,t,r){this.bound=new Re,this.shadowCamera=je.createCamera3DObject(null,"csmShadowCamera_"+r),this.shadowCamera.isShadowCamera=!0,this.shadowCamera.orthoOffCenter(100,-100,100,-100,1,1e4),this.twoSections=[e,t],this.index=r,r==0?this.color=new P(1,0,0,1):r==1?this.color=new P(0,1,0,1):r==2?this.color=new P(0,0,1,1):r==3&&(this.color=new P(0,1,1,1)),this.name="child_"+r}updateBound(){this.bound.makeEmpty();let e=this.bound.min,t=this.bound.max;for(let r of this.twoSections)for(let i of r.corners)e.x=Math.min(i.x,e.x),e.y=Math.min(i.y,e.y),e.z=Math.min(i.z,e.z),t.x=Math.max(i.x,t.x),t.y=Math.max(i.y,t.y),t.z=Math.max(i.z,t.z);return this.bound.setFromMinMax(e,t),this}}class oh{sections;children;name;constructor(e){this.sections=[];let t=e+1;for(let r=0;r<t;r++)this.sections.push(new Qg(r));this.children=[];for(let r=0;r<e;r++)this.children.push(new Rg(this.sections[r],this.sections[r+1],r))}update(e,t,r,i,a){let o=this.sections.length-1;for(let n=0;n<=o;++n){let l=this.sections[n],h=0,u=this.logSplit(r,i,n,this.sections.length);{let f=(u-r)/i;f=f**a.csmScatteringExp,u=(i-r)*f+r}u*=a.csmAreaScale;let c=(e.rawData[10]*u+e.rawData[14])/u;for(let f=0;f<2;++f)for(let g=0;g<2;++g){let p=l.corners[h];h++,p.set(2*f-1,2*g-1,c,1),t.transformVector4(p,p),p.div(p.w,p)}}for(let n of this.children)n.updateBound();return this}squareSplit(e,t,r,i){return(r/(i-1))**4*(t-e)+e}uniformSplit(e,t,r,i){return r/(i-1)*(t-e)+e}logSplit(e,t,r,i){return e*(t/e)**(r/(i-1))}}class Zi extends Pe{fov=60;name;aspect=1;near=1;far=5e3;left=-100;right=100;top=100;bottom=-100;frustumSize=100;viewPort=new ja;frustum;sh=new Float32Array(36);isShadowCamera=!1;_projectionMatrixInv=new I;_projectionMatrix=new I;_viewMatrix=new I;_viewMatrixInv=new I;_unprojection=new I;_pvMatrixInv=new I;_pvMatrix=new I;_halfw;_halfh;_ray;_enableCSM=!1;mainCamera;get projectionMatrix(){return this._projectionMatrix}lookTarget;type=He.perspective;csm;cubeShadowCameras=[];get enableCSM(){return this._enableCSM}set enableCSM(e){e&&!this.csm&&(this.csm=new oh(Zt.Cascades)),this._enableCSM=e}constructor(){super()}init(){super.init(),this._ray=new $t,this.frustum=new sh,this.lookTarget=new d(0,0,0),this.viewPort.x=0,this.viewPort.y=0,this.viewPort.w=R.presentationSize[0],this.viewPort.h=R.presentationSize[1],this.updateProjection(),R.addEventListener(Yr.RESIZE,this.updateProjection,this)}updateProjection(){this.aspect=R.aspect,this.type==He.perspective?this.perspective(this.fov,this.aspect,this.near,this.far):this.type==He.ortho&&(this.frustumSize?this.ortho(this.frustumSize,this.near,this.far):this.orthoOffCenter(this.left,this.right,this.bottom,this.top,this.near,this.far))}getShadowBias(e){let t=2*this.getShadowWorldExtents()/e,r=this.far-this.near;return t/r-m.setting.shadow.shadowBias*.01}getShadowWorldExtents(){let e=m.setting.shadow.shadowBound;return e?e*=.5:e=Math.round(.05*this.frustum.boundingBox.extents.length),e}getCSMShadowBiasScale(e){if(e==this)return 1;let t=this.far-this.near,r=this.csm.children[0].shadowCamera;return(r.far-r.near)/t}getCSMShadowWorldExtents(e){return Math.round(this.csm.children[e].bound.extents.length)}perspective(e,t,r,i){this.fov=e,this.aspect=t,this.near=Math.max(.001,r),this.far=i,this._projectionMatrix.perspective(this.fov,this.aspect,this.near,this.far),this.type=He.perspective}ortho(e,t,r){this.frustumSize=e;let i=e*.5*this.aspect,a=e*.5,o=-i/2,n=i/2,l=a/2,h=-a/2;this.orthoOffCenter(o,n,h,l,t,r)}orthoOffCenter(e,t,r,i,a,o){this.near=a,this.far=o,this.left=e,this.right=t,this.top=i,this.bottom=r,this.type=He.ortho,this._projectionMatrix.orthoOffCenter(this.left,this.right,this.bottom,this.top,this.near,this.far)}get viewMatrix(){return this._viewMatrix.copyFrom(this.transform.worldMatrix),this._viewMatrix.invert(),this._viewMatrix}get shadowViewMatrix(){return this._viewMatrix.copyFrom(this.transform.worldMatrix),this._viewMatrix.appendScale(1,1,1),this._viewMatrix.invert(),this._viewMatrix}object3DToScreenRay(e,t=null){return t||(t=new d(0,0,0,1)),this._halfw=this.viewPort.width*.5,this._halfh=this.viewPort.height*.5,bt.transformVector(this.viewMatrix,e,t),this.project(t,t),t.x=this._halfw+t.x*this._halfw,t.y=this.viewPort.height-(this._halfh-t.y*this._halfh),t}screenRayToObject3D(e,t=null){t||(t=new d),this._halfw=this.viewPort.width*.5,this._halfh=this.viewPort.height*.5;let r=e.x,i=e.y;return t.x=r/this.viewPort.width-.25,t.y=i/this.viewPort.height-.25,this.unProject(t.x,t.y,e.z,t),t}get pvMatrix(){return co(this._projectionMatrix,this.viewMatrix,this._pvMatrix),this._pvMatrix}get pvMatrix2(){co(this._projectionMatrix,this.transform.worldMatrix,this._pvMatrix);let e=this._pvMatrixInv.copyFrom(this.pvMatrix);return e.invert(),e}get pvMatrixInv(){let e=this._pvMatrixInv.copyFrom(this.pvMatrix);return e.invert(),e}get vMatrixInv(){let e=this._viewMatrixInv.copyFrom(this.viewMatrix);return e.invert(),e}get cameraToWorld(){let e=I.helpMatrix;return e.identity(),e.copyFrom(this.projectionMatrixInv),e.multiply(this.vMatrixInv),e}get ndcToView(){let e=I.helpMatrix;return e.identity(),e.copyFrom(this.projectionMatrixInv),e}get projectionMatrixInv(){return this._projectionMatrixInv.copyFrom(this._projectionMatrix),this._projectionMatrixInv.invert(),this._projectionMatrixInv}unProject(e,t,r,i){return i||(i=new d),i.x=e,i.y=-t,i.z=r,i.w=1,i.x*=r,i.y*=r,this._unprojection.copyFrom(this._projectionMatrix),this._unprojection.invert(),bt.transformVector(this._unprojection,i,i),i.z=r,i}project(e,t){return this._projectionMatrix.perspectiveMultiplyPoint3(e,t),t.x=t.x/t.w,t.y=-t.y/t.w,t.z=e.z,t}screenPointToRay(e,t){let r=this._ray,i=je.UnProjection(e,t,.01,this),a=je.UnProjection(e,t,1,this);return a=a.subtract(i).normalize(),r.origin.copyFrom(i),r.direction=a,r}screenPointToWorld(e,t,r){return je.UnProjection(e,t,r,this)}worldToScreenPoint(e,t){return je.Projection(e,this,t)}lookAt(e,t,r=d.Y_AXIS){this.transform.lookAt(e,t,r),t&&this.lookTarget.copyFrom(t)}onUpdate(){this._useJitterProjection&&this.getJitteredProjectionMatrix(),this.frustum.update(this.pvMatrix),this.frustum.updateBoundBox(this.pvMatrixInv);let e=m.setting.shadow;this.enableCSM&&this.csm?.update(this._projectionMatrix,this._pvMatrixInv,this.near,this.far,e)}_haltonSeq;_jitterOffsetList;_useJitterProjection=!1;_jitterFrameIndex=0;_sampleIndex=0;_jitterX=0;_jitterY=0;get jitterFrameIndex(){return this._jitterFrameIndex}get jitterX(){return this._jitterX}get jitterY(){return this._jitterY}enableJitterProjection(e){this._jitterFrameIndex=0,this._useJitterProjection=e,this._haltonSeq||=new us,this._jitterOffsetList=[];for(let t=0;t<32;t++){let r=this.generateRandomOffset();this._jitterOffsetList.push(r)}this._jitterOffsetList.reverse()}generateRandomOffset(){let e=new K(us.get((this._sampleIndex&1023)+1,2)-.5,us.get((this._sampleIndex&1023)+1,3)-.5);return++this._sampleIndex>=32&&(this._sampleIndex=0),e}getJitteredProjectionMatrix(){let e=m.setting.render.postProcessing.taa,t=this._projectionMatrix,r=e.temporalJitterScale,i=this._jitterFrameIndex%e.jitterSeedCount,a=this._jitterOffsetList[i].x*r,o=this._jitterOffsetList[i].y*r,n=t.get(0,2),l=t.get(1,2);this._jitterX=a/this.viewPort.width,this._jitterY=o/this.viewPort.height,n+=this._jitterX,l+=this._jitterY,t.set(0,2,n),t.set(1,2,l),this._jitterFrameIndex++}getWorldDirection(e){e||=new d;const t=this.transform._worldMatrix.rawData;return e.set(-t[8],-t[9],-t[10]).normalize()}}class Tt extends Pe{static LIMIT=1;static COMPONENT_NAME="UUTransform";static COMPONENT_TYPE="Transform";static POSITION_ONCHANGE="POSITION_ONCHANGE";static ROTATION_ONCHANGE="ROTATION_ONCHANGE";static SCALE_ONCHANGE="SCALE_ONCHANGE";static PARENT_ONCHANGE="PARENT_ONCHANGE";static CHILDREN_ONCHANGE="CHILDREN_ONCHANGE";static ADD_ONCHANGE="ADD_ONCHANGE";static LOCAL_ONCHANGE="LOCAL_ONCHANGE";eventPositionChange=new qe(Tt.POSITION_ONCHANGE);eventRotationChange=new qe(Tt.ROTATION_ONCHANGE);eventScaleChange=new qe(Tt.SCALE_ONCHANGE);eventLocalChange=new qe(Tt.LOCAL_ONCHANGE);onPositionChange;onRotationChange;onScaleChange;_scene3d;_parent;_localPos;_localRot;_localRotQuat;_localScale;_localDetailPos;_localDetailRot;_localDetailScale;index;index2;_forward=new d;_back=new d;_right=new d;_left=new d;_up=new d;_down=new d;_worldMatrix;_targetPos;static=!1;depthOrder=0;get localChange(){return pe.matrixStateBuffer[this.index2]!=0}set localChange(e){pe.matrixStateBuffer[this.index2]=e?1:0}get targetPos(){return this._targetPos}set targetPos(e){this._targetPos=e}get parent(){return this._parent}set parent(e){let t=this._parent?.object3D;if(this._parent=e,this.depthOrder=e?e.depthOrder+1:0,pe.setParent(this.index,e?e.worldMatrix.index:-1,this.depthOrder),this.localChange=!0,this.object3D){let r=e?e.scene3D:null;r?(this._scene3d=r,this.object3D.components.forEach(i=>{Se.appendWaitStart(i)})):this.object3D.components.forEach(i=>{i.__stop()});for(let i of this.object3D.entityChildren)i.transform.parent=e?this:null;this.object3D.components.forEach(i=>{i.onParentChange?.(t,this._parent?.object3D)})}this.notifyLocalChange()}set enable(e){this.transform._scene3d&&e?super.enable=!0:super.enable=!1;for(let t of this.object3D.entityChildren)t.transform.enable=e}get enable(){return this._enable}get scene3D(){return this._scene3d}set scene3D(e){this._scene3d=e}get view3D(){return this._scene3d&&this._scene3d.view?this._scene3d.view:null}constructor(){super(),this._worldMatrix=new I(!0),this.index=this._worldMatrix.index,this.index2=this._worldMatrix.index*pe.stateStruct,this._localPos=new d,this._localRot=new d,this._localRotQuat=new Z,this._localScale=new d(1,1,1),pe.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),pe.setTranslate(this.index,this._localPos.x,this._localPos.y,this._localPos.z)}awake(){}start(){}stop(){}notifyLocalChange(){if(this.localChange=!0,this.object3D){let e=this.object3D.entityChildren,t=0,r=e.length;for(t=0;t<r;t++)e[t].transform.notifyLocalChange()}this.eventDispatcher.dispatchEvent(this.eventLocalChange)}get up(){return this.worldMatrix.transformVector(d.UP,this._up),this._up}set up(e){this._up.copyFrom(e),bt.fromToRotation(d.UP,this._up,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0}get down(){return this.worldMatrix.transformVector(d.DOWN,this._down),this._down}set down(e){this._down.copyFrom(e),bt.fromToRotation(d.DOWN,this._down,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get forward(){return this.worldMatrix.transformVector(d.FORWARD,this._forward),this._forward}set forward(e){this._forward.copyFrom(e),bt.fromToRotation(d.FORWARD,this._forward,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get back(){return this.worldMatrix.transformVector(d.BACK,this._back),this._back}set back(e){this._back.copyFrom(e),bt.fromToRotation(d.BACK,this._back,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0}get left(){return this.worldMatrix.transformVector(d.neg_X_AXIS,this._left),this._left}set left(e){this._left.copyFrom(e),bt.fromToRotation(d.LEFT,this._left,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0}get right(){return this.worldMatrix.transformVector(d.X_AXIS,this._right),this._right}set right(e){this._right.copyFrom(e),bt.fromToRotation(d.RIGHT,this._right,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get localRotQuat(){return this.localChange&&this.updateWorldMatrix(),this._localRotQuat}set localRotQuat(e){(e.x!=this._localRotQuat.x||e.y!=this._localRotQuat.y||e.z!=this._localRotQuat.z||e.w!=this._localRotQuat.w)&&(this._localRotQuat.copyFrom(e),this._localRotQuat.getEulerAngles(this._localRot),pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange))}notifyChange(){this.notifyLocalChange(),this.onRotationChange?.(),this.onScaleChange?.(),this.onPositionChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange)}get worldMatrix(){return this.updateWorldMatrix(),this._worldMatrix}updateWorldMatrix(e=!1){(this.localChange||e)&&(this.parent?(ls(this._localRot,this._localPos,this._localScale,this._worldMatrix),ah(this._worldMatrix,this.parent.worldMatrix,this._worldMatrix)):ls(this._localRot,this._localPos,this._localScale,this._worldMatrix),this.localChange=!1)}updateChildTransform(){let e=this;if(e.localChange&&e.updateWorldMatrix(),e.object3D.numChildren>0)for(const t of e.object3D.entityChildren)t.transform.updateChildTransform()}lookTarget(e,t=d.UP){this.lookAt(this.transform.worldPosition,e,t)}lookAt(e,t,r=d.UP){this._targetPos||=new d,this._targetPos.copyFrom(t),this.localPosition=e,I.helpMatrix.lookAt(e,t,r),I.helpMatrix.invert();var i=I.helpMatrix.decompose(ir.QUATERNION);this.localRotQuat=Z.CALCULATION_QUATERNION.copyFrom(i[1])}decomposeFromMatrix(e,t="eulerAngles"){let r=e.decompose(t),i=this.transform;return i.localRotQuat.copyFrom(r[1]),i.localRotQuat=i.localRotQuat,i.localPosition.copyFrom(r[0]),i.localPosition=i.localPosition,i.localScale.copyFrom(r[2]),i.localScale=i.localScale,this}cloneTo(e){e.transform.localPosition=this.localPosition,e.transform.localRotation=this.localRotation,e.transform.localScale=this.localScale}set x(e){this._localPos.x!=e&&(this._localPos.x=e,pe.setTranslate(this.index,this._localPos.x,this._localPos.y,this._localPos.z),this.notifyLocalChange(),this.onPositionChange?.(),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange))}get x(){return this._localPos.x}set y(e){this._localPos.y!=e&&(this._localPos.y=e,pe.setTranslate(this.index,this._localPos.x,this._localPos.y,this._localPos.z),this.notifyLocalChange(),this.onPositionChange?.(),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange))}get y(){return this._localPos.y}set z(e){this._localPos.z!=e&&(this._localPos.z=e,pe.setTranslate(this.index,this._localPos.x,this._localPos.y,this._localPos.z),this.notifyLocalChange(),this.onPositionChange?.(),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange))}get z(){return this._localPos.z}set scaleX(e){this._localScale.x!=e&&(this._localScale.x=e,pe.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),this.notifyLocalChange(),this.onScaleChange?.(),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange))}get scaleX(){return this._localScale.x}set scaleY(e){this._localScale.y!=e&&(this._localScale.y=e,pe.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),this.notifyLocalChange(),this.onScaleChange?.(),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange))}get scaleY(){return this._localScale.y}set scaleZ(e){this._localScale.z!=e&&(this._localScale.z=e,pe.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),this.notifyLocalChange(),this.onScaleChange?.(),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange))}get scaleZ(){return this._localScale.z}set rotationX(e){this._localRot.x!=e&&(this._localRot.x=e,pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange))}get rotationX(){return this._localRot.x}set rotationY(e){this._localRot.y!=e&&(this._localRot.y=e,pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange))}get rotationY(){return this._localRot.y}set rotationZ(e){this._localRot.z!=e&&(this._localRot.z=e,pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange))}get rotationZ(){return this._localRot.z}get worldPosition(){return this.localChange&&this.updateWorldMatrix(),this._worldMatrix.position}set localPosition(e){this.onPositionChange&&(this._localPos.x!=e.x||this._localPos.y!=e.y||this._localPos.z!=e.z)&&this.onPositionChange(this._localPos,e),this._localPos.copyFrom(e),pe.setTranslate(this.index,e.x,e.y,e.z),this.notifyLocalChange(),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange)}get localPosition(){return this._localPos}set localRotation(e){this.onRotationChange&&(this._localRot.x!=e.x||this._localRot.y!=e.y||this._localRot.z!=e.z)&&this.onRotationChange(this._localRot,e),pe.setRotation(this.index,e.x,e.y,e.z),this._localRot.copyFrom(e),this.notifyLocalChange(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get localRotation(){return this._localRot}set localScale(e){pe.setScale(this.index,e.x,e.y,e.z),this._localScale.copyFrom(e),this.notifyLocalChange(),this.onScaleChange?.(),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange)}get localScale(){return this._localScale}get localDetailScale(){return this._localDetailScale}set localDetailScale(e){this._localDetailScale=e,pe.setContinueScale(this.index,e.x,e.y,e.z)}get localDetailRot(){return this._localDetailRot}set localDetailRot(e){this._localDetailRot=e,pe.setContinueRotation(this.index,e.x,e.y,e.z)}get localDetailPos(){return this._localDetailPos}set localDetailPos(e){this._localDetailPos=e,pe.setContinueTranslate(this.index,e.x,e.y,e.z)}beforeDestroy(e){this.parent&&this.parent.object3D&&this.parent.object3D.removeChild(this.object3D),super.beforeDestroy(e)}destroy(){super.destroy(),this.scene3D=null,this.eventPositionChange=null,this.eventRotationChange=null,this.eventScaleChange=null,this.onPositionChange=null,this.onRotationChange=null,this.onScaleChange=null,this._scene3d=null,this._parent=null,this._localPos=null,this._localRot=null,this._localRotQuat=null,this._localScale=null,this._forward=null,this._back=null,this._right=null,this._left=null,this._up=null,this._down=null,this.localChange=null,this._targetPos=null}}class Yt{static GLTF_NODE_INDEX_PROPERTY;static BASE_COLOR_UNIFORM="u_baseColorFactor";static BASE_COLOR_TEXTURE_UNIFORM="u_baseColorSampler";static METALROUGHNESS_UNIFORM="u_metallicRoughnessValues";static METALROUGHNESS_TEXTURE_UNIFORM="u_metallicRoughnessSampler";static NORMAL_TEXTURE_UNIFORM="u_normalSampler";static NORMAL_SCALE_UNIFORM="u_normalScale";static EMISSIVE_TEXTURE_UNIFORM="u_emissiveSampler";static EMISSIVE_FACTOR_UNIFORM="u_emissiveFactor";static OCCLUSION_TEXTURE_UNIFORM="u_occlusionSampler";static OCCLUSION_FACTOR_UNIFORM="u_occlusionFactor";static MAX_MORPH_TARGETS=8;static MORPH_POSITION_PREFIX="a_morphPositions_";static MORPH_NORMAL_PREFIX="a_morphNormals_";static MORPH_TANGENT_PREFIX="a_morphTangents_";static MORPH_WEIGHT_UNIFORM="u_morphWeights";static SCENE_ROOT_SKELETON="SCENE_ROOT";static IDENTITY_INVERSE_BIND_MATRICES="IDENTITY_IBM";static JOINT_MATRICES_UNIFORM="u_jointMatrix";static ALPHA_CUTOFF_UNIFORM="u_alphaCutoff"}var V=(s=>(s.position="position",s.normal="normal",s.uv="uv",s.TANGENT="TANGENT",s.TEXCOORD_1="TEXCOORD_1",s.TEXCOORD_2="TEXCOORD_2",s.TEXCOORD_3="TEXCOORD_3",s.TEXCOORD_4="TEXCOORD_4",s.TEXCOORD_5="TEXCOORD_5",s.TEXCOORD_6="TEXCOORD_6",s.TEXCOORD_7="TEXCOORD_7",s.color="color",s.joints0="joints0",s.joints1="joints1",s.weights0="weights0",s.weights1="weights1",s.weight="weight",s.indices="indices",s.vIndex="vIndex",s.a_morphPositions_0="a_morphPositions_0",s.all="all",s))(V||{}),ae=(s=>(s[s.NONE=0]="NONE",s[s.ABOVE=1]="ABOVE",s[s.ALPHA=2]="ALPHA",s[s.NORMAL=3]="NORMAL",s[s.ADD=4]="ADD",s[s.BELOW=5]="BELOW",s[s.ERASE=6]="ERASE",s[s.MUL=7]="MUL",s[s.SCREEN=8]="SCREEN",s[s.DIVD=9]="DIVD",s[s.SOFT_ADD=10]="SOFT_ADD",s))(ae||{}),nh=(s=>(s[s.src_a=0]="src_a",s[s.dest_a=1]="dest_a",s))(nh||{});class lh{static getBlend(e){let t={color:{srcFactor:"src-alpha",dstFactor:"one"},alpha:{srcFactor:"one",dstFactor:"one"}};switch(e){case 0:t.color.srcFactor="one",t.color.dstFactor="zero",t.color.operation="add";break;case 1:t.color.srcFactor="one-minus-src-alpha",t.color.dstFactor="dst-alpha",t.color.operation="add";break;case 4:t.color.srcFactor="one",t.color.dstFactor="one",t.color.operation="add",t.alpha.srcFactor="one",t.alpha.dstFactor="one",t.alpha.operation="add";break;case 2:t.color.srcFactor="src-alpha",t.color.dstFactor="one-minus-src-alpha",t.color.operation="add";break;case 5:t.color.srcFactor="one-minus-src-alpha",t.color.dstFactor="one",t.color.operation="add";break;case 6:t.color.srcFactor="zero",t.color.dstFactor="one-minus-src-alpha",t.color.operation="add";break;case 7:t.color.srcFactor="dst",t.color.dstFactor="one-minus-src-alpha",t.color.operation="add";break;case 3:t.color.srcFactor="src-alpha",t.color.dstFactor="one-minus-src-alpha",t.color.operation="add";break;case 10:t.color.srcFactor="one",t.color.dstFactor="one",t.color.operation="max",t.alpha.srcFactor="one",t.alpha.dstFactor="one",t.alpha.operation="add";break;case 8:t.color.srcFactor="one",t.color.dstFactor="one-minus-src",t.color.operation="add";break}return t}}class gr{static mipmapShader=`
|
|
5458
|
+
`,""),g=g.split(",")[0],g=g.replaceAll(" "," "),this.parserAttribute(g,r)}}return r}static parserAttribute(e,t){let r={name:"",group:0,location:0,type:"",valueType:"",value:0,size:0,format:"float32"};if(e.indexOf("builtin")!=-1){r.type="builtin";var i=e.match(/\((.+?)\)/g)[0];i=e.match(/\((.+?)\)/g)[0],i=i.replace("(",""),i=i.replaceAll(")",""),r.location=parseInt(i);let a=e.split(":");r.name=a[0].split(" ")[1],r.name=r.name.replaceAll(" "," "),r.name=r.name.replaceAll(" ",""),r.valueType=a[1],r.valueType=r.valueType.replaceAll(" "," "),r.valueType=r.valueType.replaceAll(" ",""),r.valueType=r.valueType.replaceAll("\r",""),r.valueType=r.valueType.replaceAll(")",""),r.valueType=r.valueType.replaceAll(")",""),r.size=jr[r.valueType],t.push(r)}else if(e.indexOf("location")!=-1){r.type="location";var i=e.match(/\((.+?)\)/g)[0];i=e.match(/\((.+?)\)/g)[0],i=i.replace("(",""),i=i.replaceAll(")",""),r.location=parseInt(i);let o=e.split(":");r.name=o[0].split(" ")[1],r.name=r.name.replaceAll(" "," "),r.name=r.name.replaceAll(" ",""),r.valueType=o[1],r.valueType=r.valueType.replaceAll(" "," "),r.valueType=r.valueType.replaceAll(" ",""),r.valueType=r.valueType.replaceAll("\r",""),r.valueType=r.valueType.replaceAll(")",""),r.valueType=r.valueType.replaceAll(")",""),r.size=jr[r.valueType],t.push(r)}r.format=Yn[jr[r.valueType]]}}class ue extends Ks{entryPoint="CsMain";workerSizeX=1;workerSizeY=0;workerSizeZ=0;_computePipeline;_csShaderModule;_destCS;_sourceCS;_storageTextureDic;_sampleTextureDic;_groupsShaderReflectionVarInfos;_groupCache={};constructor(e){super(),this._sourceCS=e,Bt.getShaderReflection2(e,this),this._storageTextureDic=new Map,this._sampleTextureDic=new Map}setStorageTexture(e,t){this._storageTextureDic.has(e)||this._storageTextureDic.set(e,t)}setSamplerTexture(e,t){this._sampleTextureDic.set(e,t)}compute(e){this._computePipeline||this.genComputePipeline(),e.setPipeline(this._computePipeline);for(let t=0;t<this.bindGroups.length;++t)e.setBindGroup(t,this.bindGroups[t]);this.workerSizeX&&this.workerSizeY&&this.workerSizeZ?e.dispatchWorkgroups(this.workerSizeX,this.workerSizeY,this.workerSizeZ):this.workerSizeX&&this.workerSizeY?e.dispatchWorkgroups(this.workerSizeX,this.workerSizeY):e.dispatchWorkgroups(this.workerSizeX)}createBufferBindGroup(e,t,r,i){let a=this._bufferDic.get(t);if(a){let o={binding:r,resource:{buffer:a.buffer,offset:0,size:a.memory.shareDataBuffer.byteLength}};i.push(o)}else console.error(`ComputeShader(${this.instanceID})`,`buffer ${t} is missing!`)}noticeBufferChange(e){let t=this._groupCache[e];t&&this.genGroups(t.groupIndex,t.infos,!0)}genGroups(e,t,r=!1){if(!this.bindGroups[e]||r){const i=t[e];let a=[];for(let n=0;n<i.length;++n){const l=i[n];if(l)switch(l.varType){case"uniform":case"storage-read":case"storage-read_write":this.createBufferBindGroup(e,l.varName,l.binding,a),this._groupCache[l.varName]={groupIndex:e,infos:t};break;case"var":if(l.dataType=="sampler"){let h=l.varName.replace("Sampler",""),u=this._sampleTextureDic.get(h);if(u){let c={binding:l.binding,resource:u.gpuSampler};a.push(c)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType=="sampler_comparison"){let h=l.varName.replace("Sampler",""),u=this._sampleTextureDic.get(h);if(u){let c={binding:l.binding,resource:u.gpuSampler_comparison};a.push(c)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType.indexOf("texture_storage")!=-1){let h=this._storageTextureDic.get(l.varName);if(h){let u={binding:l.binding,resource:h.getGPUView()};a.push(u),me.getInstance().attached(h,this)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType.indexOf("texture")!=-1){let h=this._sampleTextureDic.get(l.varName);if(h){let u={binding:l.binding,resource:h.getGPUView()};a.push(u),me.getInstance().attached(h,this)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}break;default:console.error("unprocessed type:",l.varType);break}}let o=R.device.createBindGroup({layout:this._computePipeline.getBindGroupLayout(e),entries:a});this.bindGroups[e]=o}}genComputePipeline(){this.preCompileShader(this._sourceCS),this.genReflection(),this._computePipeline=R.device.createComputePipeline({layout:"auto",compute:{module:this.compileShader(),entryPoint:this.entryPoint}}),this._groupsShaderReflectionVarInfos=[];let e=this.shaderReflection;this.bindGroups=[];for(let t=0;t<e.groups.length;++t){let r=e.groups[t];this._groupsShaderReflectionVarInfos[t]=r,this.genGroups(t,this._groupsShaderReflectionVarInfos)}R.addEventListener(Yr.RESIZE,t=>{for(let r=0;r<e.groups.length;++r){let i=e.groups[r];this._groupsShaderReflectionVarInfos[r]=i,this.genGroups(r,this._groupsShaderReflectionVarInfos,!0)}},this)}preCompileShader(e){for(const t in this.constValues)if(Object.prototype.hasOwnProperty.call(this.constValues,t)){const r=this.constValues[t];e=e.replaceAll(`&${t}`,r.toString())}this._destCS=rr.parseComputeShader(e,this.defineValue)}compileShader(){let e=R.device.createShaderModule({label:`ComputeShader(${this.instanceID})`,code:this._destCS});return e.getCompilationInfo().then(t=>{t.messages.length>0&&console.warn("[shader error]",t,this._destCS)}),this._csShaderModule=e,e}genReflection(){this.shaderVariant+=Bt.genComputeShaderVariant(this);let e=Bt.poolGetReflection(this.shaderVariant);e?this.shaderReflection=e:(Bt.getShaderReflection2(this._destCS,this),Bt.combineShaderReflectionVarInfo(this.shaderReflection,this.shaderReflection.cs_variables))}}var H=(s=>(s[s.COLOR=1]="COLOR",s[s.REFLECTION=2]="REFLECTION",s[s.POSITION=4]="POSITION",s[s.GRAPHIC=8]="GRAPHIC",s[s.GI=16]="GI",s[s.Cluster=32]="Cluster",s[s.SHADOW=64]="SHADOW",s[s.POINT_SHADOW=128]="POINT_SHADOW",s[s.POST=256]="POST",s[s.DEPTH=512]="DEPTH",s[s.UI=1024]="UI",s))(H||{});class Ye{static profilerLabelMap=new Map;static viewMap=new Map;static testObj={testValue1:0,testValue2:0,testValue3:0,testValue4:0};static startView(e){let t=this.viewMap.get(e);if(!t){t={};for(const r in H)parseInt(r)>=0||(t[r]={vertexCount:0,indicesCount:0,instanceCount:0,triCount:0,drawCount:0,pipelineCount:0});this.viewMap.set(e,t)}for(const r in H)parseInt(r)>=0||(t[r].vertexCount=0,t[r].indicesCount=0,t[r].triCount=0,t[r].instanceCount=0,t[r].drawCount=0,t[r].pipelineCount=0)}static viewCount(e){return this.startView(e),this.viewMap.get(e)}static viewCount_vertex(e,t,r){this.viewMap.get(e)[t].vertexCount+=r}static viewCount_indices(e,t,r){this.viewMap.get(e)[t].indicesCount+=r}static viewCount_tri(e,t,r){this.viewMap.get(e)[t].triCount+=r}static viewCount_instance(e,t,r){this.viewMap.get(e)[t].instanceCount+=r}static viewCount_draw(e,t){this.viewMap.get(e)[t].drawCount++}static viewCount_pipeline(e,t){this.viewMap.get(e)[t].pipelineCount++}static start(e){let t=this.profilerLabelMap.get(e);t||(t={lable:e,start:0,end:0,total:0,count:0,child:new Map},this.profilerLabelMap.set(e,t)),t.start=performance.now(),t.end=performance.now(),t.count=0,t.child.clear()}static end(e){let t=this.profilerLabelMap.get(e);t&&(t.end=performance.now(),t.total=t.end-t.start)}static countStart(e,t=""){let r=this.profilerLabelMap.get(e);if(r&&(r.count++,t!="")){let i=r.child.get(t);i||(i={lable:t,start:0,end:0,total:0,count:0}),i.start=performance.now(),i.end=performance.now(),i.count=0,r.child.set(t,i)}}static countEnd(e,t){let r=this.profilerLabelMap.get(e);if(r&&t!=""){let i=r.child.get(t);i||(i={lable:t,start:0,end:0,total:0,count:0}),i.end=performance.now(),i.total=i.end-i.start,i.count++}}static print(e){let t=this.profilerLabelMap.get(e);t&&console.log("performance",e,t.total+" ms")}}var Yd=(()=>{var s=import.meta.url;return(async function(e={}){var t=e,r,i;t.ready=new Promise((D,N)=>{r=D,i=N});var a=Object.assign({},t),o=[],n="./this.program",l=(D,N)=>{throw N},h=typeof window=="object",u=typeof importScripts=="function",c=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",f="";function g(D){return t.locateFile?t.locateFile(D,f):f+D}var p,A;if(c){const{createRequire:D}=await Promise.resolve().then(()=>m0);var U=D(import.meta.url),x=U("fs"),B=U("path");u?f=B.dirname(f)+"/":f=U("url").fileURLToPath(new URL("data:text/javascript;base64,DQp2YXIgTW9kdWxlID0gKCgpID0+IHsNCiAgdmFyIF9zY3JpcHREaXIgPSBpbXBvcnQubWV0YS51cmw7DQogIA0KICByZXR1cm4gKA0KYXN5bmMgZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHsNCg0KdmFyIE1vZHVsZT1tb2R1bGVBcmc7dmFyIHJlYWR5UHJvbWlzZVJlc29sdmUscmVhZHlQcm9taXNlUmVqZWN0O01vZHVsZVsicmVhZHkiXT1uZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57cmVhZHlQcm9taXNlUmVzb2x2ZT1yZXNvbHZlO3JlYWR5UHJvbWlzZVJlamVjdD1yZWplY3R9KTt2YXIgbW9kdWxlT3ZlcnJpZGVzPU9iamVjdC5hc3NpZ24oe30sTW9kdWxlKTt2YXIgYXJndW1lbnRzXz1bXTt2YXIgdGhpc1Byb2dyYW09Ii4vdGhpcy5wcm9ncmFtIjt2YXIgcXVpdF89KHN0YXR1cyx0b1Rocm93KT0+e3Rocm93IHRvVGhyb3d9O3ZhciBFTlZJUk9OTUVOVF9JU19XRUI9dHlwZW9mIHdpbmRvdz09Im9iamVjdCI7dmFyIEVOVklST05NRU5UX0lTX1dPUktFUj10eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgRU5WSVJPTk1FTlRfSVNfTk9ERT10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09InN0cmluZyI7dmFyIHNjcmlwdERpcmVjdG9yeT0iIjtmdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpe2lmKE1vZHVsZVsibG9jYXRlRmlsZSJdKXtyZXR1cm4gTW9kdWxlWyJsb2NhdGVGaWxlIl0ocGF0aCxzY3JpcHREaXJlY3RvcnkpfXJldHVybiBzY3JpcHREaXJlY3RvcnkrcGF0aH12YXIgcmVhZF8scmVhZEFzeW5jLHJlYWRCaW5hcnk7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7Y29uc3R7Y3JlYXRlUmVxdWlyZTpjcmVhdGVSZXF1aXJlfT1hd2FpdCBpbXBvcnQoIm1vZHVsZSIpO3ZhciByZXF1aXJlPWNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTt2YXIgZnM9cmVxdWlyZSgiZnMiKTt2YXIgbm9kZVBhdGg9cmVxdWlyZSgicGF0aCIpO2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7c2NyaXB0RGlyZWN0b3J5PW5vZGVQYXRoLmRpcm5hbWUoc2NyaXB0RGlyZWN0b3J5KSsiLyJ9ZWxzZXtzY3JpcHREaXJlY3Rvcnk9cmVxdWlyZSgidXJsIikuZmlsZVVSTFRvUGF0aChuZXcgVVJMKCIuLyIsaW1wb3J0Lm1ldGEudXJsKSl9cmVhZF89KGZpbGVuYW1lLGJpbmFyeSk9PntmaWxlbmFtZT1pc0ZpbGVVUkkoZmlsZW5hbWUpP25ldyBVUkwoZmlsZW5hbWUpOm5vZGVQYXRoLm5vcm1hbGl6ZShmaWxlbmFtZSk7cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSxiaW5hcnk/dW5kZWZpbmVkOiJ1dGY4Iil9O3JlYWRCaW5hcnk9ZmlsZW5hbWU9Pnt2YXIgcmV0PXJlYWRfKGZpbGVuYW1lLHRydWUpO2lmKCFyZXQuYnVmZmVyKXtyZXQ9bmV3IFVpbnQ4QXJyYXkocmV0KX1yZXR1cm4gcmV0fTtyZWFkQXN5bmM9KGZpbGVuYW1lLG9ubG9hZCxvbmVycm9yLGJpbmFyeT10cnVlKT0+e2ZpbGVuYW1lPWlzRmlsZVVSSShmaWxlbmFtZSk/bmV3IFVSTChmaWxlbmFtZSk6bm9kZVBhdGgubm9ybWFsaXplKGZpbGVuYW1lKTtmcy5yZWFkRmlsZShmaWxlbmFtZSxiaW5hcnk/dW5kZWZpbmVkOiJ1dGY4IiwoZXJyLGRhdGEpPT57aWYoZXJyKW9uZXJyb3IoZXJyKTtlbHNlIG9ubG9hZChiaW5hcnk/ZGF0YS5idWZmZXI6ZGF0YSl9KX07aWYoIU1vZHVsZVsidGhpc1Byb2dyYW0iXSYmcHJvY2Vzcy5hcmd2Lmxlbmd0aD4xKXt0aGlzUHJvZ3JhbT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpfWFyZ3VtZW50c189cHJvY2Vzcy5hcmd2LnNsaWNlKDIpO3F1aXRfPShzdGF0dXMsdG9UaHJvdyk9Pntwcm9jZXNzLmV4aXRDb2RlPXN0YXR1czt0aHJvdyB0b1Rocm93fX1lbHNlIGlmKEVOVklST05NRU5UX0lTX1dFQnx8RU5WSVJPTk1FTlRfSVNfV09SS0VSKXtpZihFTlZJUk9OTUVOVF9JU19XT1JLRVIpe3NjcmlwdERpcmVjdG9yeT1zZWxmLmxvY2F0aW9uLmhyZWZ9ZWxzZSBpZih0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0KXtzY3JpcHREaXJlY3Rvcnk9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmN9aWYoX3NjcmlwdERpcil7c2NyaXB0RGlyZWN0b3J5PV9zY3JpcHREaXJ9aWYoc2NyaXB0RGlyZWN0b3J5LnN0YXJ0c1dpdGgoImJsb2I6Iikpe3NjcmlwdERpcmVjdG9yeT0iIn1lbHNle3NjcmlwdERpcmVjdG9yeT1zY3JpcHREaXJlY3Rvcnkuc3Vic3RyKDAsc2NyaXB0RGlyZWN0b3J5LnJlcGxhY2UoL1s/I10uKi8sIiIpLmxhc3RJbmRleE9mKCIvIikrMSl9e3JlYWRfPXVybD0+e3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3hoci5vcGVuKCJHRVQiLHVybCxmYWxzZSk7eGhyLnNlbmQobnVsbCk7cmV0dXJuIHhoci5yZXNwb25zZVRleHR9O2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7cmVhZEJpbmFyeT11cmw9Pnt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbigiR0VUIix1cmwsZmFsc2UpO3hoci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIjt4aHIuc2VuZChudWxsKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeGhyLnJlc3BvbnNlKX19cmVhZEFzeW5jPSh1cmwsb25sb2FkLG9uZXJyb3IpPT57dmFyIHhocj1uZXcgWE1MSHR0cFJlcXVlc3Q7eGhyLm9wZW4oIkdFVCIsdXJsLHRydWUpO3hoci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIjt4aHIub25sb2FkPSgpPT57aWYoeGhyLnN0YXR1cz09MjAwfHx4aHIuc3RhdHVzPT0wJiZ4aHIucmVzcG9uc2Upe29ubG9hZCh4aHIucmVzcG9uc2UpO3JldHVybn1vbmVycm9yKCl9O3hoci5vbmVycm9yPW9uZXJyb3I7eGhyLnNlbmQobnVsbCl9fX1lbHNle312YXIgb3V0PU1vZHVsZVsicHJpbnQiXXx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKTt2YXIgZXJyPU1vZHVsZVsicHJpbnRFcnIiXXx8Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oTW9kdWxlLG1vZHVsZU92ZXJyaWRlcyk7bW9kdWxlT3ZlcnJpZGVzPW51bGw7aWYoTW9kdWxlWyJhcmd1bWVudHMiXSlhcmd1bWVudHNfPU1vZHVsZVsiYXJndW1lbnRzIl07aWYoTW9kdWxlWyJ0aGlzUHJvZ3JhbSJdKXRoaXNQcm9ncmFtPU1vZHVsZVsidGhpc1Byb2dyYW0iXTtpZihNb2R1bGVbInF1aXQiXSlxdWl0Xz1Nb2R1bGVbInF1aXQiXTt2YXIgd2FzbUJpbmFyeTtpZihNb2R1bGVbIndhc21CaW5hcnkiXSl3YXNtQmluYXJ5PU1vZHVsZVsid2FzbUJpbmFyeSJdO2Z1bmN0aW9uIGludEFycmF5RnJvbUJhc2U2NChzKXtpZih0eXBlb2YgRU5WSVJPTk1FTlRfSVNfTk9ERSE9InVuZGVmaW5lZCImJkVOVklST05NRU5UX0lTX05PREUpe3ZhciBidWY9QnVmZmVyLmZyb20ocywiYmFzZTY0Iik7cmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsYnVmLmJ5dGVPZmZzZXQsYnVmLmxlbmd0aCl9dmFyIGRlY29kZWQ9YXRvYihzKTt2YXIgYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoZGVjb2RlZC5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8ZGVjb2RlZC5sZW5ndGg7KytpKXtieXRlc1tpXT1kZWNvZGVkLmNoYXJDb2RlQXQoaSl9cmV0dXJuIGJ5dGVzfWZ1bmN0aW9uIHRyeVBhcnNlQXNEYXRhVVJJKGZpbGVuYW1lKXtpZighaXNEYXRhVVJJKGZpbGVuYW1lKSl7cmV0dXJufXJldHVybiBpbnRBcnJheUZyb21CYXNlNjQoZmlsZW5hbWUuc2xpY2UoZGF0YVVSSVByZWZpeC5sZW5ndGgpKX12YXIgd2FzbU1lbW9yeTt2YXIgQUJPUlQ9ZmFsc2U7dmFyIEVYSVRTVEFUVVM7dmFyIEhFQVA4LEhFQVBVOCxIRUFQMTYsSEVBUFUxNixIRUFQMzIsSEVBUFUzMixIRUFQRjMyLEhFQVBGNjQ7ZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKXt2YXIgYj13YXNtTWVtb3J5LmJ1ZmZlcjtNb2R1bGVbIkhFQVA4Il09SEVBUDg9bmV3IEludDhBcnJheShiKTtNb2R1bGVbIkhFQVAxNiJdPUhFQVAxNj1uZXcgSW50MTZBcnJheShiKTtNb2R1bGVbIkhFQVBVOCJdPUhFQVBVOD1uZXcgVWludDhBcnJheShiKTtNb2R1bGVbIkhFQVBVMTYiXT1IRUFQVTE2PW5ldyBVaW50MTZBcnJheShiKTtNb2R1bGVbIkhFQVAzMiJdPUhFQVAzMj1uZXcgSW50MzJBcnJheShiKTtNb2R1bGVbIkhFQVBVMzIiXT1IRUFQVTMyPW5ldyBVaW50MzJBcnJheShiKTtNb2R1bGVbIkhFQVBGMzIiXT1IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYik7TW9kdWxlWyJIRUFQRjY0Il09SEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGIpfXZhciBfX0FUUFJFUlVOX189W107dmFyIF9fQVRJTklUX189W107dmFyIF9fQVRNQUlOX189W107dmFyIF9fQVRQT1NUUlVOX189W107dmFyIHJ1bnRpbWVJbml0aWFsaXplZD1mYWxzZTtmdW5jdGlvbiBwcmVSdW4oKXtpZihNb2R1bGVbInByZVJ1biJdKXtpZih0eXBlb2YgTW9kdWxlWyJwcmVSdW4iXT09ImZ1bmN0aW9uIilNb2R1bGVbInByZVJ1biJdPVtNb2R1bGVbInByZVJ1biJdXTt3aGlsZShNb2R1bGVbInByZVJ1biJdLmxlbmd0aCl7YWRkT25QcmVSdW4oTW9kdWxlWyJwcmVSdW4iXS5zaGlmdCgpKX19Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKX1mdW5jdGlvbiBpbml0UnVudGltZSgpe3J1bnRpbWVJbml0aWFsaXplZD10cnVlO2NhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pfWZ1bmN0aW9uIHByZU1haW4oKXtjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUTUFJTl9fKX1mdW5jdGlvbiBwb3N0UnVuKCl7aWYoTW9kdWxlWyJwb3N0UnVuIl0pe2lmKHR5cGVvZiBNb2R1bGVbInBvc3RSdW4iXT09ImZ1bmN0aW9uIilNb2R1bGVbInBvc3RSdW4iXT1bTW9kdWxlWyJwb3N0UnVuIl1dO3doaWxlKE1vZHVsZVsicG9zdFJ1biJdLmxlbmd0aCl7YWRkT25Qb3N0UnVuKE1vZHVsZVsicG9zdFJ1biJdLnNoaWZ0KCkpfX1jYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKX1mdW5jdGlvbiBhZGRPblByZVJ1bihjYil7X19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpfWZ1bmN0aW9uIGFkZE9uSW5pdChjYil7X19BVElOSVRfXy51bnNoaWZ0KGNiKX1mdW5jdGlvbiBhZGRPblBvc3RSdW4oY2Ipe19fQVRQT1NUUlVOX18udW5zaGlmdChjYil9dmFyIHJ1bkRlcGVuZGVuY2llcz0wO3ZhciBydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsO3ZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtmdW5jdGlvbiBhZGRSdW5EZXBlbmRlbmN5KGlkKXtydW5EZXBlbmRlbmNpZXMrKztNb2R1bGVbIm1vbml0b3JSdW5EZXBlbmRlbmNpZXMiXT8uKHJ1bkRlcGVuZGVuY2llcyl9ZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeShpZCl7cnVuRGVwZW5kZW5jaWVzLS07TW9kdWxlWyJtb25pdG9yUnVuRGVwZW5kZW5jaWVzIl0/LihydW5EZXBlbmRlbmNpZXMpO2lmKHJ1bkRlcGVuZGVuY2llcz09MCl7aWYocnVuRGVwZW5kZW5jeVdhdGNoZXIhPT1udWxsKXtjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsfWlmKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCl7dmFyIGNhbGxiYWNrPWRlcGVuZGVuY2llc0Z1bGZpbGxlZDtkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtjYWxsYmFjaygpfX19ZnVuY3Rpb24gYWJvcnQod2hhdCl7TW9kdWxlWyJvbkFib3J0Il0/Lih3aGF0KTt3aGF0PSJBYm9ydGVkKCIrd2hhdCsiKSI7ZXJyKHdoYXQpO0FCT1JUPXRydWU7RVhJVFNUQVRVUz0xO3doYXQrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgZT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHdoYXQpO3JlYWR5UHJvbWlzZVJlamVjdChlKTt0aHJvdyBlfXZhciBkYXRhVVJJUHJlZml4PSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjt2YXIgaXNEYXRhVVJJPWZpbGVuYW1lPT5maWxlbmFtZS5zdGFydHNXaXRoKGRhdGFVUklQcmVmaXgpO3ZhciBpc0ZpbGVVUkk9ZmlsZW5hbWU9PmZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKTt2YXIgd2FzbUJpbmFyeUZpbGU7d2FzbUJpbmFyeUZpbGU9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxBR0Z6YlFFQUFBQUJwQUVhWUFGL0FYOWdBbjkvQUdBRGYzOS9BWDlnQTM5L2Z3QmdBWDhBWUFBQVlBVi9mMzkvZndCZ0JIOS9mMzhBWUFKL2Z3Ri9ZQVovZjM5L2YzOEFZQUFCZjJBRWYzOS9mUUJnQkg5L2YzOEJmMkFCZkFGOVlBSjhmd0Y4WUFGOUFYMWdBWHdCZkdBQ2ZuOEJmMkFEZkh4L0FYeGdBbng4QVh4Z0JuOThmMzkvZndGL1lBSjlmd0YvWUFKOGZ3Ri9ZQVYvZjM5L2Z3Ri9ZQU4vZm44QmZtQURmMzk5QUFJZkJRRmhBV0VBREFGaEFXSUFBd0ZoQVdNQUJRRmhBV1FBQUFGaEFXVUFBd05ZVndNR0FnME5BZ0FFQUJFRUVoTUZCUTRDQkE4UUFnQVBFQVVFQUFjRENBQUFBQWdVQXdBTURnQUVCQlVXRndFSUFRZ0JBQUFBQUFFQkJBQUFBQUFBQ2dBSkNRWUdCd2NLQWdvS0dBQUNCQXNCQXdzQkF3Z1pBd1FGQVhBQkxDd0ZCd0VCZ2dLQWdBSUdDQUYvQVVId3VBUUxCemtPQVdZQ0FBRm5BQjBCYUFCYkFXa0FVZ0ZxQUU0QmF3Qk5BV3dBU3dGdEFFTUJiZ0E5QVc4QVdnRndBRmtCY1FFQUFYSUFQZ0Z6QUVRSk1RRUFRUUVMS3lNZldEWTZPVGczVjFaVk1qbzVPRGRVVTFCUlR5Y2pEeTB0VEVWSFNnOUdTRWtQUVE5QUQwSWVQeDRLaXZzQlZ4Y0FJQUF0QUFCQklIRkZCRUFnQVNBQ0lBQVFHUm9MQzJzQkFYOGpBRUdBQW1zaUJTUUFBa0FnQWlBRFRBMEFJQVJCZ01BRWNRMEFJQVVnQVNBQ0lBTnJJZ05CZ0FJZ0EwR0FBa2tpQVJzUUJ4b2dBVVVFUUFOQUlBQWdCVUdBQWhBRklBTkJnQUpySWdOQi93RkxEUUFMQ3lBQUlBVWdBeEFGQ3lBRlFZQUNhaVFBQy9JQ0FnSi9BWDRDUUNBQ1JRMEFJQUFnQVRvQUFDQUFJQUpxSWdOQkFXc2dBVG9BQUNBQ1FRTkpEUUFnQUNBQk9nQUNJQUFnQVRvQUFTQURRUU5ySUFFNkFBQWdBMEVDYXlBQk9nQUFJQUpCQjBrTkFDQUFJQUU2QUFNZ0EwRUVheUFCT2dBQUlBSkJDVWtOQUNBQVFRQWdBR3RCQTNFaUJHb2lBeUFCUWY4QmNVR0Jnb1FJYkNJQk5nSUFJQU1nQWlBRWEwRjhjU0lFYWlJQ1FRUnJJQUUyQWdBZ0JFRUpTUTBBSUFNZ0FUWUNDQ0FESUFFMkFnUWdBa0VJYXlBQk5nSUFJQUpCREdzZ0FUWUNBQ0FFUVJsSkRRQWdBeUFCTmdJWUlBTWdBVFlDRkNBRElBRTJBaEFnQXlBQk5nSU1JQUpCRUdzZ0FUWUNBQ0FDUVJScklBRTJBZ0FnQWtFWWF5QUJOZ0lBSUFKQkhHc2dBVFlDQUNBRUlBTkJCSEZCR0hJaUJHc2lBa0VnU1EwQUlBR3RRb0dBZ0lBUWZpRUZJQU1nQkdvaEFRTkFJQUVnQlRjREdDQUJJQVUzQXhBZ0FTQUZOd01JSUFFZ0JUY0RBQ0FCUVNCcUlRRWdBa0VnYXlJQ1FSOUxEUUFMQ3lBQUMwc0JBbndnQUNBQW9pSUJJQUNpSWdJZ0FTQUJvcUlnQVVTblJqdU1oODNHUHFKRWRPZks0dmtBS3IrZ29pQUNJQUZFc3Z0dWlSQVJnVCtpUkhlc3kxUlZWY1cvb0tJZ0FLQ2d0Z3RQQVFGOElBQWdBS0lpQUNBQUlBQ2lJZ0dpSUFCRWFWRHU0RUtUK1Q2aVJDY2VEK2lId0ZhL29LSWdBVVJDT2dYaFUxV2xQNklnQUVTQlhnejkvLy9mdjZKRUFBQUFBQUFBOEQrZ29LQzJDM1FCQVg4Z0FrVUVRQ0FBS0FJRUlBRW9BZ1JHRHdzZ0FDQUJSZ1JBUVFFUEN5QUJLQUlFSWdJdEFBQWhBUUpBSUFBb0FnUWlBeTBBQUNJQVJRMEFJQUFnQVVjTkFBTkFJQUl0QUFFaEFTQURMUUFCSWdCRkRRRWdBa0VCYWlFQ0lBTkJBV29oQXlBQUlBRkdEUUFMQ3lBQUlBRkdDelVCQVg5QkFTQUFJQUJCQVUwYklRQUNRQU5BSUFBUUpTSUJEUUZCNkRnb0FnQWlBUVJBSUFFUkJRQU1BUXNMRUFJQUN5QUJDOWtMQVFkL0FrQWdBRVVOQUNBQVFRaHJJZ01nQUVFRWF5Z0NBQ0lCUVhoeElnQnFJUVVDUUNBQlFRRnhEUUFnQVVFQ2NVVU5BU0FESUFNb0FnQWlBV3NpQTBHSU5TZ0NBRWtOQVNBQUlBRnFJUUFDUUFKQVFZdzFLQUlBSUFOSEJFQWdBeWdDRENFQ0lBRkIvd0ZOQkVBZ0FVRURkaUVCSUFNb0FnZ2lCQ0FDUmdSQVFmZzBRZmcwS0FJQVFYNGdBWGR4TmdJQURBVUxJQVFnQWpZQ0RDQUNJQVEyQWdnTUJBc2dBeWdDR0NFR0lBSWdBMGNFUUNBREtBSUlJZ0VnQWpZQ0RDQUNJQUUyQWdnTUF3c2dBeWdDRkNJQkJIOGdBMEVVYWdVZ0F5Z0NFQ0lCUlEwQ0lBTkJFR29MSVFRRFFDQUVJUWNnQVNJQ1FSUnFJUVFnQWlnQ0ZDSUJEUUFnQWtFUWFpRUVJQUlvQWhBaUFRMEFDeUFIUVFBMkFnQU1BZ3NnQlNnQ0JDSUJRUU54UVFOSERRSkJnRFVnQURZQ0FDQUZJQUZCZm5FMkFnUWdBeUFBUVFGeU5nSUVJQVVnQURZQ0FBOExRUUFoQWdzZ0JrVU5BQUpBSUFNb0Fod2lBVUVDZEVHb04yb2lCQ2dDQUNBRFJnUkFJQVFnQWpZQ0FDQUNEUUZCL0RSQi9EUW9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0JrRVFRUlFnQmlnQ0VDQURSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUdOZ0lZSUFNb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQU1vQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QURJQVZQRFFBZ0JTZ0NCQ0lCUVFGeFJRMEFBa0FDUUFKQUFrQWdBVUVDY1VVRVFFR1FOU2dDQUNBRlJnUkFRWkExSUFNMkFnQkJoRFZCaERVb0FnQWdBR29pQURZQ0FDQURJQUJCQVhJMkFnUWdBMEdNTlNnQ0FFY05Ca0dBTlVFQU5nSUFRWXcxUVFBMkFnQVBDMEdNTlNnQ0FDQUZSZ1JBUVl3MUlBTTJBZ0JCZ0RWQmdEVW9BZ0FnQUdvaUFEWUNBQ0FESUFCQkFYSTJBZ1FnQUNBRGFpQUFOZ0lBRHdzZ0FVRjRjU0FBYWlFQUlBVW9BZ3doQWlBQlFmOEJUUVJBSUFGQkEzWWhBU0FGS0FJSUlnUWdBa1lFUUVINE5FSDROQ2dDQUVGK0lBRjNjVFlDQUF3RkN5QUVJQUkyQWd3Z0FpQUVOZ0lJREFRTElBVW9BaGdoQmlBQ0lBVkhCRUJCaURVb0FnQWFJQVVvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdEQ3lBRktBSVVJZ0VFZnlBRlFSUnFCU0FGS0FJUUlnRkZEUUlnQlVFUWFnc2hCQU5BSUFRaEJ5QUJJZ0pCRkdvaEJDQUNLQUlVSWdFTkFDQUNRUkJxSVFRZ0FpZ0NFQ0lCRFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBeUFBUVFGeU5nSUVJQUFnQTJvZ0FEWUNBQXdEQzBFQUlRSUxJQVpGRFFBQ1FDQUZLQUljSWdGQkFuUkJxRGRxSWdRb0FnQWdCVVlFUUNBRUlBSTJBZ0FnQWcwQlFmdzBRZncwS0FJQVFYNGdBWGR4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUNOZ0lBSUFKRkRRRUxJQUlnQmpZQ0dDQUZLQUlRSWdFRVFDQUNJQUUyQWhBZ0FTQUNOZ0lZQ3lBRktBSVVJZ0ZGRFFBZ0FpQUJOZ0lVSUFFZ0FqWUNHQXNnQXlBQVFRRnlOZ0lFSUFBZ0Eyb2dBRFlDQUNBRFFZdzFLQUlBUncwQVFZQTFJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCb0RWcUlRRUNmMEg0TkNnQ0FDSUVRUUVnQUVFRGRuUWlBSEZGQkVCQitEUWdBQ0FFY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBRE5nSUlJQUFnQXpZQ0RDQURJQUUyQWd3Z0F5QUFOZ0lJRHd0Qkh5RUNJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUUlMSUFNZ0FqWUNIQ0FEUWdBM0FoQWdBa0VDZEVHb04yb2hCd0ovQWtBQ2YwSDhOQ2dDQUNJQlFRRWdBblFpQkhGRkJFQkIvRFFnQVNBRWNqWUNBRUVZSVFJZ0J5RUVRUWdNQVFzZ0FFRVpJQUpCQVhaclFRQWdBa0VmUnh0MElRSWdCeWdDQUNFRUEwQWdCQ0lCS0FJRVFYaHhJQUJHRFFJZ0FrRWRkaUVFSUFKQkFYUWhBaUFCSUFSQkJIRnFRUkJxSWdjb0FnQWlCQTBBQzBFWUlRSWdBU0VFUVFnTElRQWdBeUlCREFFTElBRW9BZ2dpQkNBRE5nSU1RUWdoQWlBQlFRaHFJUWRCR0NFQVFRQUxJUVVnQnlBRE5nSUFJQUlnQTJvZ0JEWUNBQ0FESUFFMkFnd2dBQ0FEYWlBRk5nSUFRWmcxUVpnMUtBSUFRUUZySWdCQmZ5QUFHellDQUFzTFR3RUNmMEdZS3lnQ0FDSUJJQUJCQjJwQmVIRWlBbW9oQUFKQUlBSkJBQ0FBSUFGTkcwVUVRQ0FBUHdCQkVIUk5EUUVnQUJBRERRRUxRYmd6UVRBMkFnQkJmdzhMUVpncklBQTJBZ0FnQVF1REFRSUZmd0YrQWtBZ0FFS0FnSUNBRUZRRVFDQUFJUWNNQVFzRFFDQUJRUUZySWdFZ0FDQUFRZ3FBSWdkQ0NuNTlwMEV3Y2pvQUFDQUFRdi8vLy8rZkFWWWhCU0FISVFBZ0JRMEFDd3NnQjZjaUFnUkFBMEFnQVVFQmF5SUJJQUlnQWtFS2JpSURRUXBzYTBFd2Nqb0FBQ0FDUVFsTElRWWdBeUVDSUFZTkFBc0xJQUVMQmdBZ0FCQU1DNWtCQVFOOElBQWdBS0lpQXlBRElBT2lvaUFEUkh6VnoxbzYyZVU5b2tUcm5DdUs1dVZhdnFDaUlBTWdBMFI5L3JGWDR4M0hQcUpFMVdIQkdhQUJLcitnb2tTbStCQVJFUkdCUDZDZ0lRVWdBeUFBb2lFRUlBSkZCRUFnQkNBRElBV2lSRWxWVlZWVlZjVy9vS0lnQUtBUEN5QUFJQU1nQVVRQUFBQUFBQURnUDZJZ0JTQUVvcUdpSUFHaElBUkVTVlZWVlZWVnhUK2lvS0VMa2dFQkEzeEVBQUFBQUFBQThEOGdBQ0FBb2lJQ1JBQUFBQUFBQU9BL29pSURvU0lFUkFBQUFBQUFBUEEvSUFTaElBT2hJQUlnQWlBQ0lBSkVrQlhMR2FBQitqNmlSSGRSd1Jac3dWYS9vS0pFVEZWVlZWVlZwVCtnb2lBQ0lBS2lJZ01nQTZJZ0FpQUNSTlE0aUw3cCtxaTlva1RFc2JTOW51NGhQcUNpUksxU25JQlBmcEsrb0tLZ29pQUFJQUdpb2FDZ0N5b0JBWDlCQkJBa0lnQkJwQ2cyQWdBZ0FFSDhKellDQUNBQVFaQW9OZ0lBSUFCQmdDbEJBUkFCQUF0ZkFRTi9RUWdRSkNJQVFhUW9OZ0lBSUFCQmxDazJBZ0JCaVFrUUxDSUJRUTFxRUFzaUFrRUFOZ0lJSUFJZ0FUWUNCQ0FDSUFFMkFnQWdBQ0FDUVF4cVFZa0pJQUZCQVdvUUZUWUNCQ0FBUWNRcE5nSUFJQUJCNUNsQkFoQUJBQXVvQVFBQ1FDQUJRWUFJVGdSQUlBQkVBQUFBQUFBQTRIK2lJUUFnQVVIL0Qwa0VRQ0FCUWY4SGF5RUJEQUlMSUFCRUFBQUFBQUFBNEgraUlRQkIvUmNnQVNBQlFmMFhUeHRCL2c5cklRRU1BUXNnQVVHQmVFb05BQ0FBUkFBQUFBQUFBR0FEb2lFQUlBRkJ1SEJMQkVBZ0FVSEpCMm9oQVF3QkN5QUFSQUFBQUFBQUFHQURvaUVBUWZCb0lBRWdBVUh3YUUwYlFaSVBhaUVCQ3lBQUlBRkIvd2RxclVJMGhyK2lDNEFFQVFOL0lBSkJnQVJQQkVBZ0FDQUJJQUlRQkNBQUR3c2dBQ0FDYWlFREFrQWdBQ0FCYzBFRGNVVUVRQUpBSUFCQkEzRkZCRUFnQUNFQ0RBRUxJQUpGQkVBZ0FDRUNEQUVMSUFBaEFnTkFJQUlnQVMwQUFEb0FBQ0FCUVFGcUlRRWdBa0VCYWlJQ1FRTnhSUTBCSUFJZ0Ewa05BQXNMQWtBZ0EwRjhjU0lFUWNBQVNRMEFJQUlnQkVGQWFpSUZTdzBBQTBBZ0FpQUJLQUlBTmdJQUlBSWdBU2dDQkRZQ0JDQUNJQUVvQWdnMkFnZ2dBaUFCS0FJTU5nSU1JQUlnQVNnQ0VEWUNFQ0FDSUFFb0FoUTJBaFFnQWlBQktBSVlOZ0lZSUFJZ0FTZ0NIRFlDSENBQ0lBRW9BaUEyQWlBZ0FpQUJLQUlrTmdJa0lBSWdBU2dDS0RZQ0tDQUNJQUVvQWl3MkFpd2dBaUFCS0FJd05nSXdJQUlnQVNnQ05EWUNOQ0FDSUFFb0FqZzJBamdnQWlBQktBSThOZ0k4SUFGQlFHc2hBU0FDUVVCcklnSWdCVTBOQUFzTElBSWdCRThOQVFOQUlBSWdBU2dDQURZQ0FDQUJRUVJxSVFFZ0FrRUVhaUlDSUFSSkRRQUxEQUVMSUFOQkJFa0VRQ0FBSVFJTUFRc2dBQ0FEUVFScklnUkxCRUFnQUNFQ0RBRUxJQUFoQWdOQUlBSWdBUzBBQURvQUFDQUNJQUV0QUFFNkFBRWdBaUFCTFFBQ09nQUNJQUlnQVMwQUF6b0FBeUFCUVFScUlRRWdBa0VFYWlJQ0lBUk5EUUFMQ3lBQ0lBTkpCRUFEUUNBQ0lBRXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2lBaUFEUncwQUN3c2dBQXNHQUNBQUVBd0wvUUlDQVh3RGZ5TUFRUkJySWdRa0FBSkFJQUM4SWdOQi8vLy8vd2R4SWdKQjJwK2srZ05OQkVBZ0FrR0FnSURNQTBrTkFTQUF1eEFJSVFBTUFRc2dBa0hScCsyREJFMEVRQ0FBdXlFQklBSkI0NWZiZ0FSTkJFQWdBMEVBU0FSQUlBRkVHQzFFVlBzaCtUK2dFQW1NSVFBTUF3c2dBVVFZTFVSVSt5SDV2NkFRQ1NFQURBSUxSQmd0UkZUN0lRbkFSQmd0UkZUN0lRbEFJQU5CQUU0YklBR2dtaEFJSVFBTUFRc2dBa0hWNDRpSEJFMEVRQ0FDUWQvYnY0VUVUUVJBSUFDN0lRRWdBMEVBU0FSQUlBRkUwaUV6ZjN6WkVrQ2dFQWtoQUF3REN5QUJSTkloTTM5ODJSTEFvQkFKakNFQURBSUxSQmd0UkZUN0lSbEFSQmd0UkZUN0lSbkFJQU5CQUVnYklBQzdvQkFJSVFBTUFRc2dBa0dBZ0lEOEIwOEVRQ0FBSUFDVElRQU1BUXNnQUNBRVFRaHFFQzhoQWlBRUt3TUlJUUVDUUFKQUFrQUNRQ0FDUVFOeERnTUFBUUlEQ3lBQkVBZ2hBQXdEQ3lBQkVBa2hBQXdDQ3lBQm1oQUlJUUFNQVFzZ0FSQUpqQ0VBQ3lBRVFSQnFKQUFnQUF2QkFRSUNmd0Y4SXdCQkVHc2lBU1FBQWtBZ0FMMUNJSWluUWYvLy8vOEhjU0lDUWZ2RHBQOERUUVJBSUFKQmdJREE4Z05KRFFFZ0FFUUFBQUFBQUFBQUFFRUFFQkFoQUF3QkN5QUNRWUNBd1A4SFR3UkFJQUFnQUtFaEFBd0JDeUFBSUFFUU1DRUNJQUVyQXdnaEFDQUJLd01BSVFNQ1FBSkFBa0FDUUNBQ1FRTnhEZ01BQVFJREN5QURJQUJCQVJBUUlRQU1Bd3NnQXlBQUVCRWhBQXdDQ3lBRElBQkJBUkFRbWlFQURBRUxJQU1nQUJBUm1pRUFDeUFCUVJCcUpBQWdBQXZDQVFFRGZ3SkFJQUVnQWlnQ0VDSURCSDhnQXdVZ0FoQWFEUUVnQWlnQ0VBc2dBaWdDRkNJRWEwc0VRQ0FDSUFBZ0FTQUNLQUlrRVFJQUR3c0NRQUpBSUFJb0FsQkJBRWdOQUNBQlJRMEFJQUVoQXdOQUlBQWdBMm9pQlVFQmF5MEFBRUVLUndSQUlBTkJBV3NpQXcwQkRBSUxDeUFDSUFBZ0F5QUNLQUlrRVFJQUlnUWdBMGtOQWlBQklBTnJJUUVnQWlnQ0ZDRUVEQUVMSUFBaEJVRUFJUU1MSUFRZ0JTQUJFQlVhSUFJZ0FpZ0NGQ0FCYWpZQ0ZDQUJJQU5xSVFRTElBUUxXUUVCZnlBQUlBQW9Ba2dpQVVFQmF5QUJjallDU0NBQUtBSUFJZ0ZCQ0hFRVFDQUFJQUZCSUhJMkFnQkJmdzhMSUFCQ0FEY0NCQ0FBSUFBb0Fpd2lBVFlDSENBQUlBRTJBaFFnQUNBQklBQW9BakJxTmdJUVFRQUw2UUlEQTM4QmZBRjlJd0JCRUdzaUF5UUFBbjBnQUx3aUFrSC8vLy8vQjNFaUFVSGFuNlQ2QTAwRVFFTUFBSUEvSUFGQmdJQ0F6QU5KRFFFYUlBQzdFQWtNQVFzZ0FVSFJwKzJEQkUwRVFDQUJRZVNYMjRBRVR3UkFSQmd0UkZUN0lRbEFSQmd0UkZUN0lRbkFJQUpCQUVnYklBQzdvQkFKakF3Q0N5QUF1eUVFSUFKQkFFZ0VRQ0FFUkJndFJGVDdJZmsvb0JBSURBSUxSQmd0UkZUN0lmay9JQVNoRUFnTUFRc2dBVUhWNDRpSEJFMEVRQ0FCUWVEYnY0VUVUd1JBUkJndFJGVDdJUmxBUkJndFJGVDdJUm5BSUFKQkFFZ2JJQUM3b0JBSkRBSUxJQUpCQUVnRVFFVFNJVE4vZk5rU3dDQUF1NkVRQ0F3Q0N5QUF1MFRTSVROL2ZOa1N3S0FRQ0F3QkN5QUFJQUNUSUFGQmdJQ0EvQWRQRFFBYUlBQWdBMEVJYWhBdklRRWdBeXNEQ0NFRUFrQUNRQUpBQWtBZ0FVRURjUTREQUFFQ0F3c2dCQkFKREFNTElBU2FFQWdNQWdzZ0JCQUpqQXdCQ3lBRUVBZ0xJUVVnQTBFUWFpUUFJQVVMdlFFQ0Fud0NmeU1BUVJCcklnTWtBQUo4SUFDOVFpQ0lwMEgvLy8vL0IzRWlCRUg3dzZUL0EwMEVRRVFBQUFBQUFBRHdQeUFFUVo3Qm12SURTUTBCR2lBQVJBQUFBQUFBQUFBQUVCRU1BUXNnQUNBQW9TQUVRWUNBd1A4SFR3MEFHaUFBSUFNUU1DRUVJQU1yQXdnaEFDQURLd01BSVFFQ1FBSkFBa0FDUUNBRVFRTnhEZ01BQVFJREN5QUJJQUFRRVF3REN5QUJJQUJCQVJBUW1nd0NDeUFCSUFBUUVab01BUXNnQVNBQVFRRVFFQXNoQWlBRFFSQnFKQUFnQWdzVEFFSFVORUhjTXpZQ0FFR01ORUVxTmdJQUN3c0FJQUFRSHhvZ0FCQU1DekVCQW44Z0FFR1VLVFlDQUNBQUtBSUVRUXhySWdFZ0FTZ0NDRUVCYXlJQ05nSUlJQUpCQUVnRVFDQUJFQllMSUFBTG1nRUFJQUJCQVRvQU5RSkFJQUFvQWdRZ0FrY05BQ0FBUVFFNkFEUUNRQ0FBS0FJUUlnSkZCRUFnQUVFQk5nSWtJQUFnQXpZQ0dDQUFJQUUyQWhBZ0EwRUJSdzBDSUFBb0FqQkJBVVlOQVF3Q0N5QUJJQUpHQkVBZ0FDZ0NHQ0lDUVFKR0JFQWdBQ0FETmdJWUlBTWhBZ3NnQUNnQ01FRUJSdzBDSUFKQkFVWU5BUXdDQ3lBQUlBQW9BaVJCQVdvMkFpUUxJQUJCQVRvQU5nc0xYUUVCZnlBQUtBSVFJZ05GQkVBZ0FFRUJOZ0lrSUFBZ0FqWUNHQ0FBSUFFMkFoQVBDd0pBSUFFZ0EwWUVRQ0FBS0FJWVFRSkhEUUVnQUNBQ05nSVlEd3NnQUVFQk9nQTJJQUJCQWpZQ0dDQUFJQUFvQWlSQkFXbzJBaVFMQzRBREFRUi9Jd0JCOEFCcklnSWtBQ0FBS0FJQUlnTkJCR3NvQWdBaEJDQURRUWhyS0FJQUlRVWdBa0lBTndKUUlBSkNBRGNDV0NBQ1FnQTNBbUFnQWtJQU53Qm5JQUpDQURjQ1NDQUNRUUEyQWtRZ0FrSFVKVFlDUUNBQ0lBQTJBandnQWlBQk5nSTRJQUFnQldvaEF3SkFJQVFnQVVFQUVBb0VRRUVBSUFNZ0JSc2hBQXdCQ3lBQUlBTk9CRUFnQWtJQU53QXZJQUpDQURjQ0dDQUNRZ0EzQWlBZ0FrSUFOd0lvSUFKQ0FEY0NFQ0FDUVFBMkFnd2dBaUFCTmdJSUlBSWdBRFlDQkNBQ0lBUTJBZ0FnQWtFQk5nSXdJQVFnQWlBRElBTkJBVUVBSUFRb0FnQW9BaFFSQ1FBZ0FpZ0NHQTBCQzBFQUlRQWdCQ0FDUVRocUlBTkJBVUVBSUFRb0FnQW9BaGdSQmdBQ1FBSkFJQUlvQWx3T0FnQUJBZ3NnQWlnQ1RFRUFJQUlvQWxoQkFVWWJRUUFnQWlnQ1ZFRUJSaHRCQUNBQ0tBSmdRUUZHR3lFQURBRUxJQUlvQWxCQkFVY0VRQ0FDS0FKZ0RRRWdBaWdDVkVFQlJ3MEJJQUlvQWxoQkFVY05BUXNnQWlnQ1NDRUFDeUFDUWZBQWFpUUFJQUFMQkFBZ0FBc09BQ0FBUWRBQWFoQWxRZEFBYWd2Z0p3RU1meU1BUVJCcklnb2tBQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCK0RRb0FnQWlCRUVRSUFCQkMycEIrQU54SUFCQkMwa2JJZ1pCQTNZaUFIWWlBVUVEY1FSQUFrQWdBVUYvYzBFQmNTQUFhaUlDUVFOMElnRkJvRFZxSWdBZ0FVR29OV29vQWdBaUFTZ0NDQ0lGUmdSQVFmZzBJQVJCZmlBQ2QzRTJBZ0FNQVFzZ0JTQUFOZ0lNSUFBZ0JUWUNDQXNnQVVFSWFpRUFJQUVnQWtFRGRDSUNRUU55TmdJRUlBRWdBbW9pQVNBQktBSUVRUUZ5TmdJRURBc0xJQVpCZ0RVb0FnQWlDRTBOQVNBQkJFQUNRRUVDSUFCMElnSkJBQ0FDYTNJZ0FTQUFkSEZvSWdGQkEzUWlBRUdnTldvaUFpQUFRYWcxYWlnQ0FDSUFLQUlJSWdWR0JFQkIrRFFnQkVGK0lBRjNjU0lFTmdJQURBRUxJQVVnQWpZQ0RDQUNJQVUyQWdnTElBQWdCa0VEY2pZQ0JDQUFJQVpxSWdjZ0FVRURkQ0lCSUFacklnVkJBWEkyQWdRZ0FDQUJhaUFGTmdJQUlBZ0VRQ0FJUVhoeFFhQTFhaUVCUVl3MUtBSUFJUUlDZnlBRVFRRWdDRUVEZG5RaUEzRkZCRUJCK0RRZ0F5QUVjallDQUNBQkRBRUxJQUVvQWdnTElRTWdBU0FDTmdJSUlBTWdBallDRENBQ0lBRTJBZ3dnQWlBRE5nSUlDeUFBUVFocUlRQkJqRFVnQnpZQ0FFR0FOU0FGTmdJQURBc0xRZncwS0FJQUlndEZEUUVnQzJoQkFuUkJxRGRxS0FJQUlnSW9BZ1JCZUhFZ0Jtc2hBeUFDSVFFRFFBSkFJQUVvQWhBaUFFVUVRQ0FCS0FJVUlnQkZEUUVMSUFBb0FnUkJlSEVnQm1zaUFTQURJQUVnQTBraUFSc2hBeUFBSUFJZ0FSc2hBaUFBSVFFTUFRc0xJQUlvQWhnaENTQUNJQUlvQWd3aUFFY0VRRUdJTlNnQ0FCb2dBaWdDQ0NJQklBQTJBZ3dnQUNBQk5nSUlEQW9MSUFJb0FoUWlBUVIvSUFKQkZHb0ZJQUlvQWhBaUFVVU5BeUFDUVJCcUN5RUZBMEFnQlNFSElBRWlBRUVVYWlFRklBQW9BaFFpQVEwQUlBQkJFR29oQlNBQUtBSVFJZ0VOQUFzZ0IwRUFOZ0lBREFrTFFYOGhCaUFBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VHUWZ3MEtBSUFJZ2RGRFFCQkFDQUdheUVEQWtBQ1FBSkFBbjlCQUNBR1FZQUNTUTBBR2tFZklBWkIvLy8vQjBzTkFCb2dCa0VtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lDRUVDZEVHb04yb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVpCR1NBSVFRRjJhMEVBSUFoQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBWnJJZ1FnQTA4TkFDQUJJUVVnQkNJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCQ0FFSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0JCc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUZja1VFUUVFQUlRVkJBaUFJZENJQVFRQWdBR3R5SUFkeElnQkZEUU1nQUdoQkFuUkJxRGRxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUdheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FGSUFFYklRVWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JVVU5BQ0FEUVlBMUtBSUFJQVpyVHcwQUlBVW9BaGdoQ0NBRklBVW9BZ3dpQUVjRVFFR0lOU2dDQUJvZ0JTZ0NDQ0lCSUFBMkFnd2dBQ0FCTmdJSURBZ0xJQVVvQWhRaUFRUi9JQVZCRkdvRklBVW9BaEFpQVVVTkF5QUZRUkJxQ3lFQ0EwQWdBaUVFSUFFaUFFRVVhaUVDSUFBb0FoUWlBUTBBSUFCQkVHb2hBaUFBS0FJUUlnRU5BQXNnQkVFQU5nSUFEQWNMSUFaQmdEVW9BZ0FpQlUwRVFFR01OU2dDQUNFQUFrQWdCU0FHYXlJQlFSQlBCRUFnQUNBR2FpSUNJQUZCQVhJMkFnUWdBQ0FGYWlBQk5nSUFJQUFnQmtFRGNqWUNCQXdCQ3lBQUlBVkJBM0kyQWdRZ0FDQUZhaUlCSUFFb0FnUkJBWEkyQWdSQkFDRUNRUUFoQVF0QmdEVWdBVFlDQUVHTU5TQUNOZ0lBSUFCQkNHb2hBQXdKQ3lBR1FZUTFLQUlBSWdKSkJFQkJoRFVnQWlBR2F5SUJOZ0lBUVpBMVFaQTFLQUlBSWdBZ0Jtb2lBallDQUNBQ0lBRkJBWEkyQWdRZ0FDQUdRUU55TmdJRUlBQkJDR29oQUF3SkMwRUFJUUFnQmtFdmFpSURBbjlCMERnb0FnQUVRRUhZT0NnQ0FBd0JDMEhjT0VKL053SUFRZFE0UW9DZ2dJQ0FnQVEzQWdCQjBEZ2dDa0VNYWtGd2NVSFlxdFdxQlhNMkFnQkI1RGhCQURZQ0FFRzBPRUVBTmdJQVFZQWdDeUlCYWlJRVFRQWdBV3NpQjNFaUFTQUdUUTBJUWJBNEtBSUFJZ1VFUUVHb09DZ0NBQ0lJSUFGcUlna2dDRTBOQ1NBRklBbEpEUWtMQWtCQnREZ3RBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR1FOU2dDQUNJRkJFQkJ1RGdoQUFOQUlBVWdBQ2dDQUNJSVR3UkFJQWdnQUNnQ0JHb2dCVXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQTBpQWtGL1JnMERJQUVoQkVIVU9DZ0NBQ0lBUVFGcklnVWdBbkVFUUNBQklBSnJJQUlnQldwQkFDQUFhM0ZxSVFRTElBUWdCazBOQTBHd09DZ0NBQ0lBQkVCQnFEZ29BZ0FpQlNBRWFpSUhJQVZORFFRZ0FDQUhTUTBFQ3lBRUVBMGlBQ0FDUncwQkRBVUxJQVFnQW1zZ0IzRWlCQkFOSWdJZ0FDZ0NBQ0FBS0FJRWFrWU5BU0FDSVFBTElBQkJmMFlOQVNBR1FUQnFJQVJOQkVBZ0FDRUNEQVFMUWRnNEtBSUFJZ0lnQXlBRWEycEJBQ0FDYTNFaUFoQU5RWDlHRFFFZ0FpQUVhaUVFSUFBaEFnd0RDeUFDUVg5SERRSUxRYlE0UWJRNEtBSUFRUVJ5TmdJQUN5QUJFQTBoQWtFQUVBMGhBQ0FDUVg5R0RRVWdBRUYvUmcwRklBQWdBazBOQlNBQUlBSnJJZ1FnQmtFb2FrME5CUXRCcURoQnFEZ29BZ0FnQkdvaUFEWUNBRUdzT0NnQ0FDQUFTUVJBUWF3NElBQTJBZ0FMQWtCQmtEVW9BZ0FpQXdSQVFiZzRJUUFEUUNBQ0lBQW9BZ0FpQVNBQUtBSUVJZ1ZxUmcwQ0lBQW9BZ2dpQUEwQUN3d0VDMEdJTlNnQ0FDSUFRUUFnQUNBQ1RSdEZCRUJCaURVZ0FqWUNBQXRCQUNFQVFidzRJQVEyQWdCQnVEZ2dBallDQUVHWU5VRi9OZ0lBUVp3MVFkQTRLQUlBTmdJQVFjUTRRUUEyQWdBRFFDQUFRUU4wSWdGQnFEVnFJQUZCb0RWcUlnVTJBZ0FnQVVHc05Xb2dCVFlDQUNBQVFRRnFJZ0JCSUVjTkFBdEJoRFVnQkVFb2F5SUFRWGdnQW10QkIzRWlBV3NpQlRZQ0FFR1FOU0FCSUFKcUlnRTJBZ0FnQVNBRlFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHVU5VSGdPQ2dDQURZQ0FBd0VDeUFDSUFOTkRRSWdBU0FEU3cwQ0lBQW9BZ3hCQ0hFTkFpQUFJQVFnQldvMkFnUkJrRFVnQTBGNElBTnJRUWR4SWdCcUlnRTJBZ0JCaERWQmhEVW9BZ0FnQkdvaUFpQUFheUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUNJQU5xUVNnMkFnUkJsRFZCNERnb0FnQTJBZ0FNQXd0QkFDRUFEQVlMUVFBaEFBd0VDMEdJTlNnQ0FDQUNTd1JBUVlnMUlBSTJBZ0FMSUFJZ0JHb2hBVUc0T0NFQUFrQURRQ0FCSUFBb0FnQkhCRUFnQUNnQ0NDSUFEUUVNQWdzTElBQXRBQXhCQ0hGRkRRTUxRYmc0SVFBRFFBSkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQlNBRFN3MEJDeUFBS0FJSUlRQU1BUXNMUVlRMUlBUkJLR3NpQUVGNElBSnJRUWR4SWdGcklnYzJBZ0JCa0RVZ0FTQUNhaUlCTmdJQUlBRWdCMEVCY2pZQ0JDQUFJQUpxUVNnMkFnUkJsRFZCNERnb0FnQTJBZ0FnQXlBRlFTY2dCV3RCQjNGcVFTOXJJZ0FnQUNBRFFSQnFTUnNpQVVFYk5nSUVJQUZCd0RncEFnQTNBaEFnQVVHNE9Da0NBRGNDQ0VIQU9DQUJRUWhxTmdJQVFidzRJQVEyQWdCQnVEZ2dBallDQUVIRU9FRUFOZ0lBSUFGQkdHb2hBQU5BSUFCQkJ6WUNCQ0FBUVFocUlRd2dBRUVFYWlFQUlBd2dCVWtOQUFzZ0FTQURSZzBBSUFFZ0FTZ0NCRUYrY1RZQ0JDQURJQUVnQTJzaUFrRUJjallDQkNBQklBSTJBZ0FDZnlBQ1FmOEJUUVJBSUFKQmVIRkJvRFZxSVFBQ2YwSDROQ2dDQUNJQlFRRWdBa0VEZG5RaUFuRkZCRUJCK0RRZ0FTQUNjallDQUNBQURBRUxJQUFvQWdnTElRRWdBQ0FETmdJSUlBRWdBellDREVFTUlRSkJDQXdCQzBFZklRQWdBa0gvLy84SFRRUkFJQUpCSmlBQ1FRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQXlBQU5nSWNJQU5DQURjQ0VDQUFRUUowUWFnM2FpRUJBa0FDUUVIOE5DZ0NBQ0lGUVFFZ0FIUWlCSEZGQkVCQi9EUWdCQ0FGY2pZQ0FDQUJJQU0yQWdBTUFRc2dBa0VaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFKR0RRSWdBRUVkZGlFRklBQkJBWFFoQUNBQklBVkJCSEZxSWdRb0FoQWlCUTBBQ3lBRUlBTTJBaEFMSUFNZ0FUWUNHRUVJSVFJZ0F5SUJJUUJCREF3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBeUFBTmdJSVFRQWhBRUVZSVFKQkRBc2dBMm9nQVRZQ0FDQUNJQU5xSUFBMkFnQUxRWVExS0FJQUlnQWdCazBOQUVHRU5TQUFJQVpySWdFMkFnQkJrRFZCa0RVb0FnQWlBQ0FHYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFaQkEzSTJBZ1FnQUVFSWFpRUFEQVFMUWJnelFUQTJBZ0JCQUNFQURBTUxJQUFnQWpZQ0FDQUFJQUFvQWdRZ0JHbzJBZ1FnQWtGNElBSnJRUWR4YWlJSUlBWkJBM0kyQWdRZ0FVRjRJQUZyUVFkeGFpSUVJQVlnQ0dvaUEyc2hCd0pBUVpBMUtBSUFJQVJHQkVCQmtEVWdBellDQUVHRU5VR0VOU2dDQUNBSGFpSUFOZ0lBSUFNZ0FFRUJjallDQkF3QkMwR01OU2dDQUNBRVJnUkFRWXcxSUFNMkFnQkJnRFZCZ0RVb0FnQWdCMm9pQURZQ0FDQURJQUJCQVhJMkFnUWdBQ0FEYWlBQU5nSUFEQUVMSUFRb0FnUWlBRUVEY1VFQlJnUkFJQUJCZUhFaENTQUVLQUlNSVFJQ1FDQUFRZjhCVFFSQUlBUW9BZ2dpQVNBQ1JnUkFRZmcwUWZnMEtBSUFRWDRnQUVFRGRuZHhOZ0lBREFJTElBRWdBallDRENBQ0lBRTJBZ2dNQVFzZ0JDZ0NHQ0VHQWtBZ0FpQUVSd1JBUVlnMUtBSUFHaUFFS0FJSUlnQWdBallDRENBQ0lBQTJBZ2dNQVFzQ1FDQUVLQUlVSWdBRWZ5QUVRUlJxQlNBRUtBSVFJZ0JGRFFFZ0JFRVFhZ3NoQVFOQUlBRWhCU0FBSWdKQkZHb2hBU0FBS0FJVUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVZCQURZQ0FBd0JDMEVBSVFJTElBWkZEUUFDUUNBRUtBSWNJZ0JCQW5SQnFEZHFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUWZ3MFFmdzBLQUlBUVg0Z0FIZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCRVliYWlBQ05nSUFJQUpGRFFFTElBSWdCallDR0NBRUtBSVFJZ0FFUUNBQ0lBQTJBaEFnQUNBQ05nSVlDeUFFS0FJVUlnQkZEUUFnQWlBQU5nSVVJQUFnQWpZQ0dBc2dCeUFKYWlFSElBUWdDV29pQkNnQ0JDRUFDeUFFSUFCQmZuRTJBZ1FnQXlBSFFRRnlOZ0lFSUFNZ0Iyb2dCellDQUNBSFFmOEJUUVJBSUFkQmVIRkJvRFZxSVFBQ2YwSDROQ2dDQUNJQlFRRWdCMEVEZG5RaUFuRkZCRUJCK0RRZ0FTQUNjallDQUNBQURBRUxJQUFvQWdnTElRRWdBQ0FETmdJSUlBRWdBellDRENBRElBQTJBZ3dnQXlBQk5nSUlEQUVMUVI4aEFpQUhRZi8vL3dkTkJFQWdCMEVtSUFkQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2FpRUNDeUFESUFJMkFod2dBMElBTndJUUlBSkJBblJCcURkcUlRQUNRQUpBUWZ3MEtBSUFJZ0ZCQVNBQ2RDSUZjVVVFUUVIOE5DQUJJQVZ5TmdJQUlBQWdBellDQUF3QkN5QUhRUmtnQWtFQmRtdEJBQ0FDUVI5SEczUWhBaUFBS0FJQUlRRURRQ0FCSWdBb0FnUkJlSEVnQjBZTkFpQUNRUjEySVFFZ0FrRUJkQ0VDSUFBZ0FVRUVjV29pQlNnQ0VDSUJEUUFMSUFVZ0F6WUNFQXNnQXlBQU5nSVlJQU1nQXpZQ0RDQURJQU0yQWdnTUFRc2dBQ2dDQ0NJQklBTTJBZ3dnQUNBRE5nSUlJQU5CQURZQ0dDQURJQUEyQWd3Z0F5QUJOZ0lJQ3lBSVFRaHFJUUFNQWdzQ1FDQUlSUTBBQWtBZ0JTZ0NIQ0lCUVFKMFFhZzNhaUlDS0FJQUlBVkdCRUFnQWlBQU5nSUFJQUFOQVVIOE5DQUhRWDRnQVhkeElnYzJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUZSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUlOZ0lZSUFVb0FoQWlBUVJBSUFBZ0FUWUNFQ0FCSUFBMkFoZ0xJQVVvQWhRaUFVVU5BQ0FBSUFFMkFoUWdBU0FBTmdJWUN3SkFJQU5CRDAwRVFDQUZJQU1nQm1vaUFFRURjallDQkNBQUlBVnFJZ0FnQUNnQ0JFRUJjallDQkF3QkN5QUZJQVpCQTNJMkFnUWdCU0FHYWlJRUlBTkJBWEkyQWdRZ0F5QUVhaUFETmdJQUlBTkIvd0ZOQkVBZ0EwRjRjVUdnTldvaEFBSi9RZmcwS0FJQUlnRkJBU0FEUVFOMmRDSUNjVVVFUUVINE5DQUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFRMkFnZ2dBU0FFTmdJTUlBUWdBRFlDRENBRUlBRTJBZ2dNQVF0Qkh5RUFJQU5CLy8vL0IwMEVRQ0FEUVNZZ0EwRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFRZ0FEWUNIQ0FFUWdBM0FoQWdBRUVDZEVHb04yb2hBUUpBQWtBZ0IwRUJJQUIwSWdKeFJRUkFRZncwSUFJZ0IzSTJBZ0FnQVNBRU5nSUFJQVFnQVRZQ0dBd0JDeUFEUVJrZ0FFRUJkbXRCQUNBQVFSOUhHM1FoQUNBQktBSUFJUUVEUUNBQklnSW9BZ1JCZUhFZ0EwWU5BaUFBUVIxMklRRWdBRUVCZENFQUlBSWdBVUVFY1dvaUJ5Z0NFQ0lCRFFBTElBY2dCRFlDRUNBRUlBSTJBaGdMSUFRZ0JEWUNEQ0FFSUFRMkFnZ01BUXNnQWlnQ0NDSUFJQVEyQWd3Z0FpQUVOZ0lJSUFSQkFEWUNHQ0FFSUFJMkFnd2dCQ0FBTmdJSUN5QUZRUWhxSVFBTUFRc0NRQ0FKUlEwQUFrQWdBaWdDSENJQlFRSjBRYWczYWlJRktBSUFJQUpHQkVBZ0JTQUFOZ0lBSUFBTkFVSDhOQ0FMUVg0Z0FYZHhOZ0lBREFJTElBbEJFRUVVSUFrb0FoQWdBa1liYWlBQU5nSUFJQUJGRFFFTElBQWdDVFlDR0NBQ0tBSVFJZ0VFUUNBQUlBRTJBaEFnQVNBQU5nSVlDeUFDS0FJVUlnRkZEUUFnQUNBQk5nSVVJQUVnQURZQ0dBc0NRQ0FEUVE5TkJFQWdBaUFESUFacUlnQkJBM0kyQWdRZ0FDQUNhaUlBSUFBb0FnUkJBWEkyQWdRTUFRc2dBaUFHUVFOeU5nSUVJQUlnQm1vaUJTQURRUUZ5TmdJRUlBTWdCV29nQXpZQ0FDQUlCRUFnQ0VGNGNVR2dOV29oQUVHTU5TZ0NBQ0VCQW45QkFTQUlRUU4yZENJSElBUnhSUVJBUWZnMElBUWdCM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUVJQUFnQVRZQ0NDQUVJQUUyQWd3Z0FTQUFOZ0lNSUFFZ0JEWUNDQXRCakRVZ0JUWUNBRUdBTlNBRE5nSUFDeUFDUVFocUlRQUxJQXBCRUdva0FDQUFDNWNDQUNBQVJRUkFRUUFQQ3dKL0FrQWdBQVIvSUFGQi93Qk5EUUVDUUVIVU5DZ0NBQ2dDQUVVRVFDQUJRWUIvY1VHQXZ3TkdEUU1NQVFzZ0FVSC9EMDBFUUNBQUlBRkJQM0ZCZ0FGeU9nQUJJQUFnQVVFR2RrSEFBWEk2QUFCQkFnd0VDeUFCUVlCQWNVR0F3QU5ISUFGQmdMQURUM0ZGQkVBZ0FDQUJRVDl4UVlBQmNqb0FBaUFBSUFGQkRIWkI0QUZ5T2dBQUlBQWdBVUVHZGtFL2NVR0FBWEk2QUFGQkF3d0VDeUFCUVlDQUJHdEIvLzgvVFFSQUlBQWdBVUUvY1VHQUFYSTZBQU1nQUNBQlFSSjJRZkFCY2pvQUFDQUFJQUZCQm5aQlAzRkJnQUZ5T2dBQ0lBQWdBVUVNZGtFL2NVR0FBWEk2QUFGQkJBd0VDd3RCdUROQkdUWUNBRUYvQlVFQkN3d0JDeUFBSUFFNkFBQkJBUXNMb1JnREUzOEJmQUorSXdCQnNBUnJJZ3drQUNBTVFRQTJBaXdDUUNBQnZTSWFRZ0JUQkVCQkFTRVBRZllJSVJNZ0Fab2lBYjBoR2d3QkN5QUVRWUFRY1FSQVFRRWhEMEg1Q0NFVERBRUxRZndJUWZjSUlBUkJBWEVpRHhzaEV5QVBSU0VWQ3dKQUlCcENnSUNBZ0lDQWdQai9BSU5DZ0lDQWdJQ0FnUGovQUZFRVFDQUFRU0FnQWlBUFFRTnFJZ01nQkVILy8zdHhFQVlnQUNBVElBOFFCU0FBUVo4SlFkd0pJQVZCSUhFaUJSdEJ1QWxCNEFrZ0JSc2dBU0FCWWh0QkF4QUZJQUJCSUNBQ0lBTWdCRUdBd0FCekVBWWdBeUFDSUFJZ0EwZ2JJUWtNQVFzZ0RFRVFhaUVTQWtBQ2Z3SkFJQUVnREVFc2FoQXJJZ0VnQWFBaUFVUUFBQUFBQUFBQUFHSUVRQ0FNSUF3b0Fpd2lCa0VCYXpZQ0xDQUZRU0J5SWc1QjRRQkhEUUVNQXdzZ0JVRWdjaUlPUWVFQVJnMENJQXdvQWl3aENrRUdJQU1nQTBFQVNCc01BUXNnRENBR1FSMXJJZ28yQWl3Z0FVUUFBQUFBQUFDd1FhSWhBVUVHSUFNZ0EwRUFTQnNMSVFzZ0RFRXdha0dnQWtFQUlBcEJBRTRiYWlJTklRY0RRQ0FIQW44Z0FVUUFBQUFBQUFEd1FXTWdBVVFBQUFBQUFBQUFBR1p4QkVBZ0Fhc01BUXRCQUFzaUF6WUNBQ0FIUVFScUlRY2dBU0FEdUtGRUFBQUFBR1hOelVHaUlnRkVBQUFBQUFBQUFBQmlEUUFMQWtBZ0NrRUFUQVJBSUFvaEF5QUhJUVlnRFNFSURBRUxJQTBoQ0NBS0lRTURRRUVkSUFNZ0EwRWRUeHNoQXdKQUlBZEJCR3NpQmlBSVNRMEFJQU90SVJ0Q0FDRWFBMEFnQmlBYVF2Ly8vLzhQZ3lBR05RSUFJQnVHZkNJYUlCcENnSlRyM0FPQUlocENnSlRyM0FOK2ZUNENBQ0FHUVFScklnWWdDRThOQUFzZ0dxY2lCa1VOQUNBSVFRUnJJZ2dnQmpZQ0FBc0RRQ0FJSUFjaUJra0VRQ0FHUVFScklnY29BZ0JGRFFFTEN5QU1JQXdvQWl3Z0Eyc2lBellDTENBR0lRY2dBMEVBU2cwQUN3c2dBMEVBU0FSQUlBdEJHV3BCQ1c1QkFXb2hFQ0FPUWVZQVJpRVJBMEJCQ1VFQUlBTnJJZ01nQTBFSlR4c2hDUUpBSUFZZ0NFMEVRQ0FJS0FJQVJVRUNkQ0VIREFFTFFZQ1U2OXdESUFsMklSUkJmeUFKZEVGL2N5RVdRUUFoQXlBSUlRY0RRQ0FISUFNZ0J5Z0NBQ0lYSUFsMmFqWUNBQ0FXSUJkeElCUnNJUU1nQjBFRWFpSUhJQVpKRFFBTElBZ29BZ0JGUVFKMElRY2dBMFVOQUNBR0lBTTJBZ0FnQmtFRWFpRUdDeUFNSUF3b0Fpd2dDV29pQXpZQ0xDQU5JQWNnQ0dvaUNDQVJHeUlISUJCQkFuUnFJQVlnQmlBSGEwRUNkU0FRU2hzaEJpQURRUUJJRFFBTEMwRUFJUU1DUUNBR0lBaE5EUUFnRFNBSWEwRUNkVUVKYkNFRFFRb2hCeUFJS0FJQUlnbEJDa2tOQUFOQUlBTkJBV29oQXlBSklBZEJDbXdpQjA4TkFBc0xJQXNnQTBFQUlBNUI1Z0JIRzJzZ0RrSG5BRVlnQzBFQVIzRnJJZ2NnQmlBTmEwRUNkVUVKYkVFSmEwZ0VRQ0FNUVRCcVFRUkJwQUlnQ2tFQVNCdHFJQWRCZ01nQWFpSUpRUWx0SWhGQkFuUnFJaEJCZ0NCcklRcEJDaUVISUFrZ0VVRUpiR3NpQ1VFSFRBUkFBMEFnQjBFS2JDRUhJQWxCQVdvaUNVRUlSdzBBQ3dzQ1FDQUtLQUlBSWhFZ0VTQUhiaUlVSUFkc2F5SUpSU0FRUWZ3ZmF5SVdJQVpHY1EwQUFrQWdGRUVCY1VVRVFFUUFBQUFBQUFCQVF5RUJJQWRCZ0pUcjNBTkhEUUVnQ0NBS1R3MEJJQkJCaENCckxRQUFRUUZ4UlEwQkMwUUJBQUFBQUFCQVF5RUJDMFFBQUFBQUFBRGdQMFFBQUFBQUFBRHdQMFFBQUFBQUFBRDRQeUFHSUJaR0cwUUFBQUFBQUFENFB5QUpJQWRCQVhZaUZFWWJJQWtnRkVrYklSa0NRQ0FWRFFBZ0V5MEFBRUV0UncwQUlCbWFJUmtnQVpvaEFRc2dDaUFSSUFscklnazJBZ0FnQVNBWm9DQUJZUTBBSUFvZ0J5QUphaUlETmdJQUlBTkJnSlRyM0FOUEJFQURRQ0FLUVFBMkFnQWdDQ0FLUVFScklncExCRUFnQ0VFRWF5SUlRUUEyQWdBTElBb2dDaWdDQUVFQmFpSUROZ0lBSUFOQi81UHIzQU5MRFFBTEN5QU5JQWhyUVFKMVFRbHNJUU5CQ2lFSElBZ29BZ0FpQ1VFS1NRMEFBMEFnQTBFQmFpRURJQWtnQjBFS2JDSUhUdzBBQ3dzZ0NrRUVhaUlISUFZZ0JpQUhTeHNoQmdzRFFDQUdJZ2NnQ0UwaUNVVUVRQ0FHUVFScklnWW9BZ0JGRFFFTEN3SkFJQTVCNXdCSEJFQWdCRUVJY1NFS0RBRUxJQU5CZjNOQmZ5QUxRUUVnQ3hzaUJpQURTaUFEUVh0S2NTSUtHeUFHYWlFTFFYOUJmaUFLR3lBRmFpRUZJQVJCQ0hFaUNnMEFRWGNoQmdKQUlBa05BQ0FIUVFScktBSUFJZzVGRFFCQkNpRUpRUUFoQmlBT1FRcHdEUUFEUUNBR0lncEJBV29oQmlBT0lBbEJDbXdpQ1hCRkRRQUxJQXBCZjNNaEJnc2dCeUFOYTBFQ2RVRUpiQ0VKSUFWQlgzRkJ4Z0JHQkVCQkFDRUtJQXNnQmlBSmFrRUpheUlHUVFBZ0JrRUFTaHNpQmlBR0lBdEtHeUVMREFFTFFRQWhDaUFMSUFNZ0NXb2dCbXBCQ1dzaUJrRUFJQVpCQUVvYklnWWdCaUFMU2hzaEN3dEJmeUVKSUF0Qi9mLy8vd2RCL3YvLy93Y2dDaUFMY2lJUkcwb05BU0FMSUJGQkFFZHFRUUZxSVE0Q1FDQUZRVjl4SWhWQnhnQkdCRUFnQXlBT1FmLy8vLzhIYzBvTkF5QURRUUFnQTBFQVNoc2hCZ3dCQ3lBU0lBTWdBMEVmZFNJR2N5QUdhNjBnRWhBT0lnWnJRUUZNQkVBRFFDQUdRUUZySWdaQk1Eb0FBQ0FTSUFaclFRSklEUUFMQ3lBR1FRSnJJaEFnQlRvQUFDQUdRUUZyUVMxQkt5QURRUUJJR3pvQUFDQVNJQkJySWdZZ0RrSC8vLy8vQjNOS0RRSUxJQVlnRG1vaUF5QVBRZi8vLy84SGMwb05BU0FBUVNBZ0FpQURJQTlxSWdVZ0JCQUdJQUFnRXlBUEVBVWdBRUV3SUFJZ0JTQUVRWUNBQkhNUUJnSkFBa0FDUUNBVlFjWUFSZ1JBSUF4QkVHb2lCa0VJY2lFRElBWkJDWEloQ2lBTklBZ2dDQ0FOU3hzaUNTRUlBMEFnQ0RVQ0FDQUtFQTRoQmdKQUlBZ2dDVWNFUUNBR0lBeEJFR3BORFFFRFFDQUdRUUZySWdaQk1Eb0FBQ0FHSUF4QkVHcExEUUFMREFFTElBWWdDa2NOQUNBTVFUQTZBQmdnQXlFR0N5QUFJQVlnQ2lBR2F4QUZJQWhCQkdvaUNDQU5UUTBBQ3lBUkJFQWdBRUhrQ1VFQkVBVUxJQWNnQ0UwTkFTQUxRUUJNRFFFRFFDQUlOUUlBSUFvUURpSUdJQXhCRUdwTEJFQURRQ0FHUVFGcklnWkJNRG9BQUNBR0lBeEJFR3BMRFFBTEN5QUFJQVpCQ1NBTElBdEJDVTRiRUFVZ0MwRUpheUVHSUFoQkJHb2lDQ0FIVHcwRElBdEJDVW9oR0NBR0lRc2dHQTBBQ3d3Q0N3SkFJQXRCQUVnTkFDQUhJQWhCQkdvZ0J5QUlTeHNoQ1NBTVFSQnFJZ1pCQ0hJaEF5QUdRUWx5SVEwZ0NDRUhBMEFnRFNBSE5RSUFJQTBRRGlJR1JnUkFJQXhCTURvQUdDQURJUVlMQWtBZ0J5QUlSd1JBSUFZZ0RFRVFhazBOQVFOQUlBWkJBV3NpQmtFd09nQUFJQVlnREVFUWFrc05BQXNNQVFzZ0FDQUdRUUVRQlNBR1FRRnFJUVlnQ2lBTGNrVU5BQ0FBUWVRSlFRRVFCUXNnQUNBR0lBMGdCbXNpQmlBTElBWWdDMGdiRUFVZ0N5QUdheUVMSUFkQkJHb2lCeUFKVHcwQklBdEJBRTROQUFzTElBQkJNQ0FMUVJKcVFSSkJBQkFHSUFBZ0VDQVNJQkJyRUFVTUFnc2dDeUVHQ3lBQVFUQWdCa0VKYWtFSlFRQVFCZ3NnQUVFZ0lBSWdCU0FFUVlEQUFITVFCaUFGSUFJZ0FpQUZTQnNoQ1F3QkN5QVRJQVZCR25SQkgzVkJDWEZxSVFnQ1FDQURRUXRMRFFCQkRDQURheUVHUkFBQUFBQUFBREJBSVJrRFFDQVpSQUFBQUFBQUFEQkFvaUVaSUFaQkFXc2lCZzBBQ3lBSUxRQUFRUzFHQkVBZ0dTQUJtaUFab2FDYUlRRU1BUXNnQVNBWm9DQVpvU0VCQ3lBU0lBd29BaXdpQmlBR1FSOTFJZ1p6SUFacnJTQVNFQTRpQmtZRVFDQU1RVEE2QUE4Z0RFRVBhaUVHQ3lBUFFRSnlJUXNnQlVFZ2NTRU5JQXdvQWl3aEJ5QUdRUUpySWdvZ0JVRVBham9BQUNBR1FRRnJRUzFCS3lBSFFRQklHem9BQUNBRVFRaHhJUVlnREVFUWFpRUhBMEFnQnlJRkFuOGdBWmxFQUFBQUFBQUE0RUZqQkVBZ0Fhb01BUXRCZ0lDQWdIZ0xJZ2RCb0NWcUxRQUFJQTF5T2dBQUlBRWdCN2VoUkFBQUFBQUFBREJBb2lFQkFrQWdCVUVCYWlJSElBeEJFR3ByUVFGSERRQUNRQ0FHRFFBZ0EwRUFTZzBBSUFGRUFBQUFBQUFBQUFCaERRRUxJQVZCTGpvQUFTQUZRUUpxSVFjTElBRkVBQUFBQUFBQUFBQmlEUUFMUVg4aENVSDkvLy8vQnlBTElCSWdDbXNpQm1vaURXc2dBMGdOQUNBQVFTQWdBaUFOSUFOQkFtb2dCeUFNUVJCcUlnZHJJZ1VnQlVFQ2F5QURTQnNnQlNBREd5SUphaUlESUFRUUJpQUFJQWdnQ3hBRklBQkJNQ0FDSUFNZ0JFR0FnQVJ6RUFZZ0FDQUhJQVVRQlNBQVFUQWdDU0FGYTBFQVFRQVFCaUFBSUFvZ0JoQUZJQUJCSUNBQ0lBTWdCRUdBd0FCekVBWWdBeUFDSUFJZ0EwZ2JJUWtMSUF4QnNBUnFKQUFnQ1F1MEFnQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFGQkNXc09FZ0FJQ1FvSUNRRUNBd1FLQ1FvS0NBa0ZCZ2NMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVNnQ0FEWUNBQThMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVRJQkFEY0RBQThMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVRNQkFEY0RBQThMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVRBQUFEY0RBQThMSUFJZ0FpZ0NBQ0lCUVFScU5nSUFJQUFnQVRFQUFEY0RBQThMSUFJZ0FpZ0NBRUVIYWtGNGNTSUJRUWhxTmdJQUlBQWdBU3NEQURrREFBOExBQXNQQ3lBQ0lBSW9BZ0FpQVVFRWFqWUNBQ0FBSUFFMEFnQTNBd0FQQ3lBQ0lBSW9BZ0FpQVVFRWFqWUNBQ0FBSUFFMUFnQTNBd0FQQ3lBQ0lBSW9BZ0JCQjJwQmVIRWlBVUVJYWpZQ0FDQUFJQUVwQXdBM0F3QUxjd0VHZnlBQUtBSUFJZ01zQUFCQk1Hc2lBVUVKU3dSQVFRQVBDd05BUVg4aEJDQUNRY3lacytZQVRRUkFRWDhnQVNBQ1FRcHNJZ1ZxSUFFZ0JVSC8vLy8vQjNOTEd5RUVDeUFBSUFOQkFXb2lCVFlDQUNBRExBQUJJUVlnQkNFQ0lBVWhBeUFHUVRCcklnRkJDa2tOQUFzZ0FndVRGQUlXZndGK1FlMEpJUVVqQUVIUUFHc2lCaVFBSUFaQjdRazJBa3dnQmtFM2FpRVVJQVpCT0dvaER3SkFBa0FDUUFKQUEwQkJBQ0VFQTBBZ0JTRUxJQVFnREVILy8vLy9CM05LRFFJZ0JDQU1haUVNQWtBQ1FBSkFJQVVpQkMwQUFDSUpCRUFEUUFKQUFrQWdDVUgvQVhFaUJVVUVRQ0FFSVFVTUFRc2dCVUVsUncwQklBUWhDUU5BSUFrdEFBRkJKVWNFUUNBSklRVU1BZ3NnQkVFQmFpRUVJQWt0QUFJaEZ5QUpRUUpxSWdVaENTQVhRU1ZHRFFBTEN5QUVJQXRySWdRZ0RFSC8vLy8vQjNNaUZVb05DQ0FBQkVBZ0FDQUxJQVFRQlFzZ0JBMEdJQVlnQlRZQ1RDQUZRUUZxSVFSQmZ5RU9Ba0FnQlN3QUFVRXdheUlIUVFsTERRQWdCUzBBQWtFa1J3MEFJQVZCQTJvaEJFRUJJUkFnQnlFT0N5QUdJQVEyQWt4QkFDRUtBa0FnQkN3QUFDSUpRU0JySWdWQkgwc0VRQ0FFSVFjTUFRc2dCQ0VIUVFFZ0JYUWlCVUdKMFFSeFJRMEFBMEFnQmlBRVFRRnFJZ2MyQWt3Z0JTQUtjaUVLSUFRc0FBRWlDVUVnYXlJRlFTQlBEUUVnQnlFRVFRRWdCWFFpQlVHSjBRUnhEUUFMQ3dKQUlBbEJLa1lFUUFKL0FrQWdCeXdBQVVFd2F5SUVRUWxMRFFBZ0J5MEFBa0VrUncwQUFuOGdBRVVFUUNBRElBUkJBblJxUVFvMkFnQkJBQXdCQ3lBQ0lBUkJBM1JxS0FJQUN5RU5JQWRCQTJvaEJVRUJEQUVMSUJBTkJpQUhRUUZxSVFVZ0FFVUVRQ0FHSUFVMkFreEJBQ0VRUVFBaERRd0RDeUFCSUFFb0FnQWlCRUVFYWpZQ0FDQUVLQUlBSVExQkFBc2hFQ0FHSUFVMkFrd2dEVUVBVGcwQlFRQWdEV3NoRFNBS1FZREFBSEloQ2d3QkN5QUdRY3dBYWhBcElnMUJBRWdOQ1NBR0tBSk1JUVVMUVFBaEJFRi9JUWdDZjBFQUlBVXRBQUJCTGtjTkFCb2dCUzBBQVVFcVJnUkFBbjhDUUNBRkxBQUNRVEJySWdkQkNVc05BQ0FGTFFBRFFTUkhEUUFnQlVFRWFpRUZBbjhnQUVVRVFDQURJQWRCQW5ScVFRbzJBZ0JCQUF3QkN5QUNJQWRCQTNScUtBSUFDd3dCQ3lBUURRWWdCVUVDYWlFRlFRQWdBRVVOQUJvZ0FTQUJLQUlBSWdkQkJHbzJBZ0FnQnlnQ0FBc2hDQ0FHSUFVMkFrd2dDRUVBVGd3QkN5QUdJQVZCQVdvMkFrd2dCa0hNQUdvUUtTRUlJQVlvQWt3aEJVRUJDeUVSQTBBZ0JDRVNRUndoQnlBRkloWXNBQUFpQkVIN0FHdEJSa2tOQ2lBRlFRRnFJUVVnQkNBU1FUcHNha0dQSVdvdEFBQWlCRUVCYTBFSVNRMEFDeUFHSUFVMkFrd0NRQ0FFUVJ0SEJFQWdCRVVOQ3lBT1FRQk9CRUFnQUVVRVFDQURJQTVCQW5ScUlBUTJBZ0FNQ3dzZ0JpQUNJQTVCQTNScUtRTUFOd05BREFJTElBQkZEUWNnQmtGQWF5QUVJQUVRS0F3QkN5QU9RUUJPRFFwQkFDRUVJQUJGRFFjTElBQXRBQUJCSUhFTkNpQUtRZi8vZTNFaUNTQUtJQXBCZ01BQWNSc2hDa0VBSVE1QjdBZ2hFeUFQSVFjQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQ0FXTEFBQUlnUkJVM0VnQkNBRVFROXhRUU5HR3lBRUlCSWJJZ1JCMkFCckRpRUVGQlFVRkJRVUZCUU9GQThHRGc0T0ZBWVVGQlFVQWdVREZCUUpGQUVVRkFRQUN3SkFJQVJCd1FCckRnY09GQXNVRGc0T0FBc2dCRUhUQUVZTkNRd1RDeUFHS1FOQUlScEI3QWdNQlF0QkFDRUVBa0FDUUFKQUFrQUNRQUpBQWtBZ0VrSC9BWEVPQ0FBQkFnTUVHZ1VHR2dzZ0JpZ0NRQ0FNTmdJQURCa0xJQVlvQWtBZ0REWUNBQXdZQ3lBR0tBSkFJQXlzTndNQURCY0xJQVlvQWtBZ0REc0JBQXdXQ3lBR0tBSkFJQXc2QUFBTUZRc2dCaWdDUUNBTU5nSUFEQlFMSUFZb0FrQWdES3czQXdBTUV3dEJDQ0FJSUFoQkNFMGJJUWdnQ2tFSWNpRUtRZmdBSVFRTElBOGhDeUFHS1FOQUlocENBRklFUUNBRVFTQnhJUVVEUUNBTFFRRnJJZ3NnR3FkQkQzRkJvQ1ZxTFFBQUlBVnlPZ0FBSUJwQ0QxWWhHQ0FhUWdTSUlSb2dHQTBBQ3dzZ0Jpa0RRRkFOQXlBS1FRaHhSUTBESUFSQkJIWkI3QWhxSVJOQkFpRU9EQU1MSUE4aEJDQUdLUU5BSWhwQ0FGSUVRQU5BSUFSQkFXc2lCQ0FhcDBFSGNVRXdjam9BQUNBYVFnZFdJUmtnR2tJRGlDRWFJQmtOQUFzTElBUWhDeUFLUVFoeFJRMENJQWdnRHlBRWF5SUVRUUZxSUFRZ0NFZ2JJUWdNQWdzZ0Jpa0RRQ0lhUWdCVEJFQWdCa0lBSUJwOUlobzNBMEJCQVNFT1Fld0lEQUVMSUFwQmdCQnhCRUJCQVNFT1FlMElEQUVMUWU0SVFld0lJQXBCQVhFaURoc0xJUk1nR2lBUEVBNGhDd3NnRVNBSVFRQkljUTBQSUFwQi8vOTdjU0FLSUJFYklRb0NRQ0FHS1FOQUlocENBRklOQUNBSURRQWdEeUVMUVFBaENBd01DeUFJSUJwUUlBOGdDMnRxSWdRZ0JDQUlTQnNoQ0F3TEN3Si9RZi8vLy84SElBZ2dDRUgvLy8vL0IwOGJJZ29pQlVFQVJ5RUhBa0FDUUFKQUlBWW9Ba0FpQkVIbUNTQUVHeUlMSWdSQkEzRkZEUUFnQlVVTkFBTkFJQVF0QUFCRkRRSWdCVUVCYXlJRlFRQkhJUWNnQkVFQmFpSUVRUU54UlEwQklBVU5BQXNMSUFkRkRRRUNRQ0FFTFFBQVJRMEFJQVZCQkVrTkFBTkFJQVFvQWdBaUIwRi9jeUFIUVlHQ2hBaHJjVUdBZ1lLRWVIRU5BaUFFUVFScUlRUWdCVUVFYXlJRlFRTkxEUUFMQ3lBRlJRMEJDd05BSUFRZ0JDMEFBRVVOQWhvZ0JFRUJhaUVFSUFWQkFXc2lCUTBBQ3d0QkFBc2lCQ0FMYXlBS0lBUWJJZ1FnQzJvaEJ5QUlRUUJPQkVBZ0NTRUtJQVFoQ0F3TEN5QUpJUW9nQkNFSUlBY3RBQUFORGd3S0N5QUlCRUFnQmlnQ1FBd0NDMEVBSVFRZ0FFRWdJQTFCQUNBS0VBWU1BZ3NnQmtFQU5nSU1JQVlnQmlrRFFENENDQ0FHSUFaQkNHb2lCRFlDUUVGL0lRZ2dCQXNoQ1VFQUlRUURRQUpBSUFrb0FnQWlDMFVOQUNBR1FRUnFJQXNRSmlJTFFRQklEUThnQ3lBSUlBUnJTdzBBSUFsQkJHb2hDU0FFSUF0cUlnUWdDRWtOQVFzTFFUMGhCeUFFUVFCSURRd2dBRUVnSUEwZ0JDQUtFQVlnQkVVRVFFRUFJUVFNQVF0QkFDRUhJQVlvQWtBaENRTkFJQWtvQWdBaUMwVU5BU0FHUVFScUlnZ2dDeEFtSWdzZ0Iyb2lCeUFFU3cwQklBQWdDQ0FMRUFVZ0NVRUVhaUVKSUFRZ0Iwc05BQXNMSUFCQklDQU5JQVFnQ2tHQXdBQnpFQVlnRFNBRUlBUWdEVWdiSVFRTUNBc2dFU0FJUVFCSWNRMEpRVDBoQnlBQUlBWXJBMEFnRFNBSUlBb2dCQkFuSWdSQkFFNE5Cd3dLQ3lBR0lBWXBBMEE4QURkQkFTRUlJQlFoQ3lBSklRb01CQXNnQkMwQUFTRUpJQVJCQVdvaEJBd0FDd0FMSUFBTkNDQVFSUTBDUVFFaEJBTkFJQU1nQkVFQ2RHb29BZ0FpQUFSQUlBSWdCRUVEZEdvZ0FDQUJFQ2hCQVNFTUlBUkJBV29pQkVFS1J3MEJEQW9MQzBFQklRd2dCRUVLVHcwSUEwQWdBeUFFUVFKMGFpZ0NBQTBCSUFSQkFXb2lCRUVLUncwQUN3d0lDMEVjSVFjTUJRc2dDQ0FISUF0cklna2dDQ0FKU2hzaUNDQU9RZi8vLy84SGMwb05BMEU5SVFjZ0RTQUlJQTVxSWdVZ0JTQU5TQnNpQkNBVlNnMEVJQUJCSUNBRUlBVWdDaEFHSUFBZ0V5QU9FQVVnQUVFd0lBUWdCU0FLUVlDQUJITVFCaUFBUVRBZ0NDQUpRUUFRQmlBQUlBc2dDUkFGSUFCQklDQUVJQVVnQ2tHQXdBQnpFQVlnQmlnQ1RDRUZEQUVMQ3d0QkFDRU1EQU1MUVQwaEJ3dEJ1RE1nQnpZQ0FBdEJmeUVNQ3lBR1FkQUFhaVFBSUF3TGZnSUJmd0YrSUFDOUlnTkNOSWluUWY4UGNTSUNRZjhQUndSOElBSkZCRUFnQVNBQVJBQUFBQUFBQUFBQVlRUi9RUUFGSUFCRUFBQUFBQUFBOEVPaUlBRVFLeUVBSUFFb0FnQkJRR29MTmdJQUlBQVBDeUFCSUFKQi9nZHJOZ0lBSUFOQy8vLy8vLy8vLzRlQWY0TkNnSUNBZ0lDQWdQQS9oTDhGSUFBTEMzb0JBMzhDUUFKQUlBQWlBVUVEY1VVTkFDQUJMUUFBUlFSQVFRQVBDd05BSUFGQkFXb2lBVUVEY1VVTkFTQUJMUUFBRFFBTERBRUxBMEFnQVNJQ1FRUnFJUUVnQWlnQ0FDSURRWDl6SUFOQmdZS0VDR3R4UVlDQmdvUjRjVVVOQUFzRFFDQUNJZ0ZCQVdvaEFpQUJMUUFBRFFBTEN5QUJJQUJyQ3dJQUM4Z0NBUVovSXdCQkVHc2lBeVFBSUFNZ0FEWUNEQ01BUWRBQmF5SUJKQUFnQVNBQU5nTE1BU0FCUWFBQmFpSUFRUUJCS0JBSEdpQUJJQUVvQXN3Qk5nTElBUUpBUVFBZ0FVSElBV29nQVVIUUFHb2dBQkFxUVFCSURRQkIxQ29vQWdCQkFFZ2hCa0dJS2tHSUtpZ0NBQ0lFUVY5eE5nSUFBbjhDUUFKQVFiZ3FLQUlBUlFSQVFiZ3FRZEFBTmdJQVFhUXFRUUEyQWdCQm1DcENBRGNEQUVHMEtpZ0NBQ0VDUWJRcUlBRTJBZ0FNQVF0Qm1Db29BZ0FOQVF0QmYwR0lLaEFhRFFFYUMwR0lLaUFCUWNnQmFpQUJRZEFBYWlBQlFhQUJhaEFxQ3lFRklBSUVmMEdJS2tFQVFRQkJyQ29vQWdBUkFnQWFRYmdxUVFBMkFnQkJ0Q29nQWpZQ0FFR2tLa0VBTmdJQVFad3FLQUlBR2tHWUtrSUFOd01BUVFBRklBVUxHa0dJS2tHSUtpZ0NBQ0FFUVNCeGNqWUNBQ0FHRFFBTElBRkIwQUZxSkFBZ0EwRVFhaVFBQzVRREFnUi9BM3dqQUVFUWF5SURKQUFDUUNBQXZDSUVRZi8vLy84SGNTSUNRZHFmcE80RVRRUkFJQUVnQUxzaUJ5QUhSSVBJeVcwd1grUS9va1FBQUFBQUFBQTRRNkJFQUFBQUFBQUFPTU9nSWdaRUFBQUFVUHNoK2IraW9DQUdSR05pR21HMEVGRytvcUFpQ0RrREFDQUlSQUFBQUdEN0llbS9ZeUVGQW44Z0JwbEVBQUFBQUFBQTRFRmpCRUFnQnFvTUFRdEJnSUNBZ0hnTElRSWdCUVJBSUFFZ0J5QUdSQUFBQUFBQUFQQy9vQ0lHUkFBQUFGRDdJZm0vb3FBZ0JrUmpZaHBodEJCUnZxS2dPUU1BSUFKQkFXc2hBZ3dDQ3lBSVJBQUFBR0Q3SWVrL1pFVU5BU0FCSUFjZ0JrUUFBQUFBQUFEd1A2QWlCa1FBQUFCUSt5SDV2NktnSUFaRVkySWFZYlFRVWI2aW9Ea0RBQ0FDUVFGcUlRSU1BUXNnQWtHQWdJRDhCMDhFUUNBQklBQWdBSk83T1FNQVFRQWhBZ3dCQ3lBRElBSWdBa0VYZGtHV0FXc2lBa0VYZEd1K3V6a0RDQ0FEUVFocUlBTWdBa0VCUVFBUU1TRUNJQU1yQXdBaEJpQUVRUUJJQkVBZ0FTQUdtamtEQUVFQUlBSnJJUUlNQVFzZ0FTQUdPUU1BQ3lBRFFSQnFKQUFnQWd1OENnTUhmd1I4QVg0akFFRXdheUlFSkFBQ1FBSkFBa0FnQUwwaURVSWdpS2NpQWtILy8vLy9CM0VpQTBINjFMMkFCRTBFUUNBQ1FmLy9QM0ZCKzhNa1JnMEJJQU5CL0xLTGdBUk5CRUFnRFVJQVdRUkFJQUVnQUVRQUFFQlUreUg1djZBaUNVUXhZMklhWWJUUXZhQWlBRGtEQUNBQklBa2dBS0ZFTVdOaUdtRzAwTDJnT1FNSVFRRWhBZ3dGQ3lBQklBQkVBQUJBVlBzaCtUK2dJZ2xFTVdOaUdtRzAwRDJnSWdBNUF3QWdBU0FKSUFDaFJERmpZaHBodE5BOW9Ea0RDRUYvSVFJTUJBc2dEVUlBV1FSQUlBRWdBRVFBQUVCVSt5RUp3S0FpQ1VReFkySWFZYlRndmFBaUFEa0RBQ0FCSUFrZ0FLRkVNV05pR21HMDRMMmdPUU1JUVFJaEFnd0VDeUFCSUFCRUFBQkFWUHNoQ1VDZ0lnbEVNV05pR21HMDREMmdJZ0E1QXdBZ0FTQUpJQUNoUkRGallocGh0T0E5b0RrRENFRitJUUlNQXdzZ0EwRzdqUEdBQkUwRVFDQURRYno3MTRBRVRRUkFJQU5CL0xMTGdBUkdEUUlnRFVJQVdRUkFJQUVnQUVRQUFEQi9mTmtTd0tBaUNVVEtsSk9ua1E3cHZhQWlBRGtEQUNBQklBa2dBS0ZFeXBTVHA1RU82YjJnT1FNSVFRTWhBZ3dGQ3lBQklBQkVBQUF3ZjN6WkVrQ2dJZ2xFeXBTVHA1RU82VDJnSWdBNUF3QWdBU0FKSUFDaFJNcVVrNmVSRHVrOW9Ea0RDRUY5SVFJTUJBc2dBMEg3dytTQUJFWU5BU0FOUWdCWkJFQWdBU0FBUkFBQVFGVDdJUm5Bb0NJSlJERmpZaHBodFBDOW9DSUFPUU1BSUFFZ0NTQUFvVVF4WTJJYVliVHd2YUE1QXdoQkJDRUNEQVFMSUFFZ0FFUUFBRUJVK3lFWlFLQWlDVVF4WTJJYVliVHdQYUFpQURrREFDQUJJQWtnQUtGRU1XTmlHbUcwOEQyZ09RTUlRWHdoQWd3REN5QURRZnJENUlrRVN3MEJDeUFBSUFCRWc4akpiVEJmNUQraVJBQUFBQUFBQURoRG9FUUFBQUFBQUFBNHc2QWlDa1FBQUVCVSt5SDV2NktnSWdzZ0NrUXhZMklhWWJUUVBhSWlES0VpQ1VRWUxVUlUreUhwdjJNaEJRSi9JQXFaUkFBQUFBQUFBT0JCWXdSQUlBcXFEQUVMUVlDQWdJQjRDeUVDQWtBZ0JRUkFJQUpCQVdzaEFpQUtSQUFBQUFBQUFQQy9vQ0lLUkRGallocGh0TkE5b2lFTUlBQWdDa1FBQUVCVSt5SDV2NktnSVFzTUFRc2dDVVFZTFVSVSt5SHBQMlJGRFFBZ0FrRUJhaUVDSUFwRUFBQUFBQUFBOEQrZ0lncEVNV05pR21HMDBEMmlJUXdnQUNBS1JBQUFRRlQ3SWZtL29xQWhDd3NnQVNBTElBeWhJZ0E1QXdBQ1FDQURRUlIySWdVZ0FMMUNOSWluUWY4UGNXdEJFVWdOQUNBQklBc2dDa1FBQUdBYVliVFFQYUlpQUtFaUNTQUtSSE53QXk2S0dhTTdvaUFMSUFtaElBQ2hvU0lNb1NJQU9RTUFJQVVnQUwxQ05JaW5RZjhQY1d0Qk1rZ0VRQ0FKSVFzTUFRc2dBU0FKSUFwRUFBQUFMb29ab3p1aUlnQ2hJZ3NnQ2tUQlNTQWxtb043T2FJZ0NTQUxvU0FBb2FFaURLRWlBRGtEQUFzZ0FTQUxJQUNoSUF5aE9RTUlEQUVMSUFOQmdJREEvd2RQQkVBZ0FTQUFJQUNoSWdBNUF3QWdBU0FBT1FNSVFRQWhBZ3dCQ3lBRVFSQnFJZ0pCQ0hJaEJ5QU5Rdi8vLy8vLy8vOEhnMEtBZ0lDQWdJQ0FzTUVBaEw4aEFFRUJJUVlEUUNBQ0FuOGdBSmxFQUFBQUFBQUE0RUZqQkVBZ0FLb01BUXRCZ0lDQWdIZ0x0eUlKT1FNQUlBQWdDYUZFQUFBQUFBQUFjRUdpSVFBZ0JpRUlRUUFoQmlBSElRSWdDQTBBQ3lBRUlBQTVBeUJCQWlFQ0EwQWdBaUlGUVFGcklRSWdCRUVRYWlJR0lBVkJBM1JxS3dNQVJBQUFBQUFBQUFBQVlRMEFDeUFHSUFRZ0EwRVVka0dXQ0dzZ0JVRUJha0VCRURFaEFpQUVLd01BSVFBZ0RVSUFVd1JBSUFFZ0FKbzVBd0FnQVNBRUt3TUltamtEQ0VFQUlBSnJJUUlNQVFzZ0FTQUFPUU1BSUFFZ0JDc0RDRGtEQ0FzZ0JFRXdhaVFBSUFJTHdCRUNBM3dYZnlNQVFiQUVheUlKSkFBZ0FpQUNRUU5yUVJodElnaEJBQ0FJUVFCS0d5SVNRV2hzYWlFTUlBUkJBblJCc0F0cUtBSUFJZzBnQTBFQmF5SUxha0VBVGdSQUlBTWdEV29oQ0NBU0lBdHJJUUlEUUNBSlFjQUNhaUFLUVFOMGFpQUNRUUJJQkh4RUFBQUFBQUFBQUFBRklBSkJBblJCd0F0cUtBSUF0d3M1QXdBZ0FrRUJhaUVDSUFwQkFXb2lDaUFJUncwQUN3c2dERUVZYXlFUFFRQWhDQ0FOUVFBZ0RVRUFTaHNoQ2lBRFFRQk1JUTREUUFKQUlBNEVRRVFBQUFBQUFBQUFBQ0VGREFFTElBZ2dDMm9oRVVFQUlRSkVBQUFBQUFBQUFBQWhCUU5BSUFBZ0FrRURkR29yQXdBZ0NVSEFBbW9nRVNBQ2EwRURkR29yQXdDaUlBV2dJUVVnQWtFQmFpSUNJQU5IRFFBTEN5QUpJQWhCQTNScUlBVTVBd0FnQ0NBS1JpRVlJQWhCQVdvaENDQVlSUTBBQzBFdklBeHJJUlJCTUNBTWF5RVJJQXhCR1dzaEZTQU5JUWdDUUFOQUlBa2dDRUVEZEdvckF3QWhCVUVBSVFJZ0NDRUtJQWhCQUV3aUVFVUVRQU5BSUFsQjRBTnFJQUpCQW5ScUFuOENmeUFGUkFBQUFBQUFBSEErb2lJR21VUUFBQUFBQUFEZ1FXTUVRQ0FHcWd3QkMwR0FnSUNBZUF1M0lnWkVBQUFBQUFBQWNNR2lJQVdnSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Q3pZQ0FDQUpJQXBCQVdzaUNrRURkR29yQXdBZ0JxQWhCU0FDUVFGcUlnSWdDRWNOQUFzTEFuOGdCU0FQRUJRaUJTQUZSQUFBQUFBQUFNQS9vcHhFQUFBQUFBQUFJTUNpb0NJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUFzaERpQUZJQTYzb1NFRkFrQUNRQUpBQW44Z0QwRUFUQ0lXUlFSQUlBaEJBblFnQ1dvaUFpQUNLQUxjQXlJQ0lBSWdFWFVpQWlBUmRHc2lDallDM0FNZ0FpQU9haUVPSUFvZ0ZIVU1BUXNnRHcwQklBaEJBblFnQ1dvb0F0d0RRUmQxQ3lJTFFRQk1EUUlNQVF0QkFpRUxJQVZFQUFBQUFBQUE0RDltRFFCQkFDRUxEQUVMUVFBaEFrRUFJUW9nRUVVRVFBTkFJQWxCNEFOcUlBSkJBblJxSWhjb0FnQWhFRUgvLy84SElSTUNmd0pBSUFvTkFFR0FnSUFJSVJNZ0VBMEFRUUFNQVFzZ0Z5QVRJQkJyTmdJQVFRRUxJUW9nQWtFQmFpSUNJQWhIRFFBTEN3SkFJQllOQUVILy8vOERJUUlDUUFKQUlCVU9BZ0VBQWd0Qi8vLy9BU0VDQ3lBSVFRSjBJQWxxSWhBZ0VDZ0MzQU1nQW5FMkF0d0RDeUFPUVFGcUlRNGdDMEVDUncwQVJBQUFBQUFBQVBBL0lBV2hJUVZCQWlFTElBcEZEUUFnQlVRQUFBQUFBQUR3UHlBUEVCU2hJUVVMSUFWRUFBQUFBQUFBQUFCaEJFQkJBQ0VLSUFnaEFnSkFJQWdnRFV3TkFBTkFJQWxCNEFOcUlBSkJBV3NpQWtFQ2RHb29BZ0FnQ25JaENpQUNJQTFLRFFBTElBcEZEUUFnRHlFTUEwQWdERUVZYXlFTUlBbEI0QU5xSUFoQkFXc2lDRUVDZEdvb0FnQkZEUUFMREFNTFFRRWhBZ05BSUFJaUNrRUJhaUVDSUFsQjRBTnFJQTBnQ210QkFuUnFLQUlBUlEwQUN5QUlJQXBxSVFvRFFDQUpRY0FDYWlBRElBaHFJZ3RCQTNScUlBaEJBV29pQ0NBU2FrRUNkRUhBQzJvb0FnQzNPUU1BUVFBaEFrUUFBQUFBQUFBQUFDRUZJQU5CQUVvRVFBTkFJQUFnQWtFRGRHb3JBd0FnQ1VIQUFtb2dDeUFDYTBFRGRHb3JBd0NpSUFXZ0lRVWdBa0VCYWlJQ0lBTkhEUUFMQ3lBSklBaEJBM1JxSUFVNUF3QWdDQ0FLU0EwQUN5QUtJUWdNQVFzTEFrQWdCVUVZSUF4ckVCUWlCVVFBQUFBQUFBQndRV1lFUUNBSlFlQURhaUFJUVFKMGFnSi9BbjhnQlVRQUFBQUFBQUJ3UHFJaUJwbEVBQUFBQUFBQTRFRmpCRUFnQnFvTUFRdEJnSUNBZ0hnTElnSzNSQUFBQUFBQUFIREJvaUFGb0NJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUFzMkFnQWdDRUVCYWlFSURBRUxBbjhnQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdMSVFJZ0R5RU1DeUFKUWVBRGFpQUlRUUowYWlBQ05nSUFDMFFBQUFBQUFBRHdQeUFNRUJRaEJRSkFJQWhCQUVnTkFDQUlJUU1EUUNBSklBTWlBRUVEZEdvZ0JTQUpRZUFEYWlBQVFRSjBhaWdDQUxlaU9RTUFJQUJCQVdzaEF5QUZSQUFBQUFBQUFIQStvaUVGSUFBTkFBc2dDRUVBU0EwQUlBZ2hDZ05BUkFBQUFBQUFBQUFBSVFWQkFDRUNJQTBnQ0NBS2F5SUFJQUFnRFVvYklnTkJBRTRFUUFOQUlBSkJBM1JCa0NGcUt3TUFJQWtnQWlBS2FrRURkR29yQXdDaUlBV2dJUVVnQWlBRFJ5RVpJQUpCQVdvaEFpQVpEUUFMQ3lBSlFhQUJhaUFBUVFOMGFpQUZPUU1BSUFwQkFFb2hHaUFLUVFGcklRb2dHZzBBQ3dzQ1FBSkFBa0FDUUFKQUlBUU9CQUVDQWdBRUMwUUFBQUFBQUFBQUFDRUdBa0FnQ0VFQVRBMEFJQWxCb0FGcUlBaEJBM1JxS3dNQUlRVWdDQ0VDQTBBZ0NVR2dBV29pQXlBQ1FRTjBhaUFGSUFKQkFXc2lBRUVEZENBRGFpSUVLd01BSWdjZ0J5QUZvQ0lGb2FBNUF3QWdCQ0FGT1FNQUlBSkJBVXNoR3lBQUlRSWdHdzBBQ3lBSVFRRkdEUUFnQ0VFRGRDQURhaXNEQUNFRklBZ2hBZ05BSUFsQm9BRnFJZ01nQWtFRGRHb2dCU0FESUFKQkFXc2lBRUVEZEdvaUF5c0RBQ0lHSUFZZ0JhQWlCYUdnT1FNQUlBTWdCVGtEQUNBQ1FRSkxJUndnQUNFQ0lCd05BQXRFQUFBQUFBQUFBQUFoQmlBSVFRRkdEUUFEUUNBR0lBbEJvQUZxSUFoQkEzUnFLd01Bb0NFR0lBaEJBa29oSFNBSVFRRnJJUWdnSFEwQUN3c2dDU3NEb0FFaEJTQUxEUUlnQVNBRk9RTUFJQWtyQTZnQklRVWdBU0FHT1FNUUlBRWdCVGtEQ0F3REMwUUFBQUFBQUFBQUFDRUZJQWhCQUU0RVFBTkFJQWdpQUVFQmF5RUlJQVVnQ1VHZ0FXb2dBRUVEZEdvckF3Q2dJUVVnQUEwQUN3c2dBU0FGbWlBRklBc2JPUU1BREFJTFJBQUFBQUFBQUFBQUlRVWdDRUVBVGdSQUlBZ2hBd05BSUFNaUFFRUJheUVESUFVZ0NVR2dBV29nQUVFRGRHb3JBd0NnSVFVZ0FBMEFDd3NnQVNBRm1pQUZJQXNiT1FNQUlBa3JBNkFCSUFXaElRVkJBU0VDSUFoQkFFb0VRQU5BSUFVZ0NVR2dBV29nQWtFRGRHb3JBd0NnSVFVZ0FpQUlSeUVlSUFKQkFXb2hBaUFlRFFBTEN5QUJJQVdhSUFVZ0N4czVBd2dNQVFzZ0FTQUZtamtEQUNBSkt3T29BU0VGSUFFZ0JwbzVBeEFnQVNBRm1qa0RDQXNnQ1VHd0JHb2tBQ0FPUVFkeEM0NFBBUWgvQWtBZ0FTQUFLQUlNSWdRZ0FDZ0NDQ0lEYTBFR2RTSUNSZzBBQWtBZ0FTQUNTd1JBSUFFZ0Ftc2lCaUFBS0FJUUlnVWdCQ0lEYTBFR2RVMEVRQUpBSUFaRkRRQWdBeUVDSUFaQkEzRWlCUVJBUVFBaEJBTkFJQUw5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5Q3dJa0lBTDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0lVSUFMOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3SUVJQUpCZ0lDQS9BTTJBandnQWtHQWdJRDhBellDQUNBQ1FnQTNBalFnQWtHQWdJRDhBellDS0NBQ1FZQ0FnUHdETmdJVUlBSkJRR3NoQWlBRVFRRnFJZ1FnQlVjTkFBc0xJQVpCQm5RZ0Eyb2hBeUFHUVFGclFmLy8veDl4UVFOSkRRQURRQ0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ0pDQUMvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDRkNBQy9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0NUQ0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ1hDQUMvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDQkNBQ1FnQTNBa1FnQWtHQWdJRDhBellDQUNBQ1FvQ0FnUHlEZ0lEQVB6Y0NQQ0FDUVlDQWdQd0ROZ0o4SUFMOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3S0VBU0FDUWdBM0FqUWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQW13Z0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBcFFCSUFKQ0FEY0N0QUVnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFxUUJJQUpCZ0lDQS9BTTJBaWdnQWtHQWdJRDhBellDRkNBQ1FZQ0FnUHdETmdKVUlBSkJnSUNBL0FNMkFtZ2dBa0dBZ0lEOEF6WUN2QUVnQWtHQWdJRDhBellDcUFFZ0FrR0FnSUQ4QXpZQ2xBRWdBa0dBZ0lEOEF6WUNnQUVnQWtJQU53TDBBU0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQzVBRWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQXRRQklBTDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0xFQVNBQ1FZQ0FnUHdETmdMOEFTQUNRWUNBZ1B3RE5nTG9BU0FDUVlDQWdQd0ROZ0xVQVNBQ1FZQ0FnUHdETmdMQUFTQUNRWUFDYWlJQ0lBTkhEUUFMQ3lBQUlBTTJBZ3dNQWdzQ1FDQURJQUFvQWdnaUFtdEJCblVpQ0NBR2FpSUhRWUNBZ0NCSkJFQkJBQ0VEUWYvLy94OGdCU0FDYXlJRlFRVjFJZ0lnQnlBQ0lBZExHeUFGUWNELy8vOEhUeHNpQndSQUlBZEJnSUNBSUU4TkFpQUhRUVowRUFzaEF3c2dBeUFJUVFaMGFpSUVJUUlnQmtFRGNTSUZCRUFEUUNBQy9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0NKQ0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ0ZDQUMvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDQkNBQ1FZQ0FnUHdETmdJOElBSkJnSUNBL0FNMkFnQWdBa0lBTndJMElBSkJnSUNBL0FNMkFpZ2dBa0dBZ0lEOEF6WUNGQ0FDUVVCcklRSWdDVUVCYWlJSklBVkhEUUFMQ3lBR1FRWjBJQVJxSVFnZ0JrRUJhMEgvLy84ZmNVRURUd1JBQTBBZ0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBaVFnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFoUWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQWt3Z0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBbHdnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFnUWdBa0lBTndKRUlBSkJnSUNBL0FNMkFnQWdBa0tBZ0lEOGc0Q0F3RDgzQWp3Z0FrR0FnSUQ4QXpZQ2ZDQUMvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDaEFFZ0FrSUFOd0kwSUFMOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3SnNJQUw5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5Q3dLVUFTQUNRZ0EzQXJRQklBTDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0trQVNBQ1FZQ0FnUHdETmdJb0lBSkJnSUNBL0FNMkFoUWdBa0dBZ0lEOEF6WUNWQ0FDUVlDQWdQd0ROZ0pvSUFKQmdJQ0EvQU0yQXJ3QklBSkJnSUNBL0FNMkFxZ0JJQUpCZ0lDQS9BTTJBcFFCSUFKQmdJQ0EvQU0yQW9BQklBSkNBRGNDOUFFZ0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBdVFCSUFMOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3TFVBU0FDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ3hBRWdBa0dBZ0lEOEF6WUMvQUVnQWtHQWdJRDhBellDNkFFZ0FrR0FnSUQ4QXpZQzFBRWdBa0dBZ0lEOEF6WUN3QUVnQWtHQUFtb2lBaUFJUncwQUN3c2dBQ2dDRENJQ0lBQW9BZ2dpQlVjRVFBTkFJQVJCUUdvaUJDQUNRVUJxSWdMOUFBSUEvUXNDQUNBRUlBTDlBQUl3L1FzQ01DQUVJQUw5QUFJZy9Rc0NJQ0FFSUFMOUFBSVEvUXNDRUNBQ0lBVkhEUUFMSUFBb0FnZ2hBZ3NnQUNBRElBZEJCblJxTmdJUUlBQWdDRFlDRENBQUlBUTJBZ2dnQWdSQUlBSVFGZ3NNQXdzUUV3QUxFQklBQ3lBQklBSlBEUUFnQUNBRElBRkJCblJxTmdJTUN3SkFJQUFvQWhnZ0FDZ0NGQ0lEYTBFa2JTSUNJQUZKQkVBZ0FFRVVhaUFCSUFKckVEUU1BUXNnQVNBQ1R3MEFJQUFnQXlBQlFTUnNhallDR0FzQ1FDQUFLQUlrSUFBb0FpQWlBMnRCQkhVaUFpQUJTUVJBSUFCQklHb2dBU0FDYXhBN0RBRUxJQUVnQWs4TkFDQUFJQU1nQVVFRWRHbzJBaVFMSUFBb0FqQWdBQ2dDTENJRGEwRWtiU0lDSUFGSkJFQWdBRUVzYWlBQklBSnJFRFFQQ3lBQklBSlBEUUFnQUNBRElBRkJKR3hxTmdJd0N3dm1DUU1FZnc1OUVIc2pBRUZBYWlJREpBQWdBQ2dDQ0NBQlFRWjBhaUVDSUFBb0FpQWdBVUVFZEdvaUJTZ0NBQVJBSUFGQkpHd2lCQ0FBS0FJVWFpSUJLZ0lNSVFjQ1FDQUZLQUlFUVFGSEJFQWdBU29DQ0NFTElBRXFBZ1FoRGlBQktnSUFJUkFnQVNvQ0ZDRUtJQUVxQWhBaENBd0JDeUFBS0FJc0lBUnFJZ1FxQWdnaEN5QUVLZ0lFSVE0Z0FTQUFLZ0lFSWdZZ0JDb0NBSlFnQVNvQ0FKSWlFRGdDQUNBQklBWWdEcFFnQVNvQ0JKSWlEamdDQkNBQklBWWdDNVFnQVNvQ0NKSWlDemdDQ0NBRUtnSVVJUW9nQkNvQ0VDRUlJQUVnQmlBRUtnSU1sQ0FIa2lJSE9BSU1JQUVnQmlBSWxDQUJLZ0lRa2lJSU9BSVFJQUVnQmlBS2xDQUJLZ0lVa2lJS09BSVVJQVFxQWlBaERTQUVLZ0ljSVFrZ0FTQUdJQVFxQWhpVUlBRXFBaGlTT0FJWUlBRWdCaUFKbENBQktnSWNramdDSENBQklBWWdEWlFnQVNvQ0lKSTRBaUFMSUFKQkFEWUNMQ0FDUVFBMkFod2dBa0VBTmdJTUlBZEROZnFPUEpSREFBQUFQNVFpQnhBWElRMGdDRU0xK280OGxFTUFBQUEvbENJTUVCY2hDQ0FLUXpYNmpqeVVRd0FBQUQrVUlnb1FGeUVHSUFjUUd5RUpJQXdRR3lFTUlBSWdDeUFKSUFpVUlnOGdDaEFiSWdlVUlBWWdEU0FNbENJUmxKSWlDaUFHSUFrZ0RKUWlDWlFnQnlBTklBaVVJZ3lVa3lJTklBMlNJZ2lVSWhJZ0NTQUhsQ0FNSUFhVWtpSUpJQkVnQjVRZ0JpQVBsSk1pQmlBR2tpSU1sQ0lQazVRNEFpUWdBaUFMSUFZZ0NKUWlFU0FKSUFvZ0NwSWlCNVFpRTVLVU9BSWdJQUlnRGlBU0lBK1NsRGdDR0NBQ0lBNGdCaUFIbENJUElBa2dDSlFpQ1pPVU9BSVFJQUlnRUNBUklCT1RsRGdDQ0NBQ0lCQWdEeUFKa3BRNEFnUWdBaUFMUXdBQWdEOGdCaUFNbENJR0lBb2dCNVFpQzVLVGxEZ0NLQ0FDSUE1REFBQ0FQeUFHSUEwZ0NKUWlCcEtUbERnQ0ZDQUNJQkJEQUFDQVB5QUxJQWFTazVRNEFnQWdBaUFCS2dJWU9BSXdJQUlnQVNvQ0hEZ0NOQ0FCS2dJZ0lRWWdBa0dBZ0lEOEF6WUNQQ0FDSUFZNEFqZ2dCU2dDQ0NJQlFYOUhCRUFnQUNBQkVETWhBQ0FEL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ0pDQUQvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDRkNBRFFnQTNBalFnQTBHQWdJRDhBellDS0NBRFFZQ0FnUHdETmdJVUlBUDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0lFSUFOQmdJQ0EvQU0yQWp3Z0EwR0FnSUQ4QXpZQ0FDQUMvUWtDRENFWUlBTDlDUUlJSVJrZ0F2MEpBZ0FoR2lBQy9Ra0NCQ0ViSUFMOUNRSWNJUndnQXYwSkFoZ2hIU0FDL1FrQ0VDRWVJQUw5Q1FJVUlSOGdBdjBKQWl3aElDQUMvUWtDS0NFaElBTDlDUUlnSVNJZ0F2MEpBaVFoSXlBRElBRDlBQUl3SWhRZ0F2MEpBano5NWdFZ0FQMEFBaUFpRlNBQy9Ra0NPUDNtQVNBQS9RQUNBQ0lXSUFMOUNRSXcvZVlCSUFEOUFBSVFJaGNnQXYwSkFqVDk1Z0g5NUFIOTVBSDk1QUg5Q3dJd0lBTWdGQ0FnL2VZQklCVWdJZjNtQVNBV0lDTDk1Z0VnRnlBai9lWUIvZVFCL2VRQi9lUUIvUXNDSUNBRElCUWdIUDNtQVNBVklCMzk1Z0VnRmlBZS9lWUJJQmNnSC8zbUFmM2tBZjNrQWYza0FmMExBaEFnQXlBVUlCajk1Z0VnRlNBWi9lWUJJQllnR3YzbUFTQWJJQmY5NWdIOTVBSDk1QUg5NUFIOUN3SUFJQUlnQS8wQUFqRDlDd0l3SUFJZ0EvMEFBaUQ5Q3dJZ0lBSWdBLzBBQWhEOUN3SVFJQUlnQS8wQUFnRDlDd0lBQ3lBRlFRQTJBZ0FMSUFOQlFHc2tBQ0FDQzdNREFRZC9JQUVnQUNnQ0NDSUVJQUFvQWdRaUFtdEJKRzFOQkVBZ0FDQUJCSDhnQWtFQUlBRkJKR3hCSkdzaUFDQUFRU1J3YTBFa2FpSUFFQWNnQUdvRklBSUxOZ0lFRHdzQ1FDQUNJQUFvQWdBaUJtdEJKRzBpQnlBQmFpSURRY2pqOFRoSkJFQkJ4K1B4T0NBRUlBWnJRU1J0SWdSQkFYUWlDQ0FESUFNZ0NFa2JJQVJCNC9HNEhFOGJJZ1FFUUNBRVFjamo4VGhQRFFJZ0JFRWtiQkFMSVFVTElBZEJKR3dnQldvaUEwRUFJQUZCSkd4QkpHc2lBU0FCUVNSd2EwRWthaUlIRUFjaUFTQUhhaUVISUFVZ0JFRWtiR29oQkFKQUlBSWdCa1lFUUNBQklRVU1BUXNEUUNBRFFTUnJJZ1VnQWtFa2F5SUJLZ0lBT0FJQUlBTkJJR3NnQWtFZ2F5b0NBRGdDQUNBRFFSeHJJQUpCSEdzcUFnQTRBZ0FnQTBFWWF5QUNRUmhyS2dJQU9BSUFJQU5CRkdzZ0FrRVVheW9DQURnQ0FDQURRUkJySUFKQkVHc3FBZ0E0QWdBZ0EwRU1heUFDUVF4cktnSUFPQUlBSUFOQkNHc2dBa0VJYXlvQ0FEZ0NBQ0FEUVFScklBSkJCR3NxQWdBNEFnQWdCU0VESUFFaUFpQUdSdzBBQ3dzZ0FDQUVOZ0lJSUFBZ0J6WUNCQ0FBSUFVMkFnQWdCZ1JBSUFZUURBc1BDeEFUQUFzUUVnQUwvQXNEQkg4Z2ZBTjdJd0JCZ0FGcklnTWtBQ0FBS0FJSUlBRkJCM1JxSVFJZ0FDZ0NJQ0FCUVFSMGFpSUZLQUlBQkVBZ0FVSElBR3dpQVNBQUtBSVVhaUlFS3dNWUlRZ0NmQ0FGS0FJRVFRRkhCRUFnQkNzREVDRUxJQVFyQXdBaERDQUVLd01vSVFvZ0JDc0RJQ0VHSUFRckF3Z01BUXNnQUNnQ0xDQUJhaUlCS3dNUUlRWWdCQ0FCL1FBREFDQUFLZ0lFdXlJSC9SUWlKdjN5QVNBRS9RQURBUDN3QVNJbi9Rc0RBQ0FFSUFZZ0I2SWdCQ3NERUtBaUN6a0RFQ0FFSUFFckF4Z2dCNklnQ0tBaUNEa0RHQ0FFSUFIOUFBTWdJQ2I5OGdFZ0JQMEFBeUQ5OEFFaUtQMExBeUFnQVNzRFFDRUdJQVFnQWYwQUF6QWdKdjN5QVNBRS9RQURNUDN3QWYwTEF6QWdCQ0FHSUFlaUlBUXJBMENnT1FOQUlDZjlJUUFoRENBby9TRUJJUW9nS1AwaEFDRUdJQ2Y5SVFFTElSQWdBa0lBTndOWUlBSkNBRGNET0NBQ1FnQTNBeGdnQ0VRQUFBQ2dSdCtSUDZKRUFBQUFBQUFBNEQraUlnZ1FHQ0VOSUFaRUFBQUFvRWJma1QraVJBQUFBQUFBQU9BL29pSUhFQmdoRGlBS1JBQUFBS0JHMzVFL29rUUFBQUFBQUFEZ1A2SWlCaEFZSVE4Z0NCQWNJUWdnQnhBY0lRY2dBaUFMSUFnZ0RxSWlFeUFHRUJ3aUNhSWdEeUFOSUFlaUlncWlvQ0lSSUE4Z0NDQUhvaUlJb2lBSklBMGdEcUlpQnFLaEloUWdGS0FpRXFJaUJ5QUlJQW1pSUFZZ0Q2S2dJZzBnQ2lBSm9pQVBJQk9pb1NJSklBbWdJaE9pSWdhaG9qa0RTQ0FDSUFzZ0NTQVNvaUlLSUEwZ0VTQVJvQ0lPb2lJSW9LSTVBMEFnQWlBUUlBY2dCcUNpT1FNd0lBSWdFQ0FKSUE2aUlnY2dEU0FTb2lJR29hSTVBeUFnQWlBTUlBb2dDS0dpT1FNUUlBSWdEQ0FISUFhZ29qa0RDQ0FDSUF0RUFBQUFBQUFBOEQ4Z0NTQVRvaUlHSUJFZ0RxSWlCNkNob2prRFVDQUNJQkJFQUFBQUFBQUE4RDhnQmlBVUlCS2lJZ2Fnb2FJNUF5Z2dBaUFNUkFBQUFBQUFBUEEvSUFjZ0JxQ2hvamtEQUNBQ0lBUXJBekE1QTJBZ0FpQUVLd000T1FOb0lBUXJBMEFoQmlBQ1FvQ0FnSUNBZ0lENFB6Y0RlQ0FDSUFZNUEzQWdCU2dDQ0NJQlFYOUhCRUFnQUNBQkVEVWhBQ0FEUVFocVFRQkI4QUFRQnhvZ0EwS0FnSUNBZ0lDQStEODNBM2dnQTBLQWdJQ0FnSUNBK0Q4M0ExQWdBMEtBZ0lDQWdJQ0ErRDgzQXlnZ0EwS0FnSUNBZ0lDQStEODNBd0FnQWlzREdDRVZJQUlyQXhBaEZpQUNLd01BSVJjZ0Fpc0RDQ0VZSUFJckF6Z2hHU0FDS3dNd0lSb2dBaXNESUNFYklBSXJBeWdoSENBQ0t3TllJUjBnQWlzRFVDRWVJQUlyQTBBaEh5QUNLd05JSVNBZ0FDc0RZQ0VoSUFBckEwQWhJaUFBS3dNQUlTTWdBQ3NESUNFa0lBQXJBMmdoSlNBQUt3TklJUXNnQUNzRENDRU1JQUFyQXlnaER5QUFLd053SVJBZ0FDc0RVQ0VKSUFBckF4QWhFU0FBS3dNd0lSSWdBeUFBS3dONEloUWdBaXNEZUNJTm9pQUFLd05ZSWc0Z0Fpc0RjQ0lUb2lBQUt3TVlJZ29nQWlzRFlDSUlvaUFBS3dNNElnY2dBaXNEYUNJR29xQ2dvRGtEZUNBRElCQWdEYUlnQ1NBVG9pQVJJQWlpSUJJZ0JxS2dvS0E1QTNBZ0F5QWxJQTJpSUFzZ0U2SWdEQ0FJb2lBUElBYWlvS0NnT1FOb0lBTWdJU0FOb2lBaUlCT2lJQ01nQ0tJZ0pDQUdvcUNnb0RrRFlDQURJQlFnSGFJZ0RpQWVvaUFLSUIraUlBY2dJS0tnb0tBNUExZ2dBeUFRSUIyaUlBa2dIcUlnRVNBZm9pQVNJQ0Npb0tDZ09RTlFJQU1nSlNBZG9pQUxJQjZpSUF3Z0g2SWdEeUFnb3FDZ29Ea0RTQ0FESUNFZ0hhSWdJaUFlb2lBaklCK2lJQ1FnSUtLZ29LQTVBMEFnQXlBVUlCbWlJQTRnR3FJZ0NpQWJvaUFISUJ5aW9LQ2dPUU00SUFNZ0VDQVpvaUFKSUJxaUlCRWdHNklnRWlBY29xQ2dvRGtETUNBRElDVWdHYUlnQ3lBYW9pQU1JQnVpSUE4Z0hLS2dvS0E1QXlnZ0F5QWhJQm1pSUNJZ0dxSWdJeUFib2lBa0lCeWlvS0NnT1FNZ0lBTWdGQ0FWb2lBT0lCYWlJQW9nRjZJZ0dDQUhvcUNnb0RrREdDQURJQkFnRmFJZ0NTQVdvaUFSSUJlaUlCZ2dFcUtnb0tBNUF4QWdBeUFsSUJXaUlBc2dGcUlnRENBWG9pQVlJQStpb0tDZ09RTUlJQU1nSVNBVm9pQWlJQmFpSUNNZ0Y2SWdKQ0FZb3FDZ29Ea0RBQ0FDSUFOQmdBRVFGUm9MSUFWQkFEWUNBQXNnQTBHQUFXb2tBQ0FDQzRnTEFRZC9Ba0FnQVNBQUtBSU1JZ1FnQUNnQ0NDSURhMEVIZFNJQ1JnMEFBa0FnQVNBQ1N3UkFJQUVnQW1zaUJpQUFLQUlRSWdVZ0JDSURhMEVIZFUwRVFBSkFJQVpGRFFBZ0F5RUNJQVpCQTNFaUJRUkFRUUFoQkFOQUlBSkJDR3BCQUVId0FCQUhHaUFDUW9DQWdJQ0FnSUQ0UHpjRGVDQUNRb0NBZ0lDQWdJRDRQemNEVUNBQ1FvQ0FnSUNBZ0lENFB6Y0RLQ0FDUW9DQWdJQ0FnSUQ0UHpjREFDQUNRWUFCYWlFQ0lBUkJBV29pQkNBRlJ3MEFDd3NnQmtFSGRDQURhaUVESUFaQkFXdEIvLy8vRDNGQkEwa05BQU5BSUFKQkNHcEJBRUh3QUJBSEdpQUNRb0NBZ0lDQWdJRDRQemNEZUNBQ1FvQ0FnSUNBZ0lENFB6Y0RVQ0FDUW9DQWdJQ0FnSUQ0UHpjREtDQUNRb0NBZ0lDQWdJRDRQemNEQUNBQ1FZZ0Jha0VBUWZBQUVBY2FJQUpDZ0lDQWdJQ0FnUGcvTndQNEFTQUNRb0NBZ0lDQWdJRDRQemNEMEFFZ0FrS0FnSUNBZ0lDQStEODNBNmdCSUFKQ2dJQ0FnSUNBZ1BnL053T0FBU0FDUVlnQ2FrRUFRZkFBRUFjYUlBSkNnSUNBZ0lDQWdQZy9Od1A0QWlBQ1FvQ0FnSUNBZ0lENFB6Y0QwQUlnQWtLQWdJQ0FnSUNBK0Q4M0E2Z0NJQUpDZ0lDQWdJQ0FnUGcvTndPQUFpQUNRWWdEYWtFQVFmQUFFQWNhSUFKQ2dJQ0FnSUNBZ1BnL053UDRBeUFDUW9DQWdJQ0FnSUQ0UHpjRDBBTWdBa0tBZ0lDQWdJQ0ErRDgzQTZnRElBSkNnSUNBZ0lDQWdQZy9Od09BQXlBQ1FZQUVhaUlDSUFOSERRQUxDeUFBSUFNMkFnd01BZ3NDUUNBRElBQW9BZ2dpQW10QkIzVWlCQ0FHYWlJSFFZQ0FnQkJKQkVCQkFDRURRZi8vL3c4Z0JTQUNheUlGUVFaMUlnSWdCeUFDSUFkTEd5QUZRWUQvLy84SFR4c2lCd1JBSUFkQmdJQ0FFRThOQWlBSFFRZDBFQXNoQ0FzZ0NDQUVRUWQwYWlJRUlRSWdCa0VEY1NJRkJFQURRQ0FDUVFocVFRQkI4QUFRQnhvZ0FrS0FnSUNBZ0lDQStEODNBM2dnQWtLQWdJQ0FnSUNBK0Q4M0ExQWdBa0tBZ0lDQWdJQ0ErRDgzQXlnZ0FrS0FnSUNBZ0lDQStEODNBd0FnQWtHQUFXb2hBaUFEUVFGcUlnTWdCVWNOQUFzTElBWkJCM1FnQkdvaEJTQUdRUUZyUWYvLy93OXhRUU5QQkVBRFFDQUNRUWhxUVFCQjhBQVFCeG9nQWtLQWdJQ0FnSUNBK0Q4M0EzZ2dBa0tBZ0lDQWdJQ0ErRDgzQTFBZ0FrS0FnSUNBZ0lDQStEODNBeWdnQWtLQWdJQ0FnSUNBK0Q4M0F3QWdBa0dJQVdwQkFFSHdBQkFIR2lBQ1FvQ0FnSUNBZ0lENFB6Y0QrQUVnQWtLQWdJQ0FnSUNBK0Q4M0E5QUJJQUpDZ0lDQWdJQ0FnUGcvTndPb0FTQUNRb0NBZ0lDQWdJRDRQemNEZ0FFZ0FrR0lBbXBCQUVId0FCQUhHaUFDUW9DQWdJQ0FnSUQ0UHpjRCtBSWdBa0tBZ0lDQWdJQ0ErRDgzQTlBQ0lBSkNnSUNBZ0lDQWdQZy9Od09vQWlBQ1FvQ0FnSUNBZ0lENFB6Y0RnQUlnQWtHSUEycEJBRUh3QUJBSEdpQUNRb0NBZ0lDQWdJRDRQemNEK0FNZ0FrS0FnSUNBZ0lDQStEODNBOUFESUFKQ2dJQ0FnSUNBZ1BnL053T29BeUFDUW9DQWdJQ0FnSUQ0UHpjRGdBTWdBa0dBQkdvaUFpQUZSdzBBQ3dzZ0FDZ0NEQ0lDSUFBb0FnZ2lBMGNFUUFOQUlBUkJnQUZySWdRZ0FrR0FBV3NpQWtHQUFSQVZHaUFDSUFOSERRQUxJQUFvQWdnaEFnc2dBQ0FJSUFkQkIzUnFOZ0lRSUFBZ0JUWUNEQ0FBSUFRMkFnZ2dBZ1JBSUFJUUZnc01Bd3NRRXdBTEVCSUFDeUFCSUFKUERRQWdBQ0FESUFGQkIzUnFOZ0lNQ3dKQUlBQW9BaGdnQUNnQ0ZDSURhMEhJQUcwaUFpQUJTUVJBSUFCQkZHb2dBU0FDYXhBOERBRUxJQUVnQWs4TkFDQUFJQU1nQVVISUFHeHFOZ0lZQ3dKQUlBQW9BaVFnQUNnQ0lDSURhMEVFZFNJQ0lBRkpCRUFnQUVFZ2FpQUJJQUpyRURzTUFRc2dBU0FDVHcwQUlBQWdBeUFCUVFSMGFqWUNKQXNnQUNnQ01DQUFLQUlzSWdOclFjZ0FiU0lDSUFGSkJFQWdBRUVzYWlBQklBSnJFRHdQQ3lBQklBSlBEUUFnQUNBRElBRkJ5QUJzYWpZQ01Bc0xCd0FnQUNnQ0xBc0hBQ0FBS0FJZ0N3Y0FJQUFvQWhRTEJ3QWdBQ2dDQ0F2VUJRRUhmeUFCSUFBb0FnZ2lCeUFBS0FJRUlnTnJRUVIxVFFSQUFrQWdBVVVOQUNBRElRSWdBVUVIY1NJRkJFQURRQ0FDUXYvLy8vOFBOd0lJSUFKQ0FEY0NBQ0FDUVJCcUlRSWdCRUVCYWlJRUlBVkhEUUFMQ3lBQlFRUjBJQU5xSVFNZ0FVRUJhMEgvLy8vL0FIRkJCMGtOQUFOQUlBSkMvLy8vL3c4M0FuZ2dBa0lBTndKd0lBSkMvLy8vL3c4M0FtZ2dBa0lBTndKZ0lBSkMvLy8vL3c4M0FsZ2dBa0lBTndKUUlBSkMvLy8vL3c4M0FrZ2dBa0lBTndKQUlBSkMvLy8vL3c4M0FqZ2dBa0lBTndJd0lBSkMvLy8vL3c4M0FpZ2dBa0lBTndJZ0lBSkMvLy8vL3c4M0FoZ2dBa0lBTndJUUlBSkMvLy8vL3c4M0FnZ2dBa0lBTndJQUlBSkJnQUZxSWdJZ0EwY05BQXNMSUFBZ0F6WUNCQThMQWtBZ0F5QUFLQUlBSWdKclFRUjFJZ1FnQVdvaUJrR0FnSUNBQVVrRVFFSC8vLy8vQUNBSElBSnJJZ2RCQTNVaUFpQUdJQUlnQmtzYklBZEI4UC8vL3dkUEd5SUdCRUFnQmtHQWdJQ0FBVThOQWlBR1FRUjBFQXNoQ0FzZ0NDQUVRUVIwYWlJRUlRSWdBVUVIY1NJSEJFQURRQ0FDUXYvLy8vOFBOd0lJSUFKQ0FEY0NBQ0FDUVJCcUlRSWdCVUVCYWlJRklBZEhEUUFMQ3lBQlFRUjBJQVJxSVFVZ0FVRUJhMEgvLy8vL0FIRkJCMDhFUUFOQUlBSkMvLy8vL3c4M0FuZ2dBa0lBTndKd0lBSkMvLy8vL3c4M0FtZ2dBa0lBTndKZ0lBSkMvLy8vL3c4M0FsZ2dBa0lBTndKUUlBSkMvLy8vL3c4M0FrZ2dBa0lBTndKQUlBSkMvLy8vL3c4M0FqZ2dBa0lBTndJd0lBSkMvLy8vL3c4M0FpZ2dBa0lBTndJZ0lBSkMvLy8vL3c4M0FoZ2dBa0lBTndJUUlBSkMvLy8vL3c4M0FnZ2dBa0lBTndJQUlBSkJnQUZxSWdJZ0JVY05BQXNMSUFBb0FnQWlBU0FEUndSQUEwQWdCRUVRYXlJRUlBTkJFR3NpQS8wQUFnRDlDd0lBSUFFZ0EwY05BQXNnQUNnQ0FDRURDeUFBSUFnZ0JrRUVkR28yQWdnZ0FDQUZOZ0lFSUFBZ0JEWUNBQ0FEQkVBZ0F4QU1DdzhMRUJNQUN4QVNBQXVMQXdFSGZ5QUJJQUFvQWdnaUFpQUFLQUlFSWdOclFjZ0FiVTBFUUNBQUlBRUVmeUFEUVFBZ0FVSElBR3hCeUFCcklnQWdBRUhJQUhCclFjZ0FhaUlBRUFjZ0FHb0ZJQU1MTmdJRUR3c0NRQ0FESUFBb0FnQWlCbXRCeUFCdElnZ2dBV29pQkVIazhiZ2NTUVJBUWVQeHVCd2dBaUFHYTBISUFHMGlCMEVCZENJQ0lBUWdBaUFFU3hzZ0IwSHh1SndPVHhzaUJBUkFJQVJCNVBHNEhFOE5BaUFFUWNnQWJCQUxJUVVMSUFVZ0NFSElBR3hxSWdKQkFDQUJRY2dBYkVISUFHc2lBU0FCUWNnQWNHdEJ5QUJxSWdjUUJ5SUJJQWRxSVFnZ0JTQUVRY2dBYkdvaEJ3SkFJQU1nQmtZRVFDQUJJUVVNQVFzRFFDQUNRY2dBYXlJRklBTkJ5QUJySWdIOUFBTUEvUXNEQUNBQ1FUaHJJQU5CT0d2OUFBTUEvUXNEQUNBQ1FTaHJJQU5CS0d2OUFBTUEvUXNEQUNBQ1FSaHJJQU5CR0d2OUFBTUEvUXNEQUNBQ1FRaHJJQU5CQ0dzckF3QTVBd0FnQlNFQ0lBRWlBeUFHUncwQUN3c2dBQ0FITmdJSUlBQWdDRFlDQkNBQUlBVTJBZ0FnQmdSQUlBWVFEQXNQQ3hBVEFBc1FFZ0FMR1FFQmYwR2dLeWdDQUNJQklBQWdBU2dDQUNnQ0dCRUJBQXNRQUNNQUlBQnJRWEJ4SWdBa0FDQUFDd2NBSUFBb0FnUUxCUUJCb3drTEJRQkJ6UWtMQlFCQmtBa0xGd0VCZjBHZ0t5Z0NBQ0lBSUFBb0FnQW9BaFFSQUFBTEZRQWdBRVVFUUVFQUR3c2dBRUhrSmhBaVFRQkhDeG9BSUFBZ0FTZ0NDQ0FGRUFvRVFDQUJJQUlnQXlBRUVDQUxDemNBSUFBZ0FTZ0NDQ0FGRUFvRVFDQUJJQUlnQXlBRUVDQVBDeUFBS0FJSUlnQWdBU0FDSUFNZ0JDQUZJQUFvQWdBb0FoUVJDUUFMcHdFQUlBQWdBU2dDQ0NBRUVBb0VRQUpBSUFFb0FnUWdBa2NOQUNBQktBSWNRUUZHRFFBZ0FTQUROZ0ljQ3c4TEFrQWdBQ0FCS0FJQUlBUVFDa1VOQUFKQUlBSWdBU2dDRUVjRVFDQUJLQUlVSUFKSERRRUxJQU5CQVVjTkFTQUJRUUUyQWlBUEN5QUJJQUkyQWhRZ0FTQUROZ0lnSUFFZ0FTZ0NLRUVCYWpZQ0tBSkFJQUVvQWlSQkFVY05BQ0FCS0FJWVFRSkhEUUFnQVVFQk9nQTJDeUFCUVFRMkFpd0xDNGdDQUNBQUlBRW9BZ2dnQkJBS0JFQUNRQ0FCS0FJRUlBSkhEUUFnQVNnQ0hFRUJSZzBBSUFFZ0F6WUNIQXNQQ3dKQUlBQWdBU2dDQUNBRUVBb0VRQUpBSUFJZ0FTZ0NFRWNFUUNBQktBSVVJQUpIRFFFTElBTkJBVWNOQWlBQlFRRTJBaUFQQ3lBQklBTTJBaUFDUUNBQktBSXNRUVJHRFFBZ0FVRUFPd0UwSUFBb0FnZ2lBQ0FCSUFJZ0FrRUJJQVFnQUNnQ0FDZ0NGQkVKQUNBQkxRQTFCRUFnQVVFRE5nSXNJQUV0QURSRkRRRU1Bd3NnQVVFRU5nSXNDeUFCSUFJMkFoUWdBU0FCS0FJb1FRRnFOZ0lvSUFFb0FpUkJBVWNOQVNBQktBSVlRUUpIRFFFZ0FVRUJPZ0EyRHdzZ0FDZ0NDQ0lBSUFFZ0FpQURJQVFnQUNnQ0FDZ0NHQkVHQUFzTE1RQWdBQ0FCS0FJSVFRQVFDZ1JBSUFFZ0FpQURFQ0VQQ3lBQUtBSUlJZ0FnQVNBQ0lBTWdBQ2dDQUNnQ0hCRUhBQXNZQUNBQUlBRW9BZ2hCQUJBS0JFQWdBU0FDSUFNUUlRc0xGd0VCZjBHZ0t5Z0NBQ0lBSUFBb0FnQW9BaEFSQUFBTG5BRUJBbjhqQUVGQWFpSURKQUFDZjBFQklBQWdBVUVBRUFvTkFCcEJBQ0FCUlEwQUdrRUFJQUZCaENZUUlpSUJSUTBBR2lBRFFReHFRUUJCTkJBSEdpQURRUUUyQWpnZ0EwRi9OZ0lVSUFNZ0FEWUNFQ0FESUFFMkFnZ2dBU0FEUVFocUlBSW9BZ0JCQVNBQktBSUFLQUljRVFjQUlBTW9BaUFpQUVFQlJnUkFJQUlnQXlnQ0dEWUNBQXNnQUVFQlJnc2hCQ0FEUVVCckpBQWdCQXNYQVFGL1FhQXJLQUlBSWdBZ0FDZ0NBQ2dDREJFQUFBc1hBUUYvUWFBcktBSUFJZ0FnQUNnQ0FDZ0NDQkVBQUFzRUFFSUFDd1FBUVFBTDlBSUJDSDhqQUVFZ2F5SURKQUFnQXlBQUtBSWNJZ1EyQWhBZ0FDZ0NGQ0VGSUFNZ0FqWUNIQ0FESUFFMkFoZ2dBeUFGSUFScklnRTJBaFFnQVNBQ2FpRUZRUUloQndKL0FrQUNRQUpBSUFBb0Fqd2dBMEVRYWlJQlFRSWdBMEVNYWhBQUlnUUVmMEc0TXlBRU5nSUFRWDhGUVFBTEJFQWdBU0VFREFFTEEwQWdCU0FES0FJTUlnWkdEUUlnQmtFQVNBUkFJQUVoQkF3RUN5QUJJQVlnQVNnQ0JDSUlTeUlKUVFOMGFpSUVJQVlnQ0VFQUlBa2JheUlJSUFRb0FnQnFOZ0lBSUFGQkRFRUVJQWtiYWlJQklBRW9BZ0FnQ0dzMkFnQWdCU0FHYXlFRklBQW9BandnQkNJQklBY2dDV3NpQnlBRFFReHFFQUFpQmdSL1FiZ3pJQVkyQWdCQmZ3VkJBQXRGRFFBTEN5QUZRWDlIRFFFTElBQWdBQ2dDTENJQk5nSWNJQUFnQVRZQ0ZDQUFJQUVnQUNnQ01HbzJBaEFnQWd3QkN5QUFRUUEyQWh3Z0FFSUFOd01RSUFBZ0FDZ0NBRUVnY2pZQ0FFRUFJQWRCQWtZTkFCb2dBaUFFS0FJRWF3c2hDaUFEUVNCcUpBQWdDZ3NaQVFGL1FhQXJLQUlBSWdFZ0FDQUJLQUlBS0FJRUVRRUFDeWNBSUFBZ0F6Z0NCQ0FCSUFKSUJFQURRQ0FBSUFFUU14b2dBVUVCYWlJQklBSkhEUUFMQ3d1V0FnSUJmdzk5SXdCQmdBRnJJZ0lrQUNBQUtBSUlJQUZCQm5ScUlnQXFBZ0FoQXlBQUtnSUVJUVFnQUNvQ0NDRUZJQUFxQWd3aEJpQUFLZ0lRSVFjZ0FDb0NGQ0VJSUFBcUFoZ2hDU0FBS2dJY0lRb2dBQ29DSUNFTElBQXFBaVFoRENBQUtnSW9JUTBnQUNvQ0xDRU9JQUFxQWpBaER5QUFLZ0kwSVJBZ0FDb0NPQ0VSSUFJZ0FDb0NQTHM1QTNnZ0FpQVJ1emtEY0NBQ0lCQzdPUU5vSUFJZ0Q3czVBMkFnQWlBT3V6a0RXQ0FDSUEyN09RTlFJQUlnRExzNUEwZ2dBa0ZBYXlBTHV6a0RBQ0FDSUFxN09RTTRJQUlnQ2JzNUF6QWdBaUFJdXprREtDQUNJQWU3T1FNZ0lBSWdCcnM1QXhnZ0FpQUZ1emtERUNBQ0lBUzdPUU1JSUFJZ0E3czVBd0FnQWhBdUlBSkJnQUZxSkFBTEpRQWdBU0FBS0FJTUlBQW9BZ2hyUVFaMVJ3UkFJQUFnQVNBQUtBSUFLQUlFRVFFQUN3c25BQ0FBSUFNNEFnUWdBU0FDU0FSQUEwQWdBQ0FCRURVYUlBRkJBV29pQVNBQ1J3MEFDd3NMcGdFQ0FYOEhleU1BUVlBQmF5SUNKQUFnQUNnQ0NDQUJRUWQwYWlJQS9RQURBQ0VESUFEOUFBTVFJUVFnQVAwQUF5QWhCU0FBL1FBRE1DRUdJQUQ5QUFOQUlRY2dBUDBBQTFBaENDQUEvUUFEWUNFSklBSWdBUDBBQTNEOUN3UndJQUlnQ2YwTEJHQWdBaUFJL1FzRVVDQUNRVUJySUFmOUN3UUFJQUlnQnYwTEJEQWdBaUFGL1FzRUlDQUNJQVQ5Q3dRUUlBSWdBLzBMQkFBZ0FoQXVJQUpCZ0FGcUpBQUxKUUFnQVNBQUtBSU1JQUFvQWdoclFRZDFSd1JBSUFBZ0FTQUFLQUlBS0FJRUVRRUFDd3YvQVFCQjFDb29BZ0FhQWtBQ2YwRzhDUkFzSWdBQ2YwSFVLaWdDQUVFQVNBUkFRYndKSUFCQmlDb1FHUXdCQzBHOENTQUFRWWdxRUJrTElnRWdBRVlOQUJvZ0FRc2dBRWNOQUFKQVFkZ3FLQUlBUVFwR0RRQkJuQ29vQWdBaUFFR1lLaWdDQUVZTkFFR2NLaUFBUVFGcU5nSUFJQUJCQ2pvQUFBd0JDeU1BUVJCcklnQWtBQ0FBUVFvNkFBOENRQUpBUVpncUtBSUFJZ0VFZnlBQkJVR0lLaEFhRFFKQm1Db29BZ0FMUVp3cUtBSUFJZ0ZHRFFCQjJDb29BZ0JCQ2tZTkFFR2NLaUFCUVFGcU5nSUFJQUZCQ2pvQUFBd0JDMEdJS2lBQVFROXFRUUZCckNvb0FnQVJBZ0JCQVVjTkFDQUFMUUFQR2dzZ0FFRVFhaVFBQzBFQUN4MEJBWDlCb0Nzb0FnQWlBeUFBSUFFZ0FpQURLQUlBS0FJY0VRc0FDNGNDQVFGL1FhQXJLQUlBSWdKRkJFQkJPQkFMSWdOQkJHb2hBaUFCQkVBZ0EwR0lDRFlDQUNBQ1FRQTJBakFnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFpQWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQWhBZ0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBZ0FnQUFSQUlBTWdBQkEyQzBHZ0t5QUROZ0lBRHdzZ0EwSGdDallDQUNBQ1FRQTJBakFnQXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFpQWdBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQWhBZ0F2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBZ0FnQUFSQUlBTWdBQkF5QzBHZ0t5QUROZ0lBRHdzZ0FpQUFRUUFnQWlnQ0FDZ0NBQkVEQUFzTG9DRVZBRUdFQ0F1aUEyQUVBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFERTVUV0YwY21sNFFtRjBZMmhEYjIxd2RYUmxja2xrUlFBeU1FbE5ZWFJ5YVhoQ1lYUmphRU52YlhCMWRHVnlBSGdUQUFCQkJBQUFvQk1BQUNnRUFBQllCQUFBTFNzZ0lDQXdXREI0QUMwd1dDc3dXQ0F3V0Mwd2VDc3dlQ0F3ZUFCMlpXTjBiM0lBYzNSa09qcGxlR05sY0hScGIyNEFibUZ1QUdKaFpGOWhjbkpoZVY5dVpYZGZiR1Z1WjNSb0FHbHVaZ0IzWVhOdElHaGhkbVVnYkc5aFpHVmtBSE4wWkRvNlltRmtYMkZzYkc5akFFNUJUZ0JKVGtZQUxnQW9iblZzYkNrQVd5VXVNbVlzSUNVdU1tWXNJQ1V1TW1Zc0lDVXVNbVpkRFFwYkpTNHlaaXdnSlM0eVppd2dKUzR5Wml3Z0pTNHlabDBOQ2xzbExqSm1MQ0FsTGpKbUxDQWxMakptTENBbExqSm1YUTBLV3lVdU1tWXNJQ1V1TW1Zc0lDVXVNbVlzSUNVdU1tWmREUW9BQUFBQUFBQUFuQVVBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFNVGxOWVhSeWFYaENZWFJqYUVOdmJYQjFkR1Z5U1daRkFBQUFBS0FUQUFDQUJRQUFXQVFBUWJBTEM5Y1ZBd0FBQUFRQUFBQUVBQUFBQmdBQUFJUDVvZ0JFVG00QS9Da1ZBTkZYSndEZE5QVUFZdHZBQUR5WmxRQkJrRU1BWTFIK0FMdmVxd0MzWWNVQU9tNGtBTkpOUWdCSkJ1QUFDZW91QUJ5UzBRRHJIZjRBS2JFY0FPZytwd0QxTllJQVJMc3VBSnpwaEFDMEpuQUFRWDVmQU5hUk9RQlRnemtBblBRNUFJdGZoQUFvK2IwQStCODdBTjcvbHdBUG1BVUFFUy92QUFwYWl3QnRIMjBBejM0MkFBbkxKd0JHVDdjQW5tWS9BQzNxWHdDNkozVUE1ZXZIQUQxNzhRRDNPUWNBa2xLS0FQdHI2Z0Fmc1Y4QUNGMk5BREFEVmdCNy9FWUE4S3RyQUNDOHp3QTI5Sm9BNDZrZEFGNWhrUUFJRytZQWhabGxBS0FVWHdDTlFHZ0FnTmovQUNkelRRQUdCakVBeWxZVkFNbW9jd0I3NG1BQWE0ekFBQm5FUndETlo4TUFDZWpjQUZtREtnQ0xkc1FBcGh5V0FFU3YzUUFaVjlFQXBUNEZBQVVIL3dBemZqOEF3akxvQUpoUDNnQzdmVElBSmozREFCNXI3d0NmK0Y0QU5SODZBSC95eWdEeGh4MEFmSkFoQUdva2ZBRFZidm9BTUMxM0FCVTdRd0MxRk1ZQXd4bWRBSzNFd2dBc1RVRUFEQUJkQUlaOVJnRGpjUzBBbThhYUFETmlBQUMwMG53QXRLZVhBRGRWMVFEWFB2WUFveEFZQUUxMi9BQmtuU29BY05lckFHTjgrQUI2c0ZjQUZ4WG5BTUJKVmdBNzF0a0FwNFE0QUNRanl3RFdpbmNBV2xRakFBQWZ1UUR4Q2hzQUdjN2ZBSjh4L3dCbUhtb0FtVmRoQUt6N1J3QitmOWdBSW1XM0FETG9pUURtdjJBQTc4VE5BR3cyQ1FCZFA5UUFGdDdYQUZnNzNnRGVtNUlBMGlJb0FDaUc2QURpV0UwQXhzb3lBQWpqRmdEZ2Zjc0FGOEJRQVBNZHB3QVk0RnNBTGhNMEFJTVNZZ0NEU0FFQTlZNWJBSzJ3ZndBZTZmSUFTRXBEQUJCbjB3Q3EzZGdBcmw5Q0FHcGh6Z0FLS0tRQTA1bTBBQWFtOGdCY2QzOEFvOEtEQUdFOGlBQ0tjM2dBcjR4YUFHL1h2UUF0cG1NQTlML0xBSTJCN3dBbXdXY0FWY3BGQU1yWk5nQW9xTklBd21HTkFCTEpkd0FFSmhRQUVrYWJBTVJaeEFESXhVUUFUYktSQUFBWDh3RFVRNjBBS1VubEFQM1ZFQUFBdnZ3QUhwVE1BSERPN2dBVFB2VUE3UEdBQUxQbnd3REgrQ2dBa3dXVUFNRnhQZ0F1Q2JNQUMwWHpBSWdTbkFDcklIc0FMcldmQUVlU3dnQjdNaThBREZWdEFIS25rQUJyNXg4QU1jdVdBSGtXU2dCQmVlSUE5TitKQU9pVWx3RGk1b1FBbVRHWEFJanRhd0JmWHpZQXUvME9BRWlhdEFCbnBHd0FjWEpDQUkxZE1nQ2ZGYmdBdk9VSkFJMHhKUUQzZERrQU1BVWNBQTBNQVFCTENHZ0FMTzVZQUVlcWtBQjA1d0lBdmRZa0FQZDlwZ0J1U0hJQW54YnZBSTZVcGdDMGtmWUEwVk5SQU04SzhnQWdtRE1BOVV0K0FMSmphQURkUGw4QVFGMERBSVdKZndCVlVpa0FOMlRBQUczWUVBQXlTRElBVzB4MUFFNXgxQUJGVkc0QUN3bkJBQ3IxYVFBVVp0VUFKd2VkQUYwRVVBQzBPOXNBNm5iRkFJZjVGd0JKYTMwQUhTZTZBSlpwS1FER3pLd0FyUlJVQUpEaWFnQ0kyWWtBTEhKUUFBU2t2Z0IzQjVRQTh6QndBQUQ4SndEcWNhZ0Fac0pKQUdUZ1BRQ1gzWU1Bb3orWEFFT1UvUUFOaG93QU1VSGVBSkk1blFEZGNJd0FGN2ZuQUFqZk93QVZOeXNBWElDZ0FGcUFrd0FRRVpJQUQrallBR3lBcndEYi8wc0FPSkFQQUZrWWRnQmlwUlVBWWN1N0FNZUp1UUFRUUwwQTB2SUVBRWwxSndEcnR2WUEyeUs3QUFvVXFnQ0pKaThBWklOMkFBazdNd0FPbEJvQVVUcXFBQjJqd2dDdjdhNEFYQ1lTQUczQ1RRQXRlcHdBd0ZhWEFBTS9nd0FKOFBZQUswQ01BRzB4bVFBNXRBY0FEQ0FWQU5qRFd3RDFrc1FBeHExTEFFN0twUUNuTjgwQTVxazJBS3VTbEFEZFFtZ0FHV1BlQUhhTTd3Qm9pMUlBL05zM0FLNmhxd0RmRlRFQUFLNmhBQXo3MmdCa1RXWUE3UVczQUNsbE1BQlhWcjhBUi84NkFHcjV1UUIxdnZNQUtKUGZBS3VBTUFCbWpQWUFCTXNWQVBvaUJnRFo1QjBBUGJPa0FGY2Jqd0EyelFrQVRrTHBBQk8rcEFBekk3VUE4S29hQUU5bHFBRFN3YVVBQ3o4UEFGdDR6UUFqK1hZQWU0c0VBSWtYY2dER3BsTUFiMjdpQU8vckFBQ2JTbGdBeE5xM0FLcG11Z0Iyejg4QTBRSWRBTEh4TFFDTW1jRUF3NjEzQUlaSTJnRDNYYUFBeG9EMEFLendMd0RkN0pvQVAxeThBTkRlYlFDUXh4OEFLdHUyQUtNbE9nQUFyNW9BclZPVEFMWlhCQUFwTGJRQVM0QitBTm9IcHdCMnFnNEFlMW1oQUJZU0tnRGN0eTBBK3VYOUFJbmIvZ0NKdnYwQTVIWnNBQWFwL0FBK2dIQUFoVzRWQVAySC93QW9QZ2NBWVdjekFDb1loZ0JOdmVvQXMrZXZBSTl0YmdDVlp6a0FNYjliQUlUWFNBQXczeFlBeHkxREFDVmhOUURKY000QU1NdTRBTDlzL1FDa0FLSUFCV3prQUZyZG9BQWhiMGNBWWhMU0FMbGNoQUJ3WVVrQWExYmdBSmxTQVFCUVZUY0FIdFczQURQeHhBQVRibDhBWFREa0FJVXVxUUFkc3NNQW9USTJBQWkzcEFEcXNkUUFGdmNoQUk5cDVBQW4vM2NBREFPQUFJMUFMUUJQemFBQUlLV1pBTE9pMHdBdlhRb0F0UGxDQUJIYXl3Qjl2dEFBbTl2QkFLc1h2UURLb29FQUNHcGNBQzVWRndBbkFGVUFmeFR3QU9FSGhnQVVDMlFBbGtHTkFJZSszZ0RhL1NvQWF5VzJBSHVKTkFBRjgvNEF1YitlQUdocVR3QktLcWdBVDhSYUFDMzR2QURYV3BnQTlNZVZBQTFOalFBZ09xWUFwRmRmQUJRL3NRQ0FPSlVBekNBQkFISGRoZ0RKM3JZQXYyRDFBRTFsRVFBQkIyc0FqTENzQUxMQTBBQlJWVWdBSHZzT0FKVnl3d0NqQmpzQXdFQTFBQWJjZXdEZ1Jjd0FUaW42QU5iS3lBRG84MEVBZkdUZUFKdGsyQURadmpFQXBKZkRBSGRZMUFCcDQ4VUE4Tm9UQUxvNlBBQkdHRVlBVlhWZkFOSzk5UUJ1a3NZQXJDNWRBQTVFN1FBY1BrSUFZY1NIQUNuOTZRRG4xdk1BSW56S0FHK1JOUUFJNE1VQS85ZU5BRzVxNGdDdy9jWUFrd2pCQUh4ZGRBQnJyYklBelc2ZEFENXlld0RHRVdvQTk4K3BBQ2x6M3dDMXlib0F0d0JSQU9LeURRQjB1aVFBNVgxZ0FIVFlpZ0FORlN3QWdSZ01BSDVtbEFBQktSWUFuM3AyQVAzOXZnQldSZThBMlg0MkFPelpFd0NMdXJrQXhKZjhBREdvSndEeGJzTUFsTVUyQU5pb1ZnQzBxTFVBejh3T0FCS0pMUUJ2VnpRQUxGYUpBSm5PNHdEV0lMa0FhMTZxQUQ0cW5BQVJYOHdBL1F0S0FPSDArd0NPTzIwQTRvWXNBT25VaEFEOHRLa0E3KzdSQUM0MXlRQXZPV0VBT0NGRUFCdlp5QUNCL0FvQSswcHFBQzhjMkFCVHRJUUFUcG1NQUZRaXpBQXFWZHdBd01iV0FBc1psZ0FhY0xnQWFaVmtBQ1phWUFBL1V1NEFmeEVQQVBTMUVRRDh5L1VBTkx3dEFEUzg3Z0RvWGN3QTNWNWdBR2VPbXdDU00rOEF5UmU0QUdGWW13RGhWN3dBVVlQR0FOZytFQURkY1VnQUxSemRBSzhZb1FBaExFWUFXZlBYQU5sNm1BQ2VWTUFBVDRiNkFGWUcvQURsZWE0QWlTSTJBRGl0SWdCbms5d0FWZWlxQUlJbU9BREs1NXNBVVEya0FKa3pzUUNwMXc0QWFRVklBR1d5OEFCL2lLY0FpRXlYQVBuUk5nQWhrck1BZTRKS0FKalBJUUJBbjl3QTNFZFZBT0YwT2dCbjYwSUEvcDNmQUY3VVh3QjdaNlFBdXF4NkFGWDJvZ0FyaUNNQVFicFZBRmx1Q0FBaEtvWUFPVWVEQUluajVnRGxudFFBU2Z0QUFQOVc2UUFjRDhvQXhWbUtBSlQ2S3dEVHdjVUFEOFhQQU50YXJnQkh4WVlBaFVOaUFDR0dPd0FzZVpRQUVHR0hBQ3BNZXdDQUxCb0FRNzhTQUlnbWtBQjRQSWtBcU1Ua0FPWGJld0RFT3NJQUp2VHFBUGRuaWdBTmtyOEFaYU1yQUQyVHNRQzlmQXNBcEZIY0FDZmRZd0JwNGQwQW1wUVpBS2dwbFFCb3ppZ0FDZTIwQUVTZklBQk9tTW9BY0lKakFINThJd0FQdVRJQXAvV09BQlJXNXdBaDhRZ0F0WjBxQUc5K1RRQ2xHVkVBdGZtckFJTGYxZ0NXM1dFQUZqWUNBTVE2bndDRG9xRUFjdTF0QURtTmVnQ0N1S2tBYXpKY0FFWW5Xd0FBTk8wQTBnQjNBUHowVlFBQldVMEE0SEdBQUVHVElRdCtRUHNoK1Q4QUFBQUFMVVIwUGdBQUFJQ1lSdmc4QUFBQVlGSE1lRHNBQUFDQWd4dndPUUFBQUVBZ0pYbzRBQUFBZ0NLQzR6WUFBQUFBSGZOcE5Sa0FDZ0FaR1JrQUFBQUFCUUFBQUFBQUFBa0FBQUFBQ3dBQUFBQUFBQUFBR1FBUkNoa1pHUU1LQndBQkFBa0xHQUFBQ1FZTEFBQUxBQVlaQUFBQUdSa1pBRUdoSWdzaERnQUFBQUFBQUFBQUdRQUtEUmtaR1FBTkFBQUNBQWtPQUFBQUNRQU9BQUFPQUVIYklnc0JEQUJCNXlJTEZSTUFBQUFBRXdBQUFBQUpEQUFBQUFBQURBQUFEQUJCbFNNTEFSQUFRYUVqQ3hVUEFBQUFCQThBQUFBQUNSQUFBQUFBQUJBQUFCQUFRYzhqQ3dFU0FFSGJJd3NlRVFBQUFBQVJBQUFBQUFrU0FBQUFBQUFTQUFBU0FBQWFBQUFBR2hvYUFFR1NKQXNPR2dBQUFCb2FHZ0FBQUFBQUFBa0FRY01rQ3dFVUFFSFBKQXNWRndBQUFBQVhBQUFBQUFrVUFBQUFBQUFVQUFBVUFFSDlKQXNCRmdCQmlTVUwvUVFWQUFBQUFCVUFBQUFBQ1JZQUFBQUFBQllBQUJZQUFEQXhNak0wTlRZM09EbEJRa05FUlVaT01UQmZYMk40ZUdGaWFYWXhNVFpmWDNOb2FXMWZkSGx3WlY5cGJtWnZSUUFBQUFDZ0V3QUFzQklBQUFBVkFBQk9NVEJmWDJONGVHRmlhWFl4TVRkZlgyTnNZWE56WDNSNWNHVmZhVzVtYjBVQUFBQ2dFd0FBNEJJQUFOUVNBQUJPTVRCZlgyTjRlR0ZpYVhZeE1UZGZYM0JpWVhObFgzUjVjR1ZmYVc1bWIwVUFBQUNnRXdBQUVCTUFBTlFTQUFCT01UQmZYMk40ZUdGaWFYWXhNVGxmWDNCdmFXNTBaWEpmZEhsd1pWOXBibVp2UlFDZ0V3QUFRQk1BQURRVEFBQUFBQUFBQkJNQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBQUFBQUFPZ1RBQUFYQUFBQUh3QUFBQmtBQUFBYUFBQUFHd0FBQUNBQUFBQWhBQUFBSWdBQUFFNHhNRjlmWTNoNFlXSnBkakV5TUY5ZmMybGZZMnhoYzNOZmRIbHdaVjlwYm1adlJRQUFBQUNnRXdBQXdCTUFBQVFUQUFBQUFBQUFXQlFBQUFFQUFBQWpBQUFBSkFBQUFBQUFBQUNBRkFBQUFRQUFBQ1VBQUFBbUFBQUFBQUFBQUVBVUFBQUJBQUFBSndBQUFDZ0FBQUJUZERsbGVHTmxjSFJwYjI0QUFBQUFlQk1BQURBVUFBQlRkRGxpWVdSZllXeHNiMk1BQUFBQW9CTUFBRWdVQUFCQUZBQUFVM1F5TUdKaFpGOWhjbkpoZVY5dVpYZGZiR1Z1WjNSb0FBQUFBS0FUQUFCa0ZBQUFXQlFBQUFBQUFBQ3dGQUFBQWdBQUFDa0FBQUFxQUFBQVUzUXhNV3h2WjJsalgyVnljbTl5QUtBVEFBQ2dGQUFBUUJRQUFBQUFBQURrRkFBQUFnQUFBQ3NBQUFBcUFBQUFVM1F4TW14bGJtZDBhRjlsY25KdmNnQUFBQUNnRXdBQTBCUUFBTEFVQUFCVGREbDBlWEJsWDJsdVptOEFBQUFBZUJNQUFQQVVBRUdJS2dzQkJRQkJsQ29MQVJNQVFhd3FDdzRVQUFBQUZRQUFBTGdWQUFBQUJBQkJ4Q29MQVFFQVFkUXFDd1gvLy8vL0NnQkJtQ3NMQTNBY0FRPT0iO2lmKCFpc0RhdGFVUkkod2FzbUJpbmFyeUZpbGUpKXt3YXNtQmluYXJ5RmlsZT1sb2NhdGVGaWxlKHdhc21CaW5hcnlGaWxlKX1mdW5jdGlvbiBnZXRCaW5hcnlTeW5jKGZpbGUpe2lmKGZpbGU9PXdhc21CaW5hcnlGaWxlJiZ3YXNtQmluYXJ5KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSl9dmFyIGJpbmFyeT10cnlQYXJzZUFzRGF0YVVSSShmaWxlKTtpZihiaW5hcnkpe3JldHVybiBiaW5hcnl9aWYocmVhZEJpbmFyeSl7cmV0dXJuIHJlYWRCaW5hcnkoZmlsZSl9dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmdldEJpbmFyeVN5bmMoYmluYXJ5RmlsZSkpfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSxpbXBvcnRzLHJlY2VpdmVyKXtyZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKS50aGVuKGJpbmFyeT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LGltcG9ydHMpKS50aGVuKHJlY2VpdmVyLHJlYXNvbj0+e2VycihgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHtyZWFzb259YCk7YWJvcnQocmVhc29uKX0pfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LGJpbmFyeUZpbGUsaW1wb3J0cyxjYWxsYmFjayl7cmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSxpbXBvcnRzLGNhbGxiYWNrKX1mdW5jdGlvbiBjcmVhdGVXYXNtKCl7dmFyIGluZm89eyJhIjp3YXNtSW1wb3J0c307ZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLG1vZHVsZSl7d2FzbUV4cG9ydHM9aW5zdGFuY2UuZXhwb3J0czt3YXNtTWVtb3J5PXdhc21FeHBvcnRzWyJmIl07dXBkYXRlTWVtb3J5Vmlld3MoKTthZGRPbkluaXQod2FzbUV4cG9ydHNbImciXSk7cmVtb3ZlUnVuRGVwZW5kZW5jeSgid2FzbS1pbnN0YW50aWF0ZSIpO3JldHVybiB3YXNtRXhwb3J0c31hZGRSdW5EZXBlbmRlbmN5KCJ3YXNtLWluc3RhbnRpYXRlIik7ZnVuY3Rpb24gcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQocmVzdWx0KXtyZWNlaXZlSW5zdGFuY2UocmVzdWx0WyJpbnN0YW5jZSJdKX1pZihNb2R1bGVbImluc3RhbnRpYXRlV2FzbSJdKXt0cnl7cmV0dXJuIE1vZHVsZVsiaW5zdGFudGlhdGVXYXNtIl0oaW5mbyxyZWNlaXZlSW5zdGFuY2UpfWNhdGNoKGUpe2VycihgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtlfWApO3JlYWR5UHJvbWlzZVJlamVjdChlKX19aW5zdGFudGlhdGVBc3luYyh3YXNtQmluYXJ5LHdhc21CaW5hcnlGaWxlLGluZm8scmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQpLmNhdGNoKHJlYWR5UHJvbWlzZVJlamVjdCk7cmV0dXJue319ZnVuY3Rpb24gRXhpdFN0YXR1cyhzdGF0dXMpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyI7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7c3RhdHVzfSlgO3RoaXMuc3RhdHVzPXN0YXR1c312YXIgY2FsbFJ1bnRpbWVDYWxsYmFja3M9Y2FsbGJhY2tzPT57d2hpbGUoY2FsbGJhY2tzLmxlbmd0aD4wKXtjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpfX07dmFyIG5vRXhpdFJ1bnRpbWU9TW9kdWxlWyJub0V4aXRSdW50aW1lIl18fHRydWU7Y2xhc3MgRXhjZXB0aW9uSW5mb3tjb25zdHJ1Y3RvcihleGNQdHIpe3RoaXMuZXhjUHRyPWV4Y1B0cjt0aGlzLnB0cj1leGNQdHItMjR9c2V0X3R5cGUodHlwZSl7SEVBUFUzMlt0aGlzLnB0cis0Pj4yXT10eXBlfWdldF90eXBlKCl7cmV0dXJuIEhFQVBVMzJbdGhpcy5wdHIrND4+Ml19c2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcil7SEVBUFUzMlt0aGlzLnB0cis4Pj4yXT1kZXN0cnVjdG9yfWdldF9kZXN0cnVjdG9yKCl7cmV0dXJuIEhFQVBVMzJbdGhpcy5wdHIrOD4+Ml19c2V0X2NhdWdodChjYXVnaHQpe2NhdWdodD1jYXVnaHQ/MTowO0hFQVA4W3RoaXMucHRyKzEyXT1jYXVnaHR9Z2V0X2NhdWdodCgpe3JldHVybiBIRUFQOFt0aGlzLnB0cisxMl0hPTB9c2V0X3JldGhyb3duKHJldGhyb3duKXtyZXRocm93bj1yZXRocm93bj8xOjA7SEVBUDhbdGhpcy5wdHIrMTNdPXJldGhyb3dufWdldF9yZXRocm93bigpe3JldHVybiBIRUFQOFt0aGlzLnB0cisxM10hPTB9aW5pdCh0eXBlLGRlc3RydWN0b3Ipe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKTt0aGlzLnNldF90eXBlKHR5cGUpO3RoaXMuc2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcil9c2V0X2FkanVzdGVkX3B0cihhZGp1c3RlZFB0cil7SEVBUFUzMlt0aGlzLnB0cisxNj4+Ml09YWRqdXN0ZWRQdHJ9Z2V0X2FkanVzdGVkX3B0cigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzE2Pj4yXX1nZXRfZXhjZXB0aW9uX3B0cigpe3ZhciBpc1BvaW50ZXI9X19fY3hhX2lzX3BvaW50ZXJfdHlwZSh0aGlzLmdldF90eXBlKCkpO2lmKGlzUG9pbnRlcil7cmV0dXJuIEhFQVBVMzJbdGhpcy5leGNQdHI+PjJdfXZhciBhZGp1c3RlZD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtpZihhZGp1c3RlZCE9PTApcmV0dXJuIGFkanVzdGVkO3JldHVybiB0aGlzLmV4Y1B0cn19dmFyIGV4Y2VwdGlvbkxhc3Q9MDt2YXIgdW5jYXVnaHRFeGNlcHRpb25Db3VudD0wO3ZhciBfX19jeGFfdGhyb3c9KHB0cix0eXBlLGRlc3RydWN0b3IpPT57dmFyIGluZm89bmV3IEV4Y2VwdGlvbkluZm8ocHRyKTtpbmZvLmluaXQodHlwZSxkZXN0cnVjdG9yKTtleGNlcHRpb25MYXN0PXB0cjt1bmNhdWdodEV4Y2VwdGlvbkNvdW50Kys7dGhyb3cgZXhjZXB0aW9uTGFzdH07dmFyIF9hYm9ydD0oKT0+e2Fib3J0KCIiKX07dmFyIF9lbXNjcmlwdGVuX21lbWNweV9qcz0oZGVzdCxzcmMsbnVtKT0+SEVBUFU4LmNvcHlXaXRoaW4oZGVzdCxzcmMsc3JjK251bSk7dmFyIGdldEhlYXBNYXg9KCk9PjIxNDc0ODM2NDg7dmFyIGdyb3dNZW1vcnk9c2l6ZT0+e3ZhciBiPXdhc21NZW1vcnkuYnVmZmVyO3ZhciBwYWdlcz0oc2l6ZS1iLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2O3RyeXt3YXNtTWVtb3J5Lmdyb3cocGFnZXMpO3VwZGF0ZU1lbW9yeVZpZXdzKCk7cmV0dXJuIDF9Y2F0Y2goZSl7fX07dmFyIF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwPXJlcXVlc3RlZFNpemU9Pnt2YXIgb2xkU2l6ZT1IRUFQVTgubGVuZ3RoO3JlcXVlc3RlZFNpemU+Pj49MDt2YXIgbWF4SGVhcFNpemU9Z2V0SGVhcE1heCgpO2lmKHJlcXVlc3RlZFNpemU+bWF4SGVhcFNpemUpe3JldHVybiBmYWxzZX12YXIgYWxpZ25VcD0oeCxtdWx0aXBsZSk9PngrKG11bHRpcGxlLXglbXVsdGlwbGUpJW11bHRpcGxlO2Zvcih2YXIgY3V0RG93bj0xO2N1dERvd248PTQ7Y3V0RG93bio9Mil7dmFyIG92ZXJHcm93bkhlYXBTaXplPW9sZFNpemUqKDErLjIvY3V0RG93bik7b3Zlckdyb3duSGVhcFNpemU9TWF0aC5taW4ob3Zlckdyb3duSGVhcFNpemUscmVxdWVzdGVkU2l6ZSsxMDA2NjMyOTYpO3ZhciBuZXdTaXplPU1hdGgubWluKG1heEhlYXBTaXplLGFsaWduVXAoTWF0aC5tYXgocmVxdWVzdGVkU2l6ZSxvdmVyR3Jvd25IZWFwU2l6ZSksNjU1MzYpKTt2YXIgcmVwbGFjZW1lbnQ9Z3Jvd01lbW9yeShuZXdTaXplKTtpZihyZXBsYWNlbWVudCl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX07dmFyIHByaW50Q2hhckJ1ZmZlcnM9W251bGwsW10sW11dO3ZhciBVVEY4RGVjb2Rlcj10eXBlb2YgVGV4dERlY29kZXIhPSJ1bmRlZmluZWQiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnVuZGVmaW5lZDt2YXIgVVRGOEFycmF5VG9TdHJpbmc9KGhlYXBPckFycmF5LGlkeCxtYXhCeXRlc1RvUmVhZCk9Pnt2YXIgZW5kSWR4PWlkeCttYXhCeXRlc1RvUmVhZDt2YXIgZW5kUHRyPWlkeDt3aGlsZShoZWFwT3JBcnJheVtlbmRQdHJdJiYhKGVuZFB0cj49ZW5kSWR4KSkrK2VuZFB0cjtpZihlbmRQdHItaWR4PjE2JiZoZWFwT3JBcnJheS5idWZmZXImJlVURjhEZWNvZGVyKXtyZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCxlbmRQdHIpKX12YXIgc3RyPSIiO3doaWxlKGlkeDxlbmRQdHIpe3ZhciB1MD1oZWFwT3JBcnJheVtpZHgrK107aWYoISh1MCYxMjgpKXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUodTApO2NvbnRpbnVlfXZhciB1MT1oZWFwT3JBcnJheVtpZHgrK10mNjM7aWYoKHUwJjIyNCk9PTE5Mil7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCh1MCYzMSk8PDZ8dTEpO2NvbnRpbnVlfXZhciB1Mj1oZWFwT3JBcnJheVtpZHgrK10mNjM7aWYoKHUwJjI0MCk9PTIyNCl7dTA9KHUwJjE1KTw8MTJ8dTE8PDZ8dTJ9ZWxzZXt1MD0odTAmNyk8PDE4fHUxPDwxMnx1Mjw8NnxoZWFwT3JBcnJheVtpZHgrK10mNjN9aWYodTA8NjU1MzYpe3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh1MCl9ZWxzZXt2YXIgY2g9dTAtNjU1MzY7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGNoPj4xMCw1NjMyMHxjaCYxMDIzKX19cmV0dXJuIHN0cn07dmFyIHByaW50Q2hhcj0oc3RyZWFtLGN1cnIpPT57dmFyIGJ1ZmZlcj1wcmludENoYXJCdWZmZXJzW3N0cmVhbV07aWYoY3Vycj09PTB8fGN1cnI9PT0xMCl7KHN0cmVhbT09PTE/b3V0OmVycikoVVRGOEFycmF5VG9TdHJpbmcoYnVmZmVyLDApKTtidWZmZXIubGVuZ3RoPTB9ZWxzZXtidWZmZXIucHVzaChjdXJyKX19O3ZhciBVVEY4VG9TdHJpbmc9KHB0cixtYXhCeXRlc1RvUmVhZCk9PnB0cj9VVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgscHRyLG1heEJ5dGVzVG9SZWFkKToiIjt2YXIgU1lTQ0FMTFM9e3ZhcmFyZ3M6dW5kZWZpbmVkLGdldCgpe3ZhciByZXQ9SEVBUDMyWytTWVNDQUxMUy52YXJhcmdzPj4yXTtTWVNDQUxMUy52YXJhcmdzKz00O3JldHVybiByZXR9LGdldHAoKXtyZXR1cm4gU1lTQ0FMTFMuZ2V0KCl9LGdldFN0cihwdHIpe3ZhciByZXQ9VVRGOFRvU3RyaW5nKHB0cik7cmV0dXJuIHJldH19O3ZhciBfZmRfd3JpdGU9KGZkLGlvdixpb3ZjbnQscG51bSk9Pnt2YXIgbnVtPTA7Zm9yKHZhciBpPTA7aTxpb3ZjbnQ7aSsrKXt2YXIgcHRyPUhFQVBVMzJbaW92Pj4yXTt2YXIgbGVuPUhFQVBVMzJbaW92KzQ+PjJdO2lvdis9ODtmb3IodmFyIGo9MDtqPGxlbjtqKyspe3ByaW50Q2hhcihmZCxIRUFQVThbcHRyK2pdKX1udW0rPWxlbn1IRUFQVTMyW3BudW0+PjJdPW51bTtyZXR1cm4gMH07dmFyIHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyPTA7dmFyIGtlZXBSdW50aW1lQWxpdmU9KCk9Pm5vRXhpdFJ1bnRpbWV8fHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyPjA7dmFyIF9wcm9jX2V4aXQ9Y29kZT0+e0VYSVRTVEFUVVM9Y29kZTtpZigha2VlcFJ1bnRpbWVBbGl2ZSgpKXtNb2R1bGVbIm9uRXhpdCJdPy4oY29kZSk7QUJPUlQ9dHJ1ZX1xdWl0Xyhjb2RlLG5ldyBFeGl0U3RhdHVzKGNvZGUpKX07dmFyIGV4aXRKUz0oc3RhdHVzLGltcGxpY2l0KT0+e0VYSVRTVEFUVVM9c3RhdHVzO19wcm9jX2V4aXQoc3RhdHVzKX07dmFyIGhhbmRsZUV4Y2VwdGlvbj1lPT57aWYoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXN8fGU9PSJ1bndpbmQiKXtyZXR1cm4gRVhJVFNUQVRVU31xdWl0XygxLGUpfTt2YXIgbGVuZ3RoQnl0ZXNVVEY4PXN0cj0+e3ZhciBsZW49MDtmb3IodmFyIGk9MDtpPHN0ci5sZW5ndGg7KytpKXt2YXIgYz1zdHIuY2hhckNvZGVBdChpKTtpZihjPD0xMjcpe2xlbisrfWVsc2UgaWYoYzw9MjA0Nyl7bGVuKz0yfWVsc2UgaWYoYz49NTUyOTYmJmM8PTU3MzQzKXtsZW4rPTQ7KytpfWVsc2V7bGVuKz0zfX1yZXR1cm4gbGVufTt2YXIgc3RyaW5nVG9VVEY4QXJyYXk9KHN0cixoZWFwLG91dElkeCxtYXhCeXRlc1RvV3JpdGUpPT57aWYoIShtYXhCeXRlc1RvV3JpdGU+MCkpcmV0dXJuIDA7dmFyIHN0YXJ0SWR4PW91dElkeDt2YXIgZW5kSWR4PW91dElkeCttYXhCeXRlc1RvV3JpdGUtMTtmb3IodmFyIGk9MDtpPHN0ci5sZW5ndGg7KytpKXt2YXIgdT1zdHIuY2hhckNvZGVBdChpKTtpZih1Pj01NTI5NiYmdTw9NTczNDMpe3ZhciB1MT1zdHIuY2hhckNvZGVBdCgrK2kpO3U9NjU1MzYrKCh1JjEwMjMpPDwxMCl8dTEmMTAyM31pZih1PD0xMjcpe2lmKG91dElkeD49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPXV9ZWxzZSBpZih1PD0yMDQ3KXtpZihvdXRJZHgrMT49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPTE5Mnx1Pj42O2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2UgaWYodTw9NjU1MzUpe2lmKG91dElkeCsyPj1lbmRJZHgpYnJlYWs7aGVhcFtvdXRJZHgrK109MjI0fHU+PjEyO2hlYXBbb3V0SWR4KytdPTEyOHx1Pj42JjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2V7aWYob3V0SWR4KzM+PWVuZElkeClicmVhaztoZWFwW291dElkeCsrXT0yNDB8dT4+MTg7aGVhcFtvdXRJZHgrK109MTI4fHU+PjEyJjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1Pj42JjYzO2hlYXBbb3V0SWR4KytdPTEyOHx1JjYzfX1oZWFwW291dElkeF09MDtyZXR1cm4gb3V0SWR4LXN0YXJ0SWR4fTt2YXIgc3RyaW5nVG9VVEY4PShzdHIsb3V0UHRyLG1heEJ5dGVzVG9Xcml0ZSk9PnN0cmluZ1RvVVRGOEFycmF5KHN0cixIRUFQVTgsb3V0UHRyLG1heEJ5dGVzVG9Xcml0ZSk7dmFyIHN0cmluZ1RvVVRGOE9uU3RhY2s9c3RyPT57dmFyIHNpemU9bGVuZ3RoQnl0ZXNVVEY4KHN0cikrMTt2YXIgcmV0PXN0YWNrQWxsb2Moc2l6ZSk7c3RyaW5nVG9VVEY4KHN0cixyZXQsc2l6ZSk7cmV0dXJuIHJldH07dmFyIHdhc21JbXBvcnRzPXtiOl9fX2N4YV90aHJvdyxjOl9hYm9ydCxlOl9lbXNjcmlwdGVuX21lbWNweV9qcyxkOl9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwLGE6X2ZkX3dyaXRlfTt2YXIgd2FzbUV4cG9ydHM9Y3JlYXRlV2FzbSgpO3ZhciBfX193YXNtX2NhbGxfY3RvcnM9KCk9PihfX193YXNtX2NhbGxfY3RvcnM9d2FzbUV4cG9ydHNbImciXSkoKTt2YXIgX2luaXRpYWxpemU9TW9kdWxlWyJfaW5pdGlhbGl6ZSJdPShhMCxhMSxhMik9PihfaW5pdGlhbGl6ZT1Nb2R1bGVbIl9pbml0aWFsaXplIl09d2FzbUV4cG9ydHNbImgiXSkoYTAsYTEsYTIpO3ZhciBfYWxsb2NNYXRyaXg9TW9kdWxlWyJfYWxsb2NNYXRyaXgiXT1hMD0+KF9hbGxvY01hdHJpeD1Nb2R1bGVbIl9hbGxvY01hdHJpeCJdPXdhc21FeHBvcnRzWyJpIl0pKGEwKTt2YXIgX2dldE1hdHJpeEJ1ZmZlclB0cj1Nb2R1bGVbIl9nZXRNYXRyaXhCdWZmZXJQdHIiXT0oKT0+KF9nZXRNYXRyaXhCdWZmZXJQdHI9TW9kdWxlWyJfZ2V0TWF0cml4QnVmZmVyUHRyIl09d2FzbUV4cG9ydHNbImoiXSkoKTt2YXIgX2dldFNSVFB0cj1Nb2R1bGVbIl9nZXRTUlRQdHIiXT0oKT0+KF9nZXRTUlRQdHI9TW9kdWxlWyJfZ2V0U1JUUHRyIl09d2FzbUV4cG9ydHNbImsiXSkoKTt2YXIgX2dldEluZm9QdHI9TW9kdWxlWyJfZ2V0SW5mb1B0ciJdPSgpPT4oX2dldEluZm9QdHI9TW9kdWxlWyJfZ2V0SW5mb1B0ciJdPXdhc21FeHBvcnRzWyJsIl0pKCk7dmFyIF9nZXRDb250aW51ZWRTUlRQdHI9TW9kdWxlWyJfZ2V0Q29udGludWVkU1JUUHRyIl09KCk9PihfZ2V0Q29udGludWVkU1JUUHRyPU1vZHVsZVsiX2dldENvbnRpbnVlZFNSVFB0ciJdPXdhc21FeHBvcnRzWyJtIl0pKCk7dmFyIF9wcmludE1hdHJpeD1Nb2R1bGVbIl9wcmludE1hdHJpeCJdPWEwPT4oX3ByaW50TWF0cml4PU1vZHVsZVsiX3ByaW50TWF0cml4Il09d2FzbUV4cG9ydHNbIm4iXSkoYTApO3ZhciBfdXBkYXRlQWxsTWF0cml4Q29udGludWVUcmFuc2Zvcm09TW9kdWxlWyJfdXBkYXRlQWxsTWF0cml4Q29udGludWVUcmFuc2Zvcm0iXT0oYTAsYTEsYTIpPT4oX3VwZGF0ZUFsbE1hdHJpeENvbnRpbnVlVHJhbnNmb3JtPU1vZHVsZVsiX3VwZGF0ZUFsbE1hdHJpeENvbnRpbnVlVHJhbnNmb3JtIl09d2FzbUV4cG9ydHNbIm8iXSkoYTAsYTEsYTIpO3ZhciBfbWFpbj1Nb2R1bGVbIl9tYWluIl09KGEwLGExKT0+KF9tYWluPU1vZHVsZVsiX21haW4iXT13YXNtRXhwb3J0c1sicCJdKShhMCxhMSk7dmFyIHN0YWNrQWxsb2M9YTA9PihzdGFja0FsbG9jPXdhc21FeHBvcnRzWyJyIl0pKGEwKTt2YXIgX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1hMD0+KF9fX2N4YV9pc19wb2ludGVyX3R5cGU9d2FzbUV4cG9ydHNbInMiXSkoYTApO3ZhciBjYWxsZWRSdW47ZGVwZW5kZW5jaWVzRnVsZmlsbGVkPWZ1bmN0aW9uIHJ1bkNhbGxlcigpe2lmKCFjYWxsZWRSdW4pcnVuKCk7aWYoIWNhbGxlZFJ1bilkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9cnVuQ2FsbGVyfTtmdW5jdGlvbiBjYWxsTWFpbihhcmdzPVtdKXt2YXIgZW50cnlGdW5jdGlvbj1fbWFpbjthcmdzLnVuc2hpZnQodGhpc1Byb2dyYW0pO3ZhciBhcmdjPWFyZ3MubGVuZ3RoO3ZhciBhcmd2PXN0YWNrQWxsb2MoKGFyZ2MrMSkqNCk7dmFyIGFyZ3ZfcHRyPWFyZ3Y7YXJncy5mb3JFYWNoKGFyZz0+e0hFQVBVMzJbYXJndl9wdHI+PjJdPXN0cmluZ1RvVVRGOE9uU3RhY2soYXJnKTthcmd2X3B0cis9NH0pO0hFQVBVMzJbYXJndl9wdHI+PjJdPTA7dHJ5e3ZhciByZXQ9ZW50cnlGdW5jdGlvbihhcmdjLGFyZ3YpO2V4aXRKUyhyZXQsdHJ1ZSk7cmV0dXJuIHJldH1jYXRjaChlKXtyZXR1cm4gaGFuZGxlRXhjZXB0aW9uKGUpfX1mdW5jdGlvbiBydW4oYXJncz1hcmd1bWVudHNfKXtpZihydW5EZXBlbmRlbmNpZXM+MCl7cmV0dXJufXByZVJ1bigpO2lmKHJ1bkRlcGVuZGVuY2llcz4wKXtyZXR1cm59ZnVuY3Rpb24gZG9SdW4oKXtpZihjYWxsZWRSdW4pcmV0dXJuO2NhbGxlZFJ1bj10cnVlO01vZHVsZVsiY2FsbGVkUnVuIl09dHJ1ZTtpZihBQk9SVClyZXR1cm47aW5pdFJ1bnRpbWUoKTtwcmVNYWluKCk7cmVhZHlQcm9taXNlUmVzb2x2ZShNb2R1bGUpO2lmKE1vZHVsZVsib25SdW50aW1lSW5pdGlhbGl6ZWQiXSlNb2R1bGVbIm9uUnVudGltZUluaXRpYWxpemVkIl0oKTtpZihzaG91bGRSdW5Ob3cpY2FsbE1haW4oYXJncyk7cG9zdFJ1bigpfWlmKE1vZHVsZVsic2V0U3RhdHVzIl0pe01vZHVsZVsic2V0U3RhdHVzIl0oIlJ1bm5pbmcuLi4iKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe01vZHVsZVsic2V0U3RhdHVzIl0oIiIpfSwxKTtkb1J1bigpfSwxKX1lbHNle2RvUnVuKCl9fWlmKE1vZHVsZVsicHJlSW5pdCJdKXtpZih0eXBlb2YgTW9kdWxlWyJwcmVJbml0Il09PSJmdW5jdGlvbiIpTW9kdWxlWyJwcmVJbml0Il09W01vZHVsZVsicHJlSW5pdCJdXTt3aGlsZShNb2R1bGVbInByZUluaXQiXS5sZW5ndGg+MCl7TW9kdWxlWyJwcmVJbml0Il0ucG9wKCkoKX19dmFyIHNob3VsZFJ1bk5vdz10cnVlO2lmKE1vZHVsZVsibm9Jbml0aWFsUnVuIl0pc2hvdWxkUnVuTm93PWZhbHNlO3J1bigpOw0KDQoNCiAgcmV0dXJuIG1vZHVsZUFyZy5yZWFkeQ0KfQ0KKTsNCn0pKCk7DQpleHBvcnQgZGVmYXVsdCBNb2R1bGU7",import.meta.url)),p=(N,W)=>(N=Nt(N)?new URL(N):B.normalize(N),x.readFileSync(N,W?void 0:"utf8")),A=N=>{var W=p(N,!0);return W.buffer||(W=new Uint8Array(W)),W},!t.thisProgram&&process.argv.length>1&&(n=process.argv[1].replace(/\\/g,"/")),o=process.argv.slice(2),l=(N,W)=>{throw process.exitCode=N,W}}else(h||u)&&(u?f=self.location.href:typeof document<"u"&&document.currentScript&&(f=document.currentScript.src),s&&(f=s),f.startsWith("blob:")?f="":f=f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1),p=D=>{var N=new XMLHttpRequest;return N.open("GET",D,!1),N.send(null),N.responseText},u&&(A=D=>{var N=new XMLHttpRequest;return N.open("GET",D,!1),N.responseType="arraybuffer",N.send(null),new Uint8Array(N.response)}));var S=t.print||console.log.bind(console),C=t.printErr||console.error.bind(console);Object.assign(t,a),a=null,t.arguments&&(o=t.arguments),t.thisProgram&&(n=t.thisProgram),t.quit&&(l=t.quit);var _;t.wasmBinary&&(_=t.wasmBinary);function y(D){if(typeof c<"u"&&c){var N=Buffer.from(D,"base64");return new Uint8Array(N.buffer,N.byteOffset,N.length)}for(var W=atob(D),fe=new Uint8Array(W.length),Ee=0;Ee<W.length;++Ee)fe[Ee]=W.charCodeAt(Ee);return fe}function b(D){if(Rt(D))return y(D.slice(Qt.length))}var w,Q=!1,E,M,z,Y;function ee(){var D=w.buffer;t.HEAP8=M=new Int8Array(D),t.HEAP16=new Int16Array(D),t.HEAPU8=z=new Uint8Array(D),t.HEAPU16=new Uint16Array(D),t.HEAP32=new Int32Array(D),t.HEAPU32=Y=new Uint32Array(D),t.HEAPF32=new Float32Array(D),t.HEAPF64=new Float64Array(D)}var oe=[],te=[],ge=[],Ce=[];function J(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)xe(t.preRun.shift());Br(oe)}function ce(){Br(te)}function he(){Br(ge)}function Ue(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)Ie(t.postRun.shift());Br(Ce)}function xe(D){oe.unshift(D)}function Ve(D){te.unshift(D)}function Ie(D){Ce.unshift(D)}var Fe=0,Me=null;function nt(D){Fe++,t.monitorRunDependencies?.(Fe)}function pr(D){if(Fe--,t.monitorRunDependencies?.(Fe),Fe==0&&Me){var N=Me;Me=null,N()}}function Mt(D){t.onAbort?.(D),D="Aborted("+D+")",C(D),Q=!0,E=1,D+=". Build with -sASSERTIONS for more info.";var N=new WebAssembly.RuntimeError(D);throw i(N),N}var Qt="data:application/octet-stream;base64,",Rt=D=>D.startsWith(Qt),Nt=D=>D.startsWith("file://"),St;St="data:application/octet-stream;base64,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gICAgID4PzcD0AIgAkKAgICAgICA+D83A6gCIAJCgICAgICAgPg/NwOAAiACQYgDakEAQfAAEAcaIAJCgICAgICAgPg/NwP4AyACQoCAgICAgID4PzcD0AMgAkKAgICAgICA+D83A6gDIAJCgICAgICAgPg/NwOAAyACQYAEaiICIANHDQALCyAAIAM2AgwMAgsCQCADIAAoAggiAmtBB3UiBCAGaiIHQYCAgBBJBEBBACEDQf///w8gBSACayIFQQZ1IgIgByACIAdLGyAFQYD///8HTxsiBwRAIAdBgICAEE8NAiAHQQd0EAshCAsgCCAEQQd0aiIEIQIgBkEDcSIFBEADQCACQQhqQQBB8AAQBxogAkKAgICAgICA+D83A3ggAkKAgICAgICA+D83A1AgAkKAgICAgICA+D83AyggAkKAgICAgICA+D83AwAgAkGAAWohAiADQQFqIgMgBUcNAAsLIAZBB3QgBGohBSAGQQFrQf///w9xQQNPBEADQCACQQhqQQBB8AAQBxogAkKAgICAgICA+D83A3ggAkKAgICAgICA+D83A1AgAkKAgICAgICA+D83AyggAkKAgICAgICA+D83AwAgAkGIAWpBAEHwABAHGiACQoCAgICAgID4PzcD+AEgAkKAgICAgICA+D83A9ABIAJCgICAgICAgPg/NwOoASACQoCAgICAgID4PzcDgAEgAkGIAmpBAEHwABAHGiACQoCAgICAgID4PzcD+AIgAkKAgICAgICA+D83A9ACIAJCgICAgICAgPg/NwOoAiACQoCAgICAgID4PzcDgAIgAkGIA2pBAEHwABAHGiACQoCAgICAgID4PzcD+AMgAkKAgICAgICA+D83A9ADIAJCgICAgICAgPg/NwOoAyACQoCAgICAgID4PzcDgAMgAkGABGoiAiAFRw0ACwsgACgCDCICIAAoAggiA0cEQANAIARBgAFrIgQgAkGAAWsiAkGAARAVGiACIANHDQALIAAoAgghAgsgACAIIAdBB3RqNgIQIAAgBTYCDCAAIAQ2AgggAgRAIAIQFgsMAwsQEwALEBIACyABIAJPDQAgACADIAFBB3RqNgIMCwJAIAAoAhggACgCFCIDa0HIAG0iAiABSQRAIABBFGogASACaxA8DAELIAEgAk8NACAAIAMgAUHIAGxqNgIYCwJAIAAoAiQgACgCICIDa0EEdSICIAFJBEAgAEEgaiABIAJrEDsMAQsgASACTw0AIAAgAyABQQR0ajYCJAsgACgCMCAAKAIsIgNrQcgAbSICIAFJBEAgAEEsaiABIAJrEDwPCyABIAJPDQAgACADIAFByABsajYCMAsLBwAgACgCLAsHACAAKAIgCwcAIAAoAhQLBwAgACgCCAvUBQEHfyABIAAoAggiByAAKAIEIgNrQQR1TQRAAkAgAUUNACADIQIgAUEHcSIFBEADQCACQv////8PNwIIIAJCADcCACACQRBqIQIgBEEBaiIEIAVHDQALCyABQQR0IANqIQMgAUEBa0H/////AHFBB0kNAANAIAJC/////w83AnggAkIANwJwIAJC/////w83AmggAkIANwJgIAJC/////w83AlggAkIANwJQIAJC/////w83AkggAkIANwJAIAJC/////w83AjggAkIANwIwIAJC/////w83AiggAkIANwIgIAJC/////w83AhggAkIANwIQIAJC/////w83AgggAkIANwIAIAJBgAFqIgIgA0cNAAsLIAAgAzYCBA8LAkAgAyAAKAIAIgJrQQR1IgQgAWoiBkGAgICAAUkEQEH/////ACAHIAJrIgdBA3UiAiAGIAIgBksbIAdB8P///wdPGyIGBEAgBkGAgICAAU8NAiAGQQR0EAshCAsgCCAEQQR0aiIEIQIgAUEHcSIHBEADQCACQv////8PNwIIIAJCADcCACACQRBqIQIgBUEBaiIFIAdHDQALCyABQQR0IARqIQUgAUEBa0H/////AHFBB08EQANAIAJC/////w83AnggAkIANwJwIAJC/////w83AmggAkIANwJgIAJC/////w83AlggAkIANwJQIAJC/////w83AkggAkIANwJAIAJC/////w83AjggAkIANwIwIAJC/////w83AiggAkIANwIgIAJC/////w83AhggAkIANwIQIAJC/////w83AgggAkIANwIAIAJBgAFqIgIgBUcNAAsLIAAoAgAiASADRwRAA0AgBEEQayIEIANBEGsiA/0AAgD9CwIAIAEgA0cNAAsgACgCACEDCyAAIAggBkEEdGo2AgggACAFNgIEIAAgBDYCACADBEAgAxAMCw8LEBMACxASAAuLAwEHfyABIAAoAggiAiAAKAIEIgNrQcgAbU0EQCAAIAEEfyADQQAgAUHIAGxByABrIgAgAEHIAHBrQcgAaiIAEAcgAGoFIAMLNgIEDwsCQCADIAAoAgAiBmtByABtIgggAWoiBEHk8bgcSQRAQePxuBwgAiAGa0HIAG0iB0EBdCICIAQgAiAESxsgB0HxuJwOTxsiBARAIARB5PG4HE8NAiAEQcgAbBALIQULIAUgCEHIAGxqIgJBACABQcgAbEHIAGsiASABQcgAcGtByABqIgcQByIBIAdqIQggBSAEQcgAbGohBwJAIAMgBkYEQCABIQUMAQsDQCACQcgAayIFIANByABrIgH9AAMA/QsDACACQThrIANBOGv9AAMA/QsDACACQShrIANBKGv9AAMA/QsDACACQRhrIANBGGv9AAMA/QsDACACQQhrIANBCGsrAwA5AwAgBSECIAEiAyAGRw0ACwsgACAHNgIIIAAgCDYCBCAAIAU2AgAgBgRAIAYQDAsPCxATAAsQEgALGQEBf0GgKygCACIBIAAgASgCACgCGBEBAAsQACMAIABrQXBxIgAkACAACwcAIAAoAgQLBQBBowkLBQBBzQkLBQBBkAkLFwEBf0GgKygCACIAIAAoAgAoAhQRAAALFQAgAEUEQEEADwsgAEHkJhAiQQBHCxoAIAAgASgCCCAFEAoEQCABIAIgAyAEECALCzcAIAAgASgCCCAFEAoEQCABIAIgAyAEECAPCyAAKAIIIgAgASACIAMgBCAFIAAoAgAoAhQRCQALpwEAIAAgASgCCCAEEAoEQAJAIAEoAgQgAkcNACABKAIcQQFGDQAgASADNgIcCw8LAkAgACABKAIAIAQQCkUNAAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNASABQQE2AiAPCyABIAI2AhQgASADNgIgIAEgASgCKEEBajYCKAJAIAEoAiRBAUcNACABKAIYQQJHDQAgAUEBOgA2CyABQQQ2AiwLC4gCACAAIAEoAgggBBAKBEACQCABKAIEIAJHDQAgASgCHEEBRg0AIAEgAzYCHAsPCwJAIAAgASgCACAEEAoEQAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNAiABQQE2AiAPCyABIAM2AiACQCABKAIsQQRGDQAgAUEAOwE0IAAoAggiACABIAIgAkEBIAQgACgCACgCFBEJACABLQA1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",Rt(St)||(St=g(St));function mr(D){if(D==St&&_)return new Uint8Array(_);var N=b(D);if(N)return N;if(A)return A(D);throw"both async and sync fetching of the wasm failed"}function Ar(D){return Promise.resolve().then(()=>mr(D))}function Ur(D,N,W){return Ar(D).then(fe=>WebAssembly.instantiate(fe,N)).then(W,fe=>{C(`failed to asynchronously prepare wasm: ${fe}`),Mt(fe)})}function xr(D,N,W,fe){return Ur(N,W,fe)}function gi(){var D={a:Nd};function N(fe,Ee){return _t=fe.exports,w=_t.f,ee(),Ve(_t.g),pr(),_t}nt();function W(fe){N(fe.instance)}if(t.instantiateWasm)try{return t.instantiateWasm(D,N)}catch(fe){C(`Module.instantiateWasm callback failed with error: ${fe}`),i(fe)}return xr(_,St,D,W).catch(i),{}}function Wr(D){this.name="ExitStatus",this.message=`Program terminated with exit(${D})`,this.status=D}var Br=D=>{for(;D.length>0;)D.shift()(t)};t.noExitRuntime;class pi{constructor(N){this.excPtr=N,this.ptr=N-24}set_type(N){Y[this.ptr+4>>2]=N}get_type(){return Y[this.ptr+4>>2]}set_destructor(N){Y[this.ptr+8>>2]=N}get_destructor(){return Y[this.ptr+8>>2]}set_caught(N){N=N?1:0,M[this.ptr+12]=N}get_caught(){return M[this.ptr+12]!=0}set_rethrown(N){N=N?1:0,M[this.ptr+13]=N}get_rethrown(){return M[this.ptr+13]!=0}init(N,W){this.set_adjusted_ptr(0),this.set_type(N),this.set_destructor(W)}set_adjusted_ptr(N){Y[this.ptr+16>>2]=N}get_adjusted_ptr(){return Y[this.ptr+16>>2]}get_exception_ptr(){var N=Nn(this.get_type());if(N)return Y[this.excPtr>>2];var W=this.get_adjusted_ptr();return W!==0?W:this.excPtr}}var Jr=0,mi=(D,N,W)=>{var fe=new pi(D);throw fe.init(N,W),Jr=D,Jr},vr=()=>{Mt("")},Ai=(D,N,W)=>z.copyWithin(D,N,N+W),Ui=()=>2147483648,zt=D=>{var N=w.buffer,W=(D-N.byteLength+65535)/65536;try{return w.grow(W),ee(),1}catch{}},xi=D=>{var N=z.length;D>>>=0;var W=Ui();if(D>W)return!1;for(var fe=(er,Oi)=>er+(Oi-er%Oi)%Oi,Ee=1;Ee<=4;Ee*=2){var We=N*(1+.2/Ee);We=Math.min(We,D+100663296);var we=Math.min(W,fe(Math.max(D,We),65536)),ye=zt(we);if(ye)return!0}return!1},Bi=[null,[],[]],Zr=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,vi=(D,N,W)=>{for(var fe=N+W,Ee=N;D[Ee]&&!(Ee>=fe);)++Ee;if(Ee-N>16&&D.buffer&&Zr)return Zr.decode(D.subarray(N,Ee));for(var We="";N<Ee;){var we=D[N++];if(!(we&128)){We+=String.fromCharCode(we);continue}var ye=D[N++]&63;if((we&224)==192){We+=String.fromCharCode((we&31)<<6|ye);continue}var er=D[N++]&63;if((we&240)==224?we=(we&15)<<12|ye<<6|er:we=(we&7)<<18|ye<<12|er<<6|D[N++]&63,we<65536)We+=String.fromCharCode(we);else{var Oi=we-65536;We+=String.fromCharCode(55296|Oi>>10,56320|Oi&1023)}}return We},Ci=(D,N)=>{var W=Bi[D];N===0||N===10?((D===1?S:C)(vi(W,0)),W.length=0):W.push(N)},Si=(D,N,W,fe)=>{for(var Ee=0,We=0;We<W;We++){var we=Y[N>>2],ye=Y[N+4>>2];N+=8;for(var er=0;er<ye;er++)Ci(D,z[we+er]);Ee+=ye}return Y[fe>>2]=Ee,0},_i=D=>{E=D,l(D,new Wr(D))},Fi=(D,N)=>{E=D,_i(D)},Ed=D=>{if(D instanceof Wr||D=="unwind")return E;l(1,D)},wd=D=>{for(var N=0,W=0;W<D.length;++W){var fe=D.charCodeAt(W);fe<=127?N++:fe<=2047?N+=2:fe>=55296&&fe<=57343?(N+=4,++W):N+=3}return N},Td=(D,N,W,fe)=>{if(!(fe>0))return 0;for(var Ee=W,We=W+fe-1,we=0;we<D.length;++we){var ye=D.charCodeAt(we);if(ye>=55296&&ye<=57343){var er=D.charCodeAt(++we);ye=65536+((ye&1023)<<10)|er&1023}if(ye<=127){if(W>=We)break;N[W++]=ye}else if(ye<=2047){if(W+1>=We)break;N[W++]=192|ye>>6,N[W++]=128|ye&63}else if(ye<=65535){if(W+2>=We)break;N[W++]=224|ye>>12,N[W++]=128|ye>>6&63,N[W++]=128|ye&63}else{if(W+3>=We)break;N[W++]=240|ye>>18,N[W++]=128|ye>>12&63,N[W++]=128|ye>>6&63,N[W++]=128|ye&63}}return N[W]=0,W-Ee},Dd=(D,N,W)=>Td(D,z,N,W),Md=D=>{var N=wd(D)+1,W=Zs(N);return Dd(D,W,N),W},Nd={b:mi,c:vr,e:Ai,d:xi,a:Si},_t=gi();t._initialize=(D,N,W)=>(t._initialize=_t.h)(D,N,W),t._allocMatrix=D=>(t._allocMatrix=_t.i)(D),t._getMatrixBufferPtr=()=>(t._getMatrixBufferPtr=_t.j)(),t._getSRTPtr=()=>(t._getSRTPtr=_t.k)(),t._getInfoPtr=()=>(t._getInfoPtr=_t.l)(),t._getContinuedSRTPtr=()=>(t._getContinuedSRTPtr=_t.m)(),t._printMatrix=D=>(t._printMatrix=_t.n)(D),t._updateAllMatrixContinueTransform=(D,N,W)=>(t._updateAllMatrixContinueTransform=_t.o)(D,N,W);var Mn=t._main=(D,N)=>(Mn=t._main=_t.p)(D,N),Zs=D=>(Zs=_t.r)(D),Nn=D=>(Nn=_t.s)(D),is;Me=function D(){is||Vn(),is||(Me=D)};function Vd(D=[]){var N=Mn;D.unshift(n);var W=D.length,fe=Zs((W+1)*4),Ee=fe;D.forEach(we=>{Y[Ee>>2]=Md(we),Ee+=4}),Y[Ee>>2]=0;try{var We=N(W,fe);return Fi(We,!0),We}catch(we){return Ed(we)}}function Vn(D=o){if(Fe>0||(J(),Fe>0))return;function N(){is||(is=!0,t.calledRun=!0,!Q&&(ce(),he(),r(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Pn&&Vd(D),Ue()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),N()},1)):N()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();var Pn=!0;return t.noInitialRun&&(Pn=!1),Vn(),e.ready})})();function qr(s,e,t){return m.setting.doublePrecision?new Float64Array(s,e,t):new Float32Array(s,e,t)}class pe{static matrixBuffer;static matrixSRTBuffer;static matrixContinuedSRTBuffer;static matrixStateBuffer;static matrixBufferPtr;static matrixSRTBufferPtr;static matrixContinuedSRTBufferPtr;static matrixStateBufferPtr;static wasm;static stateStruct=4;static useDoublePrecision=!1;static async init(e,t=!1){this.wasm=await Yd(),this.useDoublePrecision=t,this.wasm._initialize(e,t,0),this.allocMatrix(e)}static allocMatrix(e){e>I.maxCount&&console.error(`The maximum allocation size is exceeded! current:${e}, limit:${I.maxCount}`),this.wasm._allocMatrix(e),this.matrixBufferPtr=this.wasm._getMatrixBufferPtr(),this.matrixSRTBufferPtr=this.wasm._getSRTPtr(),this.matrixStateBufferPtr=this.wasm._getInfoPtr(),this.matrixContinuedSRTBufferPtr=this.wasm._getContinuedSRTPtr(),this.useDoublePrecision?(this.matrixBuffer=qr(this.wasm.HEAPF64.buffer,this.matrixBufferPtr,16*e),this.matrixSRTBuffer=qr(this.wasm.HEAPF64.buffer,this.matrixSRTBufferPtr,9*e),this.matrixContinuedSRTBuffer=qr(this.wasm.HEAPF64.buffer,this.matrixContinuedSRTBufferPtr,9*e),I.blockBytes=I.block*8):(this.matrixBuffer=qr(this.wasm.HEAPF32.buffer,this.matrixBufferPtr,16*e),this.matrixSRTBuffer=qr(this.wasm.HEAPF32.buffer,this.matrixSRTBufferPtr,9*e),this.matrixContinuedSRTBuffer=qr(this.wasm.HEAPF32.buffer,this.matrixContinuedSRTBufferPtr,9*e),I.blockBytes=I.block*4),this.matrixStateBuffer=new Int32Array(this.wasm.HEAP32.buffer,this.matrixStateBufferPtr,pe.stateStruct*e),I.allocMatrix(e)}static updateAllContinueTransform(e,t,r){this.wasm._updateAllMatrixContinueTransform(e,t,r)}static setParent(e,t,r){this.matrixStateBuffer[e*pe.stateStruct+2]=t>=0?t:-1,this.matrixStateBuffer[e*pe.stateStruct+3]=r}static setTranslate(e,t,r,i){this.matrixSRTBuffer[e*9+6]=t,this.matrixSRTBuffer[e*9+7]=r,this.matrixSRTBuffer[e*9+8]=i}static setRotation(e,t,r,i){this.matrixSRTBuffer[e*9+3]=t%360,this.matrixSRTBuffer[e*9+4]=r%360,this.matrixSRTBuffer[e*9+5]=i%360}static setScale(e,t,r,i){this.matrixSRTBuffer[e*9+0]=t,this.matrixSRTBuffer[e*9+1]=r,this.matrixSRTBuffer[e*9+2]=i}static setContinueTranslate(e,t,r,i){(t!=0||r!=0||i!=0)&&(this.matrixContinuedSRTBuffer[e*9+6]=t,this.matrixContinuedSRTBuffer[e*9+7]=r,this.matrixContinuedSRTBuffer[e*9+8]=i,this.matrixStateBuffer[e*pe.stateStruct+1]=1)}static setContinueRotation(e,t,r,i){(t!=0||r!=0||i!=0)&&(this.matrixContinuedSRTBuffer[e*9+3]=t,this.matrixContinuedSRTBuffer[e*9+4]=r,this.matrixContinuedSRTBuffer[e*9+5]=i,this.matrixStateBuffer[e*pe.stateStruct+1]=1)}static setContinueScale(e,t,r,i){(t!=0||r!=0||i!=0)&&(this.matrixContinuedSRTBuffer[e*9+0]=t,this.matrixContinuedSRTBuffer[e*9+1]=r,this.matrixContinuedSRTBuffer[e*9+2]=i,this.matrixStateBuffer[e*pe.stateStruct+1]=1)}}class ir{static AXIS_ANGLE="axisAngle";static EULER_ANGLES="eulerAngles";static QUATERNION="quaternion"}class Z{static HELP_0=new Z(0,0,0,1);static HELP_1=new Z(0,0,0,1);static HELP_2=new Z(0,0,0,1);static _zero=new Z(0,0,0,1);static CALCULATION_QUATERNION=new Z;x=0;y=0;z=0;w=1;constructor(e=0,t=0,r=0,i=1){this.x=e,this.y=t,this.z=r,this.w=i}static identity(){return Z._zero}static quaternionToMatrix(e,t){let r=e.x*2,i=e.y*2,a=e.z*2,o=e.x*r,n=e.y*i,l=e.z*a,h=e.x*i,u=e.x*a,c=e.y*a,f=e.w*r,g=e.w*i,p=e.w*a;t.rawData[0]=1-(n+l),t.rawData[1]=h+p,t.rawData[2]=u-g,t.rawData[3]=0,t.rawData[4]=h-p,t.rawData[5]=1-(o+l),t.rawData[6]=c+f,t.rawData[7]=0,t.rawData[8]=u+g,t.rawData[9]=c-f,t.rawData[10]=1-(o+n),t.rawData[11]=0,t.rawData[12]=0,t.rawData[13]=0,t.rawData[14]=0,t.rawData[15]=1}get magnitude(){return Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z)}set(e=0,t=0,r=0,i=1){return this.x=e,this.y=t,this.z=r,this.w=i,this}divide(e){return e instanceof Z?new Z(this.x/e.x,this.y/e.y,this.z/e.z):(this.x=this.x/e,this.y=this.y/e,this.z=this.z/e,this)}setFromArray(e){return this.x=e[0],this.y=e[1],this.z=e[2],this.w=e[3],this}multiply(e,t){var r=e.w,i=e.x,a=e.y,o=e.z,n=t.w,l=t.x,h=t.y,u=t.z;this.w=r*n-i*l-a*h-o*u,this.x=r*l+i*n+a*u-o*h,this.y=r*h-i*u+a*n+o*l,this.z=r*u+i*h-a*l+o*n}multiplyVector(e,t=null){t||=new Z;var r=e.x,i=e.y,a=e.z;return t.w=-this.x*r-this.y*i-this.z*a,t.x=this.w*r+this.y*a-this.z*i,t.y=this.w*i-this.x*a+this.z*r,t.z=this.w*a+this.x*i-this.y*r,t}fromAxisAngle(e,t){t*=Math.PI/180;var r=t*.5,i=Math.sin(r);this.w=Math.cos(r),this.x=e.x*i,this.y=e.y*i,this.z=e.z*i,this.normalize()}toAxisAngle(e){var t=this.x*this.x+this.y*this.y+this.z*this.z,r=0;return t>0?(r=2*Math.acos(this.w),t=1/Math.sqrt(t),e.x=this.x*t,e.y=this.y*t,e.z=this.z*t):(r=0,e.x=1,e.y=0,e.z=0),r}slerp(e,t,r){var i=e.w,a=e.x,o=e.y,n=e.z,l=t.w,h=t.x,u=t.y,c=t.z,f=i*l+a*h+o*u+n*c;if(f<0&&(f=-f,l=-l,h=-h,u=-u,c=-c),f<.95){var g=Math.acos(f),p=1/Math.sin(g),A=Math.sin(g*(1-r))*p,U=Math.sin(g*r)*p;this.w=i*A+l*U,this.x=a*A+h*U,this.y=o*A+u*U,this.z=n*A+c*U}else{this.w=i+r*(l-i),this.x=a+r*(h-a),this.y=o+r*(u-o),this.z=n+r*(c-n);var x=1/Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z);this.w*=x,this.x*=x,this.y*=x,this.z*=x}}lerp(e,t,r){var i=e.w,a=e.x,o=e.y,n=e.z,l=t.w,h=t.x,u=t.y,c=t.z,f;i*l+a*h+o*u+n*c<0&&(l=-l,h=-h,u=-u,c=-c),this.w=i+r*(l-i),this.x=a+r*(h-a),this.y=o+r*(u-o),this.z=n+r*(c-n),f=1/Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z),this.w*=f,this.x*=f,this.y*=f,this.z*=f}fromEulerAngles(e,t,r){e*=it,t*=it,r*=it;var i=e*.5,a=t*.5,o=r*.5,n=Math.cos(i),l=Math.sin(i),h=Math.cos(a),u=Math.sin(a),c=Math.cos(o),f=Math.sin(o);return this.w=n*h*c+l*u*f,this.x=l*h*c-n*u*f,this.y=n*u*c+l*h*f,this.z=n*h*f-l*u*c,this}setFromRotationMatrix(e){const t=e.rawData,r=t[0],i=t[4],a=t[8],o=t[1],n=t[5],l=t[9],h=t[2],u=t[6],c=t[10],f=r+n+c;if(f>0){const g=.5/Math.sqrt(f+1);this.w=.25/g,this.x=(u-l)*g,this.y=(a-h)*g,this.z=(o-i)*g}else if(r>n&&r>c){const g=2*Math.sqrt(1+r-n-c);this.w=(u-l)/g,this.x=.25*g,this.y=(i+o)/g,this.z=(a+h)/g}else if(n>c){const g=2*Math.sqrt(1+n-r-c);this.w=(a-h)/g,this.x=(i+o)/g,this.y=.25*g,this.z=(l+u)/g}else{const g=2*Math.sqrt(1+c-r-n);this.w=(o-i)/g,this.x=(a+h)/g,this.y=(l+u)/g,this.z=.25*g}return this}getEulerAngles(e){var t,r,i,a,o,n,l,h;return e||=new d,a=this.x,o=this.y,n=this.z,l=this.w,h=2*(l*o-a*n),h<=-.99999?(t=2*Math.atan2(a,l),r=-Math.PI/2,i=0):h>=.99999?(t=2*Math.atan2(a,l),r=Math.PI/2,i=0):(t=Math.atan2(2*(l*a+o*n),1-2*(a*a+o*o)),r=Math.asin(h),i=Math.atan2(2*(l*n+a*o),1-2*(o*o+n*n))),e.set(t,r,i).scaleBy(Wi)}normalize(e=1){var t=e/Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);this.x*=t,this.y*=t,this.z*=t,this.w*=t}toString(){return"{x:"+this.x+" y:"+this.y+" z:"+this.z+" w:"+this.w+"}"}fromMatrix(e){var t=e.decompose(ir.QUATERNION)[1];this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w}inverse(e=null){e||=new Z;var t=this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z;if(t>0){var r=1/t;e.w=this.w*r,e.x=-this.x*r,e.y=-this.y*r,e.z=-this.z*r}return e}clone(){return new Z(this.x,this.y,this.z,this.w)}transformVector(e,t=null){var r,i,a,o,n=e.x,l=e.y,h=e.z;return t||=new d,o=-this.x*n-this.y*l-this.z*h,r=this.w*n+this.y*h-this.z*l,i=this.w*l-this.x*h+this.z*n,a=this.w*h+this.x*l-this.y*n,t.x=-o*this.x+r*this.w-i*this.z+a*this.y,t.y=-o*this.y+r*this.z+i*this.w-a*this.x,t.z=-o*this.z-r*this.y+i*this.x+a*this.w,t}copyFrom(e){var t=this;return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,this}mul(e,t,r){let i=r||new Z;return i.x=e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,i.y=e.w*t.y+e.y*t.w+e.z*t.x-e.x*t.z,i.z=e.w*t.z+e.z*t.w+e.x*t.y-e.y*t.x,i.w=e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,i}clampf(e,t,r){if(t>r){var i=t;t=r,r=i}return e<t?t:e<r?e:r}static serialize(e){return new Z(e.x,e.y,e.z,e.w)}}function Xd(s,e,t){let r=s.x*2,i=s.y*2,a=s.z*2,o=s.x*r,n=s.y*i,l=s.z*a,h=s.x*i,u=s.x*a,c=s.y*a,f=s.w*r,g=s.w*i,p=s.w*a,A=t||new d;return A.x=(1-(n+l))*e.x+(h-p)*e.y+(u+g)*e.z,A.y=(h+p)*e.x+(1-(o+l))*e.y+(c-f)*e.z,A.z=(u-g)*e.x+(c+f)*e.y+(1-(o+n))*e.z,A}class ka{_x=0;_y=0;_z=0;_w=0;constructor(e=0){this.seed=e}get seed(){return this._x}set seed(e){this._x=e,this._y=this._x*1812433253+1,this._z=this._y*1812433253+1,this._w=this._z*1812433253+1}static getFloatFromInt(e){return Math.floor((e&8388607)*(1/8388607))}static getByteFromInt(e){return e>>15}clone(){let e=new ka;return e._x=this._x,e._y=this._y,e._z=this._z,e._w=this._w,e}get(){let e=this._x^this._x<<11;return this._x=this._y,this._y=this._z,this._z=this._w,this._w=this._w^this._w>>19^(e^e>>8)}getFloat(){return Kl(this.get())}getSignedFloat(){return this.getFloat()*2-1}}let Wi=180/Math.PI,it=Math.PI/180,Hd=2147483647,jd=-2147483647;function ie(s,e,t){return Math.max(e,Math.min(t,s))}class bt{static gaussFunction(e,t,r,i){let a=Math.pow(e-r,2),o=2*Math.pow(i,2),n=-1*(a/o),l=Math.pow(Math.E,n);return Math.round(l*t)}static computeGaussian(e,t){return 1/Math.sqrt(2*Math.PI*t)*Math.exp(-(e*e)/(2*t*t))}static gaussCoef(e){e<.5&&(e=.5);let t=Math.exp(.726*.726)/e,r=Math.exp(-t),i=Math.exp(-2*t),a=(1-r)*(1-r)/(1+2*t*r-i),o=a,n=a*(t-1)*r,l=a*(t+1)*r,h=-a*i,u=2*r,c=-i,f=(o+n)/(1-u-c),g=(l+h)/(1-u-c);return new Float32Array([o,n,l,h,u,c,f,g])}static clampf(e,t,r){if(t>r){let i=t;t=r,r=i}return e<t?t:e<r?e:r}static normalizeAngle(e){for(;e>180;)e-=360;for(;e<-180;)e+=360;return e}static fract(e){return e-Math.floor(e)}static getRandDirXZ(e){let t=e*Math.random(),r=360*Math.random()*it,i=Math.cos(r)*t,a=Math.sin(r)*t;return{x:i,z:a}}static getRandDirXYZ(e){let t=e*Math.random(),r=360*Math.random()*it,i=Math.cos(r)*t,a=Math.tan(r)*t,o=Math.sin(r)*t;return new d(i,a,o)}static getCycleXYZ(e){let t=e*Math.random(),r=360*Math.random()*it,i=Math.cos(r)*t,a=e*Math.random()-e*.5,o=Math.sin(r)*t;return new d(i,a,o)}static angle(e,t){let r=K.HELP_0,i=K.HELP_1;return r.set(e.x,e.z),i.set(t.x,t.z),Math.acos((r.x*i.x+r.y*i.y)/(r.abs()*i.abs()))}static angle_360(e,t){let r=d.HELP_0;return e.crossProduct(t,r),r.z>0?bt.angle(e,t):360-bt.angle(e,t)}getRotationY(e){return bt.normalizeAngle(Math.atan2(e.z,e.x)*Wi)}static fromToRotation(e,t,r=null){r||=new Z;let i=I.help_matrix_2;return I.fromToRotation(e,t,i),r.fromMatrix(i),r}static getEularDir_yUp(e){let t=Z.HELP_0;return t.fromEulerAngles(0,e,0),t.transformVector(d.Z_AXIS,d.HELP_5),d.HELP_5}static transformVector(e,t,r=null){r||=new d;let i=e.rawData,a=i[0],o=i[1],n=i[2],l=i[3],h=i[4],u=i[5],c=i[6],f=i[7],g=i[8],p=i[9],A=i[10],U=i[11],x=i[12],B=i[13],S=i[14],C=i[15],_=t.x,y=t.y,b=t.z;return r.x=a*_+h*y+g*b+x,r.y=o*_+u*y+p*b+B,r.z=n*_+c*y+A*b+S,r.w=l*_+f*y+U*b+C,r}}let bi=function(s,e,t){return s*(1-t)+e*t};function Kd(s,e,t){let r=new d,i=s.x,a=s.y,o=s.z,n=s.w,l=e.x,h=e.y,u=e.z,c=e.w;return r.x=(l-i)*t+i,r.y=(h-a)*t+a,r.z=(u-o)*t+o,r.w=(c-n)*t+n,r}function qd(s,e,t){let r=new P;return r.r=(1-t)*s.r+t*e.r,r.g=(1-t)*s.g+t*e.g,r.b=(1-t)*s.b+t*e.b,r.a=(1-t)*s.a+t*e.a,r}function $d(s,e,t){return s+((e-s)*t>>8)&255}let ao=function(s,e,t){let r=t-e;return Math.floor(s/r)%2==0?s%r+e:t-s%r+e},so=function(s,e,t){let r=t-e;return s%r+e},eg=function(s,e){let t=0;for(let r in s)r==e&&t++;return t};class tg{x=0;y=0;z=0;w=0;randSeedList;constructor(){this.randSeedList=[]}reset(){this.x=Math.random()*1,this.y=Math.random()*1,this.z=Math.random()*1,this.w=Math.random()*1,this.randSeedList.length=0;for(let e=0;e<20;e++)this.randSeedList.push(Math.random()*1)}}function ct(s,e){return s instanceof d&&e instanceof d||s instanceof Z&&e instanceof Z?s.x*e.x+s.y*e.y+s.z*e.z:s.x*e.x+s.y*e.y}function oo(s,e){return new d(s.x*e.x,s.y*e.y,s.z*e.z)}function Hl(s){return Math.sqrt(s)}function no(s){return Hl(ct(s,s))}function jl(s,e){if(no(s)>d.EPSILON)return s.divide(no(s));if(s instanceof K)return new K;if(s instanceof d)return new d;if(s instanceof Z)return new Z}function Kl(s){return(s&8388607)*(1/8388607)}function Ji(s){return s.getFloat()}function at(s,e,t){let r=s.getFloat();return r=e*r+(1-r)*t,r}function rg(s,e,t){let r;if(e<t){r=t-e;let i=s.get()%r;return i+=e,i}else if(e>t){r=e-t;let i=s.get()%r;return i=e-i,i}else return e}function ns(s){let e=at(s,-1,1),t=at(s,0,2*Math.PI),r=Math.sqrt(1-e*e),i=r*Math.cos(t),a=r*Math.sin(t);return new d(i,a,e)}function ql(s){let e=at(s,0,2*Math.PI),t=Math.cos(e),r=Math.sin(e);return new K(t,r)}function ig(s){let e=new Z;return e.x=at(s,-1,1),e.y=at(s,-1,1),e.z=at(s,-1,1),e.w=at(s,-1,1),e=jl(e),ct(e,Z.identity())<0?-e:e}function ag(s){const e=2*Math.PI;let t=at(s,0,1),r=at(s,0,e),i=at(s,0,e),a=Math.sqrt(1-t),o=Math.sqrt(t),n=new Z(a*Math.sin(r),a*Math.cos(r),o*Math.sin(i),o*Math.cos(i));return ct(n,Z.identity())<0?-n:n}function sg(s,e){return new d(at(s,-e.x,e.x),at(s,-e.y,e.y),at(s,-e.z,e.z))}function $l(s){let e=ns(s);return e.scaleBy(Math.pow(Ji(s),1/3)),e}function og(s,e){return oo($l(s),e)}function ng(s,e,t){let r=ns(s),i=Math.pow(at(s,0,1),1/3);return r.scaleBy(e+(t-e)*i),r}function lg(s){let e=ql(s);return e.multiply(Math.pow(at(s,0,1),1/2),e),e}function hg(s,e,t){let r=oo(ns(s),e),i=Math.pow(at(s,t,1),1/3);return r.scaleBy(i),r}function ug(s){let e=s.getFloat(),t=s.getFloat();e+t>1&&(e=1-e,t=1-t);let r=1-e-t;return new d(e,t,r)}function cg(s){return s/360*2*Math.PI}function fg(s){return 180*s/Math.PI}function dg(s){return Math.sin(s)}function gg(s){return Math.cos(s)}let eh=4919;function pg(){return++eh}function mg(s,e,t){let r=s[e],i=s[t];s[e]=i,s[t]=r}function th(s){return Math.floor(s)}function lo(s){return th(s+.5)}function Ag(s){return s=Math.max(s,0),s=Math.min(s,1),lo(s*65535)}function Ug(s){return s=Math.max(s,0),s=Math.min(s,1),lo(s*255)}function rh(s){return Math.abs(s)==0?s:1/Math.sqrt(s)}function xg(s){let e=ho(s);return s.scaleBy(rh(e))}function Bg(s,e){return s.crossProduct(e)}function ho(s){return ct(s,s)}function vg(s){let e=new ka(s);return Ji(e)}function Cg(s,e){let t=new ka(e);s.x=Ji(t),s.y=Ji(t),s.z=Ji(t)}function Sg(s,e,t){return s<e?t:s>t?e:s}function uo(s,e){return s-Math.floor(s/e)*e}const _g=1e-6;class I{static blockBytes=64;static block=16;static allocCount=1e3;static allocOnceCount=1e3;static maxCount=50*1e4;static useCount=0;static buffer;static wasmMatrixPtr=0;static dynamicMatrixBytes;static dynamicGlobalMatrixRef;static wasm;static help_matrix_0;static help_matrix_1;static help_matrix_2;static helpMatrix;static helpMatrix2;static _getEulerMatrix;static _zero=new d(0,0,0);static _one=new d(1,1,1);static _prs=[new d,new d,new d];index=0;offset=0;rawData;_position;static allocMatrix(e){this.allocCount=e,I.dynamicMatrixBytes=pe.matrixBuffer,I.buffer=I.dynamicMatrixBytes.buffer,I.wasmMatrixPtr=pe.matrixBufferPtr,this.dynamicGlobalMatrixRef||=[],this.dynamicGlobalMatrixRef.forEach(t=>{t.offset=I.wasmMatrixPtr+t.index*I.blockBytes,t.rawData=qr(I.dynamicMatrixBytes.buffer,t.offset,16)}),I.help_matrix_0||=new I,I.help_matrix_1||=new I,I.help_matrix_2||=new I,I.helpMatrix||=new I,I.helpMatrix2||=new I,I._getEulerMatrix||=new I,I._getEulerMatrix.identity()}static fromToRotation(e,t,r){return r||=new I,r.transformDir(e,t),r}static fromArray(e){if(e.length!==16)throw new Error("Array must contain exactly 16 elements");const t=new I;for(let r=0;r<16;r++)t.rawData[r]=e[r];return t}static getAxisRotation(e,t,r,i){let a=new I,o=i*(Math.PI/180),n=Math.cos(o),l=Math.sin(o),h=1-n,u,c;return a.rawData[0]=n+e*e*h,a.rawData[5]=n+t*t*h,a.rawData[10]=n+r*r*h,u=e*t*h,c=r*l,a.rawData[1]=u+c,a.rawData[4]=u-c,u=e*r*h,c=t*l,a.rawData[8]=u+c,a.rawData[2]=u-c,u=t*r*h,c=e*l,a.rawData[9]=u-c,a.rawData[6]=u+c,a}static sanitizeEuler(e){I.makePositive(e)}static makePositive(e){let t=-1e-4,r=Math.PI*2-1e-4;e.x<t?e.x+=2*Math.PI:e.x>r&&(e.x-=2*Math.PI),e.y<t?e.y+=2*Math.PI:e.y>r&&(e.y-=2*Math.PI),e.z<t?e.z+=2*Math.PI:e.z>r&&(e.z-=2*Math.PI)}static matrixToEuler(e,t){return e.get(1,2)<.999?e.get(1,2)>-.999?(t.x=Math.asin(-e.get(1,2)),t.y=Math.atan2(e.get(0,2),e.get(2,2)),t.z=Math.atan2(e.get(1,0),e.get(1,1)),I.sanitizeEuler(t),!0):(t.x=Math.PI*.5,t.y=Math.atan2(e.get(0,1),e.get(0,0)),t.z=0,I.sanitizeEuler(t),!1):(t.x=-Math.PI*.5,t.y=Math.atan2(-e.get(0,1),e.get(0,0)),t.z=0,I.sanitizeEuler(t),!1)}static matrixMultiply(e,t,r){I.wasm.Matrix_Multiply(e.index,t.index,r.index)}static matrixAppend(e,t,r){I.wasm.Matrix_Append(e.index,t.index,r.index)}static matrixRotateY(e,t){I.wasm.Matrix_Append(e,t.index)}static matrixRotate(e,t,r){I.wasm.Matrix_Rotate(e,t,r.index)}constructor(e=!1){if(I.useCount>=I.allocCount){let t=I.allocCount+I.allocOnceCount;pe.allocMatrix(t)}this.index=I.useCount,this.offset=I.wasmMatrixPtr+this.index*I.blockBytes,I.dynamicGlobalMatrixRef[this.index]=this,I.useCount++,this.rawData=qr(I.dynamicMatrixBytes.buffer,this.offset,16),this._position=new d,this.identity()}lookAt(e,t,r=d.Y_AXIS){let i=this.rawData,a=t.subtract(e,d.HELP_0);a.length===0&&(a.z=1),a.normalize();let o=r.crossProduct(a,d.HELP_1);o.length===0&&(Math.abs(r.z)===1?a.x+=1e-4:a.z-=1e-4,a.normalize(),o=r.crossProduct(a,d.HELP_1)),o.normalize();let n=a.crossProduct(o,d.HELP_2);i[0]=o.x,i[1]=n.x,i[2]=a.x,i[3]=0,i[4]=o.y,i[5]=n.y,i[6]=a.y,i[7]=0,i[8]=o.z,i[9]=n.z,i[10]=a.z,i[11]=0,i[12]=-o.dotProduct(e),i[13]=-n.dotProduct(e),i[14]=-a.dotProduct(e),i[15]=1}static floatArray=new Float64Array(16).fill(0);multiply(e){let t=this.rawData,r=e.rawData,i=I.floatArray;i[0]=t[0]*r[0]+t[1]*r[4]+t[2]*r[8]+t[3]*r[12],i[1]=t[0]*r[1]+t[1]*r[5]+t[2]*r[9]+t[3]*r[13],i[2]=t[0]*r[2]+t[1]*r[6]+t[2]*r[10]+t[3]*r[14],i[3]=t[0]*r[3]+t[1]*r[7]+t[2]*r[11]+t[3]*r[15],i[4]=t[4]*r[0]+t[5]*r[4]+t[6]*r[8]+t[7]*r[12],i[5]=t[4]*r[1]+t[5]*r[5]+t[6]*r[9]+t[7]*r[13],i[6]=t[4]*r[2]+t[5]*r[6]+t[6]*r[10]+t[7]*r[14],i[7]=t[4]*r[3]+t[5]*r[7]+t[6]*r[11]+t[7]*r[15],i[8]=t[8]*r[0]+t[9]*r[4]+t[10]*r[8]+t[11]*r[12],i[9]=t[8]*r[1]+t[9]*r[5]+t[10]*r[9]+t[11]*r[13],i[10]=t[8]*r[2]+t[9]*r[6]+t[10]*r[10]+t[11]*r[14],i[11]=t[8]*r[3]+t[9]*r[7]+t[10]*r[11]+t[11]*r[15],i[12]=t[12]*r[0]+t[13]*r[4]+t[14]*r[8]+t[15]*r[12],i[13]=t[12]*r[1]+t[13]*r[5]+t[14]*r[9]+t[15]*r[13],i[14]=t[12]*r[2]+t[13]*r[6]+t[14]*r[10]+t[15]*r[14],i[15]=t[12]*r[3]+t[13]*r[7]+t[14]*r[11]+t[15]*r[15],t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15]}multiplyMatrices(e,t){const r=e.rawData,i=t.rawData,a=this.rawData,o=r[0],n=r[4],l=r[8],h=r[12],u=r[1],c=r[5],f=r[9],g=r[13],p=r[2],A=r[6],U=r[10],x=r[14],B=r[3],S=r[7],C=r[11],_=r[15],y=i[0],b=i[4],w=i[8],Q=i[12],E=i[1],M=i[5],z=i[9],Y=i[13],ee=i[2],oe=i[6],te=i[10],ge=i[14],Ce=i[3],J=i[7],ce=i[11],he=i[15];return a[0]=o*y+n*E+l*ee+h*Ce,a[4]=o*b+n*M+l*oe+h*J,a[8]=o*w+n*z+l*te+h*ce,a[12]=o*Q+n*Y+l*ge+h*he,a[1]=u*y+c*E+f*ee+g*Ce,a[5]=u*b+c*M+f*oe+g*J,a[9]=u*w+c*z+f*te+g*ce,a[13]=u*Q+c*Y+f*ge+g*he,a[2]=p*y+A*E+U*ee+x*Ce,a[6]=p*b+A*M+U*oe+x*J,a[10]=p*w+A*z+U*te+x*ce,a[14]=p*Q+A*Y+U*ge+x*he,a[3]=B*y+S*E+C*ee+_*Ce,a[7]=B*b+S*M+C*oe+_*J,a[11]=B*w+S*z+C*te+_*ce,a[15]=B*Q+S*Y+C*ge+_*he,this}multiplyPoint3(e,t){t||=new d;let r=this.rawData;return t.x=r[0]*e.x+r[4]*e.y+r[8]*e.z+r[12],t.y=r[1]*e.x+r[5]*e.y+r[9]*e.z+r[13],t.z=r[2]*e.x+r[6]*e.y+r[10]*e.z+r[14],t}multiplyVector4(e,t){t||=new d;let r=this.rawData,i=e.x,a=e.y,o=e.z,n=r[3]*i+r[7]*a+r[11]*o+r[15];return n=n||1,t.x=(r[0]*i+r[4]*a+r[8]*o+r[12])/n,t.y=(r[1]*i+r[5]*a+r[9]*o+r[13])/n,t.z=(r[2]*i+r[6]*a+r[10]*o+r[14])/n,t.w=1,t}transformVector4(e,t){let r=this.rawData;t||=new d;let i=e.x,a=e.y,o=e.z,n=e.w;return t.x=i*r[0]+a*r[4]+o*r[8]+n*r[12],t.y=i*r[1]+a*r[5]+o*r[9]+n*r[13],t.z=i*r[2]+a*r[6]+o*r[10]+n*r[14],t.w=i*r[3]+a*r[7]+o*r[11]+n*r[15],t}perspectiveMultiplyPoint3(e,t){let r=d.HELP_2,i,a=this.rawData;if(r.x=a[0]*e.x+a[4]*e.y+a[8]*e.z+a[12],r.y=a[1]*e.x+a[5]*e.y+a[9]*e.z+a[13],r.z=a[2]*e.x+a[6]*e.y+a[10]*e.z+a[14],i=a[3]*e.x+a[7]*e.y+a[11]*e.z+a[15],Math.abs(i)>1e-7){let o=1/i;return t.x=r.x*o,t.y=r.y*o,t.z=r.z*o,!0}else return t.x=0,t.y=0,t.z=0,!1}perspective(e,t,r,i){let a=this.rawData,o=e*it/2,n=Math.cos(o)/Math.sin(o);a[0]=-n/t,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=n,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=i/(i-r),a[11]=1,a[12]=0,a[13]=0,a[14]=-r*i/(i-r),a[15]=0}perspective3(e,t,r,i){let a=Math.tan(e*Math.PI/360)*r,o=a*t;this.frustum(-o,o,-a,a,r,i)}frustum(e,t,r,i,a,o){let n=this.rawData;n[0]=-2*a/(t-e),n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=2*a/(i-r),n[6]=0,n[7]=0,n[8]=(t+e)/(t-e),n[9]=(i+r)/(i-r),n[10]=o/(o-a),n[11]=1,n[12]=0,n[13]=0,n[14]=-o*a/(o-a),n[15]=0}ortho(e,t,r,i){let a=this.rawData;return a[0]=2/e,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=2/t,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1/(i-r),a[11]=0,a[12]=0,a[13]=0,a[14]=r/(r-i),a[15]=1,this}orthoZO(e,t,r,i,a,o){let n=this.rawData,l=1/(e-t),h=1/(r-i),u=1/(a-o);return n[0]=-2*l,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=-2*h,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=u,n[11]=0,n[12]=(e+t)*l,n[13]=(i+r)*h,n[14]=a*u,n[15]=1,this}orthoOffCenter(e,t,r,i,a,o){let n=this.rawData;n[0]=2/(t-e),n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=2/(i-r),n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=1/(o-a),n[11]=0,n[12]=(e+t)/(e-t),n[13]=(i+r)/(r-i),n[14]=a/(a-o),n[15]=1}transformDir(e,t){let r=this.rawData,i=1e-6,a=d.ZERO;t.crossProduct(e,a);let o=t.dotProduct(e);if(o>1-i)this.identity();else if(o<-1+i){let n=d.HELP_1,l=d.HELP_2,h=0,u,c,f,g,p,A,U,x,B,S,C,_,y,b,w,Q,E,M;l.x=0,l.y=e.z,l.z=-e.y,l.dotProduct(l)<i&&(l.x=-e.z,l.y=0,l.z=e.x),h=1/Math.sqrt(l.dotProduct(l)),l.x*=h,l.y*=h,l.z*=h,l.crossProduct(e,n),u=-e.x*e.x,c=-e.y*e.y,f=-e.z*e.z,g=-e.x*e.y,p=-e.x*e.z,A=-e.y*e.z,U=n.x*n.x,x=n.y*n.y,B=n.z*n.z,S=n.x*n.y,C=n.x*n.z,_=n.y*n.z,y=-l.x*l.x,b=-l.y*l.y,w=-l.z*l.z,Q=-l.x*l.y,E=-l.x*l.z,M=-l.y*l.z,r[0]=u+U+y,r[1]=g+S+Q,r[2]=p+C+E,r[4]=r[1],r[5]=c+x+b,r[6]=A+_+M,r[8]=r[2],r[9]=r[6],r[10]=f+B+w,r[3]=0,r[7]=0,r[11]=0,r[15]=1}else{let n,l,h,u,c,f=a.dotProduct(a),g=(1-o)/f;n=g*a.x,l=g*a.z,h=n*a.y,u=n*a.z,c=l*a.y,r[0]=o+n*a.x,r[1]=h-a.z,r[2]=u+a.y,r[4]=h+a.z,r[5]=o+g*a.y*a.y,r[6]=c-a.x,r[8]=u-a.y,r[9]=c+a.x,r[10]=o+l*a.z,r[3]=0,r[7]=0,r[11]=0,r[15]=1}return this}append(e){let t=this.rawData,r=t[0],i=t[4],a=t[8],o=t[12],n=t[1],l=t[5],h=t[9],u=t[13],c=t[2],f=t[6],g=t[10],p=t[14],A=t[3],U=t[7],x=t[11],B=t[15];t[0]=r*e.rawData[0]+n*e.rawData[4]+c*e.rawData[8]+A*e.rawData[12],t[1]=r*e.rawData[1]+n*e.rawData[5]+c*e.rawData[9]+A*e.rawData[13],t[2]=r*e.rawData[2]+n*e.rawData[6]+c*e.rawData[10]+A*e.rawData[14],t[3]=r*e.rawData[3]+n*e.rawData[7]+c*e.rawData[11]+A*e.rawData[15],t[4]=i*e.rawData[0]+l*e.rawData[4]+f*e.rawData[8]+U*e.rawData[12],t[5]=i*e.rawData[1]+l*e.rawData[5]+f*e.rawData[9]+U*e.rawData[13],t[6]=i*e.rawData[2]+l*e.rawData[6]+f*e.rawData[10]+U*e.rawData[14],t[7]=i*e.rawData[3]+l*e.rawData[7]+f*e.rawData[11]+U*e.rawData[15],t[8]=a*e.rawData[0]+h*e.rawData[4]+g*e.rawData[8]+x*e.rawData[12],t[9]=a*e.rawData[1]+h*e.rawData[5]+g*e.rawData[9]+x*e.rawData[13],t[10]=a*e.rawData[2]+h*e.rawData[6]+g*e.rawData[10]+x*e.rawData[14],t[11]=a*e.rawData[3]+h*e.rawData[7]+g*e.rawData[11]+x*e.rawData[15],t[12]=o*e.rawData[0]+u*e.rawData[4]+p*e.rawData[8]+B*e.rawData[12],t[13]=o*e.rawData[1]+u*e.rawData[5]+p*e.rawData[9]+B*e.rawData[13],t[14]=o*e.rawData[2]+u*e.rawData[6]+p*e.rawData[10]+B*e.rawData[14],t[15]=o*e.rawData[3]+u*e.rawData[7]+p*e.rawData[11]+B*e.rawData[15]}add(e){let t=this.rawData,r=t[0],i=t[4],a=t[8],o=t[12],n=t[1],l=t[5],h=t[9],u=t[13],c=t[2],f=t[6],g=t[10],p=t[14],A=t[3],U=t[7],x=t[11],B=t[15],S=e.rawData[0],C=e.rawData[4],_=e.rawData[8],y=e.rawData[12],b=e.rawData[1],w=e.rawData[5],Q=e.rawData[9],E=e.rawData[13],M=e.rawData[2],z=e.rawData[6],Y=e.rawData[10],ee=e.rawData[14],oe=e.rawData[3],te=e.rawData[7],ge=e.rawData[11],Ce=e.rawData[15];return t[0]=r+S,t[1]=n+b,t[2]=c+M,t[3]=A+oe,t[4]=i+C,t[5]=l+w,t[6]=f+z,t[7]=U+te,t[8]=a+_,t[9]=h+Q,t[10]=g+Y,t[11]=x+ge,t[12]=o+y,t[13]=u+E,t[14]=p+ee,t[15]=B+Ce,this}sub(e){let t=this.rawData,r=t[0],i=t[4],a=t[8],o=t[12],n=t[1],l=t[5],h=t[9],u=t[13],c=t[2],f=t[6],g=t[10],p=t[14],A=t[3],U=t[7],x=t[11],B=t[15],S=e.rawData[0],C=e.rawData[4],_=e.rawData[8],y=e.rawData[12],b=e.rawData[1],w=e.rawData[5],Q=e.rawData[9],E=e.rawData[13],M=e.rawData[2],z=e.rawData[6],Y=e.rawData[10],ee=e.rawData[14],oe=e.rawData[3],te=e.rawData[7],ge=e.rawData[11],Ce=e.rawData[15];return t[0]=r-S,t[1]=n-b,t[2]=c-M,t[3]=A-oe,t[4]=i-C,t[5]=l-w,t[6]=f-z,t[7]=U-te,t[8]=a-_,t[9]=h-Q,t[10]=g-Y,t[11]=x-ge,t[12]=o-y,t[13]=u-E,t[14]=p-ee,t[15]=B-Ce,this}mult(e){let t=this.rawData;return t[0]*=e,t[1]*=e,t[2]*=e,t[3]*=e,t[4]*=e,t[5]*=e,t[6]*=e,t[7]*=e,t[8]*=e,t[9]*=e,t[10]*=e,t[11]*=e,t[12]*=e,t[13]*=e,t[14]*=e,t[15]*=e,this}appendRotation(e,t){let r=I.getAxisRotation(t.x,t.y,t.z,e);this.append(r)}createByRotation(e,t){let r=I.helpMatrix,i,a,o=e*it;return i=Math.sin(o),a=Math.cos(o),t.x==1&&(r.rawData[0]=1,r.rawData[1]=0,r.rawData[2]=0,r.rawData[3]=0,r.rawData[4]=0,r.rawData[5]=a,r.rawData[6]=i,r.rawData[7]=0,r.rawData[8]=0,r.rawData[9]=-i,r.rawData[10]=a,r.rawData[11]=0,r.rawData[12]=0,r.rawData[13]=0,r.rawData[14]=0,r.rawData[15]=1),t.y==1&&(r.rawData[0]=a,r.rawData[1]=0,r.rawData[2]=-i,r.rawData[3]=0,r.rawData[4]=0,r.rawData[5]=1,r.rawData[6]=0,r.rawData[7]=0,r.rawData[8]=i,r.rawData[9]=0,r.rawData[10]=a,r.rawData[11]=0,r.rawData[12]=0,r.rawData[13]=0,r.rawData[14]=0,r.rawData[15]=1),t.z==1&&(r.rawData[0]=a,r.rawData[1]=i,r.rawData[2]=0,r.rawData[3]=0,r.rawData[4]=-i,r.rawData[5]=a,r.rawData[6]=0,r.rawData[7]=0,r.rawData[8]=0,r.rawData[9]=0,r.rawData[10]=1,r.rawData[11]=0,r.rawData[12]=0,r.rawData[13]=0,r.rawData[14]=0,r.rawData[15]=1),this.append(r),this}appendScale(e,t,r){I.helpMatrix.createByScale(e,t,r),this.append(I.helpMatrix)}createByScale(e,t,r){let i=this.rawData;i[0]=e,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=t,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=r,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1}appendTranslation(e,t,r){let i=this.rawData;i[12]+=e,i[13]+=t,i[14]+=r}clone(){let e=new I;return e.copyFrom(this),e}copyRowFrom(e,t){let r=this.rawData;switch(e){case 0:r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=t.w;break;case 1:r[4]=t.x,r[5]=t.y,r[6]=t.z,r[7]=t.w;break;case 2:r[8]=t.x,r[9]=t.y,r[10]=t.z,r[11]=t.w;break;case 3:r[12]=t.x,r[13]=t.y,r[14]=t.z,r[15]=t.w;break}}copyRowTo(e,t){let r=this.rawData;switch(e){case 0:t.x=r[0],t.y=r[1],t.z=r[2],t.w=r[3];break;case 1:t.x=r[4],t.y=r[5],t.z=r[6],t.w=r[7];break;case 2:t.x=r[8],t.y=r[9],t.z=r[10],t.w=r[11];break;case 3:t.x=r[12],t.y=r[13],t.z=r[14],t.w=r[15];break}}copyFrom(e){let t=this.rawData;return t[0]=e.rawData[0],t[1]=e.rawData[1],t[2]=e.rawData[2],t[3]=e.rawData[3],t[4]=e.rawData[4],t[5]=e.rawData[5],t[6]=e.rawData[6],t[7]=e.rawData[7],t[8]=e.rawData[8],t[9]=e.rawData[9],t[10]=e.rawData[10],t[11]=e.rawData[11],t[12]=e.rawData[12],t[13]=e.rawData[13],t[14]=e.rawData[14],t[15]=e.rawData[15],this}copyRawDataTo(e,t=0,r=!1){let i=this.rawData;e[0+t]=i[0],e[1+t]=i[1],e[2+t]=i[2],e[3+t]=i[3],e[4+t]=i[4],e[5+t]=i[5],e[6+t]=i[6],e[7+t]=i[7],e[8+t]=i[8],e[9+t]=i[9],e[10+t]=i[10],e[11+t]=i[11],e[12+t]=i[12],e[13+t]=i[13],e[14+t]=i[14],e[15+t]=i[15]}copyColFrom(e,t){let r=this.rawData;switch(e){case 0:r[0]=t.x,r[4]=t.y,r[8]=t.z,r[12]=t.w;break;case 1:r[1]=t.x,r[5]=t.y,r[9]=t.z,r[13]=t.w;break;case 2:r[2]=t.x,r[6]=t.y,r[10]=t.z,r[14]=t.w;break;case 3:r[3]=t.x,r[7]=t.y,r[11]=t.z,r[15]=t.w;break}}copyColTo(e,t){let r=this.rawData;switch(e){case 0:t.x=r[0],t.y=r[4],t.z=r[8],t.w=r[12];break;case 1:t.x=r[1],t.y=r[5],t.z=r[9],t.w=r[13];break;case 2:t.x=r[2],t.y=r[6],t.z=r[10],t.w=r[14];break;case 3:t.x=r[3],t.y=r[7],t.z=r[11],t.w=r[15];break}}copyToMatrix3D(e){e.rawData=this.rawData.slice(0)}makeRotationFromQuaternion(e){return this.compose(I._zero,e,I._one),this}static decomposeRawData=new Float64Array(16).fill(0);decompose(e="eulerAngles",t){let r=Z.CALCULATION_QUATERNION,i=t||I._prs;this.copyRawDataTo(I.decomposeRawData);let a=I.decomposeRawData,o=i[0];o.x=a[12],o.y=a[13],o.z=a[14],a[12]=0,a[13]=0,a[14]=0;let n=i[2];n.x=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),n.y=Math.sqrt(a[4]*a[4]+a[5]*a[5]+a[6]*a[6]),n.z=Math.sqrt(a[8]*a[8]+a[9]*a[9]+a[10]*a[10]),a[0]*(a[5]*a[10]-a[6]*a[9])-a[1]*(a[4]*a[10]-a[6]*a[8])+a[2]*(a[4]*a[9]-a[5]*a[8])<0&&(n.z=-n.z),a[0]/=n.x,a[1]/=n.x,a[2]/=n.x,a[4]/=n.y,a[5]/=n.y,a[6]/=n.y,a[8]/=n.z,a[9]/=n.z,a[10]/=n.z;let l=i[1],h;switch(e){case ir.AXIS_ANGLE:l.w=Math.acos((a[0]+a[5]+a[10]-1)/2);let u=Math.sqrt((a[6]-a[9])*(a[6]-a[9])+(a[8]-a[2])*(a[8]-a[2])+(a[1]-a[4])*(a[1]-a[4]));l.x=(a[6]-a[9])/u,l.y=(a[8]-a[2])/u,l.z=(a[1]-a[4])/u;break;case ir.QUATERNION:h=a[0]+a[5]+a[10],h>0?(l.w=Math.sqrt(1+h)/2,l.x=(a[6]-a[9])/(4*l.w),l.y=(a[8]-a[2])/(4*l.w),l.z=(a[1]-a[4])/(4*l.w)):a[0]>a[5]&&a[0]>a[10]?(l.x=Math.sqrt(1+a[0]-a[5]-a[10])/2,l.w=(a[6]-a[9])/(4*l.x),l.y=(a[1]+a[4])/(4*l.x),l.z=(a[8]+a[2])/(4*l.x)):a[5]>a[10]?(l.y=Math.sqrt(1+a[5]-a[0]-a[10])/2,l.x=(a[1]+a[4])/(4*l.y),l.w=(a[8]-a[2])/(4*l.y),l.z=(a[6]+a[9])/(4*l.y)):(l.z=Math.sqrt(1+a[10]-a[0]-a[5])/2,l.x=(a[8]+a[2])/(4*l.z),l.y=(a[6]+a[9])/(4*l.z),l.w=(a[1]-a[4])/(4*l.z));break;case ir.EULER_ANGLES:h=a[0]+a[5]+a[10],h>0?(r.w=Math.sqrt(1+h)/2,r.x=(a[6]-a[9])/(4*r.w),r.y=(a[8]-a[2])/(4*r.w),r.z=(a[1]-a[4])/(4*r.w)):a[0]>a[5]&&a[0]>a[10]?(r.x=Math.sqrt(1+a[0]-a[5]-a[10])/2,r.w=(a[6]-a[9])/(4*r.x),r.y=(a[1]+a[4])/(4*r.x),r.z=(a[8]+a[2])/(4*r.x)):a[5]>a[10]?(l.y=Math.sqrt(1+a[5]-a[0]-a[10])/2,r.x=(a[1]+a[4])/(4*r.y),r.w=(a[8]-a[2])/(4*r.y),r.z=(a[6]+a[9])/(4*r.y)):(r.z=Math.sqrt(1+a[10]-a[0]-a[5])/2,r.x=(a[8]+a[2])/(4*r.z),r.y=(a[6]+a[9])/(4*r.z),r.w=(a[1]-a[4])/(4*r.z)),r.getEulerAngles(l);break}return i[0]=o,i[1]=l,i[2]=n,i}static getEuler(e,t,r=!0,i){return e||=new d,I._getEulerMatrix.makeRotationFromQuaternion(t).makeEuler(e,r,i),e}compose(e,t,r){const i=this.rawData,a=t.x,o=t.y,n=t.z,l=t.w,h=a+a,u=o+o,c=n+n,f=a*h,g=a*u,p=a*c,A=o*u,U=o*c,x=n*c,B=l*h,S=l*u,C=l*c,_=r.x,y=r.y,b=r.z;return i[0]=(1-(A+x))*_,i[1]=(g+C)*_,i[2]=(p-S)*_,i[3]=0,i[4]=(g-C)*y,i[5]=(1-(f+x))*y,i[6]=(U+B)*y,i[7]=0,i[8]=(p+S)*b,i[9]=(U-B)*b,i[10]=(1-(f+A))*b,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}deltaTransformVector(e,t){t||=new d;let r=this.rawData,i=e.x,a=e.y,o=e.z;return t.x=i*r[0]+a*r[4]+o*r[8],t.y=i*r[1]+a*r[5]+o*r[9],t.z=i*r[2]+a*r[6]+o*r[10],t.w=i*r[3]+a*r[7]+o*r[11],t}identity(){let e=this.rawData;return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}fill(e){let t=this.rawData;t[1]=e,t[2]=e,t[3]=e,t[4]=e,t[6]=e,t[7]=e,t[8]=e,t[9]=e,t[11]=e,t[12]=e,t[13]=e,t[14]=e,t[0]=e,t[5]=e,t[10]=e,t[15]=e}invers33(){let e=this.rawData,t=e[5]*e[10]-e[9]*e[6],r=e[8]*e[6]-e[4]*e[10],i=e[4]*e[9]-e[8]*e[5],a=e[9]*e[2]-e[1]*e[10],o=e[0]*e[10]-e[8]*e[2],n=e[8]*e[1]-e[0]*e[9],l=e[1]*e[6]-e[5]*e[2],h=e[4]*e[2]-e[0]*e[6],u=e[0]*e[5]-e[4]*e[1],c=e[0]*t+e[4]*a+e[8]*l;if(Math.abs(c)>1e-11){let f=1/c;e[0]=f*t,e[4]=f*r,e[8]=f*i,e[1]=f*a,e[5]=f*o,e[9]=f*n,e[2]=f*l,e[6]=f*h,e[10]=f*u}}invert(){let e=this.determinant,t=Math.abs(e)>1e-11,r=this.rawData;if(t){e=1/e;let i=r[0],a=r[4],o=r[8],n=r[12],l=r[1],h=r[5],u=r[9],c=r[13],f=r[2],g=r[6],p=r[10],A=r[14],U=r[3],x=r[7],B=r[11],S=r[15];r[0]=e*(h*(p*S-A*B)-u*(g*S-A*x)+c*(g*B-p*x)),r[1]=-e*(l*(p*S-A*B)-u*(f*S-A*U)+c*(f*B-p*U)),r[2]=e*(l*(g*S-A*x)-h*(f*S-A*U)+c*(f*x-g*U)),r[3]=-e*(l*(g*B-p*x)-h*(f*B-p*U)+u*(f*x-g*U)),r[4]=-e*(a*(p*S-A*B)-o*(g*S-A*x)+n*(g*B-p*x)),r[5]=e*(i*(p*S-A*B)-o*(f*S-A*U)+n*(f*B-p*U)),r[6]=-e*(i*(g*S-A*x)-a*(f*S-A*U)+n*(f*x-g*U)),r[7]=e*(i*(g*B-p*x)-a*(f*B-p*U)+o*(f*x-g*U)),r[8]=e*(a*(u*S-c*B)-o*(h*S-c*x)+n*(h*B-u*x)),r[9]=-e*(i*(u*S-c*B)-o*(l*S-c*U)+n*(l*B-u*U)),r[10]=e*(i*(h*S-c*x)-a*(l*S-c*U)+n*(l*x-h*U)),r[11]=-e*(i*(h*B-u*x)-a*(l*B-u*U)+o*(l*x-h*U)),r[12]=-e*(a*(u*A-c*p)-o*(h*A-c*g)+n*(h*p-u*g)),r[13]=e*(i*(u*A-c*p)-o*(l*A-c*f)+n*(l*p-u*f)),r[14]=-e*(i*(h*A-c*g)-a*(l*A-c*f)+n*(l*g-h*f)),r[15]=e*(i*(h*p-u*g)-a*(l*p-u*f)+o*(l*g-h*f))}return t}transformPoint(e,t){let r=this.rawData;t||=new d;let i=e.x,a=e.y,o=e.z;return t.x=i*r[0]+a*r[4]+o*r[8]+r[12],t.y=i*r[1]+a*r[5]+o*r[9]+r[13],t.z=i*r[2]+a*r[6]+o*r[10]+r[14],t}transformVector(e,t){let r=this.rawData;t||=new d;let i=e.x,a=e.y,o=e.z;return t.x=i*r[0]+a*r[4]+o*r[8],t.y=i*r[1]+a*r[5]+o*r[9],t.z=i*r[2]+a*r[6]+o*r[10],t}transpose(){let e=this.rawData;for(let t=0;t<I.helpMatrix.rawData.length;t++)I.helpMatrix.rawData[t]=e[t];e[1]=I.helpMatrix.rawData[4],e[2]=I.helpMatrix.rawData[8],e[3]=I.helpMatrix.rawData[12],e[4]=I.helpMatrix.rawData[1],e[6]=I.helpMatrix.rawData[9],e[7]=I.helpMatrix.rawData[13],e[8]=I.helpMatrix.rawData[2],e[9]=I.helpMatrix.rawData[6],e[11]=I.helpMatrix.rawData[14],e[12]=I.helpMatrix.rawData[3],e[13]=I.helpMatrix.rawData[7],e[14]=I.helpMatrix.rawData[11]}get determinant(){let e=this.rawData;return(e[0]*e[5]-e[4]*e[1])*(e[10]*e[15]-e[14]*e[11])-(e[0]*e[9]-e[8]*e[1])*(e[6]*e[15]-e[14]*e[7])+(e[0]*e[13]-e[12]*e[1])*(e[6]*e[11]-e[10]*e[7])+(e[4]*e[9]-e[8]*e[5])*(e[2]*e[15]-e[14]*e[3])-(e[4]*e[13]-e[12]*e[5])*(e[2]*e[11]-e[10]*e[3])+(e[8]*e[13]-e[12]*e[9])*(e[2]*e[7]-e[6]*e[3])}getPosition(e){e||=new d;let t=this.rawData;return e.x=t[12],e.y=t[13],e.z=t[14],e}get position(){return this._position.set(this.rawData[12],this.rawData[13],this.rawData[14]),this._position}set position(e){let t=this.rawData;t[12]=e.x,t[13]=e.y,t[14]=e.z}get scale(){let e=this.rawData;return new d(e[0],e[5],e[10])}set scale(e){let t=this.rawData;t[0]=e.x,t[5]=e.y,t[10]=e.z}toString(){let e=this.rawData;return"matrix3d("+Math.round(e[0]*1e3)/1e3+","+Math.round(e[1]*1e3)/1e3+","+Math.round(e[2]*1e3)/1e3+","+Math.round(e[3]*1e3)/1e3+","+Math.round(e[4]*1e3)/1e3+","+Math.round(e[5]*1e3)/1e3+","+Math.round(e[6]*1e3)/1e3+","+Math.round(e[7]*1e3)/1e3+","+Math.round(e[8]*1e3)/1e3+","+Math.round(e[9]*1e3)/1e3+","+Math.round(e[10]*1e3)/1e3+","+Math.round(e[11]*1e3)/1e3+","+Math.round(e[12]*1e3)/1e3+","+Math.round(e[13]*1e3)/1e3+","+Math.round(e[14]*1e3)/1e3+","+Math.round(e[15]*1e3)/1e3+")"}lerp(e,t,r){this.copyFrom(t).sub(e).mult(r).add(e)}get(e,t){return this.rawData[e+t*4]}set(e,t,r){this.rawData[e+t*4]=r}getMaxScaleOnAxis(){let e=this.rawData,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],r=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],i=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,r,i))}translate(e){let t=this.get(0,0)*e.x+this.get(0,1)*e.y+this.get(0,2)*e.z+this.get(0,3),r=this.get(1,0)*e.x+this.get(1,1)*e.y+this.get(1,2)*e.z+this.get(1,3),i=this.get(2,0)*e.x+this.get(2,1)*e.y+this.get(2,2)*e.z+this.get(2,3),a=this.get(3,0)*e.x+this.get(3,1)*e.y+this.get(3,2)*e.z+this.get(3,3);return this.set(0,3,t),this.set(1,3,r),this.set(2,3,i),this.set(3,3,a),this}setTRInverse(e,t){t=t.inverse(),Z.quaternionToMatrix(t,this),this.translate(new d(-e.x,-e.y,-e.z))}setScale(e){return this.set(0,0,e.x),this.set(0,1,0),this.set(0,2,0),this.set(0,3,0),this.set(1,0,0),this.set(1,1,e.y),this.set(1,2,0),this.set(1,3,0),this.set(2,0,0),this.set(2,1,0),this.set(2,2,e.z),this.set(2,3,0),this.set(3,0,0),this.set(3,1,0),this.set(3,2,0),this.set(3,3,1),this}makeBasis(e,t,r){return this.setElements(e.x,t.x,r.x,0,e.y,t.y,r.y,0,e.z,t.z,r.z,0,0,0,0,1),this}makeRotationAxis(e,t){const r=Math.cos(t),i=Math.sin(t),a=1-r,o=e.x,n=e.y,l=e.z,h=a*o,u=a*n;return this.setElements(h*o+r,h*n-i*l,h*l+i*n,0,h*n+i*l,u*n+r,u*l-i*o,0,h*l-i*n,u*l+i*o,a*l*l+r,0,0,0,0,1),this}static transpose(e,t){t||=new I;let r=e.rawData,i=t.rawData;return i[0]=r[0],i[1]=r[4],i[2]=r[8],i[3]=r[12],i[4]=r[1],i[5]=r[5],i[6]=r[9],i[7]=r[13],i[8]=r[2],i[9]=r[6],i[10]=r[10],i[11]=r[14],i[12]=r[3],i[13]=r[7],i[14]=r[11],i[15]=r[15],t}static inverse(e,t){t||=new I;let r=e.rawData,i=t.rawData;i[0]=r[5]*r[10]*r[15]-r[5]*r[14]*r[11]-r[6]*r[9]*r[15]+r[6]*r[13]*r[11]+r[7]*r[9]*r[14]-r[7]*r[13]*r[10],i[1]=-r[1]*r[10]*r[15]+r[1]*r[14]*r[11]+r[2]*r[9]*r[15]-r[2]*r[13]*r[11]-r[3]*r[9]*r[14]+r[3]*r[13]*r[10],i[2]=r[1]*r[6]*r[15]-r[1]*r[14]*r[7]-r[2]*r[5]*r[15]+r[2]*r[13]*r[7]+r[3]*r[5]*r[14]-r[3]*r[13]*r[6],i[3]=-r[1]*r[6]*r[11]+r[1]*r[10]*r[7]+r[2]*r[5]*r[11]-r[2]*r[9]*r[7]-r[3]*r[5]*r[10]+r[3]*r[9]*r[6],i[4]=-r[4]*r[10]*r[15]+r[4]*r[14]*r[11]+r[6]*r[8]*r[15]-r[6]*r[12]*r[11]-r[7]*r[8]*r[14]+r[7]*r[12]*r[10],i[5]=r[0]*r[10]*r[15]-r[0]*r[14]*r[11]-r[2]*r[8]*r[15]+r[2]*r[12]*r[11]+r[3]*r[8]*r[14]-r[3]*r[12]*r[10],i[6]=-r[0]*r[6]*r[15]+r[0]*r[14]*r[7]+r[2]*r[4]*r[15]-r[2]*r[12]*r[7]-r[3]*r[4]*r[14]+r[3]*r[12]*r[6],i[7]=r[0]*r[6]*r[11]-r[0]*r[10]*r[7]-r[2]*r[4]*r[11]+r[2]*r[8]*r[7]+r[3]*r[4]*r[10]-r[3]*r[8]*r[6],i[8]=r[4]*r[9]*r[15]-r[4]*r[13]*r[11]-r[5]*r[8]*r[15]+r[5]*r[12]*r[11]+r[7]*r[8]*r[13]-r[7]*r[12]*r[9],i[9]=-r[0]*r[9]*r[15]+r[0]*r[13]*r[11]+r[1]*r[8]*r[15]-r[1]*r[12]*r[11]-r[3]*r[8]*r[13]+r[3]*r[12]*r[9],i[10]=r[0]*r[5]*r[15]-r[0]*r[13]*r[7]-r[1]*r[4]*r[15]+r[1]*r[12]*r[7]+r[3]*r[4]*r[13]-r[3]*r[12]*r[5],i[11]=-r[0]*r[5]*r[11]+r[0]*r[9]*r[7]+r[1]*r[4]*r[11]-r[1]*r[8]*r[7]-r[3]*r[4]*r[9]+r[3]*r[8]*r[5],i[12]=-r[4]*r[9]*r[14]+r[4]*r[13]*r[10]+r[5]*r[8]*r[14]-r[5]*r[12]*r[10]-r[6]*r[8]*r[13]+r[6]*r[12]*r[9],i[13]=r[0]*r[9]*r[14]-r[0]*r[13]*r[10]-r[1]*r[8]*r[14]+r[1]*r[12]*r[10]+r[2]*r[8]*r[13]-r[2]*r[12]*r[9],i[14]=-r[0]*r[5]*r[14]+r[0]*r[13]*r[6]+r[1]*r[4]*r[14]-r[1]*r[12]*r[6]-r[2]*r[4]*r[13]+r[2]*r[12]*r[5],i[15]=r[0]*r[5]*r[10]-r[0]*r[9]*r[6]-r[1]*r[4]*r[10]+r[1]*r[8]*r[6]+r[2]*r[4]*r[9]-r[2]*r[8]*r[5];let a=r[0]*i[0]+r[1]*i[4]+r[2]*i[8]+r[3]*i[12];for(let o=0;o<16;o++)i[o]/=a;return t}makeEuler(e,t,r="XYZ"){const i=this.rawData,a=i[0],o=i[4],n=i[8],l=i[1],h=i[5],u=i[9],c=i[2],f=i[6],g=i[10];switch(r){case"XYZ":e.y=Math.asin(ie(n,-1,1)),Math.abs(n)<.9999999?(e.x=Math.atan2(-u,g),e.z=Math.atan2(-o,a)):(e.x=Math.atan2(f,h),e.z=0);break;case"YXZ":e.x=Math.asin(-ie(u,-1,1)),Math.abs(u)<.9999999?(e.y=Math.atan2(n,g),e.z=Math.atan2(l,h)):(e.y=Math.atan2(-c,a),e.z=0);break;case"ZXY":e.x=Math.asin(ie(f,-1,1)),Math.abs(f)<.9999999?(e.y=Math.atan2(-c,g),e.z=Math.atan2(-o,h)):(e.y=0,e.z=Math.atan2(l,a));break;case"ZYX":e.y=Math.asin(-ie(c,-1,1)),Math.abs(c)<.9999999?(e.x=Math.atan2(f,g),e.z=Math.atan2(l,a)):(e.x=0,e.z=Math.atan2(-o,h));break;case"YZX":e.z=Math.asin(ie(l,-1,1)),Math.abs(l)<.9999999?(e.x=Math.atan2(-u,h),e.y=Math.atan2(-c,a)):(e.x=0,e.y=Math.atan2(n,g));break;case"XZY":e.z=Math.asin(-ie(o,-1,1)),Math.abs(o)<.9999999?(e.x=Math.atan2(f,h),e.y=Math.atan2(n,a)):(e.x=Math.atan2(-u,g),e.y=0);break}return t&&e.multiplyScalar(Wi),e}setElements(e,t,r,i,a,o,n,l,h,u,c,f,g,p,A,U){const x=this.rawData;return x[0]=e,x[4]=t,x[8]=r,x[12]=i,x[1]=a,x[5]=o,x[9]=n,x[13]=l,x[2]=h,x[6]=u,x[10]=c,x[14]=f,x[3]=g,x[7]=p,x[11]=A,x[15]=U,this}makeMatrix44ByQuaternion(e,t,r){this.identity(),Z.quaternionToMatrix(r,this),this.appendTranslation(e.x,e.y,e.z),this.appendScale(t.x,t.y,t.z)}}function ih(s,e,t){for(let r=0;r<4;r++)t.rawData[r]=s.rawData[r]*e.rawData[0]+s.rawData[r+4]*e.rawData[1]+s.rawData[r+8]*e.rawData[2]+s.rawData[r+12]*e.rawData[3],t.rawData[r+4]=s.rawData[r]*e.rawData[4]+s.rawData[r+4]*e.rawData[5]+s.rawData[r+8]*e.rawData[6]+s.rawData[r+12]*e.rawData[7],t.rawData[r+8]=s.rawData[r]*e.rawData[8]+s.rawData[r+4]*e.rawData[9]+s.rawData[r+8]*e.rawData[10]+s.rawData[r+12]*e.rawData[11],t.rawData[r+12]=s.rawData[r]*e.rawData[12]+s.rawData[r+4]*e.rawData[13]+s.rawData[r+8]*e.rawData[14]+s.rawData[r+12]*e.rawData[15]}function ls(s,e,t,r){let i=r.rawData,a=s.x*it,o=s.y*it,n=s.z*it,l=0,h=a*.5,u=o*.5,c=n*.5,f=Math.cos(h),g=Math.sin(h),p=Math.cos(u),A=Math.sin(u),U=Math.cos(c),x=Math.sin(c);l=f*p*U+g*A*x,a=g*p*U-f*A*x,o=f*A*U+g*p*x,n=f*p*x-g*A*U;let B=a+a,S=o+o,C=n+n,_=a*B,y=a*S,b=a*C,w=o*S,Q=o*C,E=n*C,M=l*B,z=l*S,Y=l*C,ee=t.x,oe=t.y,te=t.z;i[0]=(1-(w+E))*ee,i[1]=(y+Y)*ee,i[2]=(b-z)*ee,i[3]=0,i[4]=(y-Y)*oe,i[5]=(1-(_+E))*oe,i[6]=(Q+M)*oe,i[7]=0,i[8]=(b+z)*te,i[9]=(Q-M)*te,i[10]=(1-(_+w))*te,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1}function ah(s,e,t){let r=s.rawData,i=t.rawData,a=r[0],o=r[4],n=r[8],l=r[12],h=r[1],u=r[5],c=r[9],f=r[13],g=r[2],p=r[6],A=r[10],U=r[14],x=r[3],B=r[7],S=r[11],C=r[15];i[0]=a*e.rawData[0]+h*e.rawData[4]+g*e.rawData[8]+x*e.rawData[12],i[1]=a*e.rawData[1]+h*e.rawData[5]+g*e.rawData[9]+x*e.rawData[13],i[2]=a*e.rawData[2]+h*e.rawData[6]+g*e.rawData[10]+x*e.rawData[14],i[3]=a*e.rawData[3]+h*e.rawData[7]+g*e.rawData[11]+x*e.rawData[15],i[4]=o*e.rawData[0]+u*e.rawData[4]+p*e.rawData[8]+B*e.rawData[12],i[5]=o*e.rawData[1]+u*e.rawData[5]+p*e.rawData[9]+B*e.rawData[13],i[6]=o*e.rawData[2]+u*e.rawData[6]+p*e.rawData[10]+B*e.rawData[14],i[7]=o*e.rawData[3]+u*e.rawData[7]+p*e.rawData[11]+B*e.rawData[15],i[8]=n*e.rawData[0]+c*e.rawData[4]+A*e.rawData[8]+S*e.rawData[12],i[9]=n*e.rawData[1]+c*e.rawData[5]+A*e.rawData[9]+S*e.rawData[13],i[10]=n*e.rawData[2]+c*e.rawData[6]+A*e.rawData[10]+S*e.rawData[14],i[11]=n*e.rawData[3]+c*e.rawData[7]+A*e.rawData[11]+S*e.rawData[15],i[12]=l*e.rawData[0]+f*e.rawData[4]+U*e.rawData[8]+C*e.rawData[12],i[13]=l*e.rawData[1]+f*e.rawData[5]+U*e.rawData[9]+C*e.rawData[13],i[14]=l*e.rawData[2]+f*e.rawData[6]+U*e.rawData[10]+C*e.rawData[14],i[15]=l*e.rawData[3]+f*e.rawData[7]+U*e.rawData[11]+C*e.rawData[15]}function Fg(s,e){let t=e.x,r=e.y,i=e.z,a=e.w,o=s.rawData,n=2*t*r,l=2*t*i,h=2*t*a,u=2*r*i,c=2*r*a,f=2*i*a,g=t*t,p=r*r,A=i*i,U=a*a;return o[0]=g-p-A+U,o[4]=n-f,o[8]=l+c,o[12]=0,o[1]=n+f,o[5]=-g+p-A+U,o[9]=u-h,o[13]=0,o[2]=l-c,o[6]=u+h,o[10]=-g-p+A+U,o[14]=0,o[3]=0,o[7]=0,o[11]=0,o[15]=1,s}function yg(s,e){let t=e.rawData,r=Math.sin(s),i=Math.cos(s);return t[0]=i,t[1]=0,t[2]=-r,t[3]=0,t[8]=r,t[9]=0,t[10]=i,t[11]=0,t}function bg(s,e,t){let r=e.x,i=e.y,a=e.z,o=Math.hypot(r,i,a),n,l,h,u,c,f,g,p,A,U,x,B;if(o<_g)return null;o=1/o,r*=o,i*=o,a*=o,n=Math.sin(s),l=Math.cos(s),h=1-l,u=r*r*h+l,c=i*r*h+a*n,f=a*r*h-i*n,g=r*i*h-a*n,p=i*i*h+l,A=a*i*h+r*n,U=r*a*h+i*n,x=i*a*h-r*n,B=a*a*h+l;let S=t.rawData;return S[0]=u,S[1]=c,S[2]=f,S[3]=0,S[4]=g,S[5]=p,S[6]=A,S[7]=0,S[8]=U,S[9]=x,S[10]=B,S[11]=0,S[12]=0,S[13]=0,S[14]=0,S[15]=1,S}function co(s,e,t){let r=s.rawData,i=r[0],a=r[1],o=r[2],n=r[3],l=r[4],h=r[5],u=r[6],c=r[7],f=r[8],g=r[9],p=r[10],A=r[11],U=r[12],x=r[13],B=r[14],S=r[15],C=e.rawData,_=t.rawData,y=C[0],b=C[1],w=C[2],Q=C[3];return _[0]=y*i+b*l+w*f+Q*U,_[1]=y*a+b*h+w*g+Q*x,_[2]=y*o+b*u+w*p+Q*B,_[3]=y*n+b*c+w*A+Q*S,y=C[4],b=C[5],w=C[6],Q=C[7],_[4]=y*i+b*l+w*f+Q*U,_[5]=y*a+b*h+w*g+Q*x,_[6]=y*o+b*u+w*p+Q*B,_[7]=y*n+b*c+w*A+Q*S,y=C[8],b=C[9],w=C[10],Q=C[11],_[8]=y*i+b*l+w*f+Q*U,_[9]=y*a+b*h+w*g+Q*x,_[10]=y*o+b*u+w*p+Q*B,_[11]=y*n+b*c+w*A+Q*S,y=C[12],b=C[13],w=C[14],Q=C[15],_[12]=y*i+b*l+w*f+Q*U,_[13]=y*a+b*h+w*g+Q*x,_[14]=y*o+b*u+w*p+Q*B,_[15]=y*n+b*c+w*A+Q*S,_}var Xe=(s=>(s[s.None=0]="None",s[s.PointLight=1]="PointLight",s[s.DirectionLight=2]="DirectionLight",s[s.SpotLight=3]="SpotLight",s[s.SkyLight=4]="SkyLight",s))(Xe||{});class hs extends la{static lightSize=24;index=-1;lightType=-1;radius=.001;linear=8;lightPosition=new d;lightMatrixIndex=-1;direction=new d;quadratic=.032;lightColor=new P(1,1,1,1);intensity=1;innerAngle=0;outerAngle=1;range=100;castShadowIndex=-1;lightTangent=d.FORWARD;iesIndex=-1}class Se{static componentsUpdateList;static componentsLateUpdateList;static componentsBeforeUpdateList;static componentsComputeList;static componentsEnablePickerList;static graphicComponent;static waitStartComponent;static _init=!1;static init(){this._init||(this._init=!0,this.componentsUpdateList=new Map,this.componentsLateUpdateList=new Map,this.componentsBeforeUpdateList=new Map,this.componentsComputeList=new Map,this.componentsEnablePickerList=new Map,this.graphicComponent=new Map,this.waitStartComponent=new Map)}static bindUpdate(e,t,r){this.init();let i=this.componentsUpdateList.get(e);i||(i=new Map,this.componentsUpdateList.set(e,i)),i.set(t,r)}static unBindUpdate(e,t){this.init();let r=this.componentsUpdateList.get(e);r&&r.delete(t)}static bindLateUpdate(e,t,r){this.init();let i=this.componentsLateUpdateList.get(e);i||(i=new Map,this.componentsLateUpdateList.set(e,i)),i.set(t,r)}static unBindLateUpdate(e,t){this.init();let r=this.componentsLateUpdateList.get(e);r&&r.delete(t)}static bindBeforeUpdate(e,t,r){this.init();let i=this.componentsBeforeUpdateList.get(e);i||(i=new Map,this.componentsBeforeUpdateList.set(e,i)),i.set(t,r)}static unBindBeforeUpdate(e,t){this.init();let r=this.componentsBeforeUpdateList.get(e);r&&r.delete(t)}static bindCompute(e,t,r){this.init();let i=this.componentsComputeList.get(e);i||(i=new Map,this.componentsComputeList.set(e,i)),i.set(t,r)}static unBindCompute(e,t){this.init();let r=this.componentsComputeList.get(e);r&&r.delete(t)}static bindGraphic(e,t,r){this.init();let i=this.graphicComponent.get(e);i||(i=new Map,this.graphicComponent.set(e,i)),i.set(t,r)}static unBindGraphic(e,t){this.init();let r=this.graphicComponent.get(e);r&&r.delete(t)}static appendWaitStart(e){this.init();let t=this.waitStartComponent.get(e.object3D);t?t.indexOf(e)==-1&&t.push(e):this.waitStartComponent.set(e.object3D,[e])}static removeWaitStart(e,t){this.init();let r=Se.waitStartComponent.get(e);if(r){let i=r.indexOf(t);i!=-1&&r.splice(i)}}static bindEnablePick(e,t,r){this.init();let i=this.componentsEnablePickerList.get(e);i||(i=new Map,this.componentsEnablePickerList.set(e,i)),i.set(t,r)}static unBindEnablePick(e,t){this.init();let r=this.componentsEnablePickerList.get(e);r&&r.delete(t)}}class Pe{object3D=null;_eventDispatcher;get eventDispatcher(){return this._eventDispatcher||=new Er,this._eventDispatcher}set eventDispatcher(e){console.error("The eventDispatcher should not be set externally!")}_enable=!0;__isStart=!1;isDestroyed=!1;get isStart(){return this.__isStart}get transform(){return this.object3D.transform}set enable(e){this._enable!=e&&(this._enable=e,this._enable?this.onEnable?.(this.transform.view3D):this.onDisable?.(this.transform.view3D))}get enable(){return this._enable}__init(e){this.init(e)}__start(){this.transform&&this.transform.scene3D&&this._enable&&this.onEnable?.(this.transform.view3D),this.transform&&this.transform.scene3D&&this.__isStart==!1&&(this.start?.(),this.__isStart=!0),this.onUpdate&&this._onUpdate(this.onUpdate.bind(this)),this.onLateUpdate&&this._onLateUpdate(this.onLateUpdate.bind(this)),this.onBeforeUpdate&&this._onBeforeUpdate(this.onBeforeUpdate.bind(this)),this.onCompute&&this._onCompute(this.onCompute.bind(this)),this.onGraphic&&this._onGraphic(this.onGraphic.bind(this))}__stop(){this.transform&&this.transform.scene3D&&this.onDisable?.(this.transform.view3D),this._onUpdate(null),this._onLateUpdate(null),this._onBeforeUpdate(null),this._onCompute(null),this._onGraphic(null)}init(e){}start(){}stop(){}cloneTo(e){}copyComponent(e){return this}_onUpdate(e){e!=null?Se.bindUpdate(this.transform.view3D,this,e):Se.unBindUpdate(this.transform.view3D,this)}_onLateUpdate(e){e!=null?Se.bindLateUpdate(this.transform.view3D,this,e):Se.unBindLateUpdate(this.transform.view3D,this)}_onBeforeUpdate(e){e!=null?Se.bindBeforeUpdate(this.transform.view3D,this,e):Se.unBindBeforeUpdate(this.transform.view3D,this)}_onCompute(e){e!=null?Se.bindCompute(this.transform.view3D,this,e):Se.unBindCompute(this.transform.view3D,this)}_onGraphic(e){e!=null?Se.bindGraphic(this.transform.view3D,this,e):Se.unBindGraphic(this.transform.view3D,this)}beforeDestroy(e){Se.removeWaitStart(this.object3D,this)}destroy(e){this.isDestroyed||(this.isDestroyed=!0,this.enable=!1,this.stop(),this._onBeforeUpdate(null),this._onUpdate(null),this._onLateUpdate(null),this.onEnable=null,this.onDisable=null,this.onUpdate=null,this.onLateUpdate=null,this.onBeforeUpdate=null,this.onCompute=null,this.onGraphic=null)}}class us{value=0;inv_base=0;static get(e,t){let r=0,i=1/t;for(;e>0;)r+=e%t*i,e/=t,i/=t;return r}getBase(e,t){let r=this.inv_base=1/t;for(;e>0;)this.value+=r*(e%t),e/=t,r*=this.inv_base}next(){let e=1-this.value-1e-7;if(this.inv_base<e)this.value+=this.inv_base;else{let t=this.inv_base,r;do r=t,t*=this.inv_base;while(t>=e);this.value+=r+t-1}}get(){return this.value}}class $t{origin=new d;length=Number.MAX_VALUE;static _rayl=1e9;static _smallnum=1e-8;_vector=new d;_dir=new d;constructor(e,t){this.origin.copyFrom(e||new d),this._dir.copyFrom(t||new d),this._dir.normalize()}get direction(){return this._dir}set direction(e){this._dir.copyFrom(e),this._dir.normalize()}clone(){return new $t(this.origin,this.direction)}intersectBox(e,t){let r=this.direction,i=this.origin,a,o,n,l,h,u;const c=1/r.x,f=1/r.y,g=1/r.z,p=e.min,A=e.max;return a=((c>=0?p.x:A.x)-i.x)*c,o=((c>=0?A.x:p.x)-i.x)*c,n=((f>=0?p.y:A.y)-i.y)*f,l=((f>=0?A.y:p.y)-i.y)*f,a>l||n>o||(n>a&&(a=n),l<o&&(o=l),h=((g>=0?p.z:A.z)-i.z)*g,u=((g>=0?A.z:p.z)-i.z)*g,a>u||h>o)||(h>a&&(a=h),u<o&&(o=u),o<0)?null:(t||=new d,this.pointAt(a>=0?a:o,t))}pointAt(e,t){return t||=new d,t.copy(this.direction),t.multiplyScalar(e),t.add(this.origin,t),t}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this._dir.copy(e._dir),this.length=e.length,this}setApproxDirection(e){this._dir=e.normalize()}setOrigin(e){this.origin.copyFrom(e)}getOrigin(){return this.origin}getPoint(e){return this._dir.scaleBy(e),this.origin.add(this._dir)}sqrDistToPoint(e){let t=this._dir,r=e.subtract(this.origin),i=ct(r,t),a=ct(t,t),o=i/a,n=this.getPoint(o);return ho(e.subtract(n))}applyMatrix(e){this.origin=e.transformPoint(this.origin),this._dir=e.transformVector(this._dir)}_v0=new d;_v1=new d;_v2=new d;pointInTriangle(e,t,r,i){let a=this._v0,o=this._v1,n=this._v2;i.subtract(t,a),r.subtract(t,o),e.subtract(t,n);let l=d.dot(a,a),h=d.dot(a,o),u=d.dot(a,n),c=d.dot(o,o),f=d.dot(o,n),g=1/(l*c-h*h),p=(c*u-h*f)*g,A=(l*f-h*u)*g;return p>=0&&A>=0&&p+A<1}_E1=new d;_E2=new d;_P=new d;_T=new d;_Q=new d;intersectTriangle(e,t,r){let i=r.v1,a=r.v2,o=r.v3;a.subtract(i,this._E1),o.subtract(i,this._E2),t.crossProduct(this._E2,this._P);let n=this._E1.dotProduct(this._P);if(n>0?e.subtract(i,this._T):(i.subtract(e,this._T),n=-n),n<1e-4||(r.u=this._T.dotProduct(this._P),r.u<0||r.u>n)||(this._T.crossProduct(this._E1,this._Q),r.v=t.dotProduct(this._Q),r.v<0||r.u+r.v>n))return null;let l=new d;r.t0=r.t=this._E2.dotProduct(this._Q);let h=1/n;return r.t*=h,r.u*=h,r.v*=h,l.x=e.x+r.t*t.x,l.y=e.y+r.t*t.y,l.z=e.z+r.t*t.z,l}intersectSphere(e,t,r,i){let a=e.subtract(r),o=d.dot(t,t),n=2*d.dot(a,t),l=d.dot(a,a)-i*i,h=n*n-4*o*l,u=d.HELP_3;if(h<0)return null;{let c=(-n-Math.sqrt(h))/(o*2);return c<0?null:(u.x=e.x+c*t.x,u.y=e.y+c*t.y,u.z=e.z+c*t.z,u)}}intersectionSegment(e,t,r){const i=this.origin,a=d.HELP_0,o=d.HELP_1,n=d.HELP_2,l=d.HELP_3;t.subtract(e,a),this._dir.scaleToRef($t._rayl,n),i.add(n,o),e.subtract(i,l);var h=d.dot(a,a),u=d.dot(a,n),c=d.dot(n,n),f=d.dot(a,l),g=d.dot(n,l),p=h*c-u*u,A,U,x=p,B,S,C=p;p<$t._smallnum?(U=0,x=1,S=g,C=c):(U=u*g-c*f,S=h*g-u*f,U<0?(U=0,S=g,C=c):U>x&&(U=x,S=g+u,C=c)),S<0?(S=0,-f<0?U=0:-f>h?U=x:(U=-f,x=h)):S>C&&(S=C,-f+u<0?U=0:-f+u>h?U=x:(U=-f+u,x=h)),A=Math.abs(U)<$t._smallnum?0:U/x,B=Math.abs(S)<$t._smallnum?0:S/C;const _=d.HELP_4;n.scaleToRef(B,_);const y=d.HELP_5;a.scaleToRef(A,y),y.add(l,y);const b=d.HELP_6;y.subtract(_,b);var w=B>0&&B<=this._dir.length&&b.lengthSquared<r*r;if(w){let Q=new d;return Q.copyFrom(t.subtract(e)),Q.scaleBy(A),Q.add(e,Q),{out:Q,length:y.length}}return{out:null,length:-1}}get_vec(e,t){let r=d.HELP_1;return r.x=e.x-t.x,r.y=e.y-t.y,r.z=e.z-t.z,r}}class ja{x;y;w;h;constructor(e=0,t=0,r=0,i=0){this.x=e,this.y=t,this.w=r,this.h=i}get width(){return this.w}set width(e){this.w=e}get height(){return this.h}set height(e){this.h=e}static pointInRect(e,t,r,i,a,o){return!(e<r||e>a||t<i||t>o)}clone(){return new ja(this.x,this.y,this.w,this.h)}copyFrom(e){this.x=e.x,this.y=e.y,this.w=e.w,this.h=e.h}copyTo(e){e.copyFrom(this)}inner(e,t){return!(e<this.x||e>this.x+this.width||t<this.y||t>this.y+this.height)}equal(e){return!(this.x!=e.x||this.y!=e.y||this.width!=e.width||this.height!=e.height)}equalArea(e,t,r,i){return!(this.x!=e||this.y!=t||this.width!=r||this.height!=i)}equalInnerArea(e){var t=this.x,r=this.y,i=this.x+this.width,a=this.y+this.height,o=e.x,n=e.y,l=e.x+e.width,h=e.y+e.height;return Math.max(t,o)<=Math.min(i,l)&&Math.max(r,n)<=Math.min(a,h)}innerArea(e,t){t=t||new ja;var r=this.x,i=this.y,a=this.x+this.width,o=this.y+this.height,n=e.x,l=e.y,h=e.x+e.width,u=e.y+e.height,c=Math.max(i,l),f=Math.min(o,u),g=Math.max(r,n),p=Math.min(h,a);return c>=0&&f>=0&&f-c>=0&&p-g>0?(t.x=g,t.y=c,t.width=p-g,t.height=f-c):(t.x=0,t.y=0,t.width=0,t.height=0),t}setTo(e,t,r,i){this.x=e,this.y=t,this.width=r,this.height=i}}class Re{center;extents;max;min;size;static maxVector3=new d(1,1,1).multiplyScalar(Number.MAX_VALUE*.1);static minVector3=new d(1,1,1).multiplyScalar(-Number.MAX_VALUE*.1);constructor(e,t){e||=d.ZERO.clone(),t||=d.ZERO.clone(),this.setFromCenterAndSize(e,t)}makeEmpty(){return this.setFromMinMax(Re.maxVector3,Re.minVector3),this}setFromMinMax(e,t){return this.init(),t.subtract(e,this.size),e.add(t,this.center).multiplyScalar(.5),this.extents.copyFrom(this.size).multiplyScalar(.5),this.min.copyFrom(e),this.max.copyFrom(t),this}init(){return this.min||=new d,this.max||=new d,this.size||=new d,this.center||=new d,this.extents||=new d,this}setFromCenterAndSize(e,t){return this.size=t,this.center=e,this.init(),this.extents.copy(t).multiplyScalar(.5),this.center.subtract(this.extents,this.min),this.center.add(this.extents,this.max),this}inFrustum(e,t){return t.containsBox(e.bound)}merge(e){e.min.x<this.min.x&&(this.min.x=e.min.x),e.min.y<this.min.y&&(this.min.y=e.min.y),e.min.z<this.min.z&&(this.min.z=e.min.z),e.max.x>this.max.x&&(this.max.x=e.max.x),e.max.y>this.max.y&&(this.max.y=e.max.y),e.max.z>this.max.z&&(this.max.z=e.max.z),this.size.x=e.max.x-e.min.x,this.size.y=e.max.y-e.min.y,this.size.z=e.max.z-e.min.z,this.extents.x=this.size.x*.5,this.extents.y=this.size.y*.5,this.extents.z=this.size.z*.5,this.center.x=this.extents.x+e.min.x,this.center.y=this.extents.y+e.min.y,this.center.z=this.extents.z+e.min.z}intersects(e){return this.min.x<=e.max.x&&this.max.x>=e.min.x&&this.min.y<=e.max.y&&this.max.y>=e.min.y&&this.min.z<=e.max.z&&this.max.z>=e.min.z}intersectsSphere(e){return this.min.x<=e.max.x&&this.max.x>=e.min.x&&this.min.y<=e.max.y&&this.max.y>=e.min.y&&this.min.z<=e.max.z&&this.max.z>=e.min.z}intersectsBox(e){return this.min.x<=e.max.x&&this.max.x>=e.min.x&&this.min.y<=e.max.y&&this.max.y>=e.min.y&&this.min.z<=e.max.z&&this.max.z>=e.min.z}equals(e){return this.center.equals(e.center)&&this.extents.equals(e.extents)}expandByPoint(e){e.x<this.min.x&&(this.min.x=e.x),e.x>this.max.x&&(this.max.x=e.x),e.y<this.min.y&&(this.min.y=e.y),e.y>this.max.y&&(this.max.y=e.y),e.z<this.min.z&&(this.min.z=e.z),e.z>this.max.z&&(this.max.z=e.z)}static fromPoints(e){for(var t=new Re(new d,new d),r=0;r<e.length;r++)t.expandByPoint(e[r]);return t}calculateTransform(e){}clone(){var e=new Re(this.center.clone(),this.size.clone());return e}intersectsRay(e,t){throw new Error("Method not implemented.")}containsPoint(e){return this.min.x<=e.x&&this.max.x>=e.x&&this.min.y<=e.y&&this.max.y>=e.y&&this.min.z<=e.z&&this.max.z>=e.z}containsBox(e){let t=this.min,r=this.max;return t.x<=e.min.x&&t.y<=e.min.y&&t.z<=e.min.z&&r.x>=e.max.x&&r.y>=e.max.y&&r.z>=e.max.z}updateBound(){}destroy(e){this.center=null,this.extents=null,this.min=null,this.max=null,this.size=null}}class sh{planes;corners;boundingBox=new Re;constructor(){this.planes=[],this.corners=[];for(var e=0;e<6;e++)this.planes[e]=new d;for(var e=0;e<8;e++)this.corners[e]=new d}updateBoundBox(e){this.boundingBox.makeEmpty();let t=this.boundingBox.min,r=this.boundingBox.max,i=0;for(let a=0;a<2;++a)for(let o=0;o<2;++o)for(let n=0;n<2;++n){let l=this.corners[i];i++,l.set(2*a-1,2*o-1,n,1),e.transformVector4(l,l),l.div(l.w,l),t.x=Math.min(l.x,t.x),t.y=Math.min(l.y,t.y),t.z=Math.min(l.z,t.z),r.x=Math.max(l.x,r.x),r.y=Math.max(l.y,r.y),r.z=Math.max(l.z,r.z)}return this.boundingBox.setFromMinMax(t,r),this}setFrustumCorners(e){let t=0;for(let r=0;r<2;++r)for(let i=0;i<2;++i)for(let a=0;a<2;++a){let o=this.corners[t];o.set(2*r-1,2*i-1,a,1),e.transformVector4(o,o),o.div(o.w,o),t++}}update(e){var t=e.rawData;this.planes[0].x=t[3]-t[0],this.planes[0].y=t[7]-t[4],this.planes[0].z=t[11]-t[8],this.planes[0].w=t[15]-t[12];var r=Math.sqrt(this.planes[0].x*this.planes[0].x+this.planes[0].y*this.planes[0].y+this.planes[0].z*this.planes[0].z);this.planes[0].x/=r,this.planes[0].y/=r,this.planes[0].z/=r,this.planes[0].w/=r,this.planes[1].x=t[3]+t[0],this.planes[1].y=t[7]+t[4],this.planes[1].z=t[11]+t[8],this.planes[1].w=t[15]+t[12],r=Math.sqrt(this.planes[1].x*this.planes[1].x+this.planes[1].y*this.planes[1].y+this.planes[1].z*this.planes[1].z),this.planes[1].x/=r,this.planes[1].y/=r,this.planes[1].z/=r,this.planes[1].w/=r,this.planes[2].x=t[3]+t[1],this.planes[2].y=t[7]+t[5],this.planes[2].z=t[11]+t[9],this.planes[2].w=t[15]+t[13],r=Math.sqrt(this.planes[2].x*this.planes[2].x+this.planes[2].y*this.planes[2].y+this.planes[2].z*this.planes[2].z),this.planes[2].x/=r,this.planes[2].y/=r,this.planes[2].z/=r,this.planes[2].w/=r,this.planes[3].x=t[3]-t[1],this.planes[3].y=t[7]-t[5],this.planes[3].z=t[11]-t[9],this.planes[3].w=t[15]-t[13],r=Math.sqrt(this.planes[3].x*this.planes[3].x+this.planes[3].y*this.planes[3].y+this.planes[3].z*this.planes[3].z),this.planes[3].x/=r,this.planes[3].y/=r,this.planes[3].z/=r,this.planes[3].w/=r,this.planes[4].x=t[3]-t[2],this.planes[4].y=t[7]-t[6],this.planes[4].z=t[11]-t[10],this.planes[4].w=t[15]-t[14],r=Math.sqrt(this.planes[4].x*this.planes[4].x+this.planes[4].y*this.planes[4].y+this.planes[4].z*this.planes[4].z),this.planes[4].x/=r,this.planes[4].y/=r,this.planes[4].z/=r,this.planes[4].w/=r,this.planes[5].x=t[3]+t[2],this.planes[5].y=t[7]+t[6],this.planes[5].z=t[11]+t[10],this.planes[5].w=t[15]+t[14],r=Math.sqrt(this.planes[5].x*this.planes[5].x+this.planes[5].y*this.planes[5].y+this.planes[5].z*this.planes[5].z),this.planes[5].x/=r,this.planes[5].y/=r,this.planes[5].z/=r,this.planes[5].w/=r}containsPoint(e){for(var t=0;t<6;t++)if(this.planes[t].x*e.x+this.planes[t].y*e.y+this.planes[t].z*e.z+this.planes[t].w<=0)return!1;return!0}containsSphere(e){let t=e.bound,r=0,i,a=e.transform.worldPosition,o=t.radius,n=t.center.x+a.x,l=t.center.y+a.y,h=t.center.z+a.z;for(let u of this.planes){if(i=u.x*n+u.y*l+u.z*h+u.w,i<=-o)return 0;i>o&&r++}return r===6?2:1}containsBox(e){let t=0,r,a=Math.max(e.size.x,e.size.y,e.size.z)*2,o=e.center.x,n=e.center.y,l=e.center.z;for(let h of this.planes){if(r=h.x*o+h.y*n+h.z*l+h.w,r<=-a)return 0;r>a&&t++}return t===6?2:1}containsBox2(e){let t=0,r,i=1.74*Math.max(e.extents.x,e.extents.y,e.extents.z);for(let a of this.planes){if(r=a.x*e.center.x+a.y*e.center.y+a.z*e.center.z+a.w,r<=-i)return 0;r>i&&t++}return t===6?2:1}}var He=(s=>(s[s.ortho=0]="ortho",s[s.perspective=1]="perspective",s[s.shadow=2]="shadow",s))(He||{});class Qg{corners;index;constructor(e){this.index=e,this.corners=[];for(let t=0;t<4;t++)this.corners.push(new d)}}class Rg{bound;twoSections;name;color;shadowCamera;index;constructor(e,t,r){this.bound=new Re,this.shadowCamera=je.createCamera3DObject(null,"csmShadowCamera_"+r),this.shadowCamera.isShadowCamera=!0,this.shadowCamera.orthoOffCenter(100,-100,100,-100,1,1e4),this.twoSections=[e,t],this.index=r,r==0?this.color=new P(1,0,0,1):r==1?this.color=new P(0,1,0,1):r==2?this.color=new P(0,0,1,1):r==3&&(this.color=new P(0,1,1,1)),this.name="child_"+r}updateBound(){this.bound.makeEmpty();let e=this.bound.min,t=this.bound.max;for(let r of this.twoSections)for(let i of r.corners)e.x=Math.min(i.x,e.x),e.y=Math.min(i.y,e.y),e.z=Math.min(i.z,e.z),t.x=Math.max(i.x,t.x),t.y=Math.max(i.y,t.y),t.z=Math.max(i.z,t.z);return this.bound.setFromMinMax(e,t),this}}class oh{sections;children;name;constructor(e){this.sections=[];let t=e+1;for(let r=0;r<t;r++)this.sections.push(new Qg(r));this.children=[];for(let r=0;r<e;r++)this.children.push(new Rg(this.sections[r],this.sections[r+1],r))}update(e,t,r,i,a){let o=this.sections.length-1;for(let n=0;n<=o;++n){let l=this.sections[n],h=0,u=this.logSplit(r,i,n,this.sections.length);{let f=(u-r)/i;f=f**a.csmScatteringExp,u=(i-r)*f+r}u*=a.csmAreaScale;let c=(e.rawData[10]*u+e.rawData[14])/u;for(let f=0;f<2;++f)for(let g=0;g<2;++g){let p=l.corners[h];h++,p.set(2*f-1,2*g-1,c,1),t.transformVector4(p,p),p.div(p.w,p)}}for(let n of this.children)n.updateBound();return this}squareSplit(e,t,r,i){return(r/(i-1))**4*(t-e)+e}uniformSplit(e,t,r,i){return r/(i-1)*(t-e)+e}logSplit(e,t,r,i){return e*(t/e)**(r/(i-1))}}class Zi extends Pe{fov=60;name;aspect=1;near=1;far=5e3;left=-100;right=100;top=100;bottom=-100;frustumSize=100;viewPort=new ja;frustum;sh=new Float32Array(36);isShadowCamera=!1;_projectionMatrixInv=new I;_projectionMatrix=new I;_viewMatrix=new I;_viewMatrixInv=new I;_unprojection=new I;_pvMatrixInv=new I;_pvMatrix=new I;_halfw;_halfh;_ray;_enableCSM=!1;mainCamera;get projectionMatrix(){return this._projectionMatrix}lookTarget;type=He.perspective;csm;cubeShadowCameras=[];get enableCSM(){return this._enableCSM}set enableCSM(e){e&&!this.csm&&(this.csm=new oh(Zt.Cascades)),this._enableCSM=e}constructor(){super()}init(){super.init(),this._ray=new $t,this.frustum=new sh,this.lookTarget=new d(0,0,0),this.viewPort.x=0,this.viewPort.y=0,this.viewPort.w=R.presentationSize[0],this.viewPort.h=R.presentationSize[1],this.updateProjection(),R.addEventListener(Yr.RESIZE,this.updateProjection,this)}updateProjection(){this.aspect=R.aspect,this.type==He.perspective?this.perspective(this.fov,this.aspect,this.near,this.far):this.type==He.ortho&&(this.frustumSize?this.ortho(this.frustumSize,this.near,this.far):this.orthoOffCenter(this.left,this.right,this.bottom,this.top,this.near,this.far))}getShadowBias(e){let t=2*this.getShadowWorldExtents()/e,r=this.far-this.near;return t/r-m.setting.shadow.shadowBias*.01}getShadowWorldExtents(){let e=m.setting.shadow.shadowBound;return e?e*=.5:e=Math.round(.05*this.frustum.boundingBox.extents.length),e}getCSMShadowBiasScale(e){if(e==this)return 1;let t=this.far-this.near,r=this.csm.children[0].shadowCamera;return(r.far-r.near)/t}getCSMShadowWorldExtents(e){return Math.round(this.csm.children[e].bound.extents.length)}perspective(e,t,r,i){this.fov=e,this.aspect=t,this.near=Math.max(.001,r),this.far=i,this._projectionMatrix.perspective(this.fov,this.aspect,this.near,this.far),this.type=He.perspective}ortho(e,t,r){this.frustumSize=e;let i=e*.5*this.aspect,a=e*.5,o=-i/2,n=i/2,l=a/2,h=-a/2;this.orthoOffCenter(o,n,h,l,t,r)}orthoOffCenter(e,t,r,i,a,o){this.near=a,this.far=o,this.left=e,this.right=t,this.top=i,this.bottom=r,this.type=He.ortho,this._projectionMatrix.orthoOffCenter(this.left,this.right,this.bottom,this.top,this.near,this.far)}get viewMatrix(){return this._viewMatrix.copyFrom(this.transform.worldMatrix),this._viewMatrix.invert(),this._viewMatrix}get shadowViewMatrix(){return this._viewMatrix.copyFrom(this.transform.worldMatrix),this._viewMatrix.appendScale(1,1,1),this._viewMatrix.invert(),this._viewMatrix}object3DToScreenRay(e,t=null){return t||(t=new d(0,0,0,1)),this._halfw=this.viewPort.width*.5,this._halfh=this.viewPort.height*.5,bt.transformVector(this.viewMatrix,e,t),this.project(t,t),t.x=this._halfw+t.x*this._halfw,t.y=this.viewPort.height-(this._halfh-t.y*this._halfh),t}screenRayToObject3D(e,t=null){t||(t=new d),this._halfw=this.viewPort.width*.5,this._halfh=this.viewPort.height*.5;let r=e.x,i=e.y;return t.x=r/this.viewPort.width-.25,t.y=i/this.viewPort.height-.25,this.unProject(t.x,t.y,e.z,t),t}get pvMatrix(){return co(this._projectionMatrix,this.viewMatrix,this._pvMatrix),this._pvMatrix}get pvMatrix2(){co(this._projectionMatrix,this.transform.worldMatrix,this._pvMatrix);let e=this._pvMatrixInv.copyFrom(this.pvMatrix);return e.invert(),e}get pvMatrixInv(){let e=this._pvMatrixInv.copyFrom(this.pvMatrix);return e.invert(),e}get vMatrixInv(){let e=this._viewMatrixInv.copyFrom(this.viewMatrix);return e.invert(),e}get cameraToWorld(){let e=I.helpMatrix;return e.identity(),e.copyFrom(this.projectionMatrixInv),e.multiply(this.vMatrixInv),e}get ndcToView(){let e=I.helpMatrix;return e.identity(),e.copyFrom(this.projectionMatrixInv),e}get projectionMatrixInv(){return this._projectionMatrixInv.copyFrom(this._projectionMatrix),this._projectionMatrixInv.invert(),this._projectionMatrixInv}unProject(e,t,r,i){return i||(i=new d),i.x=e,i.y=-t,i.z=r,i.w=1,i.x*=r,i.y*=r,this._unprojection.copyFrom(this._projectionMatrix),this._unprojection.invert(),bt.transformVector(this._unprojection,i,i),i.z=r,i}project(e,t){return this._projectionMatrix.perspectiveMultiplyPoint3(e,t),t.x=t.x/t.w,t.y=-t.y/t.w,t.z=e.z,t}screenPointToRay(e,t){let r=this._ray,i=je.UnProjection(e,t,.01,this),a=je.UnProjection(e,t,1,this);return a=a.subtract(i).normalize(),r.origin.copyFrom(i),r.direction=a,r}screenPointToWorld(e,t,r){return je.UnProjection(e,t,r,this)}worldToScreenPoint(e,t){return je.Projection(e,this,t)}lookAt(e,t,r=d.Y_AXIS){this.transform.lookAt(e,t,r),t&&this.lookTarget.copyFrom(t)}onUpdate(){this._useJitterProjection&&this.getJitteredProjectionMatrix(),this.frustum.update(this.pvMatrix),this.frustum.updateBoundBox(this.pvMatrixInv);let e=m.setting.shadow;this.enableCSM&&this.csm?.update(this._projectionMatrix,this._pvMatrixInv,this.near,this.far,e)}_haltonSeq;_jitterOffsetList;_useJitterProjection=!1;_jitterFrameIndex=0;_sampleIndex=0;_jitterX=0;_jitterY=0;get jitterFrameIndex(){return this._jitterFrameIndex}get jitterX(){return this._jitterX}get jitterY(){return this._jitterY}enableJitterProjection(e){this._jitterFrameIndex=0,this._useJitterProjection=e,this._haltonSeq||=new us,this._jitterOffsetList=[];for(let t=0;t<32;t++){let r=this.generateRandomOffset();this._jitterOffsetList.push(r)}this._jitterOffsetList.reverse()}generateRandomOffset(){let e=new K(us.get((this._sampleIndex&1023)+1,2)-.5,us.get((this._sampleIndex&1023)+1,3)-.5);return++this._sampleIndex>=32&&(this._sampleIndex=0),e}getJitteredProjectionMatrix(){let e=m.setting.render.postProcessing.taa,t=this._projectionMatrix,r=e.temporalJitterScale,i=this._jitterFrameIndex%e.jitterSeedCount,a=this._jitterOffsetList[i].x*r,o=this._jitterOffsetList[i].y*r,n=t.get(0,2),l=t.get(1,2);this._jitterX=a/this.viewPort.width,this._jitterY=o/this.viewPort.height,n+=this._jitterX,l+=this._jitterY,t.set(0,2,n),t.set(1,2,l),this._jitterFrameIndex++}getWorldDirection(e){e||=new d;const t=this.transform._worldMatrix.rawData;return e.set(-t[8],-t[9],-t[10]).normalize()}}class Tt extends Pe{static LIMIT=1;static COMPONENT_NAME="UUTransform";static COMPONENT_TYPE="Transform";static POSITION_ONCHANGE="POSITION_ONCHANGE";static ROTATION_ONCHANGE="ROTATION_ONCHANGE";static SCALE_ONCHANGE="SCALE_ONCHANGE";static PARENT_ONCHANGE="PARENT_ONCHANGE";static CHILDREN_ONCHANGE="CHILDREN_ONCHANGE";static ADD_ONCHANGE="ADD_ONCHANGE";static LOCAL_ONCHANGE="LOCAL_ONCHANGE";eventPositionChange=new qe(Tt.POSITION_ONCHANGE);eventRotationChange=new qe(Tt.ROTATION_ONCHANGE);eventScaleChange=new qe(Tt.SCALE_ONCHANGE);eventLocalChange=new qe(Tt.LOCAL_ONCHANGE);onPositionChange;onRotationChange;onScaleChange;_scene3d;_parent;_localPos;_localRot;_localRotQuat;_localScale;_localDetailPos;_localDetailRot;_localDetailScale;index;index2;_forward=new d;_back=new d;_right=new d;_left=new d;_up=new d;_down=new d;_worldMatrix;_targetPos;static=!1;depthOrder=0;get localChange(){return pe.matrixStateBuffer[this.index2]!=0}set localChange(e){pe.matrixStateBuffer[this.index2]=e?1:0}get targetPos(){return this._targetPos}set targetPos(e){this._targetPos=e}get parent(){return this._parent}set parent(e){let t=this._parent?.object3D;if(this._parent=e,this.depthOrder=e?e.depthOrder+1:0,pe.setParent(this.index,e?e.worldMatrix.index:-1,this.depthOrder),this.localChange=!0,this.object3D){let r=e?e.scene3D:null;r?(this._scene3d=r,this.object3D.components.forEach(i=>{Se.appendWaitStart(i)})):this.object3D.components.forEach(i=>{i.__stop()});for(let i of this.object3D.entityChildren)i.transform.parent=e?this:null;this.object3D.components.forEach(i=>{i.onParentChange?.(t,this._parent?.object3D)})}this.notifyLocalChange()}set enable(e){this.transform._scene3d&&e?super.enable=!0:super.enable=!1;for(let t of this.object3D.entityChildren)t.transform.enable=e}get enable(){return this._enable}get scene3D(){return this._scene3d}set scene3D(e){this._scene3d=e}get view3D(){return this._scene3d&&this._scene3d.view?this._scene3d.view:null}constructor(){super(),this._worldMatrix=new I(!0),this.index=this._worldMatrix.index,this.index2=this._worldMatrix.index*pe.stateStruct,this._localPos=new d,this._localRot=new d,this._localRotQuat=new Z,this._localScale=new d(1,1,1),pe.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),pe.setTranslate(this.index,this._localPos.x,this._localPos.y,this._localPos.z)}awake(){}start(){}stop(){}notifyLocalChange(){if(this.localChange=!0,this.object3D){let e=this.object3D.entityChildren,t=0,r=e.length;for(t=0;t<r;t++)e[t].transform.notifyLocalChange()}this.eventDispatcher.dispatchEvent(this.eventLocalChange)}get up(){return this.worldMatrix.transformVector(d.UP,this._up),this._up}set up(e){this._up.copyFrom(e),bt.fromToRotation(d.UP,this._up,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0}get down(){return this.worldMatrix.transformVector(d.DOWN,this._down),this._down}set down(e){this._down.copyFrom(e),bt.fromToRotation(d.DOWN,this._down,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get forward(){return this.worldMatrix.transformVector(d.FORWARD,this._forward),this._forward}set forward(e){this._forward.copyFrom(e),bt.fromToRotation(d.FORWARD,this._forward,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get back(){return this.worldMatrix.transformVector(d.BACK,this._back),this._back}set back(e){this._back.copyFrom(e),bt.fromToRotation(d.BACK,this._back,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0}get left(){return this.worldMatrix.transformVector(d.neg_X_AXIS,this._left),this._left}set left(e){this._left.copyFrom(e),bt.fromToRotation(d.LEFT,this._left,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0}get right(){return this.worldMatrix.transformVector(d.X_AXIS,this._right),this._right}set right(e){this._right.copyFrom(e),bt.fromToRotation(d.RIGHT,this._right,Z.HELP_0),this.transform.localRotQuat=Z.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get localRotQuat(){return this.localChange&&this.updateWorldMatrix(),this._localRotQuat}set localRotQuat(e){(e.x!=this._localRotQuat.x||e.y!=this._localRotQuat.y||e.z!=this._localRotQuat.z||e.w!=this._localRotQuat.w)&&(this._localRotQuat.copyFrom(e),this._localRotQuat.getEulerAngles(this._localRot),pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange))}notifyChange(){this.notifyLocalChange(),this.onRotationChange?.(),this.onScaleChange?.(),this.onPositionChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange)}get worldMatrix(){return this.updateWorldMatrix(),this._worldMatrix}updateWorldMatrix(e=!1){(this.localChange||e)&&(this.parent?(ls(this._localRot,this._localPos,this._localScale,this._worldMatrix),ah(this._worldMatrix,this.parent.worldMatrix,this._worldMatrix)):ls(this._localRot,this._localPos,this._localScale,this._worldMatrix),this.localChange=!1)}updateChildTransform(){let e=this;if(e.localChange&&e.updateWorldMatrix(),e.object3D.numChildren>0)for(const t of e.object3D.entityChildren)t.transform.updateChildTransform()}lookTarget(e,t=d.UP){this.lookAt(this.transform.worldPosition,e,t)}lookAt(e,t,r=d.UP){this._targetPos||=new d,this._targetPos.copyFrom(t),this.localPosition=e,I.helpMatrix.lookAt(e,t,r),I.helpMatrix.invert();var i=I.helpMatrix.decompose(ir.QUATERNION);this.localRotQuat=Z.CALCULATION_QUATERNION.copyFrom(i[1])}decomposeFromMatrix(e,t="eulerAngles"){let r=e.decompose(t),i=this.transform;return i.localRotQuat.copyFrom(r[1]),i.localRotQuat=i.localRotQuat,i.localPosition.copyFrom(r[0]),i.localPosition=i.localPosition,i.localScale.copyFrom(r[2]),i.localScale=i.localScale,this}cloneTo(e){e.transform.localPosition=this.localPosition,e.transform.localRotation=this.localRotation,e.transform.localScale=this.localScale}set x(e){this._localPos.x!=e&&(this._localPos.x=e,pe.setTranslate(this.index,this._localPos.x,this._localPos.y,this._localPos.z),this.notifyLocalChange(),this.onPositionChange?.(),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange))}get x(){return this._localPos.x}set y(e){this._localPos.y!=e&&(this._localPos.y=e,pe.setTranslate(this.index,this._localPos.x,this._localPos.y,this._localPos.z),this.notifyLocalChange(),this.onPositionChange?.(),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange))}get y(){return this._localPos.y}set z(e){this._localPos.z!=e&&(this._localPos.z=e,pe.setTranslate(this.index,this._localPos.x,this._localPos.y,this._localPos.z),this.notifyLocalChange(),this.onPositionChange?.(),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange))}get z(){return this._localPos.z}set scaleX(e){this._localScale.x!=e&&(this._localScale.x=e,pe.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),this.notifyLocalChange(),this.onScaleChange?.(),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange))}get scaleX(){return this._localScale.x}set scaleY(e){this._localScale.y!=e&&(this._localScale.y=e,pe.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),this.notifyLocalChange(),this.onScaleChange?.(),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange))}get scaleY(){return this._localScale.y}set scaleZ(e){this._localScale.z!=e&&(this._localScale.z=e,pe.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),this.notifyLocalChange(),this.onScaleChange?.(),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange))}get scaleZ(){return this._localScale.z}set rotationX(e){this._localRot.x!=e&&(this._localRot.x=e,pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange))}get rotationX(){return this._localRot.x}set rotationY(e){this._localRot.y!=e&&(this._localRot.y=e,pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange))}get rotationY(){return this._localRot.y}set rotationZ(e){this._localRot.z!=e&&(this._localRot.z=e,pe.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange))}get rotationZ(){return this._localRot.z}get worldPosition(){return this.localChange&&this.updateWorldMatrix(),this._worldMatrix.position}set localPosition(e){this.onPositionChange&&(this._localPos.x!=e.x||this._localPos.y!=e.y||this._localPos.z!=e.z)&&this.onPositionChange(this._localPos,e),this._localPos.copyFrom(e),pe.setTranslate(this.index,e.x,e.y,e.z),this.notifyLocalChange(),this.eventPositionChange&&this.eventDispatcher.dispatchEvent(this.eventPositionChange)}get localPosition(){return this._localPos}set localRotation(e){this.onRotationChange&&(this._localRot.x!=e.x||this._localRot.y!=e.y||this._localRot.z!=e.z)&&this.onRotationChange(this._localRot,e),pe.setRotation(this.index,e.x,e.y,e.z),this._localRot.copyFrom(e),this.notifyLocalChange(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get localRotation(){return this._localRot}set localScale(e){pe.setScale(this.index,e.x,e.y,e.z),this._localScale.copyFrom(e),this.notifyLocalChange(),this.onScaleChange?.(),this.eventScaleChange&&this.eventDispatcher.dispatchEvent(this.eventScaleChange)}get localScale(){return this._localScale}get localDetailScale(){return this._localDetailScale}set localDetailScale(e){this._localDetailScale=e,pe.setContinueScale(this.index,e.x,e.y,e.z)}get localDetailRot(){return this._localDetailRot}set localDetailRot(e){this._localDetailRot=e,pe.setContinueRotation(this.index,e.x,e.y,e.z)}get localDetailPos(){return this._localDetailPos}set localDetailPos(e){this._localDetailPos=e,pe.setContinueTranslate(this.index,e.x,e.y,e.z)}beforeDestroy(e){this.parent&&this.parent.object3D&&this.parent.object3D.removeChild(this.object3D),super.beforeDestroy(e)}destroy(){super.destroy(),this.scene3D=null,this.eventPositionChange=null,this.eventRotationChange=null,this.eventScaleChange=null,this.onPositionChange=null,this.onRotationChange=null,this.onScaleChange=null,this._scene3d=null,this._parent=null,this._localPos=null,this._localRot=null,this._localRotQuat=null,this._localScale=null,this._forward=null,this._back=null,this._right=null,this._left=null,this._up=null,this._down=null,this.localChange=null,this._targetPos=null}}class Yt{static GLTF_NODE_INDEX_PROPERTY;static BASE_COLOR_UNIFORM="u_baseColorFactor";static BASE_COLOR_TEXTURE_UNIFORM="u_baseColorSampler";static METALROUGHNESS_UNIFORM="u_metallicRoughnessValues";static METALROUGHNESS_TEXTURE_UNIFORM="u_metallicRoughnessSampler";static NORMAL_TEXTURE_UNIFORM="u_normalSampler";static NORMAL_SCALE_UNIFORM="u_normalScale";static EMISSIVE_TEXTURE_UNIFORM="u_emissiveSampler";static EMISSIVE_FACTOR_UNIFORM="u_emissiveFactor";static OCCLUSION_TEXTURE_UNIFORM="u_occlusionSampler";static OCCLUSION_FACTOR_UNIFORM="u_occlusionFactor";static MAX_MORPH_TARGETS=8;static MORPH_POSITION_PREFIX="a_morphPositions_";static MORPH_NORMAL_PREFIX="a_morphNormals_";static MORPH_TANGENT_PREFIX="a_morphTangents_";static MORPH_WEIGHT_UNIFORM="u_morphWeights";static SCENE_ROOT_SKELETON="SCENE_ROOT";static IDENTITY_INVERSE_BIND_MATRICES="IDENTITY_IBM";static JOINT_MATRICES_UNIFORM="u_jointMatrix";static ALPHA_CUTOFF_UNIFORM="u_alphaCutoff"}var V=(s=>(s.position="position",s.normal="normal",s.uv="uv",s.TANGENT="TANGENT",s.TEXCOORD_1="TEXCOORD_1",s.TEXCOORD_2="TEXCOORD_2",s.TEXCOORD_3="TEXCOORD_3",s.TEXCOORD_4="TEXCOORD_4",s.TEXCOORD_5="TEXCOORD_5",s.TEXCOORD_6="TEXCOORD_6",s.TEXCOORD_7="TEXCOORD_7",s.color="color",s.joints0="joints0",s.joints1="joints1",s.weights0="weights0",s.weights1="weights1",s.weight="weight",s.indices="indices",s.vIndex="vIndex",s.a_morphPositions_0="a_morphPositions_0",s.all="all",s))(V||{}),ae=(s=>(s[s.NONE=0]="NONE",s[s.ABOVE=1]="ABOVE",s[s.ALPHA=2]="ALPHA",s[s.NORMAL=3]="NORMAL",s[s.ADD=4]="ADD",s[s.BELOW=5]="BELOW",s[s.ERASE=6]="ERASE",s[s.MUL=7]="MUL",s[s.SCREEN=8]="SCREEN",s[s.DIVD=9]="DIVD",s[s.SOFT_ADD=10]="SOFT_ADD",s))(ae||{}),nh=(s=>(s[s.src_a=0]="src_a",s[s.dest_a=1]="dest_a",s))(nh||{});class lh{static getBlend(e){let t={color:{srcFactor:"src-alpha",dstFactor:"one"},alpha:{srcFactor:"one",dstFactor:"one"}};switch(e){case 0:t.color.srcFactor="one",t.color.dstFactor="zero",t.color.operation="add";break;case 1:t.color.srcFactor="one-minus-src-alpha",t.color.dstFactor="dst-alpha",t.color.operation="add";break;case 4:t.color.srcFactor="one",t.color.dstFactor="one",t.color.operation="add",t.alpha.srcFactor="one",t.alpha.dstFactor="one",t.alpha.operation="add";break;case 2:t.color.srcFactor="src-alpha",t.color.dstFactor="one-minus-src-alpha",t.color.operation="add";break;case 5:t.color.srcFactor="one-minus-src-alpha",t.color.dstFactor="one",t.color.operation="add";break;case 6:t.color.srcFactor="zero",t.color.dstFactor="one-minus-src-alpha",t.color.operation="add";break;case 7:t.color.srcFactor="dst",t.color.dstFactor="one-minus-src-alpha",t.color.operation="add";break;case 3:t.color.srcFactor="src-alpha",t.color.dstFactor="one-minus-src-alpha",t.color.operation="add";break;case 10:t.color.srcFactor="one",t.color.dstFactor="one",t.color.operation="max",t.alpha.srcFactor="one",t.alpha.dstFactor="one",t.alpha.operation="add";break;case 8:t.color.srcFactor="one",t.color.dstFactor="one-minus-src",t.color.operation="add";break}return t}}class dr{static mipmapShader=`
|
|
5459
5459
|
var<private> pos : array<vec2<f32>, 4> = array<vec2<f32>, 4>(
|
|
5460
5460
|
vec2<f32>(-1.0, 1.0), vec2<f32>(1.0, 1.0),
|
|
5461
5461
|
vec2<f32>(-1.0, -1.0), vec2<f32>(1.0, -1.0));
|
|
@@ -5481,7 +5481,7 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
5481
5481
|
var outColor: vec4<f32> = textureSampleLevel(img, imgSampler, texCoord, 0.0);
|
|
5482
5482
|
return outColor;
|
|
5483
5483
|
}
|
|
5484
|
-
`;static pipelineCache={};static pipeline;static getMipmapPipeline(e){let t=R.device,r=gr.pipelineCache[e.format];if(!r){const i=t.createShaderModule({code:gr.mipmapShader});let a=t.createBindGroupLayout({entries:[{binding:0,visibility:e.visibility,sampler:e.samplerBindingLayout},{binding:1,visibility:e.visibility,texture:e.textureBindingLayout}]}),o=R.device.createPipelineLayout({bindGroupLayouts:[a]});r=t.createRenderPipeline({layout:o,vertex:{module:i,entryPoint:"vertexMain"},fragment:{module:i,entryPoint:"fragmentMain",targets:[{format:e.format}]},primitive:{topology:"triangle-strip",stripIndexFormat:"uint32"}}),gr.pipelineCache[e.format]=r}return r}static webGPUGenerateMipmap(e){let t=R.device,r=e.textureDescriptor,i=gr.getMipmapPipeline(e),a=e.getGPUTexture().createView({baseMipLevel:0,mipLevelCount:1});const o=F.beginCommandEncoder();for(let n=1;n<r.mipLevelCount;++n){const l=e.getGPUTexture().createView({baseMipLevel:n,mipLevelCount:1}),h=o.beginRenderPass({colorAttachments:[{view:l,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"}]});let u=t.createBindGroupLayout({entries:[{binding:0,visibility:e.visibility,sampler:e.samplerBindingLayout},{binding:1,visibility:e.visibility,texture:e.textureBindingLayout}]});const c=t.createBindGroup({layout:u,entries:[{binding:0,resource:e.gpuSampler},{binding:1,resource:a}]});h.setPipeline(i),h.setBindGroup(0,c),h.draw(4),h.end(),a=l}F.endCommandEncoder(o)}static getMipmapCount(e,t){let a=Math.max(e,t);return 1+Math.log2(a)|0}}class $e{name;url;gpuTexture;pid;view;gpuSampler;gpuSampler_comparison;format;usage;width=4;height=4;depthOrArrayLayers=1;numberLayer=1;viewDescriptor;textureDescriptor;visibility=GPUShaderStage.COMPUTE|GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT;textureBindingLayout={viewDimension:"2d",multisampled:!1};samplerBindingLayout={type:"filtering"};sampler_comparisonBindingLayout={type:"comparison"};flipY;isVideoTexture;isHDRTexture;_useMipmap=!1;_sourceImageData;_addressModeU;_addressModeV;_addressModeW;_magFilter;_minFilter;_mipmapFilter;_lodMinClamp;_lodMaxClamp;_compare;_maxAnisotropy;mipmapCount=1;_textureChange=!1;constructor(e=32,t=32,r=1){this.width=e,this.height=t,this.numberLayer=r,this.minFilter=Kr.linear,this.magFilter=Kr.linear,this.mipmapFilter=Kr.linear,this.addressModeU=Pt.repeat,this.addressModeV=Pt.repeat}init(){let e=this;return e.internalCreateBindingLayoutDesc&&e.internalCreateBindingLayoutDesc(),e.internalCreateTexture&&e.internalCreateTexture(),e.internalCreateView&&e.internalCreateView(),e.internalCreateSampler&&e.internalCreateSampler(),this}createTextureDescriptor(e,t,r,i,a=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.STORAGE_BINDING,o=1,n=0){this.width=e,this.height=t,this.format=i,this.usage=a,this.textureDescriptor={size:[e,t,o],mipLevelCount:r,format:i,usage:a,label:`${this.name+this.width+this.height+this.format}`},n>0&&(this.textureDescriptor.sampleCount=n),o>1?this.viewDescriptor={format:i,dimension:"2d-array"}:this.viewDescriptor={format:i,dimension:this.textureBindingLayout.viewDimension,mipLevelCount:r,baseMipLevel:0}}generate(e){let t=32,r=32;"width"in e&&(t=e.width,r=e.height),(t<32||r<32)&&console.log(e.name+"Size must be greater than 32!"),this.width=t,this.height=r,this.createTexture(e)}createTexture(e){this._sourceImageData=e,this.updateTextureDescription(),this.updateGPUTexture();let t=R.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height]),this.useMipmap&&gr.webGPUGenerateMipmap(this)}get useMipmap(){return this._useMipmap}set useMipmap(e){if(e){if(this.samplerBindingLayout.type="filtering",this._useMipmap==!1&&this._sourceImageData){this._useMipmap=!0,this.updateTextureDescription(),this.updateGPUTexture();let t=R.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height]),gr.webGPUGenerateMipmap(this)}}else if(this.samplerBindingLayout.type="non-filtering",this._useMipmap==!0&&this._sourceImageData){this._useMipmap=!1,this.updateTextureDescription(),this.updateGPUTexture();let t=R.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height])}this._textureChange=!0,this._useMipmap=e,this.noticeChange()}get sourceImageData(){return this._sourceImageData}getMipmapCount(){let e=this.width,t=this.height,r=Math.max(e,t);return 1+Math.log2(r)|0}updateTextureDescription(){this.mipmapCount=Math.floor(this.useMipmap?this.getMipmapCount():1),this.createTextureDescriptor(this.width,this.height,this.mipmapCount,this.format)}updateGPUTexture(){this.gpuTexture&&this.gpuTexture instanceof GPUTexture&&this.gpuTexture.destroy(),this.gpuTexture=null,this.view=null,this.gpuTexture=this.getGPUTexture()}getGPUTexture(){return this.gpuTexture||(this.gpuTexture=R.device.createTexture(this.textureDescriptor)),this.gpuTexture}getGPUView(e=0){return this.view||(this.gpuTexture=this.getGPUTexture(),this.gpuTexture instanceof GPUTexture&&(this.view=this.gpuTexture.createView(this.viewDescriptor),this.view.label=this.name)),this.view}_stateChangeRef=new Map;bindStateChange(e,t){this._stateChangeRef.set(t,e)}unBindStateChange(e){this._stateChangeRef.delete(e)}noticeChange(){this.gpuSampler=R.device.createSampler(this),this._stateChangeRef.forEach((e,t)=>{e()})}destroy(e){e&&this.gpuTexture instanceof GPUTexture&&(this.gpuSampler=null,this.gpuSampler_comparison=null,this.textureBindingLayout=null,this.textureDescriptor=null,this.gpuTexture.destroy(),this.gpuTexture=null),this._stateChangeRef.clear()}get addressModeU(){return this._addressModeU}set addressModeU(e){this._addressModeU!=e&&(this._addressModeU=e,this.noticeChange())}get addressModeV(){return this._addressModeV}set addressModeV(e){this._addressModeV!=e&&(this._addressModeV=e,this.noticeChange())}get addressModeW(){return this._addressModeW}set addressModeW(e){this._addressModeW!=e&&(this._addressModeW=e,this.noticeChange())}get magFilter(){return this._magFilter}set magFilter(e){this._magFilter!=e&&(this._magFilter=e,this.noticeChange())}get minFilter(){return this._minFilter}set minFilter(e){this._minFilter!=e&&(this._minFilter=e,this.noticeChange())}get mipmapFilter(){return this._mipmapFilter}set mipmapFilter(e){this._mipmapFilter!=e&&(this._mipmapFilter=e,this.noticeChange())}get lodMinClamp(){return this._lodMinClamp}set lodMinClamp(e){this._lodMinClamp!=e&&(this._lodMinClamp=e,this.noticeChange())}get lodMaxClamp(){return this._lodMaxClamp}set lodMaxClamp(e){this._lodMaxClamp!=e&&(this._lodMaxClamp=e,this.noticeChange())}get compare(){return this._compare}set compare(e){this._compare!=e&&(this._compare=e,this.noticeChange())}get maxAnisotropy(){return this._maxAnisotropy}set maxAnisotropy(e){this._maxAnisotropy!=e&&(this._maxAnisotropy=e,this.noticeChange())}static _texs=[];static delayDestroyTexture(e){this._texs.includes(e)||this._texs.push(e)}static destroyTexture(){if(this._texs.length>0)for(;this._texs.length>0;)this._texs.shift().destroy()}}class hh extends $e{_bitmapTextures;constructor(e,t,r){super(e,t,r),this.format=X.rgba8unorm,this.mipmapCount=1,this._bitmapTextures=[],this.init()}setTextures(e){this._bitmapTextures.length=0;for(let t=0;t<e.length;t++){const r=e[t];this.addTexture(r)}}addTexture(e){(e.width!=this.width||e.height!=this.height)&&console.error("bitmap texture must match bitmapTextureArray size!"),e.pid=this._bitmapTextures.length,this._bitmapTextures.push(e),this.updateTexture()}removeTexture(e){let t=this._bitmapTextures.indexOf(e);if(t!=-1){this._bitmapTextures.splice(t,1);for(let r=0;r<this._bitmapTextures.length;r++){const i=this._bitmapTextures[r];i.pid=r}}}updateTexture(){let e=F.beginCommandEncoder();for(let t=0;t<this._bitmapTextures.length;t++){let r=this._bitmapTextures[t];e.copyTextureToTexture({texture:r.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:this.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:t}},{width:this.width,height:this.height,depthOrArrayLayers:1})}F.endCommandEncoder(e)}internalCreateBindingLayoutDesc(){this.textureBindingLayout.viewDimension="2d-array",this.samplerBindingLayout.type="filtering",this.minFilter=Kr.linear,this.magFilter=Kr.linear}internalCreateTexture(){this.textureDescriptor={format:this.format,size:{width:this.width,height:this.height,depthOrArrayLayers:this.numberLayer},dimension:"2d",usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING},this.gpuTexture=this.getGPUTexture()}internalCreateView(){this.viewDescriptor={dimension:"2d-array"},this.view=this.getGPUView()}internalCreateSampler(){this.gpuSampler=R.device.createSampler(this)}}class pr{static use=!1;static iesTexture;static ies_list=[];_iesTexture;index=0;constructor(){}generateIES(e){}set IESTexture(e){this._iesTexture=e,e.addressModeU=Pt.repeat,e.addressModeV=Pt.repeat,e.addressModeW=Pt.repeat,pr.ies_list.indexOf(this)==-1&&(this.index=pr.ies_list.length,pr.ies_list.push(this),pr.iesTexture||pr.create(e.width,e.height),pr.iesTexture.addTexture(e))}get IESTexture(){return this._iesTexture}static create(e,t){let r=48;this.iesTexture=new hh(e,t,r)}}class fo{static _globalDataBindGroupLayout;static getGlobalDataBindGroupLayout(){if(this._globalDataBindGroupLayout)return this._globalDataBindGroupLayout;let e=[];return e.push({binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,buffer:{type:"uniform"}}),e.push({binding:1,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}}),this._globalDataBindGroupLayout=R.device.createBindGroupLayout({entries:e}),this._globalDataBindGroupLayout}}class ua{Type=0;Line=0;Colume=0;Literal="";constructor(e=0,t="\0"){this.Type=e,this.Literal=t}isTypeEqual(e){return this.Type==e}isLiteralEqual(e){return this.Literal==e}isBuiltinType(){return this.Type>33&&this.Type<101}isDataType(){return this.Type==1||this.isBuiltinType()}isOperation(){return this.Type>102&&this.Type<127}isAssignOperation(){return this.Type>128&&this.Type<133}get nOperationPriorityLevel(){switch(this.Type){case 26:return 1;case 27:return 1;case 125:return 2;case 110:return 3;case 114:return 3;case 105:return 4;case 106:return 4;case 103:return 5;case 104:return 5;case 115:return 6;case 116:return 6;case 119:return 7;case 120:return 7;case 122:return 7;case 123:return 7;case 121:return 8;case 124:return 8;case 111:return 9;case 113:return 10;case 112:return 11;case 107:return 12;case 109:return 13;case 108:return 14;case 24:return 15;case 126:return 16;case 129:return 16;case 130:return 16;case 131:return 16;case 132:return 16}return 99}}var v=(s=>(s[s.EOF=0]="EOF",s[s.IDENT=1]="IDENT",s[s.VOID=2]="VOID",s[s.CONST=3]="CONST",s[s.LAYOUT=4]="LAYOUT",s[s.PRECISION=5]="PRECISION",s[s.ATTRIBUTE=6]="ATTRIBUTE",s[s.UNIFORM=7]="UNIFORM",s[s.VARYING=8]="VARYING",s[s.INVARIANT=9]="INVARIANT",s[s.IN=10]="IN",s[s.OUT=11]="OUT",s[s.INOUT=12]="INOUT",s[s.IF=13]="IF",s[s.ELSE=14]="ELSE",s[s.FOR=15]="FOR",s[s.WHILE=16]="WHILE",s[s.DO=17]="DO",s[s.BREAK=18]="BREAK",s[s.RETURN=19]="RETURN",s[s.CONTINUE=20]="CONTINUE",s[s.STRUCT=21]="STRUCT",s[s.COMMA=22]="COMMA",s[s.COLON=23]="COLON",s[s.QUEMARK=24]="QUEMARK",s[s.SEMICOLON=25]="SEMICOLON",s[s.LEFTSAMLL=26]="LEFTSAMLL",s[s.RIGHTSAMLL=27]="RIGHTSAMLL",s[s.LEFTMEDI=28]="LEFTMEDI",s[s.RIGHTMEDI=29]="RIGHTMEDI",s[s.LEFTBIG=30]="LEFTBIG",s[s.RIGHTBIG=31]="RIGHTBIG",s[s.LITERAL=32]="LITERAL",s[s.BeginBuiltinType=33]="BeginBuiltinType",s[s.INT=34]="INT",s[s.INT_ARRAY=35]="INT_ARRAY",s[s.UINT=36]="UINT",s[s.UINT_ARRAY=37]="UINT_ARRAY",s[s.BOOL=38]="BOOL",s[s.BOOL_ARRAY=39]="BOOL_ARRAY",s[s.FLOAT=40]="FLOAT",s[s.FLOAT_ARRAY=41]="FLOAT_ARRAY",s[s.DOUBLE=42]="DOUBLE",s[s.DOUBLE_ARRAY=43]="DOUBLE_ARRAY",s[s.VEC2=44]="VEC2",s[s.VEC2_ARRAY=45]="VEC2_ARRAY",s[s.VEC3=46]="VEC3",s[s.VEC3_ARRAY=47]="VEC3_ARRAY",s[s.VEC4=48]="VEC4",s[s.VEC4_ARRAY=49]="VEC4_ARRAY",s[s.BVEC2=50]="BVEC2",s[s.BVEC2_ARRAY=51]="BVEC2_ARRAY",s[s.BVEC3=52]="BVEC3",s[s.BVEC3_ARRAY=53]="BVEC3_ARRAY",s[s.BVEC4=54]="BVEC4",s[s.BVEC4_ARRAY=55]="BVEC4_ARRAY",s[s.IVEC2=56]="IVEC2",s[s.IVEC2_ARRAY=57]="IVEC2_ARRAY",s[s.IVEC3=58]="IVEC3",s[s.IVEC3_ARRAY=59]="IVEC3_ARRAY",s[s.IVEC4=60]="IVEC4",s[s.IVEC4_ARRAY=61]="IVEC4_ARRAY",s[s.UVEC2=62]="UVEC2",s[s.UVEC2_ARRAY=63]="UVEC2_ARRAY",s[s.UVEC3=64]="UVEC3",s[s.UVEC3_ARRAY=65]="UVEC3_ARRAY",s[s.UVEC4=66]="UVEC4",s[s.UVEC4_ARRAY=67]="UVEC4_ARRAY",s[s.MAT2x2=68]="MAT2x2",s[s.MAT2x2_ARRAY=69]="MAT2x2_ARRAY",s[s.MAT2x3=70]="MAT2x3",s[s.MAT2x3_ARRAY=71]="MAT2x3_ARRAY",s[s.MAT2x4=72]="MAT2x4",s[s.MAT2x4_ARRAY=73]="MAT2x4_ARRAY",s[s.MAT3x2=74]="MAT3x2",s[s.MAT3x2_ARRAY=75]="MAT3x2_ARRAY",s[s.MAT3x3=76]="MAT3x3",s[s.MAT3x3_ARRAY=77]="MAT3x3_ARRAY",s[s.MAT3x4=78]="MAT3x4",s[s.MAT3x4_ARRAY=79]="MAT3x4_ARRAY",s[s.MAT4x2=80]="MAT4x2",s[s.MAT4x2_ARRAY=81]="MAT4x2_ARRAY",s[s.MAT4x3=82]="MAT4x3",s[s.MAT4x3_ARRAY=83]="MAT4x3_ARRAY",s[s.MAT4x4=84]="MAT4x4",s[s.MAT4x4_ARRAY=85]="MAT4x4_ARRAY",s[s.SAMPLER=86]="SAMPLER",s[s.SAMPLER_1D=87]="SAMPLER_1D",s[s.SAMPLER_2D=88]="SAMPLER_2D",s[s.SAMPLER_3D=89]="SAMPLER_3D",s[s.SAMPLER_CUBE=90]="SAMPLER_CUBE",s[s.SAMPLER_SHADOW=91]="SAMPLER_SHADOW",s[s.SAMPLER_1D_SHADOW=92]="SAMPLER_1D_SHADOW",s[s.SAMPLER_2D_SHADOW=93]="SAMPLER_2D_SHADOW",s[s.TEXTURE_1D=94]="TEXTURE_1D",s[s.TEXTURE_1D_ARRAY=95]="TEXTURE_1D_ARRAY",s[s.TEXTURE_2D=96]="TEXTURE_2D",s[s.TEXTURE_2D_ARRAY=97]="TEXTURE_2D_ARRAY",s[s.TEXTURE_3D=98]="TEXTURE_3D",s[s.TEXTURE_CUBE=99]="TEXTURE_CUBE",s[s.TEXTURE_CUBE_ARRAY=100]="TEXTURE_CUBE_ARRAY",s[s.EndBuiltinType=101]="EndBuiltinType",s[s.BeginOperation=102]="BeginOperation",s[s.ADD=103]="ADD",s[s.SUB=104]="SUB",s[s.MUL=105]="MUL",s[s.DIV=106]="DIV",s[s.AND=107]="AND",s[s.OR=108]="OR",s[s.XOR=109]="XOR",s[s.NOT=110]="NOT",s[s.BITAND=111]="BITAND",s[s.BITOR=112]="BITOR",s[s.BITXOR=113]="BITXOR",s[s.BITNOT=114]="BITNOT",s[s.BITSHIFT_L=115]="BITSHIFT_L",s[s.BITSHIFT_R=116]="BITSHIFT_R",s[s.INC=117]="INC",s[s.DEC=118]="DEC",s[s.GREATER=119]="GREATER",s[s.GREATEREQUAL=120]="GREATEREQUAL",s[s.EQUAL=121]="EQUAL",s[s.LESS=122]="LESS",s[s.LESSEQUAL=123]="LESSEQUAL",s[s.NOTEQUAL=124]="NOTEQUAL",s[s.DOT=125]="DOT",s[s.ASSIGN=126]="ASSIGN",s[s.EndOperation=127]="EndOperation",s[s.BeginAssignOperation=128]="BeginAssignOperation",s[s.ADDASSIGN=129]="ADDASSIGN",s[s.SUBASSIGN=130]="SUBASSIGN",s[s.MULASSIGN=131]="MULASSIGN",s[s.DIVASSIGN=132]="DIVASSIGN",s[s.EndAssignOperation=133]="EndAssignOperation",s))(v||{});class Yi{_char;_line;_column;_source;_currPosition;_nextPosition;constructor(e){this.reset(e)}reset(e){this._char="",this._line=0,this._column=0,this._source=e,this._currPosition=0,this._nextPosition=0}get source(){return this._source}getChar(){return this._char}get currPosition(){return this._currPosition}peekChar(){return this._nextPosition>=this._source.length?"\0":this._source[this._nextPosition]}readChar(){this._char=this._nextPosition>=this._source.length?"\0":this._source[this._nextPosition],this._char!==`
|
|
5484
|
+
`;static pipelineCache={};static pipeline;static getMipmapPipeline(e){let t=R.device,r=dr.pipelineCache[e.format];if(!r){const i=t.createShaderModule({code:dr.mipmapShader});let a=t.createBindGroupLayout({entries:[{binding:0,visibility:e.visibility,sampler:e.samplerBindingLayout},{binding:1,visibility:e.visibility,texture:e.textureBindingLayout}]}),o=R.device.createPipelineLayout({bindGroupLayouts:[a]});r=t.createRenderPipeline({layout:o,vertex:{module:i,entryPoint:"vertexMain"},fragment:{module:i,entryPoint:"fragmentMain",targets:[{format:e.format}]},primitive:{topology:"triangle-strip",stripIndexFormat:"uint32"}}),dr.pipelineCache[e.format]=r}return r}static webGPUGenerateMipmap(e){let t=R.device,r=e.textureDescriptor,i=dr.getMipmapPipeline(e),a=e.getGPUTexture().createView({baseMipLevel:0,mipLevelCount:1});const o=F.beginCommandEncoder();for(let n=1;n<r.mipLevelCount;++n){const l=e.getGPUTexture().createView({baseMipLevel:n,mipLevelCount:1}),h=o.beginRenderPass({colorAttachments:[{view:l,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"}]});let u=t.createBindGroupLayout({entries:[{binding:0,visibility:e.visibility,sampler:e.samplerBindingLayout},{binding:1,visibility:e.visibility,texture:e.textureBindingLayout}]});const c=t.createBindGroup({layout:u,entries:[{binding:0,resource:e.gpuSampler},{binding:1,resource:a}]});h.setPipeline(i),h.setBindGroup(0,c),h.draw(4),h.end(),a=l}F.endCommandEncoder(o)}static getMipmapCount(e,t){let a=Math.max(e,t);return 1+Math.log2(a)|0}}class $e{name;url;gpuTexture;pid;view;gpuSampler;gpuSampler_comparison;format;usage;width=4;height=4;depthOrArrayLayers=1;numberLayer=1;viewDescriptor;textureDescriptor;visibility=GPUShaderStage.COMPUTE|GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT;textureBindingLayout={viewDimension:"2d",multisampled:!1};samplerBindingLayout={type:"filtering"};sampler_comparisonBindingLayout={type:"comparison"};flipY;isVideoTexture;isHDRTexture;_useMipmap=!1;_sourceImageData;_addressModeU;_addressModeV;_addressModeW;_magFilter;_minFilter;_mipmapFilter;_lodMinClamp;_lodMaxClamp;_compare;_maxAnisotropy;mipmapCount=1;_textureChange=!1;constructor(e=32,t=32,r=1){this.width=e,this.height=t,this.numberLayer=r,this.minFilter=Kr.linear,this.magFilter=Kr.linear,this.mipmapFilter=Kr.linear,this.addressModeU=Pt.repeat,this.addressModeV=Pt.repeat}init(){let e=this;return e.internalCreateBindingLayoutDesc&&e.internalCreateBindingLayoutDesc(),e.internalCreateTexture&&e.internalCreateTexture(),e.internalCreateView&&e.internalCreateView(),e.internalCreateSampler&&e.internalCreateSampler(),this}createTextureDescriptor(e,t,r,i,a=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.STORAGE_BINDING,o=1,n=0){this.width=e,this.height=t,this.format=i,this.usage=a,this.textureDescriptor={size:[e,t,o],mipLevelCount:r,format:i,usage:a,label:`${this.name+this.width+this.height+this.format}`},n>0&&(this.textureDescriptor.sampleCount=n),o>1?this.viewDescriptor={format:i,dimension:"2d-array"}:this.viewDescriptor={format:i,dimension:this.textureBindingLayout.viewDimension,mipLevelCount:r,baseMipLevel:0}}generate(e){let t=32,r=32;"width"in e&&(t=e.width,r=e.height),(t<32||r<32)&&console.log(e.name+"Size must be greater than 32!"),this.width=t,this.height=r,this.createTexture(e)}createTexture(e){this._sourceImageData=e,this.updateTextureDescription(),this.updateGPUTexture();let t=R.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height]),this.useMipmap&&dr.webGPUGenerateMipmap(this)}get useMipmap(){return this._useMipmap}set useMipmap(e){if(e){if(this.samplerBindingLayout.type="filtering",this._useMipmap==!1&&this._sourceImageData){this._useMipmap=!0,this.updateTextureDescription(),this.updateGPUTexture();let t=R.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height]),dr.webGPUGenerateMipmap(this)}}else if(this.samplerBindingLayout.type="non-filtering",this._useMipmap==!0&&this._sourceImageData){this._useMipmap=!1,this.updateTextureDescription(),this.updateGPUTexture();let t=R.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height])}this._textureChange=!0,this._useMipmap=e,this.noticeChange()}get sourceImageData(){return this._sourceImageData}getMipmapCount(){let e=this.width,t=this.height,r=Math.max(e,t);return 1+Math.log2(r)|0}updateTextureDescription(){this.mipmapCount=Math.floor(this.useMipmap?this.getMipmapCount():1),this.createTextureDescriptor(this.width,this.height,this.mipmapCount,this.format)}updateGPUTexture(){this.gpuTexture&&this.gpuTexture instanceof GPUTexture&&this.gpuTexture.destroy(),this.gpuTexture=null,this.view=null,this.gpuTexture=this.getGPUTexture()}getGPUTexture(){return this.gpuTexture||(this.gpuTexture=R.device.createTexture(this.textureDescriptor)),this.gpuTexture}getGPUView(e=0){return this.view||(this.gpuTexture=this.getGPUTexture(),this.gpuTexture instanceof GPUTexture&&(this.view=this.gpuTexture.createView(this.viewDescriptor),this.view.label=this.name)),this.view}_stateChangeRef=new Map;bindStateChange(e,t){this._stateChangeRef.set(t,e)}unBindStateChange(e){this._stateChangeRef.delete(e)}noticeChange(){this.gpuSampler=R.device.createSampler(this),this._stateChangeRef.forEach((e,t)=>{e()})}destroy(e){e&&this.gpuTexture instanceof GPUTexture&&(this.gpuSampler=null,this.gpuSampler_comparison=null,this.textureBindingLayout=null,this.textureDescriptor=null,this.gpuTexture.destroy(),this.gpuTexture=null),this._stateChangeRef.clear()}get addressModeU(){return this._addressModeU}set addressModeU(e){this._addressModeU!=e&&(this._addressModeU=e,this.noticeChange())}get addressModeV(){return this._addressModeV}set addressModeV(e){this._addressModeV!=e&&(this._addressModeV=e,this.noticeChange())}get addressModeW(){return this._addressModeW}set addressModeW(e){this._addressModeW!=e&&(this._addressModeW=e,this.noticeChange())}get magFilter(){return this._magFilter}set magFilter(e){this._magFilter!=e&&(this._magFilter=e,this.noticeChange())}get minFilter(){return this._minFilter}set minFilter(e){this._minFilter!=e&&(this._minFilter=e,this.noticeChange())}get mipmapFilter(){return this._mipmapFilter}set mipmapFilter(e){this._mipmapFilter!=e&&(this._mipmapFilter=e,this.noticeChange())}get lodMinClamp(){return this._lodMinClamp}set lodMinClamp(e){this._lodMinClamp!=e&&(this._lodMinClamp=e,this.noticeChange())}get lodMaxClamp(){return this._lodMaxClamp}set lodMaxClamp(e){this._lodMaxClamp!=e&&(this._lodMaxClamp=e,this.noticeChange())}get compare(){return this._compare}set compare(e){this._compare!=e&&(this._compare=e,this.noticeChange())}get maxAnisotropy(){return this._maxAnisotropy}set maxAnisotropy(e){this._maxAnisotropy!=e&&(this._maxAnisotropy=e,this.noticeChange())}static _texs=[];static delayDestroyTexture(e){this._texs.includes(e)||this._texs.push(e)}static destroyTexture(){if(this._texs.length>0)for(;this._texs.length>0;)this._texs.shift().destroy()}}class hh extends $e{_bitmapTextures;constructor(e,t,r){super(e,t,r),this.format=X.rgba8unorm,this.mipmapCount=1,this._bitmapTextures=[],this.init()}setTextures(e){this._bitmapTextures.length=0;for(let t=0;t<e.length;t++){const r=e[t];this.addTexture(r)}}addTexture(e){(e.width!=this.width||e.height!=this.height)&&console.error("bitmap texture must match bitmapTextureArray size!"),e.pid=this._bitmapTextures.length,this._bitmapTextures.push(e),this.updateTexture()}removeTexture(e){let t=this._bitmapTextures.indexOf(e);if(t!=-1){this._bitmapTextures.splice(t,1);for(let r=0;r<this._bitmapTextures.length;r++){const i=this._bitmapTextures[r];i.pid=r}}}updateTexture(){let e=F.beginCommandEncoder();for(let t=0;t<this._bitmapTextures.length;t++){let r=this._bitmapTextures[t];e.copyTextureToTexture({texture:r.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:this.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:t}},{width:this.width,height:this.height,depthOrArrayLayers:1})}F.endCommandEncoder(e)}internalCreateBindingLayoutDesc(){this.textureBindingLayout.viewDimension="2d-array",this.samplerBindingLayout.type="filtering",this.minFilter=Kr.linear,this.magFilter=Kr.linear}internalCreateTexture(){this.textureDescriptor={format:this.format,size:{width:this.width,height:this.height,depthOrArrayLayers:this.numberLayer},dimension:"2d",usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING},this.gpuTexture=this.getGPUTexture()}internalCreateView(){this.viewDescriptor={dimension:"2d-array"},this.view=this.getGPUView()}internalCreateSampler(){this.gpuSampler=R.device.createSampler(this)}}class gr{static use=!1;static iesTexture;static ies_list=[];_iesTexture;index=0;constructor(){}generateIES(e){}set IESTexture(e){this._iesTexture=e,e.addressModeU=Pt.repeat,e.addressModeV=Pt.repeat,e.addressModeW=Pt.repeat,gr.ies_list.indexOf(this)==-1&&(this.index=gr.ies_list.length,gr.ies_list.push(this),gr.iesTexture||gr.create(e.width,e.height),gr.iesTexture.addTexture(e))}get IESTexture(){return this._iesTexture}static create(e,t){let r=48;this.iesTexture=new hh(e,t,r)}}class fo{static _globalDataBindGroupLayout;static getGlobalDataBindGroupLayout(){if(this._globalDataBindGroupLayout)return this._globalDataBindGroupLayout;let e=[];return e.push({binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,buffer:{type:"uniform"}}),e.push({binding:1,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}}),this._globalDataBindGroupLayout=R.device.createBindGroupLayout({entries:e}),this._globalDataBindGroupLayout}}class ua{Type=0;Line=0;Colume=0;Literal="";constructor(e=0,t="\0"){this.Type=e,this.Literal=t}isTypeEqual(e){return this.Type==e}isLiteralEqual(e){return this.Literal==e}isBuiltinType(){return this.Type>33&&this.Type<101}isDataType(){return this.Type==1||this.isBuiltinType()}isOperation(){return this.Type>102&&this.Type<127}isAssignOperation(){return this.Type>128&&this.Type<133}get nOperationPriorityLevel(){switch(this.Type){case 26:return 1;case 27:return 1;case 125:return 2;case 110:return 3;case 114:return 3;case 105:return 4;case 106:return 4;case 103:return 5;case 104:return 5;case 115:return 6;case 116:return 6;case 119:return 7;case 120:return 7;case 122:return 7;case 123:return 7;case 121:return 8;case 124:return 8;case 111:return 9;case 113:return 10;case 112:return 11;case 107:return 12;case 109:return 13;case 108:return 14;case 24:return 15;case 126:return 16;case 129:return 16;case 130:return 16;case 131:return 16;case 132:return 16}return 99}}var v=(s=>(s[s.EOF=0]="EOF",s[s.IDENT=1]="IDENT",s[s.VOID=2]="VOID",s[s.CONST=3]="CONST",s[s.LAYOUT=4]="LAYOUT",s[s.PRECISION=5]="PRECISION",s[s.ATTRIBUTE=6]="ATTRIBUTE",s[s.UNIFORM=7]="UNIFORM",s[s.VARYING=8]="VARYING",s[s.INVARIANT=9]="INVARIANT",s[s.IN=10]="IN",s[s.OUT=11]="OUT",s[s.INOUT=12]="INOUT",s[s.IF=13]="IF",s[s.ELSE=14]="ELSE",s[s.FOR=15]="FOR",s[s.WHILE=16]="WHILE",s[s.DO=17]="DO",s[s.BREAK=18]="BREAK",s[s.RETURN=19]="RETURN",s[s.CONTINUE=20]="CONTINUE",s[s.STRUCT=21]="STRUCT",s[s.COMMA=22]="COMMA",s[s.COLON=23]="COLON",s[s.QUEMARK=24]="QUEMARK",s[s.SEMICOLON=25]="SEMICOLON",s[s.LEFTSAMLL=26]="LEFTSAMLL",s[s.RIGHTSAMLL=27]="RIGHTSAMLL",s[s.LEFTMEDI=28]="LEFTMEDI",s[s.RIGHTMEDI=29]="RIGHTMEDI",s[s.LEFTBIG=30]="LEFTBIG",s[s.RIGHTBIG=31]="RIGHTBIG",s[s.LITERAL=32]="LITERAL",s[s.BeginBuiltinType=33]="BeginBuiltinType",s[s.INT=34]="INT",s[s.INT_ARRAY=35]="INT_ARRAY",s[s.UINT=36]="UINT",s[s.UINT_ARRAY=37]="UINT_ARRAY",s[s.BOOL=38]="BOOL",s[s.BOOL_ARRAY=39]="BOOL_ARRAY",s[s.FLOAT=40]="FLOAT",s[s.FLOAT_ARRAY=41]="FLOAT_ARRAY",s[s.DOUBLE=42]="DOUBLE",s[s.DOUBLE_ARRAY=43]="DOUBLE_ARRAY",s[s.VEC2=44]="VEC2",s[s.VEC2_ARRAY=45]="VEC2_ARRAY",s[s.VEC3=46]="VEC3",s[s.VEC3_ARRAY=47]="VEC3_ARRAY",s[s.VEC4=48]="VEC4",s[s.VEC4_ARRAY=49]="VEC4_ARRAY",s[s.BVEC2=50]="BVEC2",s[s.BVEC2_ARRAY=51]="BVEC2_ARRAY",s[s.BVEC3=52]="BVEC3",s[s.BVEC3_ARRAY=53]="BVEC3_ARRAY",s[s.BVEC4=54]="BVEC4",s[s.BVEC4_ARRAY=55]="BVEC4_ARRAY",s[s.IVEC2=56]="IVEC2",s[s.IVEC2_ARRAY=57]="IVEC2_ARRAY",s[s.IVEC3=58]="IVEC3",s[s.IVEC3_ARRAY=59]="IVEC3_ARRAY",s[s.IVEC4=60]="IVEC4",s[s.IVEC4_ARRAY=61]="IVEC4_ARRAY",s[s.UVEC2=62]="UVEC2",s[s.UVEC2_ARRAY=63]="UVEC2_ARRAY",s[s.UVEC3=64]="UVEC3",s[s.UVEC3_ARRAY=65]="UVEC3_ARRAY",s[s.UVEC4=66]="UVEC4",s[s.UVEC4_ARRAY=67]="UVEC4_ARRAY",s[s.MAT2x2=68]="MAT2x2",s[s.MAT2x2_ARRAY=69]="MAT2x2_ARRAY",s[s.MAT2x3=70]="MAT2x3",s[s.MAT2x3_ARRAY=71]="MAT2x3_ARRAY",s[s.MAT2x4=72]="MAT2x4",s[s.MAT2x4_ARRAY=73]="MAT2x4_ARRAY",s[s.MAT3x2=74]="MAT3x2",s[s.MAT3x2_ARRAY=75]="MAT3x2_ARRAY",s[s.MAT3x3=76]="MAT3x3",s[s.MAT3x3_ARRAY=77]="MAT3x3_ARRAY",s[s.MAT3x4=78]="MAT3x4",s[s.MAT3x4_ARRAY=79]="MAT3x4_ARRAY",s[s.MAT4x2=80]="MAT4x2",s[s.MAT4x2_ARRAY=81]="MAT4x2_ARRAY",s[s.MAT4x3=82]="MAT4x3",s[s.MAT4x3_ARRAY=83]="MAT4x3_ARRAY",s[s.MAT4x4=84]="MAT4x4",s[s.MAT4x4_ARRAY=85]="MAT4x4_ARRAY",s[s.SAMPLER=86]="SAMPLER",s[s.SAMPLER_1D=87]="SAMPLER_1D",s[s.SAMPLER_2D=88]="SAMPLER_2D",s[s.SAMPLER_3D=89]="SAMPLER_3D",s[s.SAMPLER_CUBE=90]="SAMPLER_CUBE",s[s.SAMPLER_SHADOW=91]="SAMPLER_SHADOW",s[s.SAMPLER_1D_SHADOW=92]="SAMPLER_1D_SHADOW",s[s.SAMPLER_2D_SHADOW=93]="SAMPLER_2D_SHADOW",s[s.TEXTURE_1D=94]="TEXTURE_1D",s[s.TEXTURE_1D_ARRAY=95]="TEXTURE_1D_ARRAY",s[s.TEXTURE_2D=96]="TEXTURE_2D",s[s.TEXTURE_2D_ARRAY=97]="TEXTURE_2D_ARRAY",s[s.TEXTURE_3D=98]="TEXTURE_3D",s[s.TEXTURE_CUBE=99]="TEXTURE_CUBE",s[s.TEXTURE_CUBE_ARRAY=100]="TEXTURE_CUBE_ARRAY",s[s.EndBuiltinType=101]="EndBuiltinType",s[s.BeginOperation=102]="BeginOperation",s[s.ADD=103]="ADD",s[s.SUB=104]="SUB",s[s.MUL=105]="MUL",s[s.DIV=106]="DIV",s[s.AND=107]="AND",s[s.OR=108]="OR",s[s.XOR=109]="XOR",s[s.NOT=110]="NOT",s[s.BITAND=111]="BITAND",s[s.BITOR=112]="BITOR",s[s.BITXOR=113]="BITXOR",s[s.BITNOT=114]="BITNOT",s[s.BITSHIFT_L=115]="BITSHIFT_L",s[s.BITSHIFT_R=116]="BITSHIFT_R",s[s.INC=117]="INC",s[s.DEC=118]="DEC",s[s.GREATER=119]="GREATER",s[s.GREATEREQUAL=120]="GREATEREQUAL",s[s.EQUAL=121]="EQUAL",s[s.LESS=122]="LESS",s[s.LESSEQUAL=123]="LESSEQUAL",s[s.NOTEQUAL=124]="NOTEQUAL",s[s.DOT=125]="DOT",s[s.ASSIGN=126]="ASSIGN",s[s.EndOperation=127]="EndOperation",s[s.BeginAssignOperation=128]="BeginAssignOperation",s[s.ADDASSIGN=129]="ADDASSIGN",s[s.SUBASSIGN=130]="SUBASSIGN",s[s.MULASSIGN=131]="MULASSIGN",s[s.DIVASSIGN=132]="DIVASSIGN",s[s.EndAssignOperation=133]="EndAssignOperation",s))(v||{});class Yi{_char;_line;_column;_source;_currPosition;_nextPosition;constructor(e){this.reset(e)}reset(e){this._char="",this._line=0,this._column=0,this._source=e,this._currPosition=0,this._nextPosition=0}get source(){return this._source}getChar(){return this._char}get currPosition(){return this._currPosition}peekChar(){return this._nextPosition>=this._source.length?"\0":this._source[this._nextPosition]}readChar(){this._char=this._nextPosition>=this._source.length?"\0":this._source[this._nextPosition],this._char!==`
|
|
5485
5485
|
`?this._column++:(this._line++,this._column=0),this._currPosition=this._nextPosition,this._nextPosition++}readCharAndSkipWhitespace(){this.readChar(),this.skipWhitespace()}readIdentifier(){for(var e=this._currPosition;this.isIdentifier(this._char);)this.readChar();return this._source.substring(e,this._currPosition)}isIdentifier(e){var t=e.charCodeAt(0);return 97<=t&&t<=122||65<=t&&t<=90||48<=t&&t<=57||t==95}skipWhitespace(){for(;this.IsWhitespace(this._char);)this.readChar()}IsWhitespace(e){return e===" "||e===" "||e==="\r"||e===`
|
|
5486
5486
|
`}skipComment(){for(;this._char!==`
|
|
5487
5487
|
`&&this._char!=="\0";)this.readChar();this.skipWhitespace()}skipMultilineComment(){if(!(this._char!=="/"&&this.peekChar()!=="*")){this.readChar(),this.readChar();for(let e=1;e>0&&this._char!=="\0";)if(this.readChar(),this._char==="/"&&this.peekChar()==="*"){e++,this.readChar();continue}else if(this._char==="*"&&this.peekChar()==="/"){e--,this.readChar();continue}this.readChar(),this.readChar(),this.skipWhitespace()}}isDigit(e){var t=e.charCodeAt(0);return 48<=t&&t<=57}readNumber(){for(var e=this._currPosition;this.isDigit(this._char);)this.readChar();if(this._char===".")for(this.readChar();this.isDigit(this._char);)this.readChar();return this._source.substring(e,this._currPosition)}readValue(){return this.isDigit(this._char)?this.readNumber():this.readIdentifier()}readLine(){var e=this._currPosition,t=this._source.indexOf(`
|
|
@@ -5531,7 +5531,7 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
5531
5531
|
`,r}}class de extends _e{constructor(){super()}static parse(e){let t=new Array,r=new Array,i=0;for(;e.peekToken(0).Type!=v.EOF;){let a=e.peekToken(0);if(a.Type==v.SEMICOLON||a.Type==v.RIGHTMEDI||a.Type==v.COMMA||a.Type==v.COLON||a.Type==v.RIGHTBIG)break;if(a.isOperation()){if(a.isOperation()){if(a.Type==v.INC||a.Type==v.DEC){let o=a;e.skipToken(1);let n=de.parse(e);r.push(new Xi(o,void 0,n));continue}else if(t.length>0){if(t[t.length-1].nOperationPriorityLevel<=a.nOperationPriorityLevel)de.unionOperation(t,r);else if(t.length>0&&t[t.length-1].Literal=="-"){let n=t.pop(),l=r.pop();r.push(new Xi(n,void 0,l))}}t.push(a),e.skipToken(1)}}else if(a.Type==v.LITERAL){r.push(new Pr(a.Literal)),e.skipToken(1);continue}else if(a.Type==v.LEFTSAMLL){i++,t.push(a),e.skipToken(1);continue}else if(a.Type==v.RIGHTSAMLL){if(i<=0)break;for(i--;de.unionOperation(t,r););if(t[t.length-1].Type==v.LEFTSAMLL){t.pop();let o=new dh;o.addNode(r.pop()),r.push(o)}e.skipToken(1);continue}else if(a.Type==v.IDENT){if(e.peekToken(1).Type==v.INC||e.peekToken(1).Type==v.DEC){let o=e.peekToken(1),n=new Tr(a.Literal);r.push(new Xi(o,n,void 0)),e.skipToken(2);continue}else if(e.peekToken(1).Type==v.LEFTSAMLL){r.push(Mi.parse(e));continue}else if(e.peekToken(1).Type==v.DOT){r.push(Oa.parse(e));continue}else if(e.peekToken(1).Type==v.LEFTMEDI){r.push(Pi.parse(e));continue}r.push(new Tr(a.Literal)),e.skipToken(1);continue}else{if(a.isBuiltinType()&&e.peekToken(1).Type==v.LEFTSAMLL){r.push(Mi.parse(e));continue}if(a.isAssignOperation()){let o=a;e.skipToken(1);let n=r.pop(),l=de.parse(e);r.push(new $r(o,n,l));continue}if(a.Type==v.LEFTBIG&&(e.peekToken(1).Type==v.LITERAL||e.peekToken(1).Type==v.SUB&&e.peekToken(2).Type==v.LITERAL)){r.push(Ka.parse(e));continue}if(a.Type==v.QUEMARK){t.length>0&&t[t.length-1].nOperationPriorityLevel<=a.nOperationPriorityLevel&&de.unionOperation(t,r),e.skipToken(1);let o=r.pop(),n=de.parse(e);e.peekToken(0).Type==v.COLON&&e.skipToken(1);let l=de.parse(e);if(r.push(new gh(o,n,l)),e.peekToken(-1).Type==v.SEMICOLON)break;continue}if(a.Type==v.LEFTMEDI){e.skipToken(1);let o=de.parse(e);e.peekToken(0).Type==v.RIGHTMEDI&&e.skipToken(1);let n=r.pop();r.push(new Pi(n,o));continue}throw"An unexpected character"}}for(;t.length>0&&de.unionOperation(t,r););if(t.length<=0&&r.length==1){let a=new de;return a.addNode(r.pop()),a}throw"Error parsing expression: Unexpected character("+e.peekToken(0).Literal+")"}formatToWGSL(e,t){return this.nodes[0].formatToWGSL(e,t)}static unionOperation(e,t){if(e.length<0||t.length<2){if(e.length>0&&e[e.length-1].Literal=="-"){let r=e.pop(),i=t.pop();return t.push(new Xi(r,void 0,i)),!0}return!1}if(e[e.length-1].isOperation()){let r=t.pop(),i=e.pop(),a=t.pop();return i.Type==v.DOT?t.push(new Oa(a,r)):t.push(new $r(i,a,r)),!0}return!1}}class dh extends _e{constructor(){super()}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+"("+this.nodes[0].formatToWGSL(e,0)+")"}}class Tr extends _e{name;constructor(e){super(),this.name=e}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+e.findIdentifier(this.name)}}class Pr extends _e{value;constructor(e){super(),this.value=e}static parse(e){let t=e.peekToken(0);if(t.Type==v.SUB&&e.peekToken(1).Type==v.LITERAL){let r=new Pr("-"+e.peekToken(1).Literal);return e.skipToken(2),r}else if(t.Type==v.LITERAL){let r=new Pr(t.Literal);return e.skipToken(1),r}throw"Error parsing literal constants: Unexpected characters("+t.Literal+")"}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+this.value}}class Ka extends Pr{arrayValue;constructor(e){super(""),this.arrayValue=e}static parse(e){if(e.peekToken(0).Type==v.LEFTBIG&&e.peekToken(1).Type==v.LITERAL||e.peekToken(0).Type==v.LEFTBIG&&e.peekToken(1).Type==v.SUB&&e.peekToken(2).Type==v.LITERAL){e.skipToken(1);let t=[];for(;e.peekToken(0).Type!=v.RIGHTBIG;){if(e.peekToken(0).Type==v.LEFTSAMLL){t.push(Ka.parse(e));continue}if(t.push(Pr.parse(e)),e.peekToken(0).Type==v.COMMA){e.skipToken(1);continue}else if(e.peekToken(0).Type==v.RIGHTBIG){e.skipToken(1);break}else throw"Error parsing array constants: Unexpected characters"}return new Ka(t)}throw"Error parsing array constants: Unexpected characters"}formatToWGSL(e,t){let r="",i=t<=0?"":" ".repeat(t);this.arrayValue[0].value.includes(".")?r+=i+"array<f32, "+this.arrayValue.length.toString()+">(":r+=i+"array<i32, "+this.arrayValue.length.toString()+">(";for(let a=0;a<this.arrayValue.length;a++)a>0&&(r+=", "),r+=this.arrayValue[a].formatToWGSL(e,0);return r+=")",r}}class wg extends _e{constructor(){super()}}class Tg extends _e{constructor(){super()}}class Ms extends _e{constructor(){super()}static parse(e){if(e.peekToken(0).Type==v.CONTINUE&&e.peekToken(1).Type==v.SEMICOLON)return e.skipToken(2),new Ms;throw"Error parsing continue: Unexpected character"}formatToWGSL(e,t){let r="",i=t<=0?"":" ".repeat(t);return r+=i+"continue",r}}class La extends _e{value;constructor(e){super(),this.value=e}static parse(e){if(e.peekToken(0).Type==v.RETURN){e.skipToken(1);let t=de.parse(e);return e.peekToken(0).Type==v.SEMICOLON&&e.skipToken(1),new La(t)}throw"Error parsing return expression: Unexpected character"}formatToWGSL(e,t){let r="",i=t<=0?"":" ".repeat(t);return r+=i+"return "+this.value.formatToWGSL(e,0),r}}class Xi extends _e{op;leftValue;rightValue;constructor(e,t,r){super(),this.op=e,this.leftValue=t,this.rightValue=r}formatToWGSL(e,t){let r="",i=t<=0?"":" ".repeat(t);if(this.op.Literal=="++"||this.op.Literal=="--")if(this.leftValue!=null){let a=this.leftValue.formatToWGSL(e,0);r+=i+a+" = "+a+" "+this.op.Literal[0]+" 1"}else{let a=this.rightValue.formatToWGSL(e,0);r+=i+a+" = "+a+" "+this.op.Literal[0]+" 1"}else this.leftValue!=null?r+=i+this.leftValue.formatToWGSL(e,0)+this.op.Literal:r+=i+this.op.Literal+this.rightValue.formatToWGSL(e,0);return r}}class $r extends _e{op;leftValue;rightValue;constructor(e,t,r){super(),this.op=e,this.leftValue=t,this.rightValue=r}formatToWGSL(e,t){let r="",i=t<=0?"":" ".repeat(t);return r+=i+this.leftValue.formatToWGSL(e,0)+" "+this.op.Literal+" "+this.rightValue.formatToWGSL(e,0),r}}class gh extends _e{condition;expression1;expression2;constructor(e,t,r){super(),this.condition=e,this.expression1=t,this.expression2=r}static parse(e){throw"Error parsing ternary operation expression: Unexpected character"}formatToWGSL(e,t){return""}}class Oa extends _e{leftValue;rightValue;constructor(e,t){super(),this.leftValue=e,this.rightValue=t}static parse(e){if(e.peekToken(0).Type==v.IDENT&&e.peekToken(1).Type==v.DOT&&e.peekToken(2).Type==v.IDENT){let t=new Tr(e.peekToken(0).Literal),r=new Tr(e.peekToken(2).Literal);return e.skipToken(3),new Oa(t,r)}throw"Error parsing selection expression: Unexpected character"}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+this.leftValue.formatToWGSL(e,0)+"."+this.rightValue.formatToWGSL(e,0)}}class Pi extends _e{leftValue;indexValue;constructor(e,t){super(),this.leftValue=e,this.indexValue=t}static parse(e){if(e.peekToken(0).Type==v.IDENT&&e.peekToken(1).Type==v.LEFTMEDI){let t=new Tr(e.peekToken(0).Literal);e.skipToken(2);let r=de.parse(e);e.peekToken(0).Type==v.RIGHTMEDI&&e.skipToken(1);let i=new Pi(t,r);for(;e.peekToken(0).Type==v.LEFTMEDI;)e.skipToken(1),r=de.parse(e),e.peekToken(0).Type==v.RIGHTMEDI&&e.skipToken(1),i=new Pi(i,r);return i}throw"Error parsing index expression: Unexpected character"}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+this.leftValue.formatToWGSL(e,0)+"["+this.indexValue.formatToWGSL(e,0)+"]"}}class hr extends _e{constructor(){super()}static parse(e){if(e.peekToken(0).Type==v.LEFTBIG){e.skipToken(1);let t=new hr;for(let r=1;r>0&&e.peekToken(0).Type!=v.EOF;){let i=e.peekToken(0);if(i.Type==v.LEFTBIG){r++,e.skipToken(1);continue}if(i.Type==v.RIGHTBIG){r--,e.skipToken(1);continue}if(i.Type==v.SEMICOLON){e.skipToken(1);continue}if(i.isDataType()&&e.peekToken(1).Type==v.IDENT){t.addNode(ze.parse(e));continue}if(i.Type==v.CONST&&e.peekToken(1).isDataType()&&e.peekToken(2).Type==v.IDENT){t.addNode(ze.parse(e));continue}else if(i.Type==v.IDENT&&e.peekToken(1).Type==v.ASSIGN){t.addNode(de.parse(e)),e.peekToken(0).Type==v.SEMICOLON&&e.skipToken(1);continue}else if(i.Type==v.IDENT&&e.peekToken(1).Type==v.LEFTMEDI){let a=Pi.parse(e);if(e.peekToken(0).Type==v.ASSIGN){let o=e.peekToken(0);e.skipToken(1);let n=de.parse(e);e.peekToken(0).Type==v.RIGHTMEDI&&e.skipToken(1),t.addNode(new $r(o,a,n));continue}t.addNode(a);continue}else if(i.Type==v.IDENT&&e.peekToken(1).Type==v.DOT){let a=de.parse(e);t.addNode(a);continue}else if(i.Type==v.IDENT&&e.peekToken(1).isAssignOperation()){let a=e.peekToken(1),o=new Tr(i.Literal);e.skipToken(2);let n=de.parse(e);e.peekToken(0).Type==v.SEMICOLON&&e.skipToken(1),t.addNode(new $r(a,o,n));continue}else if(i.Type==v.IDENT&&(e.peekToken(1).Type==v.INC||e.peekToken(1).Type==v.DEC)&&e.peekToken(2).Type==v.SEMICOLON){let a=e.peekToken(1);t.addNode(new Xi(a,new Tr(i.Literal),void 0)),e.skipToken(3);continue}else if(i.Type==v.RETURN){t.addNode(La.parse(e));continue}else if(i.Type==v.CONTINUE){t.addNode(Ms.parse(e));continue}else if(i.Type==v.WHILE){t.addNode(Vi.parse(e));continue}else if(i.Type==v.FOR){t.addNode(Ni.parse(e));continue}else if(i.Type==v.IF){t.addNode(wi.parse(e));continue}else if(i.Type==v.IDENT&&e.peekToken(1).Type==v.LEFTSAMLL){t.addNode(Mi.parse(e)),e.peekToken(0).Type==v.SEMICOLON&&e.skipToken(0);continue}throw"Error parsing block: Unexpected symbol("+i.Literal+")"}return t}throw"Error parsing block: Unexpected symbol"}}class Ns extends _e{type;qualifier;constructor(e,t){super(),this.type=t,this.qualifier=e}static parse(e){if(e.peekToken(0).Type==v.PRECISION&&e.peekToken(1).Type==v.IDENT&&e.peekToken(2).isBuiltinType()){let t=new Ns(e.peekToken(1).Literal,e.peekToken(2).Literal);return e.skipToken(3),e.peekToken(0).Type==v.SEMICOLON&&e.skipToken(1),t}throw"Error parsing precision qualifier: Unexpected character"}formatToWGSL(e,t){return""}}class za extends _e{scope="";qualifier=new Map;constructor(){super()}addQualifier(e,t=""){this.qualifier.set(e,t)}static parse(e){if(e.peekToken(0).Type==v.LAYOUT&&e.peekToken(1).Type==v.LEFTSAMLL){let t=new za;e.skipToken(2);do if(e.peekToken(0).Type==v.IDENT){if(e.peekToken(1).Type==v.ASSIGN&&e.peekToken(2).Type==v.LITERAL){let i=e.peekToken(0).Literal,a=e.peekToken(2).Literal;if(t.addQualifier(i,a),e.skipToken(3),e.peekToken(0).Type==v.COMMA){e.skipToken(1);continue}let o=e.peekToken(0);o.Line=0}else if(e.peekToken(1).Type==v.RIGHTSAMLL){let i=e.peekToken(0).Literal;t.addQualifier(i,""),e.skipToken(1);break}else if(e.peekToken(1).Type==v.COMMA){let i=e.peekToken(0).Literal;t.addQualifier(i,""),e.skipToken(2);continue}}while(e.peekToken(0).Type!=v.RIGHTSAMLL);if(e.peekToken(0).Type==v.RIGHTSAMLL&&e.skipToken(1),t.scope=e.peekToken(0).Literal,e.skipToken(1),e.peekToken(0).Type==v.SEMICOLON)return e.skipToken(1),t;if(e.peekToken(0).isBuiltinType()&&e.peekToken(1).Type==v.IDENT&&e.peekToken(2).Type==v.SEMICOLON){let r=new ze(e.peekToken(0).Literal,e.peekToken(1).Literal);return t.addNode(r),e.skipToken(3),t}else if(e.peekToken(0).Type==v.IDENT&&e.peekToken(1).Type==v.LEFTBIG){let r=Vr.parse(e);return t.addNode(r),e.peekToken(0).Type==v.IDENT&&e.peekToken(1).Type==v.SEMICOLON&&(r.addNode(new ze(r.name,e.peekToken(0).Literal)),e.skipToken(2)),t}else throw"Error parsing layout qualifier type: Unexpected symbol("+e.peekToken(0).Literal+")"}throw"Error parsing layout qualifier: Unexpected symbol"}formatToWGSL(e,t){let r="";if(this.qualifier.size==1&&this.qualifier.has("location"))r+="@location("+this.qualifier.get("location")+") ";else if(this.qualifier.size==2&&this.qualifier.has("set")&&this.qualifier.has("binding"))r+="@group("+this.qualifier.get("set")+") @binding("+this.qualifier.get("binding")+") ";else if(this.qualifier.size>=1&&this.qualifier.has("binding"))r+="@group(0) @binding("+this.qualifier.get("binding")+") ";else if(this.qualifier.size==1&&this.qualifier.has("push_constant"))r+="@push_constant ";else if(this.qualifier.size>=1&&this.qualifier.has("local_size_x"))r+="@workgroup_size(",r+=this.qualifier.get("local_size_x")+", ",r+=this.qualifier.has("local_size_y")?this.qualifier.get("local_size_y")+", ":"1, ",r+=this.qualifier.has("local_size_z")?this.qualifier.get("local_size_z")+"":"1",r+=")";else if(this.nodes.length<=0)return"";let i=this.nodes[0];if(i instanceof ze){switch(i.type){case"sampler":case"texture2D":r+="var ";break;default:this.scope=="buffer"?e.stage=="compute"?r+="var<storage, read_write> ":r+="var<storage, read> ":r+="var<"+this.scope+"> ";break}e.addIdentifier(i.name,i.name),r+=i.name+": "+Xt(i.type)+`;\r
|
|
5532
5532
|
`}else if(i instanceof Vr){if(this.scope=="buffer"?e.stage=="compute"?r+="var<storage, read_write> ":r+="var<storage, read> ":r+="var<"+this.scope+"> ",i.nodes.length<=0){let a="unif"+e.layoutUniformCount.toString();for(;e.hasIdentifier(a);)e.layoutUniformCount++,a="unif"+e.layoutUniformCount.toString();for(let o of i.fields)e.addIdentifier(o.name,a+"."+o.name);r+=a+": "+i.name+`;\r
|
|
5533
5533
|
`,e.layoutUniformCount++}else{let a=i.nodes[0];r+=a.name+": "+a.type+`;\r
|
|
5534
|
-
`}return r}return r}}function Xt(s){switch(s){case"int":return"i32";case"int[]":return"array<i32>";case"uint":return"u32";case"uint[]":return"array<u32>";case"float":return"f32";case"float[]":return"array<f32>";case"vec2":return"vec2<f32>";case"vec3":return"vec3<f32>";case"vec4":return"vec4<f32>";case"vec2[]":return"array<vec2<f32>>";case"vec3[]":return"array<vec3<f32>>";case"vec4[]":return"array<vec4<f32>>";case"ivec2":return"vec2<i32>";case"ivec3":return"vec3<i32>";case"ivec4":return"vec4<i32>";case"ivec2[]":return"array<vec2<i32>>";case"ivec3[]":return"array<vec3<i32>>";case"ivec4[]":return"array<vec4<i32>>";case"mat2":return"mat2x2<f32>";case"mat2x2":return"mat2x2<f32>";case"mat2x3":return"mat2x3<f32>";case"mat2x4":return"mat2x4<f32>";case"mat2[]":return"array<mat2x2<f32>>";case"mat2x2[]":return"array<mat2x2<f32>>";case"mat2x3[]":return"array<mat2x3<f32>>";case"mat2x4[]":return"array<mat2x4<f32>>";case"mat3":return"mat3x3<f32>";case"mat3x2":return"mat3x2<f32>";case"mat3x3":return"mat3x3<f32>";case"mat3x4":return"mat3x4<f32>";case"mat3[]":return"array<mat3x3<f32>>";case"mat3x2[]":return"array<mat3x2<f32>>";case"mat3x3[]":return"array<mat3x3<f32>>";case"mat3x4[]":return"array<mat3x4<f32>>";case"mat4":return"mat4x4<f32>";case"mat4x2":return"mat4x2<f32>";case"mat4x3":return"mat4x3<f32>";case"mat4x4":return"mat4x4<f32>";case"mat4[]":return"array<mat4x4<f32>>";case"mat4x2[]":return"array<mat4x2<f32>>";case"mat4x3[]":return"array<mat4x3<f32>>";case"mat4x4[]":return"array<mat4x4<f32>>";case"texture2D":return"texture_2d<f32>"}return s}class ph{_lexer;_rootNode;constructor(e){this._lexer=e,this._rootNode=new _e,this.parse()}get lexer(){return this._lexer}parse(){for(;this.peekToken(0).Type!==v.EOF;){if(this.peekToken(0).Type==v.SEMICOLON){this.skipToken(1);continue}let e=this.parseStatement();e!==null&&this._rootNode.addNode(e)}}parseStatement(){let e=this.peekToken();if(e.Type==v.LAYOUT&&this.peekToken(1).Type==v.LEFTSAMLL)return za.parse(this._lexer);if(e.Type==v.STRUCT)return this.skipToken(1),Vr.parse(this._lexer);if((e.isBuiltinType()||e.Type==v.VOID)&&this.peekToken(1).Type==v.IDENT&&this.peekToken(2).Type==v.LEFTSAMLL)return Ts.parse(this._lexer);if(e.Type==v.CONST&&this.peekToken(1).isDataType())return ze.parse(this._lexer);if(e.isDataType()&&this.peekToken(1).Type==v.IDENT)return ze.parse(this._lexer);if(e.Type==v.OUT&&this.peekToken(1).isDataType()&&this.peekToken(2).Type==v.IDENT)return ze.parse(this._lexer);if(e.Type==v.PRECISION)return Ns.parse(this._lexer);throw"Error parsing statement: Unexpected character"}skipToken(e){this._lexer.skipToken(e)}peekToken(e=0){return this._lexer.peekToken(e)}getNextToken(){return this._lexer.GetNextToken()}get ASTRoot(){return this._rootNode}}class mh{static VertexShader="VertexShader";static FragmentShader="FragmentShader";static convertGLSL(e){var t=new ch(e),r=new uh(t),i=new ph(r),a=new fh(i);return a.generateWGSL()}}class po{setID=0;bindingID=0;name="";type=""}class mo{name="";type="";locationID=0;builtinName="";isBuiltinAttribute(){return this.builtinName!=""}}class Ah{uniformInfo=[];inputAttribute=[];outputAttribute=[];sourceCode=""}var ar=(s=>(s[s.vertex=0]="vertex",s[s.fragment=1]="fragment",s[s.computer=2]="computer",s))(ar||{});class Uh{blendMode=ae.NONE;depthCompare=rt.less_equal;depthWriteEnabled=!0;frontFace="ccw";cullMode=Jt.back;topology=qs.triangle_list;depthBias=10;useLight=!1;useProbe=!1;acceptGI=!1;acceptShadow=!1;castShadow=!1;castReflection=!0;receiveEnv=!1;renderLayer=1e3;renderOrder=2e3;unclippedDepth=!1;transparent=!1;multisample=0;label;useZ=!0;splitTexture=!1;alphaCutoff;useFragDepth=!1;writeMasks=[];setFromMapValues(e){e.has("blendMode")&&(this.blendMode=this.convertBlendMode(e.get("blendMode"))),e.has("depthCompare")&&(this.depthCompare=e.get("depthCompare")),e.has("depthWriteEnabled")&&(this.depthWriteEnabled=e.get("depthWriteEnabled")),e.has("frontFace")&&(this.frontFace=e.get("frontFace")),e.has("cullMode")&&(this.cullMode=e.get("cullMode")),e.has("topology")&&(this.topology=e.get("topology")),e.has("depthBias")&&(this.depthBias=e.get("depthBias")),e.has("useLight")&&(this.useLight=e.get("useLight")),e.has("useProbe")&&(this.useProbe=e.get("useProbe")),e.has("acceptGI")&&(this.acceptGI=e.get("acceptGI")),e.has("acceptShadow")&&(this.acceptShadow=e.get("acceptShadow")),e.has("castShadow")&&(this.castShadow=e.get("castShadow")),e.has("receiveEnv")&&(this.receiveEnv=e.get("receiveEnv")),e.has("renderLayer")&&(this.renderLayer=e.get("renderLayer")),e.has("renderOrder")&&(this.renderOrder=e.get("renderOrder")),e.has("unclippedDepth")&&(this.unclippedDepth=e.get("unclippedDepth")),e.has("multisample")&&(this.multisample=e.get("multisample")),e.has("label")&&(this.label=e.get("label")),e.has("useZ")&&(this.useZ=e.get("useZ"))}convertBlendMode(e){switch(e){case"ABOVE":return ae.ABOVE;case"ALPHA":return ae.ALPHA;case"NORMAL":return ae.NORMAL;case"ADD":return ae.ADD;case"BELOW":return ae.BELOW;case"ERASE":return ae.ERASE;case"MUL":return ae.MUL;case"SCREEN":return ae.SCREEN;case"DIVD":return ae.DIVD;case"SOFT_ADD":return ae.SOFT_ADD}return ae.NONE}}class xh extends wr{uniformNodes=[];_onChange=!0;constructor(){super(),this.bufferType=tr.MaterialDataUniformGPUBuffer}initDataUniform(e){this.uniformNodes=e;let t=0;for(const r in e){const i=e[r];i||console.error(r,"is empty"),t+=i.size*4}t=Math.floor(t/256+1)*256,this.createBuffer(GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,t/4,null,"MaterialDataUniformGPUBuffer");for(const r in e){const i=e[r];i||console.error(r,"is empty");let a=this.memory.allocation_node(i.size*4);i.memoryInfo=a,i.bindOnChange=()=>this.onChange()}}onChange(){this._onChange=!0}apply(){if(this.uniformNodes.length!=0&&this._onChange){for(const e in this.uniformNodes)this.uniformNodes[e].update();super.apply(),this._onChange=!1}}}class Dr{static renderShaderModulePool;static renderShader;static init(){this.renderShaderModulePool=new Map,this.renderShader=new Map}}class me{reference;static _ins;static getInstance(){return this._ins||=new me,this._ins}attached(e,t){this.reference||=new Map;let r=this.reference.get(e);r||=new Map,r.set(t,e),this.reference.set(e,r)}detached(e,t){let r=this.reference.get(e);r&&r.delete(t)}hasReference(e){let t=this.reference.get(e);return t?t.size>0:!1}getReferenceCount(e){let t=this.reference.get(e);return t?t.size:0}getReference(e){let t=this.reference.get(e);return t||null}}class Ao{static pipelineMap=new Map;static getSharePipeline(e){let t=this.pipelineMap.get(e);return t||null}static setSharePipeline(e,t){this.pipelineMap.set(e,t)}}class Oe extends Ks{passType=H.COLOR;useRz=!1;vsName;fsName;shaderState;textures;pipeline;bindGroupLayouts;envMap;prefilterMap;reflectionMap;_sourceVS;_sourceFS;_destVS;_destFS;_vsShaderModule;_fsShaderModule;_textureGroup=-1;_textureChange=!1;_groupsShaderReflectionVarInfos;outBufferMask;constructor(e,t){super(),this.vsName=e.toLowerCase(),this.fsName=t.toLowerCase(),this.vsName in O||console.error("Shader Not Register, Please Register Shader!",this.vsName),this.fsName in O||console.error("Shader Not Register, Please Register Shader!",this.fsName),O[this.vsName]&&(this._sourceVS=O[this.vsName]),O[this.fsName]&&(this._sourceFS=O[this.fsName]),this.textures={},this.bindGroups=[],this.shaderState=new Uh,this.materialDataUniformBuffer=new xh,this.materialDataUniformBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,this._bufferDic.set("global",this.materialDataUniformBuffer),this._bufferDic.set("materialUniform",this.materialDataUniformBuffer)}get renderOrder(){return this.shaderState.renderOrder}set renderOrder(e){this.shaderState.renderOrder!=e&&(this._valueChange=!0),this.shaderState.renderOrder=e}get doubleSide(){return this.shaderState.cullMode==Jt.none}set doubleSide(e){let t=e?Jt.none:this.cullMode;this.shaderState.cullMode!=t&&(this._valueChange=!0),this.shaderState.cullMode=t}get depthWriteEnabled(){return this.shaderState.depthWriteEnabled}set depthWriteEnabled(e){this.shaderState.depthWriteEnabled!=e&&(this._valueChange=!0),this.shaderState.depthWriteEnabled=e}get cullMode(){return this.shaderState.cullMode}set cullMode(e){this.shaderState.cullMode!=e&&(this._valueChange=!0),this.shaderState.cullMode=e}get frontFace(){return this.shaderState.frontFace}set frontFace(e){this.shaderState.frontFace!=e&&(this._valueChange=!0),this.shaderState.frontFace=e}get depthBias(){return this.shaderState.depthBias}set depthBias(e){this.shaderState.depthBias!=e&&(this._valueChange=!0),this.shaderState.depthBias=e}get topology(){return this.shaderState.topology}set topology(e){this.shaderState.topology!=e&&(this._valueChange=!0),this.shaderState.topology=e}get blendMode(){return this.shaderState.blendMode}set blendMode(e){this.shaderState.blendMode!=e&&(this._valueChange=!0,e!=ae.NORMAL&&e!=ae.NONE&&(this.renderOrder=3e3)),this.shaderState.blendMode=e}get depthCompare(){return this.shaderState.depthCompare}set depthCompare(e){this.shaderState.depthCompare!=e&&(this._valueChange=!0),this.shaderState.depthCompare=e}setShaderEntry(e="",t=""){this.vsEntryPoint=e,this.fsEntryPoint=t}setUniform(e,t){super.setUniform(e,t),this.materialDataUniformBuffer.onChange()}setTexture(e,t){t&&this.textures[e]!=t&&(this.textures[e]&&this.textures[e].unBindStateChange(this),this._textureChange=!0,this.textures[e]=t,e=="envMap"?this.envMap=t:e=="prefilterMap"?this.prefilterMap=t:e=="reflectionMap"&&(this.reflectionMap=t),t.bindStateChange(()=>{this._textureChange=!0},this))}get baseColor(){return this.getUniform("baseColor")}set baseColor(e){this.setUniform("baseColor",e)}getTexture(e){return this.textures[e]}genRenderPipeline(e,t){let r=this.createGroupLayouts();this.createPipeline(e,t,r)}reBuild(e,t){this.compileShader(ar.vertex,this._destVS,t),this.compileShader(ar.fragment,this._destFS,t),this.genRenderPipeline(e,t)}apply(e,t,r){this.materialDataUniformBuffer.apply(),this._textureChange&&this._textureGroup!=-1&&(this._textureChange=!1,this.genGroups(this._textureGroup,this.shaderReflection.groups,!0)),this._valueChange&&(this._shaderChange&&(this.preCompile(e),this._shaderChange=!1),this.shaderVariant=xt.genRenderShaderVariant(this),this.reBuild(e,t),this._valueChange=!1,r&&r())}preCompile(e){this.preDefine(e),this.preCompileShader(ar.vertex,this._sourceVS.concat()),this.preCompileShader(ar.fragment,this._sourceFS.concat()),this.genReflection()}applyPostDefine(e,t){return t.renderTargetTextures.length>1?(this.defineValue.USE_WORLDPOS=!0,this.defineValue.USEGBUFFER=!0):(this.defineValue.USE_WORLDPOS=!1,this.defineValue.USEGBUFFER=!1),m.setting.render.useCompressGBuffer?this.defineValue.USE_COMPRESSGBUFFER=!0:this.defineValue.USE_COMPRESSGBUFFER=!1,rr.parse(e,this.defineValue)}setBindGroup(e,t){this.bindGroups[e]=t}checkBuffer(e,t){}preCompileShader(e,t,r){let i=t;if(i.indexOf("version ")!=-1){var a=mh.convertGLSL(i);i=a.sourceCode}for(const o in this.constValues)if(Object.prototype.hasOwnProperty.call(this.constValues,o)){const n=this.constValues[o];i=i.replaceAll(`&${o}`,n.toString())}switch(e){case ar.vertex:this._destVS=i;break;case ar.fragment:this._destFS=i;break}}compileShader(e,t,r){let i=t;i=this.applyPostDefine(i,r);let a=t;for(let n in this.defineValue)a+=`${n}=${this.defineValue[n]},`;let o=Dr.renderShaderModulePool.get(a);switch(o||(i=this.applyPostDefine(i,r),o=R.device.createShaderModule({label:e==ar.vertex?this.vsName:this.fsName,code:i}),o.getCompilationInfo().then(n=>{n.messages.length>0&&(console.log(i),console.log(n))}),Dr.renderShaderModulePool.set(a,o)),e){case ar.vertex:this._vsShaderModule=o,this._destVS=i;break;case ar.fragment:this._fsShaderModule=o,this._destFS=i;break}}getGroupLayout(e,t){let r=[];for(let i=0;i<t.length;i++){const a=t[i];if(a)if(a.varType=="uniform"){this._bufferDic.has(a.varName)||console.error(`not set ${a.varName} buffer`);let o=this._bufferDic.get(a.varName).visibility,n={binding:a.binding,visibility:o,buffer:{type:"uniform"}};r.push(n)}else if(a.varType=="storage-read"){this._bufferDic.has(a.varName)||console.error(`not set ${a.varName} buffer`);let o=this._bufferDic.get(a.varName).visibility,n={binding:a.binding,visibility:o,buffer:{type:"read-only-storage"}};r.push(n)}else if(a.varType=="var")switch(a.dataType){case"sampler":{let o=a.varName.replace("Sampler",""),n=this.textures[o]?this.textures[o]:m.res.redTexture,l={binding:a.binding,visibility:n.visibility,sampler:n.samplerBindingLayout};r.push(l),this._textureGroup=e}break;case"sampler_comparison":{let o=a.varName.replace("Sampler",""),n=this.textures[o]?this.textures[o]:m.res.redTexture,l={binding:a.binding,visibility:n.visibility,sampler:n.sampler_comparisonBindingLayout};r.push(l),this._textureGroup=e}break;case"texture_2d<f32>":case"texture_2d_array<f32>":case"texture_cube<f32>":case"texture_depth_2d":case"texture_depth_2d_array":case"texture_depth_cube":case"texture_depth_cube_array":{let o=this.textures[a.varName]?this.textures[a.varName]:m.res.redTexture,n={binding:a.binding,visibility:o.visibility,texture:o.textureBindingLayout};r.push(n),this._textureGroup=e,me.getInstance().attached(o,this)}break;case"texture_external":{let o=this.textures[a.varName]?this.textures[a.varName]:m.res.redTexture,n={binding:a.binding,visibility:o.visibility,externalTexture:{}};r.push(n),this._textureGroup=e,me.getInstance().attached(o,this)}break;default:{let o=this.textures[a.varName]?this.textures[a.varName]:m.res.redTexture,n={binding:a.binding,visibility:o.visibility,texture:o.textureBindingLayout};r.push(n),this._textureGroup=e,me.getInstance().attached(o,this)}break}else{debugger;console.error("bind group can't empty")}}return r}_cacheEntries;genGroups(e,t,r=!1){if(!this.bindGroups[e]||r){const i=t[e];let a=[];for(let n=0;n<i.length;n++){const l=i[n];if(l){if(l.varType=="uniform"){let h=this._bufferDic.get(l.varName);if(h){if(h.bufferType==tr.MaterialDataUniformGPUBuffer){let c=[];for(let f=0;f<l.dataFields.length;f++){const g=l.dataFields[f];this.uniforms[g.name]||console.error(`shader-${this.vsName}:${this.fsName} ${g.name}is empty`),c.push(this.uniforms[g.name])}this.materialDataUniformBuffer.initDataUniform(c)}let u={binding:l.binding,resource:{buffer:h.buffer,offset:0,size:h.memory.shareDataBuffer.byteLength}};a.push(u),this.checkBuffer(l.varName,h)}else console.error(`shader${this.vsName}-${this.fsName}`,`buffer ${l.varName} is missing!`)}else if(l.varType=="storage-read"){let h=this._bufferDic.get(l.varName);if(h){let u={binding:l.binding,resource:{buffer:h.buffer,offset:0,size:h.memory.shareDataBuffer.byteLength}};a.push(u),this.checkBuffer(l.varName,h)}else console.error(`buffer ${l.varName} is missing!`)}else if(l.varType=="var")if(l.dataType=="sampler"){let h=l.varName.replace("Sampler",""),u=this.textures[h];if(u||(u=m.res.blackTexture,this.setTexture(h,u)),u){let c={binding:l.binding,resource:u.gpuSampler};a.push(c)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}else if(l.dataType=="sampler_comparison"){let h=l.varName.replace("Sampler",""),u=this.textures[h];if(u){let c={binding:l.binding,resource:u.gpuSampler_comparison};a.push(c)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}else{let h=this.textures[l.varName];if(h||(h=m.res.whiteTexture,this.setTexture(l.varName,h)),h){let u={binding:l.binding,resource:h.getGPUView()};a.push(u)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}}}let o=R.device.createBindGroup({layout:this.bindGroupLayouts[e],entries:a});this.bindGroups[e]=o}}createPipeline(e,t,r){let i=e,a=this.shaderState,o=[];for(const h of t.renderTargetTextures)o.push({format:h.format});for(let h=0;h<o.length;h++){const u=o[h];a.writeMasks&&a.writeMasks.length>0&&(u.writeMask=a.writeMasks[h])}if(t.outColor!=-1){let h=o[t.outColor];a.blendMode!=ae.NONE?h.blend=lh.getBlend(a.blendMode):delete h.blend}let n={label:this.vsName+"|"+this.fsName,layout:r,primitive:{topology:a.topology,cullMode:a.cullMode,frontFace:a.frontFace},vertex:void 0};this.vsEntryPoint!=""&&(n.vertex={module:this._vsShaderModule,entryPoint:this.vsEntryPoint,buffers:i.vertexBuffer.vertexBufferLayouts}),this.fsEntryPoint!=""&&(n.fragment={module:this._fsShaderModule,entryPoint:this.fsEntryPoint,targets:o}),a.multisample>0&&(n.multisample={count:a.multisample}),(t.zPreTexture||t.depthTexture)&&(a.blendMode!=ae.NONE,m.setting.render.zPrePass&&t.zPreTexture&&a.useZ?n.depthStencil={depthWriteEnabled:!1,depthCompare:rt.less,format:t.zPreTexture.format}:n.depthStencil={depthWriteEnabled:a.depthWriteEnabled,depthCompare:a.depthCompare,format:t.depthTexture.format});let l=Ao.getSharePipeline(this.shaderVariant);l?this.pipeline=l:(this.pipeline=F.createPipeline(n),Ao.setSharePipeline(this.shaderVariant,this.pipeline))}createGroupLayouts(){this._groupsShaderReflectionVarInfos=[];let e=this.shaderReflection;this.bindGroupLayouts=[fo.getGlobalDataBindGroupLayout()];for(let r=1;r<e.groups.length;r++){let i=e.groups[r];if(i){let a=this.getGroupLayout(r,i);this._groupsShaderReflectionVarInfos[r]=i;let o=R.device.createBindGroupLayout({entries:a,label:`vs${this.vsName} fs${this.fsName} ${i.length}`});this.bindGroupLayouts[r]=o}else console.error("can't set empty group!",r)}let t=R.device.createPipelineLayout({bindGroupLayouts:this.bindGroupLayouts});return this._groupsShaderReflectionVarInfos[1]&&this.genGroups(1,this._groupsShaderReflectionVarInfos),this._groupsShaderReflectionVarInfos[2]&&this.genGroups(2,this._groupsShaderReflectionVarInfos),this._groupsShaderReflectionVarInfos[3]&&this.genGroups(3,this._groupsShaderReflectionVarInfos),t}preDefine(e){let t=e.hasAttribute(V.TEXCOORD_1),r=e.hasAttribute(V.joints0),i=e.hasAttribute(V.a_morphPositions_0),a=e.hasAttribute(V.TANGENT),o=e.hasAttribute(V.color),n=this.shaderState.acceptGI,l=this.shaderState.useLight;t&&(this.defineValue.USE_SECONDUV=!0),r&&i?this.defineValue.USE_METAHUMAN=!0:(this.defineValue.USE_SKELETON=r,this.defineValue.USE_MORPHTARGETS=i),"USE_TANGENT"in this.defineValue||(this.defineValue.USE_TANGENT=a),this.defineValue.USE_GI=n,this.defineValue.USE_SHADOWMAPING=this.shaderState.acceptShadow,this.defineValue.USE_LIGHT=l,this.defineValue.USE_VERTXCOLOR=o,m.setting.pick.mode=="pixel"&&(this.defineValue.USE_WORLDPOS=!0),m.setting.gi.enable?this.defineValue.USEGI=!0:this.defineValue.USEGI=!1,m.setting.render.debug&&(this.defineValue.USE_DEBUG=!0,this.defineValue.DEBUG_CLUSTER=!0),this.shaderState.useLight?this.defineValue.USE_LIGHT=!0:this.defineValue.USE_LIGHT=!1,m.setting.render.useLogDepth?(this.defineValue.USE_LOGDEPTH=!0,this.shaderState.useFragDepth=!0):this.defineValue.USE_LOGDEPTH=!1,this.shaderState.useFragDepth?this.defineValue.USE_OUTDEPTH=!0:this.defineValue.USE_OUTDEPTH=!1,this.defineValue.USE_PCF_SHADOW=m.setting.shadow.type=="PCF",this.defineValue.USE_HARD_SHADOW=m.setting.shadow.type=="HARD",this.defineValue.USE_SOFT_SHADOW=m.setting.shadow.type=="SOFT",this.defineValue.USE_CSM=Zt.Cascades>1,this.defineValue.USE_IES_PROFILE=pr.use}genReflection(){this.shaderVariant=xt.genRenderShaderVariant(this);let e=xt.poolGetReflection(this.shaderVariant);if(e)this.shaderReflection=e;else{let t=rr.parse(this._destVS,this.defineValue);t=rr.parse(t,this.defineValue),xt.getShaderReflection2(t,this);let r=rr.parse(this._destFS,this.defineValue);r=rr.parse(r,this.defineValue),xt.getShaderReflection2(r,this),xt.final(this)}this.shaderState.splitTexture=this.shaderReflection.useSplit}destroy(e){for(const t in this.textures)if(Object.prototype.hasOwnProperty.call(this.textures,t)){const r=this.textures[t];if(me.getInstance().detached(r,this),e&&!me.getInstance().hasReference(r))r.destroy(e);else{r.destroy(!1);let i=me.getInstance().getReference(r);if(i){let a=[];i.forEach((o,n)=>{"name"in o?a.push(o.name):a.push("NaN")})}}}this.bindGroups.length=0,this.shaderState=null,this.textures=null,this.pipeline=null,this.bindGroupLayouts=null,this._sourceVS=null,this._sourceFS=null,this._destVS=null,this._destFS=null,this._vsShaderModule=null,this._fsShaderModule=null,this.materialDataUniformBuffer.destroy(e),this.materialDataUniformBuffer=null}static destroyShader(e){Dr.renderShader.has(e)&&(Dr.renderShader.get(e).destroy(),Dr.renderShader.delete(e))}static getShader(e){return Dr.renderShader.get(e)}static createShader(e,t){let r=new Oe(e,t);return Dr.renderShader.set(r.instanceID,r),r.instanceID}}class Bh extends Oe{constructor(){super("sky_vs_frag_wgsl","SkyGBuffer_fs"),this.passType=H.GI,this.setUniformVector3("eyesPos",new d),this.setUniformFloat("exposure",1),this.setUniformFloat("roughness",0);let e=this.shaderState;e.frontFace="ccw",e.cullMode=Jt.front,e.depthWriteEnabled=!1,e.depthCompare=rt.less}}class vh extends Oe{transparency;constructor(){super("gbuffer_vs","gbuffer_fs"),this.setShaderEntry("VertMain","FragMain"),this.passType=H.GI,this.setUniformColor("baseColor",new P),this.setUniformColor("emissiveColor",new P),this.setUniformFloat("emissiveIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("alphaCutoff",1),this.blendMode=ae.NONE,this.setTexture("normalMap",m.res.normalTexture)}}class Ch extends Oe{constructor(){super("shadowCastMap_vert","directionShadowCastMap_frag"),this.passType=H.SHADOW,this.setShaderEntry("main"),this.setUniformFloat("cameraFar",5e3),this.setUniformVector3("lightWorldPos",d.ZERO),this.shaderState.receiveEnv=!1,this.shaderState.castShadow=!1,this.shaderState.acceptShadow=!1,this.setDefine("USE_ALPHACUT",!0)}}class Sh extends Oe{constructor(){super("castPointShadowMap_vert","shadowCastMap_frag"),this.passType=H.POINT_SHADOW,this.setShaderEntry("main","main"),this.setUniformFloat("cameraFar",5e3),this.setUniformVector3("lightWorldPos",d.ZERO),this.shaderState.receiveEnv=!1,this.shaderState.castShadow=!1,this.shaderState.acceptShadow=!1,this.setDefine("USE_ALPHACUT",!0)}}class _h extends Oe{constructor(){super("ZPass_shader_vs","ZPass_shader_vs"),this.passType=H.DEPTH,this.setShaderEntry("main"),this.useRz=!1;let e=this.shaderState;e.receiveEnv=!1}}class ca{static createGIPass(e,t){if(Gt.hasMask(e.rendererMask,Be.Sky)){if(!t.passShader.get(H.GI)){let i=t.getSubShaders(H.COLOR)[0],a=new Bh;a.setTexture("baseMap",i.getTexture("baseMap")),a.cullMode=i.cullMode,a.frontFace=i.frontFace,t.addRenderPass(a,0),a.preCompile(e.geometry)}}else this.castGBufferPass(e,t)}static castGBufferPass(e,t){let r=t.getDefaultShaders();for(let i=0;i<r.length;i++){const a=r[i];let o=t.getSubShaders(H.GI);if(!o||o.length==0||o.length<i){let n=new vh;n.setTexture("baseMap",a.getTexture("baseMap")),n.setTexture("normalMap",a.getTexture("normalMap")),n.setTexture("emissiveMap",a.getTexture("emissiveMap")),n.setUniform("baseColor",a.getUniform("baseColor")),n.setUniform("envIntensity",a.getUniform("envIntensity")),n.setUniform("emissiveColor",a.getUniform("emissiveColor")),n.setUniform("emissiveIntensity",a.getUniform("emissiveIntensity")),n.setUniform("alphaCutoff",a.getUniform("alphaCutoff")),n.cullMode=a.cullMode,n.frontFace=a.frontFace,n.preCompile(e.geometry),t.addRenderPass(n)}}}static createShadowPass(e,t){let r=Gt.hasMask(e.rendererMask,Be.SkinnedMesh),i=e.geometry.hasAttribute(V.TANGENT),a=e.geometry.hasAttribute(Yt.MORPH_POSITION_PREFIX+"0"),o=e.geometry.hasAttribute(Yt.MORPH_NORMAL_PREFIX+"0"),n=t.getSubShaders(H.COLOR);for(let l=0;l<n.length;l++){const h=n[l];let u=t.getSubShaders(H.SHADOW);if(!u||u.length<l+1){let f=new Ch;f.setTexture("baseMap",h.getTexture("baseMap")),f.setUniform("alphaCutoff",h.getUniform("alphaCutoff")),i&&f.setDefine("USE_TANGENT",i),r&&f.setDefine("USE_SKELETON",r),a&&f.setDefine("USE_MORPHTARGETS",a),o&&f.setDefine("USE_MORPHNORMALS",o),h.cullMode=="none"?f.shaderState.cullMode="none":h.cullMode=="back"?f.shaderState.cullMode="front":h.cullMode=="front"&&(f.shaderState.cullMode="back"),f.preCompile(e.geometry),t.addRenderPass(f)}let c=t.getSubShaders(H.POINT_SHADOW);if(!c||c.length<l+1){let f=new Sh;f.setTexture("baseMap",h.getTexture("baseMap")),f.setUniform("alphaCutoff",h.getUniform("alphaCutoff")),f.setDefine("USE_ALPHACUT",1);for(let g=0;g<1;g++)i&&f.setDefine("USE_TANGENT",i),r&&f.setDefine("USE_SKELETON",r),a&&f.setDefine("USE_MORPHTARGETS",a),o&&f.setDefine("USE_MORPHNORMALS",o),f.shaderState.cullMode="front",f.preCompile(e.geometry);t.addRenderPass(f)}}}static createDepthPass(e,t){let r=t.getSubShaders(H.COLOR),i=e.geometry.hasAttribute("TANGENT"),a=e.geometry.hasAttribute(Yt.MORPH_POSITION_PREFIX+"0"),o=e.geometry.hasAttribute(Yt.MORPH_NORMAL_PREFIX+"0"),n=Gt.hasMask(e.rendererMask,Be.SkinnedMesh);for(let l=0;l<r.length;l++){const h=r[l];let u=t.getSubShaders(H.DEPTH);if(!u&&h.shaderState.useZ&&(!u||u.length<l)){let c=new _h;c.setTexture("baseMap",h.getTexture("baseMap")),i||c.setDefine("USE_TANGENT",i),n&&c.setDefine("USE_SKELETON",n),a&&c.setDefine("USE_MORPHTARGETS",a),o&&c.setDefine("USE_MORPHNORMALS",o),c.cullMode=h.cullMode,c.frontFace=h.frontFace,c.preCompile(e.geometry),t.addRenderPass(c)}}}static createReflectionPass(e,t){let r=t.getDefaultShaders();for(let n=0;n<r.length;n++){const l=r[n];let h=t.getSubShaders(H.REFLECTION);if(!h||h.length==0||h.length<n){let u=new Oe(l.vsName,l.fsName);u.vsEntryPoint=l.vsEntryPoint,u.fsEntryPoint=l.fsEntryPoint,u.passType=H.REFLECTION;for(const c in l.shaderState){var i=l.shaderState[c];u.shaderState[c]=i}for(const c in l.textures){var a=l.getTexture(c);u.setTexture(c,a)}for(const c in l.uniforms){var o=l.getUniform(c);u.setUniform(c,o)}for(const c in l.defineValue){var o=l.defineValue[c];u.setDefine(c,o)}u.setDefine("USE_CASTREFLECTION",!0),u.preCompile(e.geometry),t.addRenderPass(u)}}}}class ui{static _v1=new d;static _v2=new d;entities;box;subTrees=[];parent;level;static maxSplitLevel=6;static autoSplitLevel=3;index;uuid;constructor(e,t=0,r=null,i=0){this.parent=r,this.box=e.clone(),this.level=i,this.index=t,this.uuid=i+"_"+t,this.entities=new Map}tryInsertEntity(e){let t=e.renderer.object3D.bound;if(this.level==0||this.box.containsBox(t)){this.subTrees.length==0&&this.level<ui.maxSplitLevel&&this.splitTree();let r;if(this.subTrees.length>0){for(let i of this.subTrees)if(i.tryInsertEntity(e)){r=!0;break}}return r||e.enterNode(this),!0}return!1}splitTree(){if(this.subTrees.length==0){const e=ui._v1,t=this.box.extents.clone();let r=this.level+1,i=0;for(let a=0;a<2;a++)for(let o=0;o<2;o++)for(let n=0;n<2;n++){const l=new Re;this.box.min.add(e.set(a,o,n).multiply(t),l.min),l.min.add(t,l.max),l.setFromMinMax(l.min,l.max);let h=new ui(l,i++,this,r);this.subTrees.push(h)}}}__rayCastTempVector=new d;rayCasts(e,t){if(this.level==0||e.intersectBox(this.box,this.__rayCastTempVector)){this.entities.size>0&&t.push(...this.entities.values());for(let r of this.subTrees)r.rayCasts(e,t);return!0}return!1}frustumCasts(e,t){if(this.level==0||e.containsBox2(this.box)>0){if(this.entities.size>0)for(const r of this.entities.values())(this.level>ui.autoSplitLevel||e.containsBox2(r.renderer.object3D.bound)>0)&&t.push(r);for(let r of this.subTrees)r.frustumCasts(e,t);return!0}return!1}getRenderNode(e,t){if(this.level==0||e.containsBox2(this.box)>0){if(this.entities.size>0)for(const r of this.entities.values())(this.level>ui.autoSplitLevel||e.containsBox2(r.renderer.object3D.bound)>0)&&(r.renderer.renderOrder<3e3?t.opaqueList.push(r.renderer):r.renderer.renderOrder>=3e3&&t.transparentList.push(r.renderer));for(let r of this.subTrees)r.getRenderNode(e,t);return!0}return!1}boxCasts(e,t){if(e.intersectsBox(this.box)){this.entities.size>0&&t.push(...this.entities.values());for(let r of this.subTrees)r.boxCasts(e,t);return!0}return!1}clean(){for(let e of this.entities.values())e.leaveNode();return this.entities.clear(),this}}class Fh{_pool=[];_worldPosition=new d;_viewPosition=new d;_zSortList=[];pop(){return this._pool.pop()||{}}recycle(){for(let e of this._zSortList)e.z=0,e.userData=null,e.obj3d=null,this._pool.push(e);this._zSortList.length=0}sort(e,t,r,i){this._zSortList=[];for(let a of t){let o=this.pop();o.userData=a,o.obj3d=r(a),o.z=this.worldToCameraDepth(o.obj3d,e),this._zSortList.push(o)}this._zSortList.sort((a,o)=>a.z-o.z>0?1:-1),i||=[];for(let a of this._zSortList)i.push(a.userData);return this.recycle(),i}worldToCameraDepth(e,t){t||=e.transform.view3D.camera;let r=0;return t&&(this._worldPosition.copyFrom(e.transform.worldPosition),t.worldToScreenPoint(this._worldPosition,this._viewPosition),r=this._viewPosition.z),r}}let yh=new Fh;var fa=(s=>(s[s.None=2]="None",s[s.StaticBatch=4]="StaticBatch",s[s.DynamicBatch=8]="DynamicBatch",s[s.Hiden=16]="Hiden",s))(fa||{});class Uo{static addMask(e,t){return e|t}static removeMask(e,t){return e&~t}static hasMask(e,t){return(e&t)!=0}}class bh{opaqueList=[];transparentList=[];sky;clean(){this.opaqueList.length=0,this.transparentList.length=0}}class Qh{renderGroup;constructor(){this.renderGroup=new Map}collect_add(e){let t="",r="";t+=e.geometry.instanceID;for(let a=0;a<e.materials.length;a++){const o=e.materials[a];r+=o.shader.getDefaultColorShader().shaderVariant}let i=t+r;this.renderGroup.has(i)||this.renderGroup.set(i,{bundleMap:new Map,key:i,renderNodes:[]}),this.renderGroup.get(i).renderNodes.indexOf(e)==-1&&this.renderGroup.get(i).renderNodes.push(e)}}class Rh{renderShaderUpdateList=new Map;renderNodeList=new Map;collect_add(e){let t=e.transform.view3D;t&&e.materials&&e.materials.forEach(r=>{let i=this.renderShaderUpdateList.get(t);i||(i=new Map,this.renderShaderUpdateList.set(t,i));let a=this.renderNodeList.get(t);a||(a=new Map,this.renderNodeList.set(t,a)),a.set(e.instanceID,e);let o=r.getAllPass();for(let n=0;n<o.length;n++){const l=o[n];let h=`${e.geometry.instanceID+l.instanceID}`,u=i.get(h);u||(u=new Map,i.set(h,u)),u.set(e.instanceID,e)}})}collect_remove(e){let t=e.transform.view3D;if(t&&e.materials){let r=this.renderShaderUpdateList.get(t);r&&e.materials.forEach(i=>{let a=i.getAllPass();for(let o=0;o<a.length;o++){const n=a[o];let l=`${e.geometry.instanceID+n.instanceID}`;r.delete(l)}})}}}class G{static _instance;_sceneLights;_sceneGIProbes;_op_RenderNodes;_tr_RenderNodes;_octreeRenderNodes;_reflections;_graphics;_op_renderGroup;_tr_renderGroup;_renderShaderCollect;state={giLightingChange:!0};sky;_collectInfo;rendererOctree;static get instance(){return this._instance||(this._instance=new G),this._instance}constructor(){this._sceneLights=new Map,this._sceneGIProbes=new Map,this._op_RenderNodes=new Map,this._tr_RenderNodes=new Map,this._reflections=new Map,this._graphics=[],this._op_renderGroup=new Map,this._tr_renderGroup=new Map,this._collectInfo=new bh,this._renderShaderCollect=new Rh,this._octreeRenderNodes=new Map}getPashList(e,t){if(t.renderOrder<3e3)return this._op_RenderNodes.get(e);if(t.renderOrder>=3e3)return this._tr_RenderNodes.get(e)}sortRenderNode(e,t){for(let r=e.length-1;r>0;r--)if(e[r].renderOrder<t.renderOrder){e.push(t);return}e.push(t)}addRenderNode(e,t){if(!e)return;let r=t.renderOrder>=3e3;if(t.hasMask(Be.Sky))this.sky=t;else if(t.hasMask(Be.Reflection)){this.removeRenderNode(e,t);let i=this._reflections.get(e);i||(i=[],this._reflections.set(e,i),i.push(t)),i.includes(t)||i.push(t)}else if(t.hasMask(Be.Graphic3D))this._graphics.indexOf(t)==-1&&this._graphics.push(t);else if(Uo.hasMask(t.renderLayer,fa.None)){this.removeRenderNode(e,t);let i=r?this._tr_RenderNodes:this._op_RenderNodes;i.has(e)||i.set(e,[]),i.get(e).push(t),m.setting.occlusionQuery.octree&&t.attachSceneOctree(this.getOctree(e));let a=this.getPashList(e,t);a.indexOf(t)==-1&&this.sortRenderNode(a,t)}else{this.removeRenderNode(e,t);let i=r?this._tr_renderGroup:this._op_renderGroup;i.has(e)||i.set(e,new Qh),i.get(e).collect_add(t)}t.object3D.renderNode=t,this._renderShaderCollect.collect_add(t)}getOctree(e){let t,r=m.setting.occlusionQuery.octree;if(r&&(t=this._octreeRenderNodes.get(e),!t)){let i=new d(r.x,r.y,r.z),a=new d(r.width,r.height,r.depth),o=new Re(i,a);t=new ui(o),this._octreeRenderNodes.set(e,t)}return t}removeRenderNode(e,t){if(t.detachSceneOctree(),t.hasMask(Be.Sky))this.sky=null;else if(t.hasMask(Be.Reflection)){let r=this._reflections.get(e);if(r){let i=r.indexOf(t);i!=-1&&r.splice(i,1)}}else if(Uo.hasMask(t.renderLayer,fa.None)){let r=this.getPashList(e,t);if(r){let i=r.indexOf(t);i!=-1&&r.splice(i,1)}}this._renderShaderCollect.collect_remove(t)}addLight(e,t){if(!this._sceneLights.has(e))this._sceneLights.set(e,[t]);else{let r=this._sceneLights.get(e);if(r.length>=m.setting.light.maxLight){console.warn("Alreay meet maxmium light number:",m.setting.light.maxLight);return}r.indexOf(t)!=-1||r.push(t)}}removeLight(e,t){if(this._sceneLights.has(e)){let r=this._sceneLights.get(e),i=r.indexOf(t);i!=-1&&r.splice(i,1)}}getLights(e){let t=this._sceneLights.get(e);return t||[]}addGIProbe(e,t){this._sceneGIProbes.has(e)?this._sceneGIProbes.get(e).push(t):this._sceneGIProbes.set(e,[t])}removeGIProbe(e,t){if(this._sceneGIProbes.has(e)){let r=this._sceneGIProbes.get(e),i=r.indexOf(t);i!=-1&&r.splice(i,1)}}getProbes(e){let t=this._sceneGIProbes.get(e);return t||[]}getReflections(e){let t=this._reflections.get(e);return t||[]}autoSortRenderNodes(e){let t=this._tr_RenderNodes.get(e);if(!t)return;let r=!1;for(const i of t)if(i.isRenderOrderChange||i.needSortOnCameraZ){r=!0;break}if(r){for(const i of t){let a=i.renderOrder;if(i.needSortOnCameraZ){let o=yh.worldToCameraDepth(i.object3D);o=1-Math.max(0,Math.min(1,o)),a+=o}i.__renderOrder=a,i.isRenderOrderChange=!1}t.sort((i,a)=>i.__renderOrder>a.__renderOrder?1:-1)}return this}getRenderNodes(e,t){if(this.autoSortRenderNodes(e),this._collectInfo.clean(),this._collectInfo.sky=this.sky,m.setting.occlusionQuery.octree)this.rendererOctree=this.getOctree(e),this.rendererOctree.getRenderNode(t.frustum,this._collectInfo);else{let r=this._op_RenderNodes.get(e);r&&(this._collectInfo.opaqueList=r.concat());let i=this._tr_RenderNodes.get(e);i&&(this._collectInfo.transparentList=i.concat())}return this._collectInfo}getOpRenderGroup(e){return this._op_renderGroup.get(e)}getTrRenderGroup(e){return this._tr_renderGroup.get(e)}getGraphicList(){return this._graphics}getRenderShaderCollect(e){return this._renderShaderCollect.renderShaderUpdateList.get(e)}}class Ih{renderer;owner;uuid;constructor(e){this.renderer=e,this.uuid=e.object3D.instanceID}leaveNode(){this.owner&&(this.owner.entities.delete(this.uuid),this.owner=null)}enterNode(e){this.owner&&this.leaveNode(),this.owner=e,e.entities.set(this.uuid,this)}update(e){return this.owner?.tryInsertEntity(this)||(this.leaveNode(),e.tryInsertEntity(this)),this.owner}}var Dg=Object.defineProperty,Mg=Object.getOwnPropertyDescriptor,xo=(s,e,t,r)=>{for(var i=Mg(e,t),a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(e,t,i)||i);return i&&Dg(e,t,i),i};class ei extends Pe{instanceCount=0;lodLevel=0;alwaysRender=!1;instanceID;drawType=0;_geometry;_materials=[];_castShadow=!0;_castReflection=!0;_castGI=!1;_rendererMask=Be.Default;_inRenderer=!1;_readyPipeline=!1;_combineShaderRefection;_ignoreEnvMap;_ignorePrefilterMap;__renderOrder=0;_renderOrder=0;_passInit=new Map;isRenderOrderChange;needSortOnCameraZ;isRecievePostEffectUI;_octreeBinder;_renderLayer=fa.None;_computes;init(e){this.renderOrder=0,this.rendererMask=Be.Default,this.instanceID=js().toString(),this._computes=[]}attachSceneOctree(e){this._octreeBinder={octree:e,entity:new Ih(this)},this.transform.eventDispatcher.addEventListener(Tt.LOCAL_ONCHANGE,this.updateOctreeEntity,this)}detachSceneOctree(){this._octreeBinder&&(this._octreeBinder.entity?.leaveNode(),this.transform.eventDispatcher.removeEventListener(Tt.LOCAL_ONCHANGE,this.updateOctreeEntity,this),this._octreeBinder=null)}updateOctreeEntity(e){this._octreeBinder?.entity?.update(this._octreeBinder.octree)}copyComponent(e){return super.copyComponent(e),this.geometry=e._geometry,this.materials=e._materials.slice(),this.drawType=e.drawType,this.alwaysRender=e.alwaysRender,this.needSortOnCameraZ=e.needSortOnCameraZ,this.isRenderOrderChange=e.isRenderOrderChange,this.castShadow=e.castShadow,this.castGI=e.castGI,this.rendererMask=e.rendererMask,this.isRecievePostEffectUI=e.isRecievePostEffectUI,this}get renderLayer(){return this._renderLayer}set renderLayer(e){this._renderLayer=e}get geometry(){return this._geometry}set geometry(e){this._geometry!=e&&(this._readyPipeline=!1,this._geometry&&me.getInstance().detached(this._geometry,this),e&&me.getInstance().attached(e,this)),this._geometry=e}addMask(e){this._rendererMask=Gt.addMask(this.rendererMask,e)}removeMask(e){this._rendererMask=Gt.removeMask(this.rendererMask,e)}hasMask(e){return Gt.hasMask(this.rendererMask,e)}get rendererMask(){return this._rendererMask}set rendererMask(e){this._rendererMask=e}get renderOrder(){return this._renderOrder}set renderOrder(e){e!=this._renderOrder&&(this.isRenderOrderChange=!0,this.__renderOrder=e),this._renderOrder=e}get materials(){return this._materials}set materials(e){this._readyPipeline=!1;for(let r=0;r<this._materials.length;r++){let i=this._materials[r];me.getInstance().detached(i,this),i.shader&&i.shader.computes&&this.removeComputes(i.shader.computes)}for(let r=0;r<e.length;r++){let i=e[r];me.getInstance().attached(i,this),i.shader&&i.shader.computes&&this.addComputes(i.shader.computes)}this._materials=e;let t=0;for(let r=0;r<e.length;r++){const o=e[r].getPass(H.COLOR)[0];o.shaderState.transparent&&(t=t>o.renderOrder?t:o.renderOrder)}this.renderOrder=t,this._readyPipeline||this.initPipeline()}addComputes(e){this._computes.push(...e)}removeComputes(e){for(const t of e){let r=this._computes.indexOf(t);r!=-1&&this._computes.splice(r,1)}}addRendererMask(e){this._rendererMask=Gt.addMask(this._rendererMask,e)}removeRendererMask(e){this._rendererMask=Gt.removeMask(this._rendererMask,e)}onEnable(){this._readyPipeline||this.initPipeline(),G.instance.addRenderNode(this.transform.scene3D,this),this.updateOctreeEntity()}onDisable(){this._enable=!1,G.instance.removeRenderNode(this.transform.scene3D,this),super.onDisable?.()}selfCloneMaterials(e){let t=[];for(let r=0,i=this.materials.length;r<i;r++){const a=this.materials[r].clone();t.push(a)}return this.materials=t,this._readyPipeline=!1,this.initPipeline(),this}initPipeline(){if(this._geometry&&this._materials.length>0){for(let t=0;t<this._materials.length;t++){let i=this._materials[t].getPass(H.COLOR);for(let a=0;a<i.length;a++){const o=i[a];o.shaderReflection||o.preCompile(this._geometry),this._geometry.generate(o.shaderReflection)}this.object3D.bound=this._geometry.bounds.clone()}this._readyPipeline=!0;let e=0;for(let t=0;t<this.materials.length;t++){const a=this.materials[t].getPass(H.COLOR)[0];a.renderOrder>=3e3?e=e>a.renderOrder?e:a.renderOrder:e=Math.max(e-3e3,0),this.castNeedPass()}this.renderOrder=e,this.enable&&this.transform&&this.transform.scene3D&&G.instance.addRenderNode(this.transform.scene3D,this)}}castNeedPass(){if(this.castGI)for(let t=0;t<this.materials.length;t++){const r=this.materials[t];ca.createGIPass(this,r.shader)}for(let t=0;t<this.materials.length;t++){const r=this.materials[t];r.castShadow&&ca.createShadowPass(this,r.shader)}if(this.castReflection)for(let t=0;t<this.materials.length;t++){const r=this.materials[t];r.castReflection&&ca.createReflectionPass(this,r.shader)}if(!Gt.hasMask(this.rendererMask,Be.IgnoreDepthPass)&&m.setting.render.zPrePass)for(let t=0;t<this.materials.length;t++){const r=this.materials[t];ca.createDepthPass(this,r.shader)}else for(let t=0;t<this.materials.length;t++)this.materials[t].shader.removeShaderByIndex(H.DEPTH,0)}get castShadow(){return this._castShadow}set castShadow(e){this._castShadow=e}get castGI(){return this._castGI}set castGI(e){this._castGI=e}get castReflection(){return this._castReflection}set castReflection(e){this._castReflection=e}renderPass(e,t,r){if(!this._geometry)return;let i=this,a=i.transform._worldMatrix;const o=Math.max(i.materials.length,i._geometry.subGeometries.length);for(let n=0;n<o;n++){const l=n>=i.materials.length?i.materials[0]:i.materials[n];if(!l||!l.enable)continue;let h=l.getPass(t);if(!(!h||h.length==0)){F.bindGeometryBuffer(r.encoder,i._geometry),Ye.viewCount_vertex(e,H[t],i._geometry.vertexCount);for(let u=0;u<h.length;u++){if(!h||h.length==0)continue;const f=h[u];if(f.pipeline){f.shaderState.splitTexture&&(r.endRenderPass(),Bt.WriteSplitColorTexture(i.instanceID),r.beginOpaqueRenderPass(),F.bindCamera(r.encoder,e.camera),F.bindGeometryBuffer(r.encoder,i._geometry)),F.bindPipeline(r.encoder,f)&&Ye.viewCount_pipeline(e,H[t]);let U=(n>=i._geometry.subGeometries.length?i._geometry.subGeometries[0]:i._geometry.subGeometries[n]).lodLevels[i.lodLevel];i.instanceCount>0?(Ye.viewCount_instance(e,H[t],i.instanceCount),Ye.viewCount_indices(e,H[t],U.indexCount),Ye.viewCount_tri(e,H[t],U.indexCount/3*i.instanceCount),F.drawIndexed(r.encoder,U.indexCount,i.instanceCount,U.indexStart,0,0)):(Ye.viewCount_indices(e,H[t],U.indexCount),Ye.viewCount_tri(e,H[t],U.indexCount/3),F.drawIndexed(r.encoder,U.indexCount,1,U.indexStart,0,a.index)),Ye.viewCount_draw(e,H[t])}}}}}renderPass2(e,t,r,i,a,o=!1){if(!this.enable||!this._geometry)return;let n=this,l=n.object3D.transform._worldMatrix;for(let h=0;h<this.materials.length;h++){const u=this.materials[h];if(!u.castShadow&&t==H.SHADOW)continue;let c=u.getPass(t);if(!c||c.length==0)return;if(this.drawType==2)for(let f of c)f.pipeline&&(F.bindPipeline(a,f),F.draw(a,6,1,0,l.index));else{F.bindGeometryBuffer(a,n._geometry);for(let f of c)if(f.pipeline){F.bindPipeline(a,f);let U=n._geometry.subGeometries[h].lodLevels[n.lodLevel];F.drawIndexed(a,U.indexCount,1,U.indexStart,0,l.index)}}}}recordRenderPass2(e,t,r,i,a,o=!1){if(!this.enable)return;let n=this;for(let l=0;l<this.materials.length;l++){let u=this.materials[l].getPass(t);if(!u||u.length==0)return;let c=n.object3D.transform._worldMatrix;for(let f=0;f<u.length;f++){const g=u[f];F.bindPipeline(a,g);let x=n._geometry.subGeometries[l].lodLevels[n.lodLevel];F.drawIndexed(a,x.indexCount,1,x.indexStart,0,c.index)}}}noticeShaderChange(){this.enable&&(this.onEnable(),this._passInit.forEach((e,t)=>{this._passInit.set(t,!1)}))}preInit(e){return this._passInit.get(e)}nodeUpdate(e,t,r,i){let a=this,o=e.scene.envMap;for(let n=0;n<a.materials.length;n++){let h=a.materials[n].getPass(t);if(h)for(let u=0;u<h.length;u++){const f=h[u];if(f.shaderState.splitTexture){let S=Bt.CreateSplitTexture(a.instanceID);f.setTexture("splitTexture_Map",S)}!a._ignoreEnvMap&&f.envMap!=o&&f.setTexture("envMap",o),f.prefilterMap||f.setTexture("prefilterMap",o);let g=ne.getReflectionEntries(e.scene);if(!f.reflectionMap&&g&&g.reflectionMap&&(f.setTexture("reflectionMap",g.reflectionMap),f.setStorageBuffer("reflectionBuffer",g.storageGPUBuffer)),f.pipeline){f.apply(a._geometry,r,()=>a.noticeShaderChange());continue}let p=m.res.getTexture("BRDFLUT");f.setTexture("brdflutMap",p);let A=m.getRenderJob(e).shadowMapPassRenderer;A&&A.depth2DArrayTexture&&f.setTexture("shadowMap",m.getRenderJob(e).shadowMapPassRenderer.depth2DArrayTexture);let U=m.getRenderJob(e).pointLightShadowRenderer;U&&U.cubeArrayTexture&&f.setTexture("pointShadowMap",U.cubeArrayTexture);let x=pr.iesTexture;x&&f.setTexture("iesTextureArrayMap",x),r.irradianceBuffer&&r.irradianceBuffer.length>0&&(f.setTexture("irradianceMap",r.irradianceBuffer[0]),f.setTexture("irradianceDepthMap",r.irradianceBuffer[1]));let B=ne.getLightEntries(e.scene);B&&(f.setStorageBuffer("lightBuffer",B.storageGPUBuffer),B.irradianceVolume&&f.setUniformBuffer("irradianceData",B.irradianceVolume.irradianceVolumeBuffer)),i&&(f.setStorageBuffer("clustersUniform",i.clustersUniformBuffer),f.setStorageBuffer("lightAssignBuffer",i.lightAssignBuffer),f.setStorageBuffer("assignTable",i.assignTableBuffer),f.setStorageBuffer("clusterBuffer",i.clusterBuffer)),f.apply(a._geometry,r),this._passInit.set(t,!0)}}}beforeDestroy(e){me.getInstance().detached(this._geometry,this),me.getInstance().hasReference(this._geometry)||this._geometry.destroy(e);for(let t=0;t<this._materials.length;t++){const r=this._materials[t];me.getInstance().detached(r,this),me.getInstance().hasReference(r)||r.destroy(e)}super.beforeDestroy(e)}destroy(e){super.destroy(e),this._geometry=void 0,this._materials.length=0,this._combineShaderRefection=void 0}}xo([zi],ei.prototype,"materials"),xo([zi],ei.prototype,"castShadow"),xo([zi],ei.prototype,"castGI");class pt{computes;passShader;constructor(){this.computes=[],this.passShader=new Map}addRenderPass(e,t=-1){let r=this.passShader.get(e.passType)||[];t==-1?r.push(e):r.splice(t,-1,e),this.passShader.set(e.passType,r)}removeShader(e,t=-1){let r=this.passShader.get(e.passType);if(r)if(t==-1){let i=r.indexOf(e);i!=-1&&r.splice(i)}else r.splice(t,1)}removeShaderByIndex(e,t=-1){let r=this.passShader.get(e);r&&(t==-1?this.passShader.delete(e):r.splice(t,1))}getSubShaders(e){return this.passShader.get(e)||[]}hasSubShaders(e){return this.passShader.get(e).length>0}getDefaultShaders(){return this.passShader.get(H.COLOR)}getDefaultColorShader(){return this.passShader.get(H.COLOR)[0]}setDefine(e,t){for(const r of this.passShader)for(const i of r[1])i.setDefine(e,t)}hasDefine(e){for(const t of this.passShader)for(const r of t[1]){let i=r.hasDefine(e);if(i)return i}return!1}deleteDefine(e){for(const t of this.passShader)for(const r of t[1])r.deleteDefine(e)}setUniform(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniform(e,t)}setUniformFloat(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformFloat(e,t)}setUniformVector2(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformVector2(e,t)}setUniformVector3(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformVector3(e,t)}setUniformVector4(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformVector4(e,t)}setUniformColor(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformColor(e,t)}getUniform(e){return this.getDefaultColorShader().getUniform(e)}getUniformFloat(e){return this.getDefaultColorShader().getUniformFloat(e)}getUniformVector2(e){return this.getDefaultColorShader().getUniformVector2(e)}getUniformVector3(e){return this.getDefaultColorShader().getUniformVector3(e)}getUniformVector4(e){return this.getDefaultColorShader().getUniformVector4(e)}getUniformColor(e){return this.getDefaultColorShader().getUniformColor(e)}setTexture(e,t){for(const r of this.passShader)for(const i of r[1])i.setTexture(e,t);this.setDefine(`USE_${e.toLocaleUpperCase()}`,!0)}getTexture(e){return this.getDefaultColorShader().textures[e]}setUniformBuffer(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformBuffer(e,t)}getUniformBuffer(e){return this.getDefaultColorShader().getBuffer(e)}setStorageBuffer(e,t){for(const r of this.passShader)for(const i of r[1])i.setStorageBuffer(e,t)}getStorageBuffer(e){return this.getDefaultColorShader().getBuffer(e)}setStructStorageBuffer(e,t){for(const r of this.passShader)for(const i of r[1])i.setStructStorageBuffer(e,t)}getStructStorageBuffer(e){return this.getDefaultColorShader().getBuffer(e)}noticeValueChange(){for(const e of this.passShader)for(const t of e[1])t.noticeValueChange()}destroy(){this.getDefaultColorShader().destroy()}clone(){let e=new pt,t=this.getDefaultShaders();for(const r of t)e.addRenderPass(r);return e}applyUniform(){for(const e of this.passShader)for(const t of e[1])t.applyUniform()}}class yt{instanceID;name;enable=!0;_defaultSubShader;_shader;constructor(){this.instanceID=It()}set shader(e){this._shader=e,this._defaultSubShader=e.getDefaultShaders()[0]}get shader(){return this._shader}get doubleSide(){return this._defaultSubShader.doubleSide}set doubleSide(e){this._defaultSubShader.doubleSide=e}get castShadow(){return this._defaultSubShader.shaderState.castShadow}set castShadow(e){let t=this._defaultSubShader.shaderState;e!=t.castShadow&&(t.castShadow=e)}get acceptShadow(){return this._defaultSubShader.shaderState.acceptShadow}set acceptShadow(e){let t=this._defaultSubShader.shaderState;t.acceptShadow!=e&&(t.acceptShadow=e,this._defaultSubShader.noticeShaderChange(),this._defaultSubShader.noticeValueChange())}get castReflection(){return this._defaultSubShader.shaderState.castReflection}set castReflection(e){this._defaultSubShader.shaderState.castReflection=e}get blendMode(){return this._defaultSubShader.blendMode}set blendMode(e){this._defaultSubShader.blendMode=e}get depthCompare(){return this._defaultSubShader.depthCompare}set depthCompare(e){this._defaultSubShader.depthCompare=e;for(let t of this._shader.passShader.values())for(let r of t)r.depthCompare=e}get transparent(){return this._defaultSubShader.shaderState.transparent}set transparent(e){this._defaultSubShader.shaderState.transparent=e,e&&(this._defaultSubShader.renderOrder=3e3)}get cullMode(){return this._defaultSubShader.cullMode}set cullMode(e){if(this._defaultSubShader.cullMode!=e){for(let t of this._shader.passShader.values())for(let r of t)r.cullMode=e;this._defaultSubShader.cullMode=e}}get depthWriteEnabled(){return this._defaultSubShader.depthWriteEnabled}set depthWriteEnabled(e){this._defaultSubShader.depthWriteEnabled=e}set useBillboard(e){this._defaultSubShader.setDefine("USE_BILLBOARD",e)}get topology(){return this._defaultSubShader.topology}set topology(e){this._defaultSubShader.topology=e}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}getPass(e){return this._shader.getSubShaders(e)}getAllPass(){return this._shader.getSubShaders(H.COLOR)}clone(){let e=new yt;return e.shader=this.shader.clone(),e}destroy(e){this.name=null,this.instanceID=null,this._shader.destroy(),this._shader=null}setDefine(e,t){this.shader.setDefine(e,t)}setTexture(e,t){this._shader.setTexture(e,t)}setStorageBuffer(e,t){this._shader.setStorageBuffer(e,t)}setUniformBuffer(e,t){this._shader.setStorageBuffer(e,t)}setUniformFloat(e,t){this._shader.setUniformFloat(e,t)}setUniformVector2(e,t){this._shader.setUniformVector2(e,t)}setUniformVector3(e,t){this._shader.setUniformVector3(e,t)}setUniformVector4(e,t){this._shader.setUniformVector4(e,t)}setUniformColor(e,t){this._shader.setUniformColor(e,t)}getUniformFloat(e){return this._shader.getUniform(e).data}getUniformV2(e){return this._shader.getUniformVector2(e)}getUniformV3(e){return this._shader.getUniformVector3(e)}getUniformV4(e){return this._shader.getUniformVector4(e)}getUniformColor(e){return this._shader.getUniformColor(e)}getTexture(e){return this._shader.getTexture(e)}getStorageBuffer(e){return this._shader.getStorageBuffer(e)}getStructStorageBuffer(e){return this._shader.getStructStorageBuffer(e)}getUniformBuffer(e){return this._shader.getUniformBuffer(e)}applyUniform(){this._shader.applyUniform()}}const Eh=`
|
|
5534
|
+
`}return r}return r}}function Xt(s){switch(s){case"int":return"i32";case"int[]":return"array<i32>";case"uint":return"u32";case"uint[]":return"array<u32>";case"float":return"f32";case"float[]":return"array<f32>";case"vec2":return"vec2<f32>";case"vec3":return"vec3<f32>";case"vec4":return"vec4<f32>";case"vec2[]":return"array<vec2<f32>>";case"vec3[]":return"array<vec3<f32>>";case"vec4[]":return"array<vec4<f32>>";case"ivec2":return"vec2<i32>";case"ivec3":return"vec3<i32>";case"ivec4":return"vec4<i32>";case"ivec2[]":return"array<vec2<i32>>";case"ivec3[]":return"array<vec3<i32>>";case"ivec4[]":return"array<vec4<i32>>";case"mat2":return"mat2x2<f32>";case"mat2x2":return"mat2x2<f32>";case"mat2x3":return"mat2x3<f32>";case"mat2x4":return"mat2x4<f32>";case"mat2[]":return"array<mat2x2<f32>>";case"mat2x2[]":return"array<mat2x2<f32>>";case"mat2x3[]":return"array<mat2x3<f32>>";case"mat2x4[]":return"array<mat2x4<f32>>";case"mat3":return"mat3x3<f32>";case"mat3x2":return"mat3x2<f32>";case"mat3x3":return"mat3x3<f32>";case"mat3x4":return"mat3x4<f32>";case"mat3[]":return"array<mat3x3<f32>>";case"mat3x2[]":return"array<mat3x2<f32>>";case"mat3x3[]":return"array<mat3x3<f32>>";case"mat3x4[]":return"array<mat3x4<f32>>";case"mat4":return"mat4x4<f32>";case"mat4x2":return"mat4x2<f32>";case"mat4x3":return"mat4x3<f32>";case"mat4x4":return"mat4x4<f32>";case"mat4[]":return"array<mat4x4<f32>>";case"mat4x2[]":return"array<mat4x2<f32>>";case"mat4x3[]":return"array<mat4x3<f32>>";case"mat4x4[]":return"array<mat4x4<f32>>";case"texture2D":return"texture_2d<f32>"}return s}class ph{_lexer;_rootNode;constructor(e){this._lexer=e,this._rootNode=new _e,this.parse()}get lexer(){return this._lexer}parse(){for(;this.peekToken(0).Type!==v.EOF;){if(this.peekToken(0).Type==v.SEMICOLON){this.skipToken(1);continue}let e=this.parseStatement();e!==null&&this._rootNode.addNode(e)}}parseStatement(){let e=this.peekToken();if(e.Type==v.LAYOUT&&this.peekToken(1).Type==v.LEFTSAMLL)return za.parse(this._lexer);if(e.Type==v.STRUCT)return this.skipToken(1),Vr.parse(this._lexer);if((e.isBuiltinType()||e.Type==v.VOID)&&this.peekToken(1).Type==v.IDENT&&this.peekToken(2).Type==v.LEFTSAMLL)return Ts.parse(this._lexer);if(e.Type==v.CONST&&this.peekToken(1).isDataType())return ze.parse(this._lexer);if(e.isDataType()&&this.peekToken(1).Type==v.IDENT)return ze.parse(this._lexer);if(e.Type==v.OUT&&this.peekToken(1).isDataType()&&this.peekToken(2).Type==v.IDENT)return ze.parse(this._lexer);if(e.Type==v.PRECISION)return Ns.parse(this._lexer);throw"Error parsing statement: Unexpected character"}skipToken(e){this._lexer.skipToken(e)}peekToken(e=0){return this._lexer.peekToken(e)}getNextToken(){return this._lexer.GetNextToken()}get ASTRoot(){return this._rootNode}}class mh{static VertexShader="VertexShader";static FragmentShader="FragmentShader";static convertGLSL(e){var t=new ch(e),r=new uh(t),i=new ph(r),a=new fh(i);return a.generateWGSL()}}class po{setID=0;bindingID=0;name="";type=""}class mo{name="";type="";locationID=0;builtinName="";isBuiltinAttribute(){return this.builtinName!=""}}class Ah{uniformInfo=[];inputAttribute=[];outputAttribute=[];sourceCode=""}var ar=(s=>(s[s.vertex=0]="vertex",s[s.fragment=1]="fragment",s[s.computer=2]="computer",s))(ar||{});class Uh{blendMode=ae.NONE;depthCompare=rt.less_equal;depthWriteEnabled=!0;frontFace="ccw";cullMode=Jt.back;topology=qs.triangle_list;depthBias=10;useLight=!1;useProbe=!1;acceptGI=!1;acceptShadow=!1;castShadow=!1;castReflection=!0;receiveEnv=!1;renderLayer=1e3;renderOrder=2e3;unclippedDepth=!1;transparent=!1;multisample=0;label;useZ=!0;splitTexture=!1;alphaCutoff;useFragDepth=!1;writeMasks=[];setFromMapValues(e){e.has("blendMode")&&(this.blendMode=this.convertBlendMode(e.get("blendMode"))),e.has("depthCompare")&&(this.depthCompare=e.get("depthCompare")),e.has("depthWriteEnabled")&&(this.depthWriteEnabled=e.get("depthWriteEnabled")),e.has("frontFace")&&(this.frontFace=e.get("frontFace")),e.has("cullMode")&&(this.cullMode=e.get("cullMode")),e.has("topology")&&(this.topology=e.get("topology")),e.has("depthBias")&&(this.depthBias=e.get("depthBias")),e.has("useLight")&&(this.useLight=e.get("useLight")),e.has("useProbe")&&(this.useProbe=e.get("useProbe")),e.has("acceptGI")&&(this.acceptGI=e.get("acceptGI")),e.has("acceptShadow")&&(this.acceptShadow=e.get("acceptShadow")),e.has("castShadow")&&(this.castShadow=e.get("castShadow")),e.has("receiveEnv")&&(this.receiveEnv=e.get("receiveEnv")),e.has("renderLayer")&&(this.renderLayer=e.get("renderLayer")),e.has("renderOrder")&&(this.renderOrder=e.get("renderOrder")),e.has("unclippedDepth")&&(this.unclippedDepth=e.get("unclippedDepth")),e.has("multisample")&&(this.multisample=e.get("multisample")),e.has("label")&&(this.label=e.get("label")),e.has("useZ")&&(this.useZ=e.get("useZ"))}convertBlendMode(e){switch(e){case"ABOVE":return ae.ABOVE;case"ALPHA":return ae.ALPHA;case"NORMAL":return ae.NORMAL;case"ADD":return ae.ADD;case"BELOW":return ae.BELOW;case"ERASE":return ae.ERASE;case"MUL":return ae.MUL;case"SCREEN":return ae.SCREEN;case"DIVD":return ae.DIVD;case"SOFT_ADD":return ae.SOFT_ADD}return ae.NONE}}class xh extends wr{uniformNodes=[];_onChange=!0;constructor(){super(),this.bufferType=tr.MaterialDataUniformGPUBuffer}initDataUniform(e){this.uniformNodes=e;let t=0;for(const r in e){const i=e[r];i||console.error(r,"is empty"),t+=i.size*4}t=Math.floor(t/256+1)*256,this.createBuffer(GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,t/4,null,"MaterialDataUniformGPUBuffer");for(const r in e){const i=e[r];i||console.error(r,"is empty");let a=this.memory.allocation_node(i.size*4);i.memoryInfo=a,i.bindOnChange=()=>this.onChange()}}onChange(){this._onChange=!0}apply(){if(this.uniformNodes.length!=0&&this._onChange){for(const e in this.uniformNodes)this.uniformNodes[e].update();super.apply(),this._onChange=!1}}}class Dr{static renderShaderModulePool;static renderShader;static init(){this.renderShaderModulePool=new Map,this.renderShader=new Map}}class me{reference;static _ins;static getInstance(){return this._ins||=new me,this._ins}attached(e,t){this.reference||=new Map;let r=this.reference.get(e);r||=new Map,r.set(t,e),this.reference.set(e,r)}detached(e,t){let r=this.reference.get(e);r&&r.delete(t)}hasReference(e){let t=this.reference.get(e);return t?t.size>0:!1}getReferenceCount(e){let t=this.reference.get(e);return t?t.size:0}getReference(e){let t=this.reference.get(e);return t||null}}class Ao{static pipelineMap=new Map;static getSharePipeline(e){let t=this.pipelineMap.get(e);return t||null}static setSharePipeline(e,t){this.pipelineMap.set(e,t)}}class Oe extends Ks{passType=H.COLOR;useRz=!1;vsName;fsName;shaderState;textures;pipeline;bindGroupLayouts;envMap;prefilterMap;reflectionMap;_sourceVS;_sourceFS;_destVS;_destFS;_vsShaderModule;_fsShaderModule;_textureGroup=-1;_textureChange=!1;_groupsShaderReflectionVarInfos;outBufferMask;constructor(e,t){super(),this.vsName=e.toLowerCase(),this.fsName=t.toLowerCase(),this.vsName in O||console.error("Shader Not Register, Please Register Shader!",this.vsName),this.fsName in O||console.error("Shader Not Register, Please Register Shader!",this.fsName),O[this.vsName]&&(this._sourceVS=O[this.vsName]),O[this.fsName]&&(this._sourceFS=O[this.fsName]),this.textures={},this.bindGroups=[],this.shaderState=new Uh,this.materialDataUniformBuffer=new xh,this.materialDataUniformBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,this._bufferDic.set("global",this.materialDataUniformBuffer),this._bufferDic.set("materialUniform",this.materialDataUniformBuffer)}get renderOrder(){return this.shaderState.renderOrder}set renderOrder(e){this.shaderState.renderOrder!=e&&(this._valueChange=!0),this.shaderState.renderOrder=e}get doubleSide(){return this.shaderState.cullMode==Jt.none}set doubleSide(e){let t=e?Jt.none:this.cullMode;this.shaderState.cullMode!=t&&(this._valueChange=!0),this.shaderState.cullMode=t}get depthWriteEnabled(){return this.shaderState.depthWriteEnabled}set depthWriteEnabled(e){this.shaderState.depthWriteEnabled!=e&&(this._valueChange=!0),this.shaderState.depthWriteEnabled=e}get cullMode(){return this.shaderState.cullMode}set cullMode(e){this.shaderState.cullMode!=e&&(this._valueChange=!0),this.shaderState.cullMode=e}get frontFace(){return this.shaderState.frontFace}set frontFace(e){this.shaderState.frontFace!=e&&(this._valueChange=!0),this.shaderState.frontFace=e}get depthBias(){return this.shaderState.depthBias}set depthBias(e){this.shaderState.depthBias!=e&&(this._valueChange=!0),this.shaderState.depthBias=e}get topology(){return this.shaderState.topology}set topology(e){this.shaderState.topology!=e&&(this._valueChange=!0),this.shaderState.topology=e}get blendMode(){return this.shaderState.blendMode}set blendMode(e){this.shaderState.blendMode!=e&&(this._valueChange=!0,e!=ae.NORMAL&&e!=ae.NONE&&(this.renderOrder=3e3)),this.shaderState.blendMode=e}get depthCompare(){return this.shaderState.depthCompare}set depthCompare(e){this.shaderState.depthCompare!=e&&(this._valueChange=!0),this.shaderState.depthCompare=e}setShaderEntry(e="",t=""){this.vsEntryPoint=e,this.fsEntryPoint=t}setUniform(e,t){super.setUniform(e,t),this.materialDataUniformBuffer.onChange()}setTexture(e,t){t&&this.textures[e]!=t&&(this.textures[e]&&this.textures[e].unBindStateChange(this),this._textureChange=!0,this.textures[e]=t,e=="envMap"?this.envMap=t:e=="prefilterMap"?this.prefilterMap=t:e=="reflectionMap"&&(this.reflectionMap=t),t.bindStateChange(()=>{this._textureChange=!0},this))}get baseColor(){return this.getUniform("baseColor")}set baseColor(e){this.setUniform("baseColor",e)}getTexture(e){return this.textures[e]}genRenderPipeline(e,t){let r=this.createGroupLayouts();this.createPipeline(e,t,r)}reBuild(e,t){this.compileShader(ar.vertex,this._destVS,t),this.compileShader(ar.fragment,this._destFS,t),this.genRenderPipeline(e,t)}apply(e,t,r){this.materialDataUniformBuffer.apply(),this._textureChange&&this._textureGroup!=-1&&(this._textureChange=!1,this.genGroups(this._textureGroup,this.shaderReflection.groups,!0)),this._valueChange&&(this._shaderChange&&(this.preCompile(e),this._shaderChange=!1),this.shaderVariant=Bt.genRenderShaderVariant(this),this.reBuild(e,t),this._valueChange=!1,r&&r())}preCompile(e){this.preDefine(e),this.preCompileShader(ar.vertex,this._sourceVS.concat()),this.preCompileShader(ar.fragment,this._sourceFS.concat()),this.genReflection()}applyPostDefine(e,t){return t.renderTargetTextures.length>1?(this.defineValue.USE_WORLDPOS=!0,this.defineValue.USEGBUFFER=!0):(this.defineValue.USE_WORLDPOS=!1,this.defineValue.USEGBUFFER=!1),m.setting.render.useCompressGBuffer?this.defineValue.USE_COMPRESSGBUFFER=!0:this.defineValue.USE_COMPRESSGBUFFER=!1,rr.parse(e,this.defineValue)}setBindGroup(e,t){this.bindGroups[e]=t}checkBuffer(e,t){}preCompileShader(e,t,r){let i=t;if(i.indexOf("version ")!=-1){var a=mh.convertGLSL(i);i=a.sourceCode}for(const o in this.constValues)if(Object.prototype.hasOwnProperty.call(this.constValues,o)){const n=this.constValues[o];i=i.replaceAll(`&${o}`,n.toString())}switch(e){case ar.vertex:this._destVS=i;break;case ar.fragment:this._destFS=i;break}}compileShader(e,t,r){let i=t;i=this.applyPostDefine(i,r);let a=t;for(let n in this.defineValue)a+=`${n}=${this.defineValue[n]},`;let o=Dr.renderShaderModulePool.get(a);switch(o||(i=this.applyPostDefine(i,r),o=R.device.createShaderModule({label:e==ar.vertex?this.vsName:this.fsName,code:i}),o.getCompilationInfo().then(n=>{n.messages.length>0&&(console.log(i),console.log(n))}),Dr.renderShaderModulePool.set(a,o)),e){case ar.vertex:this._vsShaderModule=o,this._destVS=i;break;case ar.fragment:this._fsShaderModule=o,this._destFS=i;break}}getGroupLayout(e,t){let r=[];for(let i=0;i<t.length;i++){const a=t[i];if(a)if(a.varType=="uniform"){this._bufferDic.has(a.varName)||console.error(`not set ${a.varName} buffer`);let o=this._bufferDic.get(a.varName).visibility,n={binding:a.binding,visibility:o,buffer:{type:"uniform"}};r.push(n)}else if(a.varType=="storage-read"){this._bufferDic.has(a.varName)||console.error(`not set ${a.varName} buffer`);let o=this._bufferDic.get(a.varName).visibility,n={binding:a.binding,visibility:o,buffer:{type:"read-only-storage"}};r.push(n)}else if(a.varType=="var")switch(a.dataType){case"sampler":{let o=a.varName.replace("Sampler",""),n=this.textures[o]?this.textures[o]:m.res.redTexture,l={binding:a.binding,visibility:n.visibility,sampler:n.samplerBindingLayout};r.push(l),this._textureGroup=e}break;case"sampler_comparison":{let o=a.varName.replace("Sampler",""),n=this.textures[o]?this.textures[o]:m.res.redTexture,l={binding:a.binding,visibility:n.visibility,sampler:n.sampler_comparisonBindingLayout};r.push(l),this._textureGroup=e}break;case"texture_2d<f32>":case"texture_2d_array<f32>":case"texture_cube<f32>":case"texture_depth_2d":case"texture_depth_2d_array":case"texture_depth_cube":case"texture_depth_cube_array":{let o=this.textures[a.varName]?this.textures[a.varName]:m.res.redTexture,n={binding:a.binding,visibility:o.visibility,texture:o.textureBindingLayout};r.push(n),this._textureGroup=e,me.getInstance().attached(o,this)}break;case"texture_external":{let o=this.textures[a.varName]?this.textures[a.varName]:m.res.redTexture,n={binding:a.binding,visibility:o.visibility,externalTexture:{}};r.push(n),this._textureGroup=e,me.getInstance().attached(o,this)}break;default:{let o=this.textures[a.varName]?this.textures[a.varName]:m.res.redTexture,n={binding:a.binding,visibility:o.visibility,texture:o.textureBindingLayout};r.push(n),this._textureGroup=e,me.getInstance().attached(o,this)}break}else{debugger;console.error("bind group can't empty")}}return r}_cacheEntries;genGroups(e,t,r=!1){if(!this.bindGroups[e]||r){const i=t[e];let a=[];for(let n=0;n<i.length;n++){const l=i[n];if(l){if(l.varType=="uniform"){let h=this._bufferDic.get(l.varName);if(h){if(h.bufferType==tr.MaterialDataUniformGPUBuffer){let c=[];for(let f=0;f<l.dataFields.length;f++){const g=l.dataFields[f];this.uniforms[g.name]||console.error(`shader-${this.vsName}:${this.fsName} ${g.name}is empty`),c.push(this.uniforms[g.name])}this.materialDataUniformBuffer.initDataUniform(c)}let u={binding:l.binding,resource:{buffer:h.buffer,offset:0,size:h.memory.shareDataBuffer.byteLength}};a.push(u),this.checkBuffer(l.varName,h)}else console.error(`shader${this.vsName}-${this.fsName}`,`buffer ${l.varName} is missing!`)}else if(l.varType=="storage-read"){let h=this._bufferDic.get(l.varName);if(h){let u={binding:l.binding,resource:{buffer:h.buffer,offset:0,size:h.memory.shareDataBuffer.byteLength}};a.push(u),this.checkBuffer(l.varName,h)}else console.error(`buffer ${l.varName} is missing!`)}else if(l.varType=="var")if(l.dataType=="sampler"){let h=l.varName.replace("Sampler",""),u=this.textures[h];if(u||(u=m.res.blackTexture,this.setTexture(h,u)),u){let c={binding:l.binding,resource:u.gpuSampler};a.push(c)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}else if(l.dataType=="sampler_comparison"){let h=l.varName.replace("Sampler",""),u=this.textures[h];if(u){let c={binding:l.binding,resource:u.gpuSampler_comparison};a.push(c)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}else{let h=this.textures[l.varName];if(h||(h=m.res.whiteTexture,this.setTexture(l.varName,h)),h){let u={binding:l.binding,resource:h.getGPUView()};a.push(u)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}}}let o=R.device.createBindGroup({layout:this.bindGroupLayouts[e],entries:a});this.bindGroups[e]=o}}createPipeline(e,t,r){let i=e,a=this.shaderState,o=[];for(const h of t.renderTargetTextures)o.push({format:h.format});for(let h=0;h<o.length;h++){const u=o[h];a.writeMasks&&a.writeMasks.length>0&&(u.writeMask=a.writeMasks[h])}if(t.outColor!=-1){let h=o[t.outColor];a.blendMode!=ae.NONE?h.blend=lh.getBlend(a.blendMode):delete h.blend}let n={label:this.vsName+"|"+this.fsName,layout:r,primitive:{topology:a.topology,cullMode:a.cullMode,frontFace:a.frontFace},vertex:void 0};this.vsEntryPoint!=""&&(n.vertex={module:this._vsShaderModule,entryPoint:this.vsEntryPoint,buffers:i.vertexBuffer.vertexBufferLayouts}),this.fsEntryPoint!=""&&(n.fragment={module:this._fsShaderModule,entryPoint:this.fsEntryPoint,targets:o}),a.multisample>0&&(n.multisample={count:a.multisample}),(t.zPreTexture||t.depthTexture)&&(a.blendMode!=ae.NONE,m.setting.render.zPrePass&&t.zPreTexture&&a.useZ?n.depthStencil={depthWriteEnabled:!1,depthCompare:rt.less,format:t.zPreTexture.format}:n.depthStencil={depthWriteEnabled:a.depthWriteEnabled,depthCompare:a.depthCompare,format:t.depthTexture.format});let l=Ao.getSharePipeline(this.shaderVariant);l?this.pipeline=l:(this.pipeline=F.createPipeline(n),Ao.setSharePipeline(this.shaderVariant,this.pipeline))}createGroupLayouts(){this._groupsShaderReflectionVarInfos=[];let e=this.shaderReflection;this.bindGroupLayouts=[fo.getGlobalDataBindGroupLayout()];for(let r=1;r<e.groups.length;r++){let i=e.groups[r];if(i){let a=this.getGroupLayout(r,i);this._groupsShaderReflectionVarInfos[r]=i;let o=R.device.createBindGroupLayout({entries:a,label:`vs${this.vsName} fs${this.fsName} ${i.length}`});this.bindGroupLayouts[r]=o}else console.error("can't set empty group!",r)}let t=R.device.createPipelineLayout({bindGroupLayouts:this.bindGroupLayouts});return this._groupsShaderReflectionVarInfos[1]&&this.genGroups(1,this._groupsShaderReflectionVarInfos),this._groupsShaderReflectionVarInfos[2]&&this.genGroups(2,this._groupsShaderReflectionVarInfos),this._groupsShaderReflectionVarInfos[3]&&this.genGroups(3,this._groupsShaderReflectionVarInfos),t}preDefine(e){let t=e.hasAttribute(V.TEXCOORD_1),r=e.hasAttribute(V.joints0),i=e.hasAttribute(V.a_morphPositions_0),a=e.hasAttribute(V.TANGENT),o=e.hasAttribute(V.color),n=this.shaderState.acceptGI,l=this.shaderState.useLight;t&&(this.defineValue.USE_SECONDUV=!0),r&&i?this.defineValue.USE_METAHUMAN=!0:(this.defineValue.USE_SKELETON=r,this.defineValue.USE_MORPHTARGETS=i),"USE_TANGENT"in this.defineValue||(this.defineValue.USE_TANGENT=a),this.defineValue.USE_GI=n,this.defineValue.USE_SHADOWMAPING=this.shaderState.acceptShadow,this.defineValue.USE_LIGHT=l,this.defineValue.USE_VERTXCOLOR=o,m.setting.pick.mode=="pixel"&&(this.defineValue.USE_WORLDPOS=!0),m.setting.gi.enable?this.defineValue.USEGI=!0:this.defineValue.USEGI=!1,m.setting.render.debug&&(this.defineValue.USE_DEBUG=!0,this.defineValue.DEBUG_CLUSTER=!0),this.shaderState.useLight?this.defineValue.USE_LIGHT=!0:this.defineValue.USE_LIGHT=!1,m.setting.render.useLogDepth?(this.defineValue.USE_LOGDEPTH=!0,this.shaderState.useFragDepth=!0):this.defineValue.USE_LOGDEPTH=!1,this.shaderState.useFragDepth?this.defineValue.USE_OUTDEPTH=!0:this.defineValue.USE_OUTDEPTH=!1,this.defineValue.USE_PCF_SHADOW=m.setting.shadow.type=="PCF",this.defineValue.USE_HARD_SHADOW=m.setting.shadow.type=="HARD",this.defineValue.USE_SOFT_SHADOW=m.setting.shadow.type=="SOFT",this.defineValue.USE_CSM=Zt.Cascades>1,this.defineValue.USE_IES_PROFILE=gr.use}genReflection(){this.shaderVariant=Bt.genRenderShaderVariant(this);let e=Bt.poolGetReflection(this.shaderVariant);if(e)this.shaderReflection=e;else{let t=rr.parse(this._destVS,this.defineValue);t=rr.parse(t,this.defineValue),Bt.getShaderReflection2(t,this);let r=rr.parse(this._destFS,this.defineValue);r=rr.parse(r,this.defineValue),Bt.getShaderReflection2(r,this),Bt.final(this)}this.shaderState.splitTexture=this.shaderReflection.useSplit}destroy(e){for(const t in this.textures)if(Object.prototype.hasOwnProperty.call(this.textures,t)){const r=this.textures[t];if(me.getInstance().detached(r,this),e&&!me.getInstance().hasReference(r))r.destroy(e);else{r.destroy(!1);let i=me.getInstance().getReference(r);if(i){let a=[];i.forEach((o,n)=>{"name"in o?a.push(o.name):a.push("NaN")})}}}this.bindGroups.length=0,this.shaderState=null,this.textures=null,this.pipeline=null,this.bindGroupLayouts=null,this._sourceVS=null,this._sourceFS=null,this._destVS=null,this._destFS=null,this._vsShaderModule=null,this._fsShaderModule=null,this.materialDataUniformBuffer.destroy(e),this.materialDataUniformBuffer=null}static destroyShader(e){Dr.renderShader.has(e)&&(Dr.renderShader.get(e).destroy(),Dr.renderShader.delete(e))}static getShader(e){return Dr.renderShader.get(e)}static createShader(e,t){let r=new Oe(e,t);return Dr.renderShader.set(r.instanceID,r),r.instanceID}}class Bh extends Oe{constructor(){super("sky_vs_frag_wgsl","SkyGBuffer_fs"),this.passType=H.GI,this.setUniformVector3("eyesPos",new d),this.setUniformFloat("exposure",1),this.setUniformFloat("roughness",0);let e=this.shaderState;e.frontFace="ccw",e.cullMode=Jt.front,e.depthWriteEnabled=!1,e.depthCompare=rt.less}}class vh extends Oe{transparency;constructor(){super("gbuffer_vs","gbuffer_fs"),this.setShaderEntry("VertMain","FragMain"),this.passType=H.GI,this.setUniformColor("baseColor",new P),this.setUniformColor("emissiveColor",new P),this.setUniformFloat("emissiveIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("alphaCutoff",1),this.blendMode=ae.NONE,this.setTexture("normalMap",m.res.normalTexture)}}class Ch extends Oe{constructor(){super("shadowCastMap_vert","directionShadowCastMap_frag"),this.passType=H.SHADOW,this.setShaderEntry("main"),this.setUniformFloat("cameraFar",5e3),this.setUniformVector3("lightWorldPos",d.ZERO),this.shaderState.receiveEnv=!1,this.shaderState.castShadow=!1,this.shaderState.acceptShadow=!1,this.setDefine("USE_ALPHACUT",!0)}}class Sh extends Oe{constructor(){super("castPointShadowMap_vert","shadowCastMap_frag"),this.passType=H.POINT_SHADOW,this.setShaderEntry("main","main"),this.setUniformFloat("cameraFar",5e3),this.setUniformVector3("lightWorldPos",d.ZERO),this.shaderState.receiveEnv=!1,this.shaderState.castShadow=!1,this.shaderState.acceptShadow=!1,this.setDefine("USE_ALPHACUT",!0)}}class _h extends Oe{constructor(){super("ZPass_shader_vs","ZPass_shader_vs"),this.passType=H.DEPTH,this.setShaderEntry("main"),this.useRz=!1;let e=this.shaderState;e.receiveEnv=!1}}class ca{static createGIPass(e,t){if(Gt.hasMask(e.rendererMask,Be.Sky)){if(!t.passShader.get(H.GI)){let i=t.getSubShaders(H.COLOR)[0],a=new Bh;a.setTexture("baseMap",i.getTexture("baseMap")),a.cullMode=i.cullMode,a.frontFace=i.frontFace,t.addRenderPass(a,0),a.preCompile(e.geometry)}}else this.castGBufferPass(e,t)}static castGBufferPass(e,t){let r=t.getDefaultShaders();for(let i=0;i<r.length;i++){const a=r[i];let o=t.getSubShaders(H.GI);if(!o||o.length==0||o.length<i){let n=new vh;n.setTexture("baseMap",a.getTexture("baseMap")),n.setTexture("normalMap",a.getTexture("normalMap")),n.setTexture("emissiveMap",a.getTexture("emissiveMap")),n.setUniform("baseColor",a.getUniform("baseColor")),n.setUniform("envIntensity",a.getUniform("envIntensity")),n.setUniform("emissiveColor",a.getUniform("emissiveColor")),n.setUniform("emissiveIntensity",a.getUniform("emissiveIntensity")),n.setUniform("alphaCutoff",a.getUniform("alphaCutoff")),n.cullMode=a.cullMode,n.frontFace=a.frontFace,n.preCompile(e.geometry),t.addRenderPass(n)}}}static createShadowPass(e,t){let r=Gt.hasMask(e.rendererMask,Be.SkinnedMesh),i=e.geometry.hasAttribute(V.TANGENT),a=e.geometry.hasAttribute(Yt.MORPH_POSITION_PREFIX+"0"),o=e.geometry.hasAttribute(Yt.MORPH_NORMAL_PREFIX+"0"),n=t.getSubShaders(H.COLOR);for(let l=0;l<n.length;l++){const h=n[l];let u=t.getSubShaders(H.SHADOW);if(!u||u.length<l+1){let f=new Ch;f.setTexture("baseMap",h.getTexture("baseMap")),f.setUniform("alphaCutoff",h.getUniform("alphaCutoff")),i&&f.setDefine("USE_TANGENT",i),r&&f.setDefine("USE_SKELETON",r),a&&f.setDefine("USE_MORPHTARGETS",a),o&&f.setDefine("USE_MORPHNORMALS",o),h.cullMode=="none"?f.shaderState.cullMode="none":h.cullMode=="back"?f.shaderState.cullMode="front":h.cullMode=="front"&&(f.shaderState.cullMode="back"),f.preCompile(e.geometry),t.addRenderPass(f)}let c=t.getSubShaders(H.POINT_SHADOW);if(!c||c.length<l+1){let f=new Sh;f.setTexture("baseMap",h.getTexture("baseMap")),f.setUniform("alphaCutoff",h.getUniform("alphaCutoff")),f.setDefine("USE_ALPHACUT",1);for(let g=0;g<1;g++)i&&f.setDefine("USE_TANGENT",i),r&&f.setDefine("USE_SKELETON",r),a&&f.setDefine("USE_MORPHTARGETS",a),o&&f.setDefine("USE_MORPHNORMALS",o),f.shaderState.cullMode="front",f.preCompile(e.geometry);t.addRenderPass(f)}}}static createDepthPass(e,t){let r=t.getSubShaders(H.COLOR),i=e.geometry.hasAttribute("TANGENT"),a=e.geometry.hasAttribute(Yt.MORPH_POSITION_PREFIX+"0"),o=e.geometry.hasAttribute(Yt.MORPH_NORMAL_PREFIX+"0"),n=Gt.hasMask(e.rendererMask,Be.SkinnedMesh);for(let l=0;l<r.length;l++){const h=r[l];let u=t.getSubShaders(H.DEPTH);if(!u&&h.shaderState.useZ&&(!u||u.length<l)){let c=new _h;c.setTexture("baseMap",h.getTexture("baseMap")),i||c.setDefine("USE_TANGENT",i),n&&c.setDefine("USE_SKELETON",n),a&&c.setDefine("USE_MORPHTARGETS",a),o&&c.setDefine("USE_MORPHNORMALS",o),c.cullMode=h.cullMode,c.frontFace=h.frontFace,c.preCompile(e.geometry),t.addRenderPass(c)}}}static createReflectionPass(e,t){let r=t.getDefaultShaders();for(let n=0;n<r.length;n++){const l=r[n];let h=t.getSubShaders(H.REFLECTION);if(!h||h.length==0||h.length<n){let u=new Oe(l.vsName,l.fsName);u.vsEntryPoint=l.vsEntryPoint,u.fsEntryPoint=l.fsEntryPoint,u.passType=H.REFLECTION;for(const c in l.shaderState){var i=l.shaderState[c];u.shaderState[c]=i}for(const c in l.textures){var a=l.getTexture(c);u.setTexture(c,a)}for(const c in l.uniforms){var o=l.getUniform(c);u.setUniform(c,o)}for(const c in l.defineValue){var o=l.defineValue[c];u.setDefine(c,o)}u.setDefine("USE_CASTREFLECTION",!0),u.preCompile(e.geometry),t.addRenderPass(u)}}}}class ui{static _v1=new d;static _v2=new d;entities;box;subTrees=[];parent;level;static maxSplitLevel=6;static autoSplitLevel=3;index;uuid;constructor(e,t=0,r=null,i=0){this.parent=r,this.box=e.clone(),this.level=i,this.index=t,this.uuid=i+"_"+t,this.entities=new Map}tryInsertEntity(e){let t=e.renderer.object3D.bound;if(this.level==0||this.box.containsBox(t)){this.subTrees.length==0&&this.level<ui.maxSplitLevel&&this.splitTree();let r;if(this.subTrees.length>0){for(let i of this.subTrees)if(i.tryInsertEntity(e)){r=!0;break}}return r||e.enterNode(this),!0}return!1}splitTree(){if(this.subTrees.length==0){const e=ui._v1,t=this.box.extents.clone();let r=this.level+1,i=0;for(let a=0;a<2;a++)for(let o=0;o<2;o++)for(let n=0;n<2;n++){const l=new Re;this.box.min.add(e.set(a,o,n).multiply(t),l.min),l.min.add(t,l.max),l.setFromMinMax(l.min,l.max);let h=new ui(l,i++,this,r);this.subTrees.push(h)}}}__rayCastTempVector=new d;rayCasts(e,t){if(this.level==0||e.intersectBox(this.box,this.__rayCastTempVector)){this.entities.size>0&&t.push(...this.entities.values());for(let r of this.subTrees)r.rayCasts(e,t);return!0}return!1}frustumCasts(e,t){if(this.level==0||e.containsBox2(this.box)>0){if(this.entities.size>0)for(const r of this.entities.values())(this.level>ui.autoSplitLevel||e.containsBox2(r.renderer.object3D.bound)>0)&&t.push(r);for(let r of this.subTrees)r.frustumCasts(e,t);return!0}return!1}getRenderNode(e,t){if(this.level==0||e.containsBox2(this.box)>0){if(this.entities.size>0)for(const r of this.entities.values())(this.level>ui.autoSplitLevel||e.containsBox2(r.renderer.object3D.bound)>0)&&(r.renderer.renderOrder<3e3?t.opaqueList.push(r.renderer):r.renderer.renderOrder>=3e3&&t.transparentList.push(r.renderer));for(let r of this.subTrees)r.getRenderNode(e,t);return!0}return!1}boxCasts(e,t){if(e.intersectsBox(this.box)){this.entities.size>0&&t.push(...this.entities.values());for(let r of this.subTrees)r.boxCasts(e,t);return!0}return!1}clean(){for(let e of this.entities.values())e.leaveNode();return this.entities.clear(),this}}class Fh{_pool=[];_worldPosition=new d;_viewPosition=new d;_zSortList=[];pop(){return this._pool.pop()||{}}recycle(){for(let e of this._zSortList)e.z=0,e.userData=null,e.obj3d=null,this._pool.push(e);this._zSortList.length=0}sort(e,t,r,i){this._zSortList=[];for(let a of t){let o=this.pop();o.userData=a,o.obj3d=r(a),o.z=this.worldToCameraDepth(o.obj3d,e),this._zSortList.push(o)}this._zSortList.sort((a,o)=>a.z-o.z>0?1:-1),i||=[];for(let a of this._zSortList)i.push(a.userData);return this.recycle(),i}worldToCameraDepth(e,t){t||=e.transform.view3D.camera;let r=0;return t&&(this._worldPosition.copyFrom(e.transform.worldPosition),t.worldToScreenPoint(this._worldPosition,this._viewPosition),r=this._viewPosition.z),r}}let yh=new Fh;var fa=(s=>(s[s.None=2]="None",s[s.StaticBatch=4]="StaticBatch",s[s.DynamicBatch=8]="DynamicBatch",s[s.Hiden=16]="Hiden",s))(fa||{});class Uo{static addMask(e,t){return e|t}static removeMask(e,t){return e&~t}static hasMask(e,t){return(e&t)!=0}}class bh{opaqueList=[];transparentList=[];sky;clean(){this.opaqueList.length=0,this.transparentList.length=0}}class Qh{renderGroup;constructor(){this.renderGroup=new Map}collect_add(e){let t="",r="";t+=e.geometry.instanceID;for(let a=0;a<e.materials.length;a++){const o=e.materials[a];r+=o.shader.getDefaultColorShader().shaderVariant}let i=t+r;this.renderGroup.has(i)||this.renderGroup.set(i,{bundleMap:new Map,key:i,renderNodes:[]}),this.renderGroup.get(i).renderNodes.indexOf(e)==-1&&this.renderGroup.get(i).renderNodes.push(e)}}class Rh{renderShaderUpdateList=new Map;renderNodeList=new Map;collect_add(e){let t=e.transform.view3D;t&&e.materials&&e.materials.forEach(r=>{let i=this.renderShaderUpdateList.get(t);i||(i=new Map,this.renderShaderUpdateList.set(t,i));let a=this.renderNodeList.get(t);a||(a=new Map,this.renderNodeList.set(t,a)),a.set(e.instanceID,e);let o=r.getAllPass();for(let n=0;n<o.length;n++){const l=o[n];let h=`${e.geometry.instanceID+l.instanceID}`,u=i.get(h);u||(u=new Map,i.set(h,u)),u.set(e.instanceID,e)}})}collect_remove(e){let t=e.transform.view3D;if(t&&e.materials){let r=this.renderShaderUpdateList.get(t);r&&e.materials.forEach(i=>{let a=i.getAllPass();for(let o=0;o<a.length;o++){const n=a[o];let l=`${e.geometry.instanceID+n.instanceID}`;r.delete(l)}})}}}class G{static _instance;_sceneLights;_sceneGIProbes;_op_RenderNodes;_tr_RenderNodes;_octreeRenderNodes;_reflections;_graphics;_op_renderGroup;_tr_renderGroup;_renderShaderCollect;state={giLightingChange:!0};sky;_collectInfo;rendererOctree;static get instance(){return this._instance||(this._instance=new G),this._instance}constructor(){this._sceneLights=new Map,this._sceneGIProbes=new Map,this._op_RenderNodes=new Map,this._tr_RenderNodes=new Map,this._reflections=new Map,this._graphics=[],this._op_renderGroup=new Map,this._tr_renderGroup=new Map,this._collectInfo=new bh,this._renderShaderCollect=new Rh,this._octreeRenderNodes=new Map}getPashList(e,t){if(t.renderOrder<3e3)return this._op_RenderNodes.get(e);if(t.renderOrder>=3e3)return this._tr_RenderNodes.get(e)}sortRenderNode(e,t){for(let r=e.length-1;r>0;r--)if(e[r].renderOrder<t.renderOrder){e.push(t);return}e.push(t)}addRenderNode(e,t){if(!e)return;let r=t.renderOrder>=3e3;if(t.hasMask(Be.Sky))this.sky=t;else if(t.hasMask(Be.Reflection)){this.removeRenderNode(e,t);let i=this._reflections.get(e);i||(i=[],this._reflections.set(e,i),i.push(t)),i.includes(t)||i.push(t)}else if(t.hasMask(Be.Graphic3D))this._graphics.indexOf(t)==-1&&this._graphics.push(t);else if(Uo.hasMask(t.renderLayer,fa.None)){this.removeRenderNode(e,t);let i=r?this._tr_RenderNodes:this._op_RenderNodes;i.has(e)||i.set(e,[]),i.get(e).push(t),m.setting.occlusionQuery.octree&&t.attachSceneOctree(this.getOctree(e));let a=this.getPashList(e,t);a.indexOf(t)==-1&&this.sortRenderNode(a,t)}else{this.removeRenderNode(e,t);let i=r?this._tr_renderGroup:this._op_renderGroup;i.has(e)||i.set(e,new Qh),i.get(e).collect_add(t)}t.object3D.renderNode=t,this._renderShaderCollect.collect_add(t)}getOctree(e){let t,r=m.setting.occlusionQuery.octree;if(r&&(t=this._octreeRenderNodes.get(e),!t)){let i=new d(r.x,r.y,r.z),a=new d(r.width,r.height,r.depth),o=new Re(i,a);t=new ui(o),this._octreeRenderNodes.set(e,t)}return t}removeRenderNode(e,t){if(t.detachSceneOctree(),t.hasMask(Be.Sky))this.sky=null;else if(t.hasMask(Be.Reflection)){let r=this._reflections.get(e);if(r){let i=r.indexOf(t);i!=-1&&r.splice(i,1)}}else if(Uo.hasMask(t.renderLayer,fa.None)){let r=this.getPashList(e,t);if(r){let i=r.indexOf(t);i!=-1&&r.splice(i,1)}}this._renderShaderCollect.collect_remove(t)}addLight(e,t){if(!this._sceneLights.has(e))this._sceneLights.set(e,[t]);else{let r=this._sceneLights.get(e);if(r.length>=m.setting.light.maxLight){console.warn("Alreay meet maxmium light number:",m.setting.light.maxLight);return}r.indexOf(t)!=-1||r.push(t)}}removeLight(e,t){if(this._sceneLights.has(e)){let r=this._sceneLights.get(e),i=r.indexOf(t);i!=-1&&r.splice(i,1)}}getLights(e){let t=this._sceneLights.get(e);return t||[]}addGIProbe(e,t){this._sceneGIProbes.has(e)?this._sceneGIProbes.get(e).push(t):this._sceneGIProbes.set(e,[t])}removeGIProbe(e,t){if(this._sceneGIProbes.has(e)){let r=this._sceneGIProbes.get(e),i=r.indexOf(t);i!=-1&&r.splice(i,1)}}getProbes(e){let t=this._sceneGIProbes.get(e);return t||[]}getReflections(e){let t=this._reflections.get(e);return t||[]}autoSortRenderNodes(e){let t=this._tr_RenderNodes.get(e);if(!t)return;let r=!1;for(const i of t)if(i.isRenderOrderChange||i.needSortOnCameraZ){r=!0;break}if(r){for(const i of t){let a=i.renderOrder;if(i.needSortOnCameraZ){let o=yh.worldToCameraDepth(i.object3D);o=1-Math.max(0,Math.min(1,o)),a+=o}i.__renderOrder=a,i.isRenderOrderChange=!1}t.sort((i,a)=>i.__renderOrder>a.__renderOrder?1:-1)}return this}getRenderNodes(e,t){if(this.autoSortRenderNodes(e),this._collectInfo.clean(),this._collectInfo.sky=this.sky,m.setting.occlusionQuery.octree)this.rendererOctree=this.getOctree(e),this.rendererOctree.getRenderNode(t.frustum,this._collectInfo);else{let r=this._op_RenderNodes.get(e);r&&(this._collectInfo.opaqueList=r.concat());let i=this._tr_RenderNodes.get(e);i&&(this._collectInfo.transparentList=i.concat())}return this._collectInfo}getOpRenderGroup(e){return this._op_renderGroup.get(e)}getTrRenderGroup(e){return this._tr_renderGroup.get(e)}getGraphicList(){return this._graphics}getRenderShaderCollect(e){return this._renderShaderCollect.renderShaderUpdateList.get(e)}}class Ih{renderer;owner;uuid;constructor(e){this.renderer=e,this.uuid=e.object3D.instanceID}leaveNode(){this.owner&&(this.owner.entities.delete(this.uuid),this.owner=null)}enterNode(e){this.owner&&this.leaveNode(),this.owner=e,e.entities.set(this.uuid,this)}update(e){return this.owner?.tryInsertEntity(this)||(this.leaveNode(),e.tryInsertEntity(this)),this.owner}}var Dg=Object.defineProperty,Mg=Object.getOwnPropertyDescriptor,xo=(s,e,t,r)=>{for(var i=Mg(e,t),a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(e,t,i)||i);return i&&Dg(e,t,i),i};class ei extends Pe{instanceCount=0;lodLevel=0;alwaysRender=!1;instanceID;drawType=0;_geometry;_materials=[];_castShadow=!0;_castReflection=!0;_castGI=!1;_rendererMask=Be.Default;_inRenderer=!1;_readyPipeline=!1;_combineShaderRefection;_ignoreEnvMap;_ignorePrefilterMap;__renderOrder=0;_renderOrder=0;_passInit=new Map;isRenderOrderChange;needSortOnCameraZ;isRecievePostEffectUI;_octreeBinder;_renderLayer=fa.None;_computes;init(e){this.renderOrder=0,this.rendererMask=Be.Default,this.instanceID=js().toString(),this._computes=[]}attachSceneOctree(e){this._octreeBinder={octree:e,entity:new Ih(this)},this.transform.eventDispatcher.addEventListener(Tt.LOCAL_ONCHANGE,this.updateOctreeEntity,this)}detachSceneOctree(){this._octreeBinder&&(this._octreeBinder.entity?.leaveNode(),this.transform.eventDispatcher.removeEventListener(Tt.LOCAL_ONCHANGE,this.updateOctreeEntity,this),this._octreeBinder=null)}updateOctreeEntity(e){this._octreeBinder?.entity?.update(this._octreeBinder.octree)}copyComponent(e){return super.copyComponent(e),this.geometry=e._geometry,this.materials=e._materials.slice(),this.drawType=e.drawType,this.alwaysRender=e.alwaysRender,this.needSortOnCameraZ=e.needSortOnCameraZ,this.isRenderOrderChange=e.isRenderOrderChange,this.castShadow=e.castShadow,this.castGI=e.castGI,this.rendererMask=e.rendererMask,this.isRecievePostEffectUI=e.isRecievePostEffectUI,this}get renderLayer(){return this._renderLayer}set renderLayer(e){this._renderLayer=e}get geometry(){return this._geometry}set geometry(e){this._geometry!=e&&(this._readyPipeline=!1,this._geometry&&me.getInstance().detached(this._geometry,this),e&&me.getInstance().attached(e,this)),this._geometry=e}addMask(e){this._rendererMask=Gt.addMask(this.rendererMask,e)}removeMask(e){this._rendererMask=Gt.removeMask(this.rendererMask,e)}hasMask(e){return Gt.hasMask(this.rendererMask,e)}get rendererMask(){return this._rendererMask}set rendererMask(e){this._rendererMask=e}get renderOrder(){return this._renderOrder}set renderOrder(e){e!=this._renderOrder&&(this.isRenderOrderChange=!0,this.__renderOrder=e),this._renderOrder=e}get materials(){return this._materials}set materials(e){this._readyPipeline=!1;for(let r=0;r<this._materials.length;r++){let i=this._materials[r];me.getInstance().detached(i,this),i.shader&&i.shader.computes&&this.removeComputes(i.shader.computes)}for(let r=0;r<e.length;r++){let i=e[r];me.getInstance().attached(i,this),i.shader&&i.shader.computes&&this.addComputes(i.shader.computes)}this._materials=e;let t=0;for(let r=0;r<e.length;r++){const o=e[r].getPass(H.COLOR)[0];o.shaderState.transparent&&(t=t>o.renderOrder?t:o.renderOrder)}this.renderOrder=t,this._readyPipeline||this.initPipeline()}addComputes(e){this._computes.push(...e)}removeComputes(e){for(const t of e){let r=this._computes.indexOf(t);r!=-1&&this._computes.splice(r,1)}}addRendererMask(e){this._rendererMask=Gt.addMask(this._rendererMask,e)}removeRendererMask(e){this._rendererMask=Gt.removeMask(this._rendererMask,e)}onEnable(){this._readyPipeline||this.initPipeline(),G.instance.addRenderNode(this.transform.scene3D,this),this.updateOctreeEntity()}onDisable(){this._enable=!1,G.instance.removeRenderNode(this.transform.scene3D,this),super.onDisable?.()}selfCloneMaterials(e){let t=[];for(let r=0,i=this.materials.length;r<i;r++){const a=this.materials[r].clone();t.push(a)}return this.materials=t,this._readyPipeline=!1,this.initPipeline(),this}initPipeline(){if(this._geometry&&this._materials.length>0){for(let t=0;t<this._materials.length;t++){let i=this._materials[t].getPass(H.COLOR);for(let a=0;a<i.length;a++){const o=i[a];o.shaderReflection||o.preCompile(this._geometry),this._geometry.generate(o.shaderReflection)}this.object3D.bound=this._geometry.bounds.clone()}this._readyPipeline=!0;let e=0;for(let t=0;t<this.materials.length;t++){const a=this.materials[t].getPass(H.COLOR)[0];a.renderOrder>=3e3?e=e>a.renderOrder?e:a.renderOrder:e=Math.max(e-3e3,0),this.castNeedPass()}this.renderOrder=e,this.enable&&this.transform&&this.transform.scene3D&&G.instance.addRenderNode(this.transform.scene3D,this)}}castNeedPass(){if(this.castGI)for(let t=0;t<this.materials.length;t++){const r=this.materials[t];ca.createGIPass(this,r.shader)}for(let t=0;t<this.materials.length;t++){const r=this.materials[t];r.castShadow&&ca.createShadowPass(this,r.shader)}if(this.castReflection)for(let t=0;t<this.materials.length;t++){const r=this.materials[t];r.castReflection&&ca.createReflectionPass(this,r.shader)}if(!Gt.hasMask(this.rendererMask,Be.IgnoreDepthPass)&&m.setting.render.zPrePass)for(let t=0;t<this.materials.length;t++){const r=this.materials[t];ca.createDepthPass(this,r.shader)}else for(let t=0;t<this.materials.length;t++)this.materials[t].shader.removeShaderByIndex(H.DEPTH,0)}get castShadow(){return this._castShadow}set castShadow(e){this._castShadow=e}get castGI(){return this._castGI}set castGI(e){this._castGI=e}get castReflection(){return this._castReflection}set castReflection(e){this._castReflection=e}renderPass(e,t,r){if(!this._geometry)return;let i=this,a=i.transform._worldMatrix;const o=Math.max(i.materials.length,i._geometry.subGeometries.length);for(let n=0;n<o;n++){const l=n>=i.materials.length?i.materials[0]:i.materials[n];if(!l||!l.enable)continue;let h=l.getPass(t);if(!(!h||h.length==0)){F.bindGeometryBuffer(r.encoder,i._geometry),Ye.viewCount_vertex(e,H[t],i._geometry.vertexCount);for(let u=0;u<h.length;u++){if(!h||h.length==0)continue;const f=h[u];if(f.pipeline){f.shaderState.splitTexture&&(r.endRenderPass(),vt.WriteSplitColorTexture(i.instanceID),r.beginOpaqueRenderPass(),F.bindCamera(r.encoder,e.camera),F.bindGeometryBuffer(r.encoder,i._geometry)),F.bindPipeline(r.encoder,f)&&Ye.viewCount_pipeline(e,H[t]);let U=(n>=i._geometry.subGeometries.length?i._geometry.subGeometries[0]:i._geometry.subGeometries[n]).lodLevels[i.lodLevel];i.instanceCount>0?(Ye.viewCount_instance(e,H[t],i.instanceCount),Ye.viewCount_indices(e,H[t],U.indexCount),Ye.viewCount_tri(e,H[t],U.indexCount/3*i.instanceCount),F.drawIndexed(r.encoder,U.indexCount,i.instanceCount,U.indexStart,0,0)):(Ye.viewCount_indices(e,H[t],U.indexCount),Ye.viewCount_tri(e,H[t],U.indexCount/3),F.drawIndexed(r.encoder,U.indexCount,1,U.indexStart,0,a.index)),Ye.viewCount_draw(e,H[t])}}}}}renderPass2(e,t,r,i,a,o=!1){if(!this.enable||!this._geometry)return;let n=this,l=n.object3D.transform._worldMatrix;for(let h=0;h<this.materials.length;h++){const u=this.materials[h];if(!u.castShadow&&t==H.SHADOW)continue;let c=u.getPass(t);if(!c||c.length==0)return;if(this.drawType==2)for(let f of c)f.pipeline&&(F.bindPipeline(a,f),F.draw(a,6,1,0,l.index));else{F.bindGeometryBuffer(a,n._geometry);for(let f of c)if(f.pipeline){F.bindPipeline(a,f);let U=n._geometry.subGeometries[h].lodLevels[n.lodLevel];F.drawIndexed(a,U.indexCount,1,U.indexStart,0,l.index)}}}}recordRenderPass2(e,t,r,i,a,o=!1){if(!this.enable)return;let n=this;for(let l=0;l<this.materials.length;l++){let u=this.materials[l].getPass(t);if(!u||u.length==0)return;let c=n.object3D.transform._worldMatrix;for(let f=0;f<u.length;f++){const g=u[f];F.bindPipeline(a,g);let x=n._geometry.subGeometries[l].lodLevels[n.lodLevel];F.drawIndexed(a,x.indexCount,1,x.indexStart,0,c.index)}}}noticeShaderChange(){this.enable&&(this.onEnable(),this._passInit.forEach((e,t)=>{this._passInit.set(t,!1)}))}preInit(e){return this._passInit.get(e)}nodeUpdate(e,t,r,i){let a=this,o=e.scene.envMap;for(let n=0;n<a.materials.length;n++){let h=a.materials[n].getPass(t);if(h)for(let u=0;u<h.length;u++){const f=h[u];if(f.shaderState.splitTexture){let S=vt.CreateSplitTexture(a.instanceID);f.setTexture("splitTexture_Map",S)}!a._ignoreEnvMap&&f.envMap!=o&&f.setTexture("envMap",o),f.prefilterMap||f.setTexture("prefilterMap",o);let g=ne.getReflectionEntries(e.scene);if(!f.reflectionMap&&g&&g.reflectionMap&&(f.setTexture("reflectionMap",g.reflectionMap),f.setStorageBuffer("reflectionBuffer",g.storageGPUBuffer)),f.pipeline){f.apply(a._geometry,r,()=>a.noticeShaderChange());continue}let p=m.res.getTexture("BRDFLUT");f.setTexture("brdflutMap",p);let A=m.getRenderJob(e).shadowMapPassRenderer;A&&A.depth2DArrayTexture&&f.setTexture("shadowMap",m.getRenderJob(e).shadowMapPassRenderer.depth2DArrayTexture);let U=m.getRenderJob(e).pointLightShadowRenderer;U&&U.cubeArrayTexture&&f.setTexture("pointShadowMap",U.cubeArrayTexture);let x=gr.iesTexture;x&&f.setTexture("iesTextureArrayMap",x),r.irradianceBuffer&&r.irradianceBuffer.length>0&&(f.setTexture("irradianceMap",r.irradianceBuffer[0]),f.setTexture("irradianceDepthMap",r.irradianceBuffer[1]));let B=ne.getLightEntries(e.scene);B&&(f.setStorageBuffer("lightBuffer",B.storageGPUBuffer),B.irradianceVolume&&f.setUniformBuffer("irradianceData",B.irradianceVolume.irradianceVolumeBuffer)),i&&(f.setStorageBuffer("clustersUniform",i.clustersUniformBuffer),f.setStorageBuffer("lightAssignBuffer",i.lightAssignBuffer),f.setStorageBuffer("assignTable",i.assignTableBuffer),f.setStorageBuffer("clusterBuffer",i.clusterBuffer)),f.apply(a._geometry,r),this._passInit.set(t,!0)}}}beforeDestroy(e){me.getInstance().detached(this._geometry,this),me.getInstance().hasReference(this._geometry)||this._geometry.destroy(e);for(let t=0;t<this._materials.length;t++){const r=this._materials[t];me.getInstance().detached(r,this),me.getInstance().hasReference(r)||r.destroy(e)}super.beforeDestroy(e)}destroy(e){super.destroy(e),this._geometry=void 0,this._materials.length=0,this._combineShaderRefection=void 0}}xo([zi],ei.prototype,"materials"),xo([zi],ei.prototype,"castShadow"),xo([zi],ei.prototype,"castGI");class mt{computes;passShader;constructor(){this.computes=[],this.passShader=new Map}addRenderPass(e,t=-1){let r=this.passShader.get(e.passType)||[];t==-1?r.push(e):r.splice(t,-1,e),this.passShader.set(e.passType,r)}removeShader(e,t=-1){let r=this.passShader.get(e.passType);if(r)if(t==-1){let i=r.indexOf(e);i!=-1&&r.splice(i)}else r.splice(t,1)}removeShaderByIndex(e,t=-1){let r=this.passShader.get(e);r&&(t==-1?this.passShader.delete(e):r.splice(t,1))}getSubShaders(e){return this.passShader.get(e)||[]}hasSubShaders(e){return this.passShader.get(e).length>0}getDefaultShaders(){return this.passShader.get(H.COLOR)}getDefaultColorShader(){return this.passShader.get(H.COLOR)[0]}setDefine(e,t){for(const r of this.passShader)for(const i of r[1])i.setDefine(e,t)}hasDefine(e){for(const t of this.passShader)for(const r of t[1]){let i=r.hasDefine(e);if(i)return i}return!1}deleteDefine(e){for(const t of this.passShader)for(const r of t[1])r.deleteDefine(e)}setUniform(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniform(e,t)}setUniformFloat(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformFloat(e,t)}setUniformVector2(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformVector2(e,t)}setUniformVector3(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformVector3(e,t)}setUniformVector4(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformVector4(e,t)}setUniformColor(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformColor(e,t)}getUniform(e){return this.getDefaultColorShader().getUniform(e)}getUniformFloat(e){return this.getDefaultColorShader().getUniformFloat(e)}getUniformVector2(e){return this.getDefaultColorShader().getUniformVector2(e)}getUniformVector3(e){return this.getDefaultColorShader().getUniformVector3(e)}getUniformVector4(e){return this.getDefaultColorShader().getUniformVector4(e)}getUniformColor(e){return this.getDefaultColorShader().getUniformColor(e)}setTexture(e,t){for(const r of this.passShader)for(const i of r[1])i.setTexture(e,t);this.setDefine(`USE_${e.toLocaleUpperCase()}`,!0)}getTexture(e){return this.getDefaultColorShader().textures[e]}setUniformBuffer(e,t){for(const r of this.passShader)for(const i of r[1])i.setUniformBuffer(e,t)}getUniformBuffer(e){return this.getDefaultColorShader().getBuffer(e)}setStorageBuffer(e,t){for(const r of this.passShader)for(const i of r[1])i.setStorageBuffer(e,t)}getStorageBuffer(e){return this.getDefaultColorShader().getBuffer(e)}setStructStorageBuffer(e,t){for(const r of this.passShader)for(const i of r[1])i.setStructStorageBuffer(e,t)}getStructStorageBuffer(e){return this.getDefaultColorShader().getBuffer(e)}noticeValueChange(){for(const e of this.passShader)for(const t of e[1])t.noticeValueChange()}destroy(){this.getDefaultColorShader().destroy()}clone(){let e=new mt,t=this.getDefaultShaders();for(const r of t)e.addRenderPass(r);return e}applyUniform(){for(const e of this.passShader)for(const t of e[1])t.applyUniform()}}class yt{instanceID;name;enable=!0;_defaultSubShader;_shader;constructor(){this.instanceID=It()}set shader(e){this._shader=e,this._defaultSubShader=e.getDefaultShaders()[0]}get shader(){return this._shader}get doubleSide(){return this._defaultSubShader.doubleSide}set doubleSide(e){this._defaultSubShader.doubleSide=e}get castShadow(){return this._defaultSubShader.shaderState.castShadow}set castShadow(e){let t=this._defaultSubShader.shaderState;e!=t.castShadow&&(t.castShadow=e)}get acceptShadow(){return this._defaultSubShader.shaderState.acceptShadow}set acceptShadow(e){let t=this._defaultSubShader.shaderState;t.acceptShadow!=e&&(t.acceptShadow=e,this._defaultSubShader.noticeShaderChange(),this._defaultSubShader.noticeValueChange())}get castReflection(){return this._defaultSubShader.shaderState.castReflection}set castReflection(e){this._defaultSubShader.shaderState.castReflection=e}get blendMode(){return this._defaultSubShader.blendMode}set blendMode(e){this._defaultSubShader.blendMode=e}get depthCompare(){return this._defaultSubShader.depthCompare}set depthCompare(e){this._defaultSubShader.depthCompare=e;for(let t of this._shader.passShader.values())for(let r of t)r.depthCompare=e}get transparent(){return this._defaultSubShader.shaderState.transparent}set transparent(e){this._defaultSubShader.shaderState.transparent=e,e&&(this._defaultSubShader.renderOrder=3e3)}get cullMode(){return this._defaultSubShader.cullMode}set cullMode(e){if(this._defaultSubShader.cullMode!=e){for(let t of this._shader.passShader.values())for(let r of t)r.cullMode=e;this._defaultSubShader.cullMode=e}}get depthWriteEnabled(){return this._defaultSubShader.depthWriteEnabled}set depthWriteEnabled(e){this._defaultSubShader.depthWriteEnabled=e}set useBillboard(e){this._defaultSubShader.setDefine("USE_BILLBOARD",e)}get topology(){return this._defaultSubShader.topology}set topology(e){this._defaultSubShader.topology=e}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}getPass(e){return this._shader.getSubShaders(e)}getAllPass(){return this._shader.getSubShaders(H.COLOR)}clone(){let e=new yt;return e.shader=this.shader.clone(),e}destroy(e){this.name=null,this.instanceID=null,this._shader.destroy(),this._shader=null}setDefine(e,t){this.shader.setDefine(e,t)}setTexture(e,t){this._shader.setTexture(e,t)}setStorageBuffer(e,t){this._shader.setStorageBuffer(e,t)}setUniformBuffer(e,t){this._shader.setStorageBuffer(e,t)}setUniformFloat(e,t){this._shader.setUniformFloat(e,t)}setUniformVector2(e,t){this._shader.setUniformVector2(e,t)}setUniformVector3(e,t){this._shader.setUniformVector3(e,t)}setUniformVector4(e,t){this._shader.setUniformVector4(e,t)}setUniformColor(e,t){this._shader.setUniformColor(e,t)}getUniformFloat(e){return this._shader.getUniform(e).data}getUniformV2(e){return this._shader.getUniformVector2(e)}getUniformV3(e){return this._shader.getUniformVector3(e)}getUniformV4(e){return this._shader.getUniformVector4(e)}getUniformColor(e){return this._shader.getUniformColor(e)}getTexture(e){return this._shader.getTexture(e)}getStorageBuffer(e){return this._shader.getStorageBuffer(e)}getStructStorageBuffer(e){return this._shader.getStructStorageBuffer(e)}getUniformBuffer(e){return this._shader.getUniformBuffer(e)}applyUniform(){this._shader.applyUniform()}}const Eh=`
|
|
5535
5535
|
#include "GlobalUniform"
|
|
5536
5536
|
|
|
5537
5537
|
struct VSOut {
|
|
@@ -5821,7 +5821,7 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
5821
5821
|
o.gBuffer = vec4f(0.0);
|
|
5822
5822
|
return o;
|
|
5823
5823
|
}
|
|
5824
|
-
`;class Th extends yt{constructor(){super(),O.register("gsplat_vs_dc",Eh),O.register("gsplat_fs_dc",wh);const e=new Oe("gsplat_vs_dc","gsplat_fs_dc");e.passType=H.COLOR,e.setShaderEntry("VertMain","FragMain"),e.topology=qs.triangle_strip,e.depthWriteEnabled=!1,e.cullMode="none",e.shaderState.transparent=!0,e.shaderState.blendMode=ae.NORMAL,e.shaderState.writeMasks=[15,15];const t=new pt;t.addRenderPass(e),this.shader=t}setSplatTextures(e,t,r,i,a){const o=this.shader.getDefaultColorShader();o.setTexture("splatColor",e),o.setTexture("transformA",t),o.setTexture("transformB",r),o.setUniformArray("tex_params",i),a&&o.setTexture("splatOrder",a)}setTransformMatrix(e){this.shader.getDefaultColorShader().setUniform("modelMatrix",e.rawData)}setPixelCulling(e,t,r=0){this.shader.getDefaultColorShader().setUniform("pixelCull",new Float32Array([e,t,r,0]))}}class cs extends wr{node;constructor(e){super(),this.bufferType=tr.VertexGPUBuffer,this.createVertexBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX,e)}createVertexBuffer(e,t){let r=R.device;this.byteSize=t*Float32Array.BYTES_PER_ELEMENT,this.usage=e,this.buffer&&this.destroy(),this.buffer=r.createBuffer({label:"VertexGPUBuffer",size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new Xr,this.memoryNodes=new Map,this.memory.allocation(this.byteSize),this.node=this.memory.allocation_node(this.byteSize)}}var ft=(s=>(s[s.split=0]="split",s[s.compose=1]="compose",s[s.compose_bin=2]="compose_bin",s))(ft||{});class Dh{vertexCount=0;vertexGPUBuffer;geometryType=ft.compose;_vertexBufferLayouts;_attributeSlotLayouts;_attributeLocation;constructor(){this._vertexBufferLayouts=[],this._attributeLocation={},this._attributeSlotLayouts=[]}get vertexBufferLayouts(){return this._vertexBufferLayouts}createVertexBuffer(e,t){switch(this.geometryType){case ft.split:this.createSplitVertexBuffer(e,t);break;case ft.compose:this.createComposeVertexBuffer(e,t);break;case ft.compose_bin:this.createComposBinVertexBuffer(e,t);break}}createSplitVertexBuffer(e,t){let r=0;for(let i=0;i<t.attributes.length;i++){const a=t.attributes[i];if(a.name=="index")continue;this._attributeLocation[a.name]=a.location;let o={name:a.name,format:a.format,offset:0,shaderLocation:a.location,stride:jr[a.format]};this._attributeSlotLayouts[a.location]=[o];let n=e.get(a.name);n||(n={attribute:a.name,data:new Float32Array(a.size*this.vertexCount)},e.set(a.name,n));let l=n.data.length/o.stride;this.vertexCount!=0&&this.vertexCount!=l&&console.error(" vertex count not match attribute count"),this.vertexCount=l,this._vertexBufferLayouts[a.location]={name:a.name,arrayStride:a.size*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[a.location],offset:r*4,size:this.vertexCount*a.size*4},r+=this.vertexCount*a.size}this.vertexGPUBuffer=new cs(r)}createComposeVertexBuffer(e,t){this._attributeSlotLayouts[0]=[];let r=0;for(let i=0;i<t.attributes.length;i++){const a=t.attributes[i];if(a.name=="index"||a.type=="builtin")continue;this._attributeLocation[a.name]=a.location;let o={name:a.name,format:a.format,offset:r*4,shaderLocation:a.location,stride:jr[a.format]};this._attributeSlotLayouts[0][a.location]=o;let n=e.get(a.name);if(n||(n={attribute:a.name,data:new Float32Array(a.size*this.vertexCount)},e.set(a.name,n)),n.data){let l=n.data.length/o.stride;this.vertexCount!=0&&this.vertexCount!=l&&console.error(" vertex count not match attribute count"),this.vertexCount=l}r+=a.size}this._vertexBufferLayouts[0]={name:"composeStruct",arrayStride:r*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[0],offset:0,size:this.vertexCount*r*4},this.vertexGPUBuffer=new cs(this.vertexCount*r)}createComposBinVertexBuffer(e,t){this._attributeSlotLayouts[0]=[];let r=0;for(let o=0;o<t.attributes.length;o++){const n=t.attributes[o];if(n.name=="index"||n.type=="builtin")continue;this._attributeLocation[n.name]=n.location;let l={name:n.name,format:n.format,offset:r*4,shaderLocation:n.location,stride:jr[n.format]};this._attributeSlotLayouts[0][n.location]=l;let h=e.get(n.name);if(h||(h={attribute:n.name,data:new Float32Array(n.size*this.vertexCount)},e.set(n.name,h)),h.data){let u=h.data.length/l.stride;this.vertexCount!=0&&this.vertexCount!=u&&console.error(" vertex count not match attribute count"),this.vertexCount=u}r+=n.size}let a=e.get(V.all).data.length/r;this.vertexCount=a,this._vertexBufferLayouts[0]={name:"composeStruct",arrayStride:r*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[0],offset:0,size:this.vertexCount*r*4},this.vertexGPUBuffer=new cs(this.vertexCount*r)}upload(e,t){if(this.vertexGPUBuffer){switch(this.geometryType){case ft.split:{let r=this._attributeLocation[e],i=this._vertexBufferLayouts[r];this.vertexGPUBuffer.node.setFloat32Array(i.offset/4,t.data)}break;case ft.compose:for(let r=0;r<this.vertexCount;r++){const i=this._attributeSlotLayouts[0][this._attributeLocation[e]];for(let a=0;a<i.stride;a++){let o=t.data[r*i.stride+a],n=r*(this._vertexBufferLayouts[0].arrayStride/4)+i.offset/4+a;this.vertexGPUBuffer.node.setFloat(o,n)}}break;case ft.compose_bin:this.vertexGPUBuffer.node.setFloat32Array(0,t.data);break}this.vertexGPUBuffer?.apply()}}updateAttributes(e){switch(this.geometryType){case ft.split:for(let t=0;t<this._vertexBufferLayouts.length;t++){const r=this._vertexBufferLayouts[t];let i=e.get(r.name);this.vertexGPUBuffer.node.setFloat32Array(r.offset/4,i.data)}break;case ft.compose:for(let t=0;t<this.vertexCount;t++)this._attributeSlotLayouts.forEach(r=>{for(let i=0;i<r.length;i++){const a=r[i];let o=e.get(a.name);for(let n=0;n<a.stride;n++){let l=o.data[t*a.stride+n],h=t*(this._vertexBufferLayouts[0].arrayStride/4)+a.offset/4+n;this.vertexGPUBuffer.node.setFloat(l,h)}}});break;case ft.compose_bin:{let t=e.get(V.all);this.vertexGPUBuffer.node.setFloat32Array(0,t.data)}break}this.vertexGPUBuffer.apply()}compute(){}destroy(e){this.vertexCount=null,this.geometryType=null,this._vertexBufferLayouts=null,this._attributeSlotLayouts=null,this._attributeLocation=null,this.vertexGPUBuffer&&this.vertexGPUBuffer.destroy(e),this.vertexGPUBuffer=null}}class Mh extends wr{indicesNode;constructor(e){super(),this.bufferType=tr.IndicesGPUBuffer,this.createIndicesBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.INDEX|GPUBufferUsage.INDIRECT,e)}createIndicesBuffer(e,t){let r=R.device;if(this.byteSize=t.length*4,this.usage=e,this.buffer&&this.destroy(),this.buffer=r.createBuffer({label:"IndicesGPUBuffer",size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new Xr,this.memoryNodes=new Map,this.memory.allocation(this.byteSize),t){this.indicesNode=this.memory.allocation_node(t.length*4);const i=t.buffer instanceof ArrayBuffer?t.buffer:new Uint8Array(t.buffer).buffer;this.indicesNode.setArrayBuffer(0,i),this.apply()}}}class Nh{uuid="";name;indicesGPUBuffer;indicesFormat="uint16";indicesCount=0;constructor(){}createIndicesBuffer(e){e.data instanceof Uint16Array?this.indicesFormat="uint16":e.data instanceof Uint32Array&&(this.indicesFormat="uint32"),this.indicesCount=e.data.length,this.indicesGPUBuffer=new Mh(e.data)}upload(e){this.indicesGPUBuffer.indicesNode.setArrayBuffer(0,e),this.indicesGPUBuffer.apply()}compute(){}destroy(){this.uuid=null,this.name=null,this.indicesFormat=null,this.indicesCount=null,this.indicesGPUBuffer.destroy(),this.indicesGPUBuffer=null}}class Vh{lodLevels}class Ne{instanceID;name;subGeometries=[];morphTargetsRelative;morphTargetDictionary;skinNames;bindPose;blendShapeData;vertexDim;vertexCount=0;_bounds;_attributeMap;_attributes;_indicesBuffer;_vertexBuffer;_onChange=!0;_wireframeLines;constructor(){this.instanceID=It(),this._attributeMap=new Map,this._attributes=[],this._vertexBuffer=new Dh}get indicesBuffer(){return this._indicesBuffer}get vertexBuffer(){return this._vertexBuffer}get vertexAttributes(){return this._attributes}get vertexAttributeMap(){return this._attributeMap}get geometryType(){return this._vertexBuffer.geometryType}set geometryType(e){this._vertexBuffer.geometryType=e}get bounds(){if(!this._bounds){this._bounds=new Re(new d,new d(1,1,1)),this._bounds.min.x=Number.MAX_VALUE,this._bounds.min.y=Number.MAX_VALUE,this._bounds.min.z=Number.MAX_VALUE,this._bounds.max.x=-Number.MAX_VALUE,this._bounds.max.y=-Number.MAX_VALUE,this._bounds.max.z=-Number.MAX_VALUE;let e=this.getAttribute(V.position);if(e&&e.data)for(let t=0;t<e.data.length/3;t++){const r=e.data[t*3+0],i=e.data[t*3+1],a=e.data[t*3+2];this._bounds.min.x>r&&(this._bounds.min.x=r),this._bounds.min.y>i&&(this._bounds.min.y=i),this._bounds.min.z>a&&(this._bounds.min.z=a),this._bounds.max.x<r&&(this._bounds.max.x=r),this._bounds.max.y<i&&(this._bounds.max.y=i),this._bounds.max.z<a&&(this._bounds.max.z=a)}this._bounds.setFromMinMax(this._bounds.min,this._bounds.max)}return this._bounds}set bounds(e){this._bounds=e}addSubGeometry(...e){let t=new Vh;return t.lodLevels=e,this.subGeometries.push(t),t}generate(e){this._onChange&&(this._onChange=!1,this._indicesBuffer.upload(this.getAttribute(V.indices).data),this._vertexBuffer.createVertexBuffer(this._attributeMap,e),this._vertexBuffer.updateAttributes(this._attributeMap),this.vertexCount=this._vertexBuffer.vertexCount)}setIndices(e){if(!this._attributeMap.has(V.indices)){let t={attribute:V.indices,data:e};this._attributeMap.set(V.indices,t),this._indicesBuffer=new Nh,this._indicesBuffer.createIndicesBuffer(t)}}setAttribute(e,t){if(e==V.indices)this.setIndices(t);else{let r={attribute:e,data:t};this._attributeMap.set(e,r),this._attributes.push(e)}}getAttribute(e){return this._attributeMap.get(e)}hasAttribute(e){return this._attributeMap.has(e)}genWireframe(){if(this._wireframeLines)return this._wireframeLines;if(this.geometryType==ft.split||this.geometryType==ft.compose){let e=this.getAttribute(V.position),t=this.getAttribute(V.indices);if(t&&e&&t.data.length>0){let r=e.data,i=[];for(let a=0;a<t.data.length/3;a++){const o=t.data[a*3+0],n=t.data[a*3+1],l=t.data[a*3+2];let h=new d(r[o*3+0],r[o*3+1],r[o*3+2]),u=new d(r[n*3+0],r[n*3+1],r[n*3+2]),c=new d(r[l*3+0],r[l*3+1],r[l*3+2]);i.push(h,u),i.push(u,c),i.push(c,h)}return this._wireframeLines=i,i}}else if(this.geometryType==ft.compose_bin){let e=this.getAttribute(V.all),t=this.vertexDim,r=this.getAttribute(V.indices);if(r&&e&&r.data.length>0){let i=e.data,a=[];for(let o=0;o<r.data.length/3;o++){const n=r.data[o*3+0],l=r.data[o*3+1],h=r.data[o*3+2];let u=new d(i[n*t+0],i[n*t+1],i[n*t+2]),c=new d(i[l*t+0],i[l*t+1],i[l*t+2]),f=new d(i[h*t+0],i[h*t+1],i[h*t+2]);a.push(u,c),a.push(c,f),a.push(f,u)}return this._wireframeLines=a,a}}return null}compute(){this._indicesBuffer&&this._indicesBuffer.compute(),this._vertexBuffer&&this._vertexBuffer.compute()}static crossA=d.UP.clone();static crossB=d.UP.clone();static crossRet=d.UP.clone();static point1=d.UP.clone();static point2=d.UP.clone();static point3=d.UP.clone();computeNormals(){let e=this.getAttribute(V.position),t=this.getAttribute(V.normal),r=this.getAttribute(V.indices);if(!e||!t||!r)return this;let i=r.data.length/3,a=Ne.point1,o=Ne.point2,n=Ne.point3,l=Ne.crossA,h=Ne.crossB,u=Ne.crossRet;for(let c=0;c<i;c++){let f=r.data[c*3],g=r.data[c*3+1],p=r.data[c*3+2];a.set(e.data[f*3],e.data[f*3+1],e.data[f*3+2]),o.set(e.data[g*3],e.data[g*3+1],e.data[g*3+2]),n.set(e.data[p*3],e.data[p*3+1],e.data[p*3+2]),d.sub(a,o,l).normalize(),d.sub(a,n,h).normalize();let A=l.crossProduct(h,u).normalize();t.data[f*3]=t.data[g*3]=t.data[p*3]=A.x,t.data[f*3+1]=t.data[g*3+1]=t.data[p*3+1]=A.y,t.data[f*3+2]=t.data[g*3+2]=t.data[p*3+2]=A.z}return this._vertexBuffer.upload(V.normal,t),this}isPrimitive(){return!1}destroy(e){this.instanceID=null,this.name=null,this.subGeometries=null,this.morphTargetDictionary=null,this._bounds.destroy(),this._bounds=null,this._attributeMap=null,this._attributes=null,this._indicesBuffer.destroy(),this._vertexBuffer.destroy(),this._indicesBuffer=null,this._vertexBuffer=null}}class Qi extends Ne{width;height;segmentW;segmentH;up;constructor(e,t,r=1,i=1,a=d.Y_AXIS){super(),this.width=e,this.height=t,this.segmentW=r,this.segmentH=i,this.up=a,this.buildGeometry(this.up)}buildGeometry(e){var t,r,i,a,o=this.segmentW+1;(this.segmentH+1)*o,this.bounds=new Re(d.ZERO.clone(),new d(this.width,1,this.height)),i=this.segmentH*this.segmentW*6;let n=(this.segmentW+1)*(this.segmentH+1),l=new Float32Array(n*3),h=new Float32Array(n*3),u=new Float32Array(n*2),c;this.segmentW*this.segmentH*2*3>=Uint16Array.length?c=new Uint32Array(this.segmentW*this.segmentH*2*3):c=new Uint16Array(this.segmentW*this.segmentH*2*3),i=0;for(var g=0,p=0,A=0,U=0;U<=this.segmentH;++U)for(var x=0;x<=this.segmentW;++x){switch(t=(x/this.segmentW-.5)*this.width,r=(U/this.segmentH-.5)*this.height,e){case d.Y_AXIS:l[g++]=t,l[g++]=0,l[g++]=r,h[p++]=0,h[p++]=1,h[p++]=0;break;case d.Z_AXIS:l[g++]=t,l[g++]=-r,l[g++]=0,h[p++]=0,h[p++]=0,h[p++]=1;break;case d.X_AXIS:l[g++]=0,l[g++]=t,l[g++]=r,h[p++]=1,h[p++]=0,h[p++]=0;break;default:l[g++]=t,l[g++]=0,l[g++]=r,h[p++]=0,h[p++]=1,h[p++]=0;break}u[A++]=x/this.segmentW,u[A++]=U/this.segmentH,x!=this.segmentW&&U!=this.segmentH&&(a=x+U*o,c[i++]=a+1,c[i++]=a,c[i++]=a+o,c[i++]=a+1,c[i++]=a+o,c[i++]=a+o+1)}this.setIndices(c),this.setAttribute(V.position,l),this.setAttribute(V.normal,h),this.setAttribute(V.uv,u),this.setAttribute(V.TEXCOORD_1,u),this.addSubGeometry({indexStart:0,indexCount:c.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class Bo extends $e{_dataBuffer;create(e,t,r,i=!1){let a=R.device;const o=Math.ceil(e*4/256)*256;this.format=X.rgba8unorm,this.mipmapCount=Math.floor(i?Math.log2(e):1),this.createTextureDescriptor(e,t,this.mipmapCount,this.format);const n=this._dataBuffer=a.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});a.queue.writeBuffer(n,0,r);const l=F.beginCommandEncoder();return l.copyBufferToTexture({buffer:n,bytesPerRow:o},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(l),i&&gr.webGPUGenerateMipmap(this),this}updateTexture(e,t,r){let i=R.device;const a=Math.ceil(e*4/256)*256;this.mipmapCount=Math.floor(Math.log2(e)),this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=null;const o=this._dataBuffer=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(o,0,r);const n=F.beginCommandEncoder();n.copyBufferToTexture({buffer:o,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(n),this.gpuSampler=i.createSampler(this),this.mipmapCount>1&&gr.webGPUGenerateMipmap(this)}}class vo extends $e{_dataBuffer;create(e,t,r){let i=R.device;const a=e*4*4;this.format=X.rgba32uint,this.createTextureDescriptor(e,t,1,this.format);const n=this._dataBuffer=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(n,0,r.buffer);const l=i.createCommandEncoder();return l.copyBufferToTexture({buffer:n,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),i.queue.submit([l.finish()]),this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="uint",this.gpuSampler=i.createSampler({}),this}updateTexture(e,t,r){let i=R.device;const a=e*4*4,o=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(o,0,r.buffer);const n=i.createCommandEncoder();n.copyBufferToTexture({buffer:o,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),i.queue.submit([n.finish()])}}const Ph=new Float32Array(1),Ng=new Int32Array(Ph.buffer);let ti=function(s){Ph[0]=s;const e=Ng[0];let t=e>>16&32768,r=e>>12&2047;const i=e>>23&255;return i<103?t:i>142?(t|=31744,t|=(i==255?1:0)&&e&8388607,t):i<114?(r|=2048,t|=(r>>114-i)+(r>>113-i&1),t):(t|=i-112<<10|r>>1,t+=r&1,t)};class Co extends $e{uint16Array;floatArray;_dataBuffer;create(e,t,r=null,i=!0){if(r==null){r=[];for(let a=0,o=e*t*4;a<o;a++)r[a]=0}return this.updateTexture(e,t,r,i),this}updateTexture(e,t,r,i=!0){(e!=this.width||t!=this.height)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=null,this.gpuTexture&&this.gpuTexture.destroy(),this.gpuTexture=null),this.floatArray=r;let a=R.device;const o=e*4*2;this.format=X.rgba16float,this.mipmapCount=Math.floor(i?Math.log2(e):1),this.createTextureDescriptor(e,t,this.mipmapCount,this.format),(!this.uint16Array||this.uint16Array.length!=r.length)&&(this.uint16Array=new Uint16Array(r.length));let n=this.uint16Array;for(let u=0,c=n.length;u<c;u++)n[u]=ti(r[u]);const l=this._dataBuffer=a.createBuffer({size:n.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});a.queue.writeBuffer(l,0,n);const h=F.beginCommandEncoder();h.copyBufferToTexture({buffer:l,bytesPerRow:o},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),this.useMipmap||(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float"),F.endCommandEncoder(h),this.gpuSampler=a.createSampler(this),this.gpuTexture=this.getGPUTexture(),this.mipmapCount>1&&gr.webGPUGenerateMipmap(this)}}var Vg=Object.getOwnPropertyDescriptor,Pg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Vg(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let da=class extends ei{count=0;size=new K;splatColor;transformA;transformB;texParams;splatOrder;gsplatMaterial;_positions;get positions(){return this._positions}_worldPositions;_orderData;_sortWorker;_lastSentTime=0;_minIntervalMs=0;_centersSent=!1;_lastViewMatrixHash=0;_lastCameraSpeed=0;_adaptiveSorting=!0;_lodEnabled=!1;_lodDistances=[5,10,20,40];_lodRatios=[1,.75,.5,.25,.1];_currentLodLevel=0;_minPixelCoverage=4;_maxPixelCoverage=0;_maxPixelCullDistance=0;_mapping=null;_fullCount=0;get fullCount(){return this._fullCount}constructor(){super()}initAsset(s){this.count=s.count,this._fullCount=s.count,this.size=this.evalTextureSize(s.count),this.buildColor(s),this.buildTransform(s),this.texParams=new Float32Array([this.count,this.size.x,this.count,1]),this._positions=s.position;const e=this.size.x*this.size.y;this._orderData=new Uint32Array(e*4);for(let t=0;t<e;t++){const r=t<this.count?t:this.count>0?this.count-1:0,i=t*4;this._orderData[i+0]=r,this._orderData[i+1]=0,this._orderData[i+2]=0,this._orderData[i+3]=0}this.splatOrder=new vo().create(this.size.x,this.size.y,this._orderData),this.splatOrder.name="splatOrder",this.splatOrder.minFilter="nearest",this.splatOrder.magFilter="nearest",this.splatOrder.addressModeU="clamp-to-edge",this.splatOrder.addressModeV="clamp-to-edge",this.gsplatMaterial=new Th,this.geometry=new Qi(1,1,1,1),this.materials=[this.gsplatMaterial]}onBeforeUpdate(s){this.count>0&&s?.camera&&(this._lodEnabled&&this.updateLOD(s),s.camera.viewMatrix&&this.scheduleOrder(s.camera.viewMatrix))}updateLOD(s){if(!this._worldPositions||this._fullCount===0)return;const t=s.camera.viewMatrix.rawData,r=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),i=-(t[4]*t[12]+t[5]*t[13]+t[6]*t[14]),a=-(t[8]*t[12]+t[9]*t[13]+t[10]*t[14]);let o=0,n=0,l=0;const h=Math.min(100,this._fullCount);for(let A=0;A<h;A++){const U=Math.floor(A/h*this._fullCount)*3;o+=this._worldPositions[U+0],n+=this._worldPositions[U+1],l+=this._worldPositions[U+2]}o/=h,n/=h,l/=h;const u=r-o,c=i-n,f=a-l,g=Math.sqrt(u*u+c*c+f*f);let p=this._lodDistances.length;for(let A=0;A<this._lodDistances.length;A++)if(g<this._lodDistances[A]){p=A;break}if(p!==this._currentLodLevel){this._currentLodLevel=p;const A=this._lodRatios[p],U=Math.floor(this._fullCount*A);if(this._mapping){const x=this._mapping;this._mapping=new Uint32Array(Math.min(U,x.length));for(let B=0;B<this._mapping.length;B++)this._mapping[B]=x[B];this.setMapping(this._mapping)}else this.count=U,this.texParams[0]=this.count,this.texParams[2]=this.count}}setMapping(s){this._mapping=s&&s.length>0?s:null,this.count=this._mapping?this._mapping.length:this._fullCount,this.texParams[0]=this.count,this.texParams[2]=Math.min(this.texParams[0],this.count);const e=this.size.x*this.size.y;for(let t=0;t<e;t++){const r=t<this.count?t:this.count>0?this.count-1:0,i=t*4;this._orderData[i+0]=r,this._orderData[i+1]=0,this._orderData[i+2]=0,this._orderData[i+3]=0}if(this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData),this._sortWorker){const t=this._worldPositions||this._positions,r=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(t);if(this._mapping)for(let i=0;i<this._mapping.length;++i){const a=this._mapping[i]*3,o=i*3;r[o+0]=t[a+0],r[o+1]=t[a+1],r[o+2]=t[a+2]}this._sortWorker.postMessage({type:"centers",centers:r.buffer,mapping:this._mapping?this._mapping:null},[r.buffer]),this._centersSent=!0}else this._centersSent=!1}setVisBoost(s){this.texParams[3]=Math.max(0,s)}setSortThrottle(s){this._minIntervalMs=Math.max(0,s|0)}setAdaptiveSorting(s){this._adaptiveSorting=s}setLOD(s,e,t){this._lodEnabled=s,e&&(this._lodDistances=e),t&&(this._lodRatios=t)}getLODStats(){return{enabled:this._lodEnabled,currentLevel:this._currentLodLevel,distances:this._lodDistances,ratios:this._lodRatios,currentRatio:this._lodRatios[this._currentLodLevel],visibleCount:this._lodEnabled?Math.floor(this._fullCount*this._lodRatios[this._currentLodLevel]):this._fullCount}}setPixelCulling(s,e=0,t=0){this._minPixelCoverage=Math.max(0,s),this._maxPixelCoverage=Math.max(0,e),this._maxPixelCullDistance=Math.max(0,t)}getPixelCullingStats(){return{minPixels:this._minPixelCoverage,maxPixels:this._maxPixelCoverage,maxPixelCullDistance:this._maxPixelCullDistance,maxEnabled:this._maxPixelCoverage>0,distanceEnabled:this._maxPixelCullDistance>0}}evalTextureSize(s){let e=Math.ceil(Math.sqrt(s));const t=64;e=Math.ceil(e/t)*t;const r=Math.ceil(s/e);return new K(e,r)}buildColor(s){const e=this.size.x|0,t=this.size.y|0,r=new Uint8Array(e*t*4),i=.28209479177387814,a=s.count,o=s.sh?.coeffs,n=o?o.length/(3*a):1;for(let l=0;l<a;l++){let h=.5,u=.5,c=.5;if(o&&n>=1){const p=l*n*3;h=.5+o[p+0]*i,u=.5+o[p+n+0]*i,c=.5+o[p+2*n+0]*i}const f=s.opacity?1/(1+Math.exp(-s.opacity[l])):1,g=l*4;r[g+0]=Math.max(0,Math.min(255,Math.floor(h*255))),r[g+1]=Math.max(0,Math.min(255,Math.floor(u*255))),r[g+2]=Math.max(0,Math.min(255,Math.floor(c*255))),r[g+3]=Math.max(0,Math.min(255,Math.floor(f*255)))}this.splatColor=new Bo().create(e,t,r,!1),this.splatColor.name="splatColor",this.splatColor.minFilter="nearest",this.splatColor.magFilter="nearest",this.splatColor.mipmapFilter="nearest",this.splatColor.addressModeU="clamp-to-edge",this.splatColor.addressModeV="clamp-to-edge"}buildTransform(s){const e=this.size.x|0,t=this.size.y|0,r=s.count,i=new Uint32Array(e*t*4),a=new Array(e*t*4).fill(0),o=new ArrayBuffer(4),n=new Float32Array(o),l=new Uint32Array(o),h=g=>(n[0]=g,l[0]),u=s.position,c=s.rotation,f=s.scale;for(let g=0;g<r;g++){const p=g*4,A=u[g*3+0],U=u[g*3+1],x=u[g*3+2];i[p+0]=h(A),i[p+1]=h(U),i[p+2]=h(x);let B=0,S=0,C=0,_=1;if(c){B=c[g*4+0],S=c[g*4+1],C=c[g*4+2],_=c[g*4+3];const zt=1/Math.hypot(B,S,C,_);B*=zt,S*=zt,C*=zt,_*=zt}let y=1,b=1,w=1;f&&(y=Math.exp(f[g*3+0]),b=Math.exp(f[g*3+1]),w=Math.exp(f[g*3+2]));const Q=B+B,E=S+S,M=C+C,z=B*Q,Y=B*E,ee=B*M,oe=S*E,te=S*M,ge=C*M,Ce=_*Q,J=_*E,ce=_*M,he=1-(oe+ge),Ue=Y+ce,xe=ee-J,Ve=Y-ce,Ie=1-(z+ge),Fe=te+Ce,Me=ee+J,nt=te-Ce,mr=1-(z+oe),Mt=he*y,Qt=Ue*y,Rt=xe*y,Nt=Ve*b,Ct=Ie*b,Ar=Fe*b,Ur=Me*w,xr=nt*w,Br=mr*w,gi=Mt*Mt+Nt*Nt+Ur*Ur,Wr=Mt*Qt+Nt*Ct+Ur*xr,vr=Mt*Rt+Nt*Ar+Ur*Br,pi=Qt*Qt+Ct*Ct+xr*xr,Jr=Qt*Rt+Ct*Ar+xr*Br,mi=Rt*Rt+Ar*Ar+Br*Br,Cr=p;a[Cr+0]=gi,a[Cr+1]=Wr,a[Cr+2]=vr,a[Cr+3]=mi;const Ai=ti(pi)&65535,Ui=ti(Jr)&65535;i[p+3]=Ai|Ui<<16}this.transformA=new vo().create(e,t,i),this.transformA.name="transformA",this.transformA.minFilter="nearest",this.transformA.magFilter="nearest",this.transformA.addressModeU="clamp-to-edge",this.transformA.addressModeV="clamp-to-edge",this.transformB=new Co().create(e,t,a,!1),this.transformB.name="transformB",this.transformB.minFilter="nearest",this.transformB.magFilter="nearest",this.transformB.mipmapFilter="nearest",this.transformB.addressModeU="clamp-to-edge",this.transformB.addressModeV="clamp-to-edge"}updateWorldPositions(){if(!this._positions)return;const s=this.object3D.transform.worldMatrix,e=this._positions,t=this._fullCount;this._worldPositions||(this._worldPositions=new Float32Array(e.length));const r=s.rawData;for(let i=0;i<t;i++){const a=i*3,o=e[a+0],n=e[a+1],l=e[a+2];this._worldPositions[a+0]=r[0]*o+r[4]*n+r[8]*l+r[12],this._worldPositions[a+1]=r[1]*o+r[5]*n+r[9]*l+r[13],this._worldPositions[a+2]=r[2]*o+r[6]*n+r[10]*l+r[14]}this._centersSent=!1}scheduleOrder(s){if(this.count===0)return;const e=this.object3D.transform.localChange;(e||!this._worldPositions)&&this.updateWorldPositions();const t=s.rawData,r=t[2],i=t[6],a=t[10],o=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),n=-(t[4]*t[12]+t[5]*t[13]+t[6]*t[14]),l=-(t[8]*t[12]+t[9]*t[13]+t[10]*t[14]),h=performance.now(),u=(h-this._lastSentTime)/1e3,c=Math.floor(o*1e3)^Math.floor(n*1e3)^Math.floor(l*1e3),f=Math.floor(r*1e3)^Math.floor(i*1e3)^Math.floor(a*1e3),g=c^f;if(g===this._lastViewMatrixHash&&!e)return;let p=this._minIntervalMs;if(this._adaptiveSorting&&this._minIntervalMs>0){const U=Math.abs(g-this._lastViewMatrixHash)/Math.max(u,.001);U<1e3?p=this._minIntervalMs:U<1e4?p=this._minIntervalMs*.5:p=this._minIntervalMs*.2,this._lastCameraSpeed=U}if(!(h-this._lastSentTime<p)){if(this._lastViewMatrixHash=g,this._lastSentTime=h,!this._sortWorker){this._sortWorker=this.createSortWorker(),this._sortWorker.onmessage=B=>{const S=B.data.order,C=this._orderData.buffer;this._sortWorker.postMessage({order:C},[C]);const _=new Uint32Array(S),y=this.size.x*this.size.y,b=this.count;this._orderData=new Uint32Array(y*4);for(let Q=0;Q<y;Q++){const E=Q<b?_[Q]:b>0?b-1:0,M=Q*4;this._orderData[M+0]=E,this._orderData[M+1]=0,this._orderData[M+2]=0,this._orderData[M+3]=0}this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData);const w=Math.max(0,Math.min(this.count,B.data.count|0));this.texParams[2]=w};const A=this._worldPositions||this._positions,U=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(A);if(this._mapping)for(let B=0;B<this._mapping.length;++B){const S=this._mapping[B]*3,C=B*3;U[C+0]=A[S+0],U[C+1]=A[S+1],U[C+2]=A[S+2]}const x=new Uint32Array(this.count);for(let B=0;B<this.count;B++)x[B]=B;this._sortWorker.postMessage({order:x.buffer,centers:U.buffer,mapping:this._mapping},[x.buffer,U.buffer]),this._centersSent=!0}if(!this._centersSent&&this._sortWorker){const A=this._worldPositions||this._positions,U=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(A);if(this._mapping)for(let x=0;x<this._mapping.length;++x){const B=this._mapping[x]*3,S=x*3;U[S+0]=A[B+0],U[S+1]=A[B+1],U[S+2]=A[B+2]}this._sortWorker.postMessage({type:"centers",centers:U.buffer,mapping:this._mapping?this._mapping:null},[U.buffer]),this._centersSent=!0}this._sortWorker.postMessage({cameraPosition:{x:o,y:n,z:l},cameraDirection:{x:-r,y:-i,z:-a}})}}createSortWorker(){function s(){let o,n,l,h,u,c=!1;const f={x:0,y:0,z:0},g={x:0,y:0,z:0},p={x:0,y:0,z:0},A={x:0,y:0,z:0};let U,x;const B=(C,_,y)=>{for(;C<=_;){const b=_+C>>1,w=y(b);if(w>0)C=b+1;else if(w<0)_=b-1;else return b}return~C},S=()=>{if(!o||!n||!h||!u)return;const C=h.x,_=h.y,y=h.z,b=u.x,w=u.y,Q=u.z,E=.001;if(!c&&Math.abs(C-f.x)<E&&Math.abs(_-f.y)<E&&Math.abs(y-f.z)<E&&Math.abs(b-g.x)<E&&Math.abs(w-g.y)<E&&Math.abs(Q-g.z)<E)return;c=!1,f.x=C,f.y=_,f.z=y,g.x=b,g.y=w,g.z=Q;const M=n.length/3;U?.length!==M&&(U=new Uint32Array(M));let z,Y;for(let J=0;J<8;++J){const ce=(J&1?p.x:A.x)-C,he=(J&2?p.y:A.y)-_,Ue=(J&4?p.z:A.z)-y,xe=ce*b+he*w+Ue*Q;J===0?z=Y=xe:(z=Math.min(z,xe),Y=Math.max(Y,xe))}x?x.fill(0):x=new Uint32Array(65537);const ee=Y-z,oe=ee<1e-6?0:1/ee*2**16;for(let J=0;J<M;++J){const ce=J*3,he=n[ce+0]-C,Ue=n[ce+1]-_,xe=n[ce+2]-y,Ve=he*b+Ue*w+xe*Q,Ie=Math.floor((Ve-z)*oe);U[J]=Ie,x[Ie]++}for(let J=1;J<65537;J++)x[J]+=x[J-1];for(let J=0;J<M;J++){const ce=U[J],he=--x[ce];o[he]=J}const te=J=>U[o[J]]/oe+z,ge=()=>{const J=B(0,M-1,ce=>-te(ce));return Math.min(M,Math.abs(J))},Ce=te(M-1)>=0?ge():M;if(l)for(let J=0;J<M;++J)o[J]=l[o[J]];self.postMessage({order:o.buffer,count:Ce},[o.buffer]),o=null};self.onmessage=C=>{if(C.data.order&&(o=new Uint32Array(C.data.order)),C.data.centers){n=new Float32Array(C.data.centers),p.x=A.x=n[0],p.y=A.y=n[1],p.z=A.z=n[2];const _=n.length/3;for(let y=1;y<_;++y){const b=n[y*3+0],w=n[y*3+1],Q=n[y*3+2];p.x=Math.min(p.x,b),p.y=Math.min(p.y,w),p.z=Math.min(p.z,Q),A.x=Math.max(A.x,b),A.y=Math.max(A.y,w),A.z=Math.max(A.z,Q)}c=!0}C.data.hasOwnProperty("mapping")&&(l=C.data.mapping?new Uint32Array(C.data.mapping):null,c=!0),C.data.cameraPosition&&(h=C.data.cameraPosition),C.data.cameraDirection&&(u=C.data.cameraDirection),S()}}const e=`(${s.toString()})()`,t=new Blob([e],{type:"application/javascript"}),r=URL.createObjectURL(t);return new Worker(r)}nodeUpdate(s,e,t,r){const i=this.object3D.transform.worldMatrix;this.gsplatMaterial.setTransformMatrix(i),this.gsplatMaterial.setPixelCulling(this._minPixelCoverage,this._maxPixelCoverage,this._maxPixelCullDistance),this.gsplatMaterial.setSplatTextures(this.splatColor,this.transformA,this.transformB,this.texParams,this.splatOrder),super.nodeUpdate(s,e,t,r)}renderPass2(s,e,t,r,i,a=!1){for(let o of this.materials){const n=o.getPass(e);if(!(!n||n.length===0))for(const l of n)l.pipeline&&(l.apply(this.geometry,t),F.bindPipeline(i,l),F.draw(i,4,this.count,0,0))}}renderPass(s,e,t){const r=t.encoder;for(let i of this.materials){const a=i.getPass(e);if(!(!a||a.length===0))for(const o of a)o.pipeline&&(o.apply(this.geometry,t.rendererPassState||t),F.bindPipeline(r,o),F.draw(r,4,this.count,0,0))}}destroy(s){this._sortWorker&&(this._sortWorker.terminate(),this._sortWorker=null),super.destroy(s)}};da=Pg([Wt(da,"GSplatRenderer")],da);class So{static maxVector=new d(Number.MAX_VALUE*.1,Number.MAX_VALUE*.1,Number.MAX_VALUE*.1);static minVector=this.maxVector.clone().multiplyScalar(-1);static genMeshMaxVector=d.ZERO.clone();static genMeshMinVector=d.ZERO.clone();static genMeshVectorList8=[new d,new d,new d,new d,new d,new d,new d,new d];static genGSplatBounds(e,t){t||=new Re(d.ZERO,d.ZERO),t.setFromMinMax(this.maxVector,this.minVector);let r=e.getComponent(da);if(!r)return console.warn("genGSplatBounds: No GSplatRenderer found on object"),t;const i=r.positions,a=r.fullCount;if(!i||a===0)return console.warn("genGSplatBounds: No position data available"),t;const o=e.transform.worldMatrix,n=new d;for(let l=0;l<a;l++){const h=l*3;n.set(i[h+0],i[h+1],i[h+2]),o.transformPoint(n,n),t.expandByPoint(n)}return t.setFromMinMax(t.min,t.max),t}static genMeshBounds(e,t){let r=this.genMeshMinVector,i=this.genMeshMaxVector,a=this.genMeshVectorList8;t||=new Re(d.ZERO,d.ZERO),t.setFromMinMax(this.maxVector,this.minVector);let o=e.getComponents(j);for(const n of o)if(n&&n.geometry){let l=n.object3D.transform.worldMatrix;r.copy(n.geometry.bounds.min),i.copy(n.geometry.bounds.max),a[0].set(r.x,r.y,r.z),a[1].set(r.x,r.y,i.z),a[2].set(r.x,i.y,r.z),a[3].set(r.x,i.y,i.z),a[4].set(i.x,r.y,r.z),a[5].set(i.x,r.y,i.z),a[6].set(i.x,i.y,r.z),a[7].set(i.x,i.y,i.z);for(const h of a)l.transformPoint(h,h),t.expandByPoint(h)}return i.copyFrom(t.max),r.copyFrom(t.min),t.setFromMinMax(r,i),t}static transformBound(e,t,r){let i=this.genMeshMinVector.copyFrom(t.min),a=this.genMeshMaxVector.copyFrom(t.max),o=this.genMeshVectorList8;r||=new Re(d.ZERO,d.ZERO),r.setFromMinMax(this.maxVector,this.minVector),o[0].set(i.x,i.y,i.z),o[1].set(i.x,i.y,a.z),o[2].set(i.x,a.y,i.z),o[3].set(i.x,a.y,a.z),o[4].set(a.x,i.y,i.z),o[5].set(a.x,i.y,a.z),o[6].set(a.x,a.y,i.z),o[7].set(a.x,a.y,a.z);for(const n of o)e.transformPoint(n,n),r.expandByPoint(n);return a.copyFrom(r.max),i.copyFrom(r.min),r.setFromMinMax(i,a),r}}class kh extends Er{name="";_instanceID="";_numChildren;get instanceID(){return this._instanceID}transform;renderNode;entityChildren;components;waitDisposeComponents;_bound;_boundWorld;_isBoundChange=!0;_dispose=!1;get dispose(){return this._dispose}getObjectByName(e){if(e.indexOf("/")>=0){let r=e.split("/"),i=this;for(;r.length>0&&i;){let a=r.shift();if(i=i.getChildByName(a,!1),!i)return null}return i}else return this.getChildByName(e,!1)}constructor(){super(),this.entityChildren=[],this.components=new Map,this._instanceID=js().toString(),this.waitDisposeComponents=[]}get numChildren(){return this._numChildren}addChild(e){if(e==null)throw new Error("child is null!");if(e===this)throw new Error("child is self!");return this.entityChildren.indexOf(e)==-1?(e.removeFromParent(),e.transform.parent=this.transform,this.entityChildren.push(e),this._numChildren=this.entityChildren.length,this.noticeComponents("onAddChild",e),e):null}removeChild(e){if(e===null)return;if(e===this)throw new Error("add child is self!");let t=this.entityChildren.indexOf(e);t!=-1&&(this.entityChildren.splice(t,1),e.transform.parent=null,this._numChildren=this.entityChildren.length,this.noticeComponents("onRemoveChild",e))}removeAllChild(){for(;this.numChildren>0;)this.removeChild(this.entityChildren[0])}removeSelf(){return this.removeFromParent()}removeChildByIndex(e){e>=0&&e<this.entityChildren.length?this.removeChild(this.entityChildren[e]):console.error("remove child by index , index out of range")}hasChild(e){return this.entityChildren.indexOf(e)!=-1}removeFromParent(){let e=this.transform.parent;return e&&e.object3D&&e.object3D.removeChild(this),this}getChildByIndex(e){let t=null;return e<this.entityChildren.length&&(t=this.entityChildren[e]),t}getChildByName(e,t=!0){let r=null;for(const i of this.entityChildren){if(i.name==e)return r=i,r;if(t&&(r=i.getChildByName(e,t),r))return r}return r}update(){}instantiate(){return null}onTransformLocalChange(e){this._isBoundChange=!0}get bound(){return(this._isBoundChange||!this._bound)&&this.updateBound(),this._boundWorld}set bound(e){this._bound=e,this._boundWorld=this._bound.clone(),this._isBoundChange=!0}updateBound(){return this._bound||(this._bound=new Re,this._boundWorld=this._bound.clone(),this._isBoundChange=!0),this._isBoundChange&&(So.transformBound(this.transform.worldMatrix,this._bound,this._boundWorld),this._isBoundChange=!1),this._boundWorld}waitUpdate(){this._dispose?(this.transform.parent&&this.transform.parent.object3D.removeChild(this),this.components.forEach((e,t)=>{e.enable=!1,e.beforeDestroy(),e.destroy()}),this.components.clear()):Se.waitStartComponent.forEach((e,t)=>{for(;e.length>0;){const r=e.shift();r.__start(),Se.waitStartComponent.delete(r.object3D)}})}noticeComponents(e,t){for(let r of this.components.values())r[e]?.(t)}destroy(e){this._dispose||(this.components.forEach(t=>{t.beforeDestroy(e)}),this.components.forEach(t=>{t.destroy(e)}),this.components.clear(),this.entityChildren.forEach(t=>{t.destroy(e)}),this.removeAllChild(),this.transform.parent=null,this._dispose=!0,super.destroy())}}var kg=Object.getOwnPropertyDescriptor,Lg=(s,e,t,r)=>{for(var i=r>1?void 0:r?kg(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let q=class extends kh{_isScene3D;prefabRef;serializeTag;constructor(){super(),this.transform=this.addComponent(Tt),this.transform.eventDispatcher.addEventListener(Tt.LOCAL_ONCHANGE,this.onTransformLocalChange,this)}get isScene3D(){return this._isScene3D}forChild(s){this.entityChildren.forEach(e=>{s(e),e.forChild(s)})}addComponent(s,e){if(!this.components.has(s)){let t=new s;return t.object3D=this,this.components.set(s,t),t.__init(e),Se.appendWaitStart(t),t}return this.components.get(s)}getOrAddComponent(s){let e=this.components.get(s);return e||(e=this.addComponent(s)),e}removeComponent(s){if(this.components.has(s)){let e=this.components.get(s);Se.removeWaitStart(this,e),this.components.delete(s),e.__stop(),e.beforeDestroy(),e.destroy()}}hasComponent(s){return this.components.has(s)}getComponent(s){return this.components.get(s)}getComponentFromParent(s){if(!this.parent)return null;let e=this.parent.object3D.getComponent(s);return e||this.parent.object3D.getComponentFromParent(s)}getComponentsInChild(s){let e=[],t=this.components.get(s);t&&e.push(t);for(let r=0;r<this.entityChildren.length;r++){let a=this.entityChildren[r].getComponentsInChild(s);e.push(...a)}return e}getComponents(s,e,t){e||=[];let r=this.getComponent(s);r&&(r.enable||t)&&e.push(r);for(let i=0,a=this.entityChildren.length;i<a;i++){let o=this.entityChildren[i];o&&o instanceof q&&o.getComponents(s,e,t)}return e}getComponentsExt(s,e,t){e||=[];let r=this.components.get(s);if(r&&(r.enable||t))e.push(r);else for(const i of this.entityChildren)i instanceof q&&i.getComponentsExt(s,e,t);return e}getComponentsByProperty(s,e,t=!0,r,i){r||=[];let a;for(const o of this.components.values())o&&(o.enable||i)&&o[s]===e&&(r.push(o),a=!0);if(!(a&&t))for(const o of this.entityChildren)o instanceof q&&o.getComponentsByProperty(s,e,t,r,i);return r}clone(){return this.instantiate()}instantiate(){let s=new q;return s.name=this.name,s.serializeTag=this.serializeTag,s.prefabRef=this.prefabRef,this.entityChildren.forEach((e,t)=>{let r=e.instantiate();s.addChild(r)}),this.components.forEach((e,t)=>{e.cloneTo(s)}),s}get localPosition(){return this.transform.localPosition}set localPosition(s){this.transform.localPosition=s}get localRotation(){return this.transform.localRotation}set localRotation(s){this.transform.localRotation=s}get localScale(){return this.transform.localScale}set localScale(s){this.transform.localScale=s}get localQuaternion(){return this.transform.localRotQuat}set localQuaternion(s){this.transform.localRotQuat=s}notifyChange(){this.transform.notifyChange()}get parent(){return this.transform.parent}get parentObject(){return this.transform.parent.object3D}set x(s){this.transform.x=s}get x(){return this.transform.x}set y(s){this.transform.y=s}get y(){return this.transform.y}set z(s){this.transform.z=s}get z(){return this.transform.z}set scaleX(s){this.transform.scaleX=s}get scaleX(){return this.transform.scaleX}set scaleY(s){this.transform.scaleY=s}get scaleY(){return this.transform.scaleY}set scaleZ(s){this.transform.scaleZ=s}get scaleZ(){return this.transform.scaleZ}set rotationX(s){this.transform.rotationX=s}get rotationX(){return this.transform.rotationX}set rotationY(s){this.transform.rotationY=s}get rotationY(){return this.transform.rotationY}set rotationZ(s){this.transform.rotationZ=s}get rotationZ(){return this.transform.rotationZ}fixedUpdate(){}lateUpdate(){}traverse(s){s(this);for(let e=0,t=this.entityChildren.length;e<t;e++){let r=this.entityChildren[e];r instanceof q&&r.traverse(s)}}destroy(s){this.transform.eventDispatcher.removeEventListener(Tt.LOCAL_ONCHANGE,this.onTransformLocalChange,this),super.destroy(s)}};q=Lg([Og],q);function Og(s,e){return class extends q{set active(t){this.transform.enable=t>0}get active(){return this.transform.enable?1:0}get materialColor(){return this.getComponent(j)?.material?.shader.getDefaultColorShader().baseColor}set materialColor(t){let r=this.getComponent(j)?.material;r&&(r.shader.getDefaultColorShader().baseColor=t)}notifyMaterialColorChange(t,r){this.getComponent(j).materials?.[t]?.shader.getDefaultColorShader().uniforms[r].onChange()}}}class je{static createCamera3DObject(e,t){return this.createCamera3D(null,e,t)}static createCamera3D(e,t,r){return e||=new q,t&&t.addChild(e),r&&(e.name=r),e.getOrAddComponent(Zi)}static UnProjection(e,t,r=1,i){let a=new d(e,t,0),o=1,n=d.HELP_0,l=R.canvas.offsetLeft,h=R.canvas.offsetTop,u=R.canvas.clientWidth,c=R.canvas.clientHeight;n.x=((a.x-l)*o/u-.5)*2,n.y=-((a.y-h)*o/c-.5)*2,n.z=r;let f=new d(0,0,0),g=I.helpMatrix2;g.copyFrom(i.projectionMatrix),g.invert();let p=I.helpMatrix;return p.identity(),p.multiply(g),p.multiply(i.transform.worldMatrix),p.perspectiveMultiplyPoint3(n,f),f}static Projection(e,t,r){let i=r||new d(0,0,0),a=I.helpMatrix;a.copyFrom(t.viewMatrix),a.multiply(t.projectionMatrix),a.perspectiveMultiplyPoint3(e,i);let o=R.canvas.clientWidth/2,n=R.canvas.clientHeight/2;return i.x=i.x*o+o,i.y=n-i.y*n,i}static UnProjection2(e,t,r,i,a){let o=a||new d(0,0,0),n=I.helpMatrix;n.copyFrom(i.pvMatrixInv);let l=R.canvas.clientWidth/2,h=R.canvas.clientHeight/2;return o.x=(e-l)/l,o.y=(h-t)/h,o.z=r,n.perspectiveMultiplyPoint3(o,o),o}}class wt{static maxNumDirectionShadow=8;static maxNumPointShadow=8;static directionLightList;static pointLightList;static shadowLights;static init(){this.directionLightList=new Map,this.pointLightList=new Map,this.shadowLights=new Map}static createBuffer(e){if(!this.shadowLights.has(e.scene)){let t=new Float32Array(16);this.shadowLights.set(e.scene,t)}}static getShadowLightList(e){if(!e.transform.view3D)return null;if(e.lightData.lightType==Xe.DirectionLight){let t=this.directionLightList.get(e.transform.view3D.scene);return t||(t=[],this.directionLightList.set(e.transform.view3D.scene,t)),t}else if(e.lightData.lightType==Xe.PointLight){let t=this.pointLightList.get(e.transform.view3D.scene);return t||(t=[],this.pointLightList.set(e.transform.view3D.scene,t)),t}else if(e.lightData.lightType==Xe.SpotLight){let t=this.pointLightList.get(e.transform.view3D.scene);return t||(t=[],this.pointLightList.set(e.transform.view3D.scene,t)),t}}static getShadowLightWhichScene(e,t){if(t==Xe.DirectionLight){let r=this.directionLightList.get(e);return r||(r=[],this.directionLightList.set(e,r)),r}else if(t==Xe.PointLight){let r=this.pointLightList.get(e);return r||(r=[],this.pointLightList.set(e,r)),r}}static getDirectShadowLightWhichScene(e){let t=this.directionLightList.get(e);return t||(t=[],this.directionLightList.set(e,t)),t}static getPointShadowLightWhichScene(e){let t=this.pointLightList.get(e);return t||(t=[],this.pointLightList.set(e,t)),t}static addShadowLight(e){if(!e.transform.view3D)return null;let t=e.transform.view3D.scene;if(e.lightData.lightType==Xe.DirectionLight){let r=this.directionLightList.get(t);if(r||(r=[],this.directionLightList.set(t,r)),!e.shadowCamera){e.shadowCamera=je.createCamera3DObject(null,"shadowCamera"),e.shadowCamera.isShadowCamera=!0;let i=-1e3;e.shadowCamera.orthoOffCenter(i,-i,i,-i,1,1e4)}return r.indexOf(e)==-1&&r.push(e),r}else if(e.lightData.lightType==Xe.PointLight||e.lightData.lightType==Xe.SpotLight){let r=this.pointLightList.get(t);return r&&r.length>=8||(r||(r=[],this.pointLightList.set(t,r)),r.indexOf(e)==-1&&r.push(e)),r}}static removeShadowLight(e){if(e.lightData.castShadowIndex=-1,!e.transform.view3D)return null;if(e.lightData.lightType==Xe.DirectionLight){let t=this.directionLightList.get(e.transform.view3D.scene);if(t){let r=t.indexOf(e);r!=-1&&t.splice(r,1)}return e.lightData.castShadowIndex=-1,t}else if(e.lightData.lightType==Xe.PointLight||e.lightData.lightType==Xe.SpotLight){let t=this.pointLightList.get(e.transform.view3D.scene);if(t){let r=t.indexOf(e);r!=-1&&t.splice(r,1)}return e.lightData.castShadowIndex=-1,t}}static update(e){let t=this.shadowLights.get(e.scene),r=wt.directionLightList.get(e.scene),i=wt.pointLightList.get(e.scene),a=0,o=0,n=0,l=0;if(t.fill(0),r){let u=0;for(let c=0;c<r.length;c++){const f=r[c];t[c]=f.lightData.index,f.lightData.castShadowIndex=u++}o=r.length}if(i){n=o;let u=0;for(let c=n;c<i.length;c++){const f=i[c];t[c]=f.lightData.index,f.lightData.castShadowIndex=u++}l=n+i.length}ne.getAllCameraGroup().forEach(u=>{u.dirShadowStart=a,u.dirShadowEnd=o,u.pointShadowStart=n,u.pointShadowEnd=l,u.shadowLights.set(new Float32Array(t))})}}class _o{uuid;usage;globalBindGroup;uniformGPUBuffer;matrixBindGroup;uniformByteLength;matrixesByteLength;shadowMatrixRaw=new Float32Array(128);csmMatrixRaw=new Float32Array(Zt.Cascades*16);csmShadowBias=new Float32Array(4);shadowLights=new Float32Array(16);dirShadowStart=0;dirShadowEnd=0;pointShadowStart=0;pointShadowEnd=0;constructor(e){this.uuid=It(),this.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,this.uniformGPUBuffer=new ht(8336),this.uniformGPUBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,this.matrixBindGroup=e,this.createBindGroup()}createBindGroup(){this.uniformByteLength=this.uniformGPUBuffer.memory.shareDataBuffer.byteLength,this.matrixesByteLength=I.block*4*I.maxCount,this.globalBindGroup=R.device.createBindGroup({label:"global_bindGroupLayout",layout:fo.getGlobalDataBindGroupLayout(),entries:[{binding:0,resource:{buffer:this.uniformGPUBuffer.buffer,offset:0,size:this.uniformByteLength}},{binding:1,resource:{buffer:this.matrixBindGroup.matrixBufferDst.buffer,offset:0,size:this.matrixesByteLength}}]})}setCamera(e){this.uniformGPUBuffer.setMatrix("_projectionMatrix",e.projectionMatrix),this.uniformGPUBuffer.setMatrix("_viewMatrix",e.viewMatrix),this.uniformGPUBuffer.setMatrix("_cameraWorldMatrix",e.transform.worldMatrix),this.uniformGPUBuffer.setMatrix("pvMatrixInv",e.projectionMatrixInv),this.uniformGPUBuffer.setMatrix("viewToWorld",e.cameraToWorld);let t=wt.getDirectShadowLightWhichScene(e.transform.scene3D);this.csmShadowBias.fill(1e-4),this.shadowMatrixRaw.fill(0),this.csmMatrixRaw.fill(0);for(let l=0;l<8;l++)if(l<t.length){let h=t[l].shadowCamera;this.shadowMatrixRaw.set(h.pvMatrix.rawData,l*16)}else this.shadowMatrixRaw.set(e.transform.worldMatrix.rawData,l*16);this.uniformGPUBuffer.setFloat32Array("shadowMatrix",this.shadowMatrixRaw);let r=m.setting.shadow.shadowSize;if(Zt.Cascades>1&&e.enableCSM&&t[0])for(let l=0;l<Zt.Cascades;l++){let h=e.csm.children[l].shadowCamera;this.csmMatrixRaw.set(h.pvMatrix.rawData,l*16),this.csmShadowBias[l]=e.getCSMShadowBiasScale(h)}this.uniformGPUBuffer.setFloat32Array("csmShadowBias",this.csmShadowBias),this.uniformGPUBuffer.setFloat32Array("csmMatrix",this.csmMatrixRaw),this.uniformGPUBuffer.setFloat32Array("shadowLights",this.shadowLights);let i=m.setting.reflectionSetting,a=G.instance.getReflections(e.transform.scene3D).length;this.uniformGPUBuffer.setFloat("reflectionProbeSize",i.reflectionProbeSize),this.uniformGPUBuffer.setFloat("reflectionProbeMaxCount",i.reflectionProbeMaxCount),this.uniformGPUBuffer.setFloat("reflectionMapWidth",i.width),this.uniformGPUBuffer.setFloat("reflectionMapHeight",i.height),this.uniformGPUBuffer.setFloat("reflectionCount",a),this.uniformGPUBuffer.setFloat("test2",Ye.testObj.testValue2),this.uniformGPUBuffer.setFloat("test3",Ye.testObj.testValue3),this.uniformGPUBuffer.setFloat("test4",Ye.testObj.testValue4),this.uniformGPUBuffer.setVector3("CameraPos",e.transform.worldPosition),this.uniformGPUBuffer.setFloat("frame",be.frame),this.uniformGPUBuffer.setFloat32Array("SH",e.sh),this.uniformGPUBuffer.setFloat("time",be.time),this.uniformGPUBuffer.setFloat("delta",be.delta),this.uniformGPUBuffer.setFloat("shadowBias",e.getShadowBias(r)),this.uniformGPUBuffer.setFloat("skyExposure",m.setting.sky.skyExposure),this.uniformGPUBuffer.setFloat("renderPassState",m.setting.render.renderPassState),this.uniformGPUBuffer.setFloat("quadScale",m.setting.render.quadScale),this.uniformGPUBuffer.setFloat("hdrExposure",m.setting.render.hdrExposure),this.uniformGPUBuffer.setInt32("renderState_left",m.setting.render.renderState_left),this.uniformGPUBuffer.setInt32("renderState_right",m.setting.render.renderState_right),this.uniformGPUBuffer.setFloat("renderState_split",m.setting.render.renderState_split);let o=m.inputSystem.mouseX*R.pixelRatio,n=m.inputSystem.mouseY*R.pixelRatio;this.uniformGPUBuffer.setFloat("mouseX",o),this.uniformGPUBuffer.setFloat("mouseY",n),this.uniformGPUBuffer.setFloat("windowWidth",R.windowWidth),this.uniformGPUBuffer.setFloat("windowHeight",R.windowHeight),this.uniformGPUBuffer.setFloat("near",e.near),this.uniformGPUBuffer.setFloat("far",e.far),this.uniformGPUBuffer.setFloat("pointShadowBias",m.setting.shadow.pointShadowBias),this.uniformGPUBuffer.setFloat("shadowMapSize",r),this.uniformGPUBuffer.setFloat("shadowSoft",m.setting.shadow.shadowSoft),this.uniformGPUBuffer.setFloat("enableCSM",e.enableCSM?1:0),this.uniformGPUBuffer.setFloat("csmMargin",m.setting.shadow.csmMargin),this.uniformGPUBuffer.setInt32("nDirShadowStart",this.dirShadowStart),this.uniformGPUBuffer.setInt32("nDirShadowEnd",this.dirShadowEnd),this.uniformGPUBuffer.setInt32("nPointShadowStart",this.pointShadowStart),this.uniformGPUBuffer.setInt32("nPointShadowEnd",this.pointShadowEnd),this.uniformGPUBuffer.setVector3("cameraForward",e.transform.forward),this.uniformGPUBuffer.setVector4Array("frustumPlanes",e.frustum.planes),this.uniformGPUBuffer.apply()}setShadowCamera(e){this.uniformGPUBuffer.setMatrix("_projectionMatrix",e.projectionMatrix),this.uniformGPUBuffer.setMatrix("_viewMatrix",e.viewMatrix),this.uniformGPUBuffer.setMatrix("_pvMatrix",e.pvMatrix),this.uniformGPUBuffer.setMatrix("pvMatrixInv",e.projectionMatrixInv),this.uniformGPUBuffer.setMatrix("viewToWorld",e.cameraToWorld),this.csmShadowBias.fill(1e-4),this.shadowMatrixRaw.fill(0),this.csmMatrixRaw.fill(0),this.uniformGPUBuffer.setFloat32Array("shadowCamera",this.shadowMatrixRaw),this.uniformGPUBuffer.setFloat32Array("csmShadowBias",this.csmShadowBias),this.uniformGPUBuffer.setFloat32Array("csmMatrix",this.csmMatrixRaw),this.uniformGPUBuffer.setFloat32Array("shadowLights",this.shadowLights),this.uniformGPUBuffer.setVector3("CameraPos",e.transform.worldPosition),this.uniformGPUBuffer.setFloat("frame",be.frame),this.uniformGPUBuffer.setFloat32Array("SH",e.sh),this.uniformGPUBuffer.setFloat("time",be.time),this.uniformGPUBuffer.setFloat("delta",be.delta),this.uniformGPUBuffer.setFloat("shadowBias",m.setting.shadow.shadowBias),this.uniformGPUBuffer.setFloat("skyExposure",m.setting.sky.skyExposure),this.uniformGPUBuffer.setFloat("renderPassState",m.setting.render.renderPassState),this.uniformGPUBuffer.setFloat("quadScale",m.setting.render.quadScale),this.uniformGPUBuffer.setFloat("hdrExposure",m.setting.render.hdrExposure),this.uniformGPUBuffer.setInt32("renderState_left",m.setting.render.renderState_left),this.uniformGPUBuffer.setInt32("renderState_right",m.setting.render.renderState_right),this.uniformGPUBuffer.setFloat("renderState_split",m.setting.render.renderState_split);let t=m.inputSystem.mouseX*R.pixelRatio,r=m.inputSystem.mouseY*R.pixelRatio;this.uniformGPUBuffer.setFloat("mouseX",t),this.uniformGPUBuffer.setFloat("mouseY",r),this.uniformGPUBuffer.setFloat("windowWidth",R.windowWidth),this.uniformGPUBuffer.setFloat("windowHeight",R.windowHeight),this.uniformGPUBuffer.setFloat("near",e.near),this.uniformGPUBuffer.setFloat("far",e.far),this.uniformGPUBuffer.setFloat("pointShadowBias",m.setting.shadow.pointShadowBias),this.uniformGPUBuffer.setFloat("shadowMapSize",m.setting.shadow.shadowSize),this.uniformGPUBuffer.setFloat("shadowSoft",m.setting.shadow.shadowSoft),this.uniformGPUBuffer.setFloat("enableCSM",0),this.uniformGPUBuffer.setFloat("csmMargin",m.setting.shadow.csmMargin),this.uniformGPUBuffer.setInt32("nDirShadowStart",this.dirShadowStart),this.uniformGPUBuffer.setInt32("nDirShadowEnd",this.dirShadowEnd),this.uniformGPUBuffer.setInt32("nPointShadowStart",this.pointShadowStart),this.uniformGPUBuffer.setInt32("nPointShadowEnd",this.pointShadowEnd),this.uniformGPUBuffer.apply()}setShadowLight(){}}class Lh{setting;probesBufferData;probesBuffer;isVolumeFrameChange=!0;randomOrientation;startPosition=new d;isVolumeChange=!0;irradianceVolumeBuffer;directionDistance=20;randomSeedCount=3;useRandomIndex=0;centerDirection=new d(0,0,this.directionDistance).normalize(1);arroundPositions=[];updateOrientation(){return this.useRandomIndex++,this.useRandomIndex>=this.arroundPositions.length&&(this.useRandomIndex=0),I.fromToRotation(this.centerDirection,this.arroundPositions[this.useRandomIndex],this.randomOrientation),this.randomOrientation}init(e){this.setting=e,this.randomOrientation=new I(!1),this.randomOrientation.identity(),this.irradianceVolumeBuffer=new ht(80),this.createFramesBuffer(),this.arroundPositions.push(this.centerDirection.clone());for(let t=0;t<this.randomSeedCount;t++){let r=Math.PI*2*t/this.randomSeedCount,i=new d(Math.sin(r),Math.cos(r),this.directionDistance).normalize(1);this.arroundPositions.push(i)}}setVolumeDataChange(){this.isVolumeChange=!0}updateProbes(e){let t=this.probesBufferData;for(let r of e){let i=r.index*4;t[i+3]=r.drawCallFrame}}createFramesBuffer(){if(!this.probesBufferData){let e=this.setting.probeXCount*this.setting.probeYCount*this.setting.probeZCount;this.probesBufferData=new Float32Array(e*4),this.probesBufferData.fill(-1),this.probesBuffer=new ve(e*4,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST)}}uploadBuffer(){this.isVolumeChange&&(this.fillIrradianceData(),this.isVolumeChange=!1,this.isVolumeFrameChange=!0),this.probesBuffer.setFloat32Array("uniformFramesBuffer",this.probesBufferData)}calcPosition(e,t,r,i){let a=this.setting,o=this.setting.probeSpace;return i=i||new d,i.x=e*o-o*(a.probeXCount-1)*.5+a.offsetX,i.y=t*o-o*(a.probeYCount-1)*.5+a.offsetY,i.z=r*o-o*(a.probeZCount-1)*.5+a.offsetZ,i}debugX=0;debugY=0;debugZ=0;fillIrradianceData(){let e=this.setting,t=this.calcPosition(0,0,0,this.startPosition);this.irradianceVolumeBuffer.setFloat("orientationIndex",this.randomOrientation.index),this.irradianceVolumeBuffer.setFloat("hysteresis",e.hysteresis),this.irradianceVolumeBuffer.setFloat("OctRTSideSize",e.octRTSideSize),this.irradianceVolumeBuffer.setFloat("OctRTMaxSize",e.octRTMaxSize),this.irradianceVolumeBuffer.setFloat("startX",t.x),this.irradianceVolumeBuffer.setFloat("startY",t.y),this.irradianceVolumeBuffer.setFloat("startZ",t.z),this.irradianceVolumeBuffer.setFloat("ProbeSpace",e.probeSpace),this.irradianceVolumeBuffer.setFloat("probeXCount",e.probeXCount),this.irradianceVolumeBuffer.setFloat("probeYCount",e.probeYCount),this.irradianceVolumeBuffer.setFloat("probeZCount",e.probeZCount),this.irradianceVolumeBuffer.setFloat("maxDistance",e.probeSpace*1.732),this.irradianceVolumeBuffer.setFloat("depthSharpness",e.depthSharpness),this.irradianceVolumeBuffer.setFloat("ProbeSourceTextureSize",e.probeSourceTextureSize),this.irradianceVolumeBuffer.setFloat("ProbeSize",e.probeSize),this.irradianceVolumeBuffer.setFloat("bounceIntensity",e.bounceIntensity),this.irradianceVolumeBuffer.setFloat("probeRoughness",e.probeRoughness),this.irradianceVolumeBuffer.setFloat("normalBias",e.normalBias),this.irradianceVolumeBuffer.setFloat("irradianceChebyshevBias",e.irradianceChebyshevBias),this.irradianceVolumeBuffer.setFloat("rayNumber",e.rayNumber),this.irradianceVolumeBuffer.setFloat("irradianceDistanceBias",e.irradianceDistanceBias),this.irradianceVolumeBuffer.setFloat("indirectIntensity",e.indirectIntensity),this.irradianceVolumeBuffer.setFloat("ddgiGamma",e.ddgiGamma),this.irradianceVolumeBuffer.setFloat("lerpHysteresis",e.lerpHysteresis),this.irradianceVolumeBuffer.setFloat("debugX",this.debugX),this.irradianceVolumeBuffer.setFloat("debugY",this.debugY),this.irradianceVolumeBuffer.setFloat("debugZ",this.debugZ),this.irradianceVolumeBuffer.apply()}}class Oh{storageGPUBuffer;irradianceVolume;_lightList=[];constructor(){this.storageGPUBuffer=new ve(hs.lightSize*m.setting.light.maxLight,GPUBufferUsage.COPY_SRC),this.irradianceVolume=new Lh,this.irradianceVolume.init(m.setting.gi);for(let e=0;e<m.setting.light.maxLight;e++){let t=this.storageGPUBuffer.memory.allocation_node(hs.lightSize*4);this._lightList.push(t)}this.storageGPUBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE}update(e){this.storageGPUBuffer.clean();let t=G.instance.getLights(e.scene);for(let r=0;r<t.length;r++){const i=t[r].lightData;i.index=r,this.writeLightBytes(i,this._lightList[r])}this.storageGPUBuffer.apply()}writeLightBytes(e,t){t.offset=0,t.writeFloat(e.index),t.writeInt32(e.lightType),t.writeFloat(e.radius),t.writeFloat(e.linear),t.writeVector3(e.lightPosition),t.writeFloat(e.lightMatrixIndex),t.writeVector3(e.direction),t.writeFloat(e.quadratic),t.writeRGBColor(e.lightColor),t.writeFloat(e.intensity),t.writeFloat(e.innerAngle),t.writeFloat(e.outerAngle),t.writeFloat(e.range),t.writeInt32(e.castShadowIndex),t.writeVector3(e.lightTangent),t.writeFloat(e.iesIndex)}}class zh{storageGPUBuffer;reflectionMap;sourceReflectionMap;count;constructor(){this.storageGPUBuffer=new ve(768)}update(e){this.storageGPUBuffer.clean();let t=G.instance.getReflections(e.scene);for(let r=0;r<t.length;r++){const i=t[r];i.gid=r,this.storageGPUBuffer.setFloat("gid",i.gid),this.storageGPUBuffer.setVector3("worldPosition",i.transform.worldPosition),this.storageGPUBuffer.setFloat("radius",i.radius),this.storageGPUBuffer.setVector3("bound",i.transform.worldPosition)}this.count=t.length,this.storageGPUBuffer.apply()}}class Gh extends wr{size;constructor(e,t=0,r){super(),this.bufferType=tr.StorageGPUBuffer,this.size=e,this.createBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|t,e,r,"MatrixGPUBuffer")}writeBufferByHeap(e,t){let r;e instanceof Float64Array?r=new Float32Array(e):r=e;let i=R.device;if(r.length>0){let a=null;for(;this.mapAsyncReady.length&&(a=this.mapAsyncReady.shift(),a.usedSize!=r.byteLength);)a.destroy(),this.mapAsyncBuffersOutstanding--,a=null;a||(a=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_SRC|GPUBufferUsage.MAP_WRITE,mappedAtCreation:!0}),a.usedSize=r.byteLength,this.mapAsyncBuffersOutstanding++,this.mapAsyncBuffersOutstanding>10&&console.warn(` Warning: mapAsync requests from ${this.mapAsyncBuffersOutstanding} frames ago have not resolved yet. MB of staging buffers allocated.`));let o=new Float32Array(r.buffer,r.byteOffset,t);new Float32Array(a.getMappedRange(0,t*4)).set(o),a.unmap();const l=i.createCommandEncoder();l.copyBufferToBuffer(a,0,this.buffer,0,t*4),i.queue.submit([l.finish()]),a.mapAsync(GPUMapMode.WRITE).then(()=>this.mapAsyncReady.push(a))}}}class Wh{uuid;index;usage;groupBufferSize;matrixBufferDst;constructor(){this.uuid=It(),this.groupBufferSize=0,this.usage=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,this.cacheWorldMatrix()}cacheWorldMatrix(){this.groupBufferSize=I.maxCount*I.blockBytes,this.matrixBufferDst=new Gh(this.groupBufferSize/4),this.matrixBufferDst.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,this.matrixBufferDst.buffer.label=this.groupBufferSize.toString()}writeBuffer(e){const t=I.dynamicMatrixBytes;this.matrixBufferDst.mapAsyncWrite(t,e)}}class ne{static _cameraBindGroups;static _lightEntriesMap;static _reflectionEntriesMap;static modelMatrixBindGroup;static init(){this.modelMatrixBindGroup=new Wh,this._cameraBindGroups=new Map,this._lightEntriesMap=new Map,this._reflectionEntriesMap=new Map}static getAllCameraGroup(){return this._cameraBindGroups}static getCameraGroup(e){let t=this._cameraBindGroups.get(e);return t||(t=new _o(this.modelMatrixBindGroup),this._cameraBindGroups.set(e,t)),e.isShadowCamera?t.setShadowCamera(e):t.setCamera(e),t}static updateCameraGroup(e){let t=this._cameraBindGroups.get(e);t||(t=new _o(this.modelMatrixBindGroup),this._cameraBindGroups.set(e,t)),e.isShadowCamera?t.setShadowCamera(e):t.setCamera(e)}static getLightEntries(e){e||console.log("getLightEntries scene is null");let t=this._lightEntriesMap.get(e);return t||(t=new Oh,this._lightEntriesMap.set(e,t)),this._lightEntriesMap.get(e)}static getReflectionEntries(e){e||console.log("getLightEntries scene is null");let t=this._reflectionEntriesMap.get(e);return t||(t=new zh,this._reflectionEntriesMap.set(e,t)),this._reflectionEntriesMap.get(e)}}class F{static lastGeometry;static lastPipeline;static lastShader;static drawCount=0;static renderPassCount=0;static geometryCount=0;static pipelineCount=0;static matrixCount=0;static lastRenderPassState;static LastCommand;static bindPipeline(e,t){if(F.lastShader!=t)F.lastShader=t;else return!1;F.lastPipeline!=t.pipeline&&(F.lastPipeline=t.pipeline,e.setPipeline(t.pipeline));for(let r=1;r<t.bindGroups.length;r++){const i=t.bindGroups[r];i&&e.setBindGroup(r,i)}return!0}static bindCamera(e,t){let r=ne.getCameraGroup(t);e.setBindGroup(0,r.globalBindGroup)}static bindGeometryBuffer(e,t){if(this.lastGeometry!=t&&(this.lastGeometry=t,t.indicesBuffer)){e.setIndexBuffer(t.indicesBuffer.indicesGPUBuffer.buffer,t.indicesBuffer.indicesFormat);let r=t.vertexBuffer.vertexGPUBuffer,i=t.vertexBuffer.vertexBufferLayouts;for(let a=0;a<i.length;a++){const o=i[a];e.setVertexBuffer(a,r.buffer,o.offset,o.size)}}}static cleanCache(){this.lastGeometry=null,this.lastPipeline=null,this.lastShader=null}static createPipeline(e){return Ye.countStart("GPUContext","pipeline"),R.device.createRenderPipeline(e)}static beginCommandEncoder(){return Ye.countStart("GPUContext","beginCommandEncoder"),this.LastCommand&&R.device.queue.submit([this.LastCommand.finish()]),this.LastCommand=R.device.createCommandEncoder(),this.LastCommand}static endCommandEncoder(e){this.LastCommand==e&&(R.device.queue.submit([this.LastCommand.finish()]),this.LastCommand=null,Ye.countStart("GPUContext","endCommandEncoder"))}static recordBundleEncoder(e){return R.device.createRenderBundleEncoder(e)}static beginRenderPass(e,t){if(this.cleanCache(),this.renderPassCount++,this.lastRenderPassState=t,t.depthTexture){let r=t.renderPassDescriptor.depthStencilAttachment;r.view=t.depthTexture.getGPUView()}if(t.renderTargets&&t.renderTargets.length>0){for(let r=0;r<t.renderTargets.length;++r){const i=t.renderTargets[r];let a=t.renderPassDescriptor.colorAttachments[r];t.multisample>0&&t.renderTargets.length==1?(a.view=t.multiTexture.createView(),a.resolveTarget=i.getGPUView()):a.view=i.getGPUTexture().createView()}return e.beginRenderPass(t.renderPassDescriptor)}else{let r=t.renderPassDescriptor.colorAttachments[0];return r&&(t.multisample>0?(r.view=t.multiTexture.createView(),r.resolveTarget=R.context.getCurrentTexture().createView()):r.view=R.context.getCurrentTexture().createView()),e.beginRenderPass(t.renderPassDescriptor)}}static drawIndexed(e,t,r,i,a,o){e.drawIndexed(t,r,i,a,o),this.drawCount++}static draw(e,t,r,i,a){e.draw(t,r,i,a),this.drawCount++}static endPass(e){e.insertDebugMarker("end"),e.end()}static computeCommand(e,t){let r=e.beginComputePass();for(let i=0;i<t.length;i++)t[i].compute(r);r.end()}static copyTexture(e,t,r){e.copyTextureToTexture({texture:t.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:r.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{width:r.width,height:r.height,depthOrArrayLayers:1})}}class Jh{source;input;output;reset(e){this.input&&this.input.destroy(),this.output&&this.output.destroy(),this.input=this.output=null,this.source=e}apply(e){if(this.source){if(!this.input){let t=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST;this.input=new ve(this.source.length,t,this.source),this.input.apply()}if(!this.output){let t=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC;this.output=new ve(e*3,t),this.output.apply()}}}}class Zh{enable;morphTargetsRelative;MaxMorphTargetCount=64;_computeConfigArray;_computeConfigBuffer;_morphInfluenceArray;_morphInfluenceBuffer;_positionAttrDataGroup;_normalAttrDataGroup;_isInfluenceDirty;_morphTargetCount;_totalVertexCount;_computeShader;_computeShaders;_computeWorkGroupXY=1;_collectMorphTargetData;_blendTarget;constructor(){this._isInfluenceDirty=!0,this.generateGPUBuffer(),this._positionAttrDataGroup=new Jh,this._normalAttrDataGroup=new Jh}initMorphTarget(e){this._collectMorphTargetData=this.collectMorphTargetList(e),this._computeShader&&this._computeShader.destroy();let t=Vt.CsMain;this._computeShader=new ue(t),this._collectMorphTargetData.mergedNormal?this._computeShader.setDefine("USE_MORPHNORMALS",!0):this._computeShader.deleteDefine("USE_MORPHNORMALS"),this._computeShaders=[this._computeShader],this._isInfluenceDirty=!0,this._morphTargetCount=this._collectMorphTargetData.mtCount,this._totalVertexCount=this._collectMorphTargetData.vCount,this._morphInfluenceArray.fill(0),this._computeWorkGroupXY=this.calcWorkGroup(this._totalVertexCount),this._positionAttrDataGroup.reset(this._collectMorphTargetData.mergedPos),this._normalAttrDataGroup.reset(this._collectMorphTargetData.mergedNormal)}applyRenderShader(e){this.uploadMorphTargetBuffer(),this.uploadConfigGBuffer(),e.setUniformBuffer("morphTargetConfig",this._computeConfigBuffer),e.setStorageBuffer("morphTargetOpPositions",this._positionAttrDataGroup.output),this._collectMorphTargetData.mergedNormal&&e.setStorageBuffer("morphTargetOpNormals",this._normalAttrDataGroup.output)}computeMorphTarget(e){this.uploadConfigGBuffer(),this.uploadMorphTargetBuffer(),this._computeShader.setUniformBuffer("morphTargetConfig",this._computeConfigBuffer),this._computeShader.setStorageBuffer("morphTargetInfluence",this._morphInfluenceBuffer),this._computeShader.setStorageBuffer("morphTargetPositions",this._positionAttrDataGroup.input),this._computeShader.setStorageBuffer("morphTargetOpPositions",this._positionAttrDataGroup.output),this._collectMorphTargetData.mergedNormal&&(this._computeShader.setStorageBuffer("morphTargetNormals",this._normalAttrDataGroup.input),this._computeShader.setStorageBuffer("morphTargetOpNormals",this._normalAttrDataGroup.output)),this._computeShader.workerSizeX=this._computeWorkGroupXY,this._computeShader.workerSizeY=this._computeWorkGroupXY,this._computeShader.workerSizeZ=1,F.computeCommand(e,this._computeShaders)}updateInfluence(e,t){this._isInfluenceDirty=!0,this._morphInfluenceArray[e]=t}get blendShape(){return this._blendTarget}collectMorphTargetList(e){let t=this.collectAttribute("a_morphPositions_",e),r=t.length,i=t[0].data.length/3;if(this._blendTarget={},e.blendShapeData)for(let l=0;l<e.blendShapeData.shapeIndexs.length;l++){let h=e.blendShapeData.shapeIndexs[l],u=e.blendShapeData.shapeNames[l].split("."),c=u[u.length-1];this._blendTarget[c]=f=>this.updateInfluence(h,f)}let a=new Float32Array(i*r*3);{let l=0;for(let h=0;h<r;h++){let u=t[h];a.set(u.data,l),l+=u.data.length}}let o=this.collectAttribute("a_morphNormals_",e),n;if(o&&o.length>0){let l=0;n=new Float32Array(i*r*3);for(let h=0;h<r;h++){let u=o[h];n.set(u.data,l),l+=u.data.length}}return{mtCount:r,vCount:i,mergedPos:a,mergedNormal:n}}collectAttribute(e,t){let r=[];for(let i=0;i<this.MaxMorphTargetCount;i++){let a=e+i,o=t.getAttribute(a);if(o)r[i]=o;else break}return r}uploadConfigGBuffer(){if(this._isInfluenceDirty){let e=0;for(let t=0;t<this._morphTargetCount;t++)e+=this._morphInfluenceArray[t];this._morphInfluenceBuffer.setFloat32Array("data",this._morphInfluenceArray),this._morphInfluenceBuffer.apply(),this._computeConfigArray[0]=this.morphTargetsRelative?1:1-e,this._computeConfigArray[1]=this._morphTargetCount,this._computeConfigArray[2]=this._totalVertexCount,this._computeConfigArray[3]=this._computeWorkGroupXY,this._computeConfigBuffer.setFloat32Array("data",this._computeConfigArray),this._computeConfigBuffer.apply(),this._isInfluenceDirty=!1}}calcWorkGroup(e){let t=Math.ceil(Math.sqrt(e)),r=Math.ceil(Math.log2(t));return t=Math.pow(2,r),t}uploadMorphTargetBuffer(){this._positionAttrDataGroup.output||this._positionAttrDataGroup.apply(this._totalVertexCount),this._normalAttrDataGroup.output||this._normalAttrDataGroup.apply(this._totalVertexCount)}generateGPUBuffer(){this._computeConfigArray=new Float32Array(4),this._computeConfigBuffer=new ht(4),this._morphInfluenceArray=new Float32Array(this.MaxMorphTargetCount);let e=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST;this._morphInfluenceBuffer=new ve(this.MaxMorphTargetCount,e)}}var zg=Object.defineProperty,Gg=Object.getOwnPropertyDescriptor,Fo=(s,e,t,r)=>{for(var i=r>1?void 0:r?Gg(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&zg(e,t,i),i};let j=class extends ei{receiveShadow;morphData;constructor(){super()}onEnable(){super.onEnable()}onDisable(){super.onDisable()}cloneTo(s){s.addComponent(j).copyComponent(this)}copyComponent(s){return super.copyComponent(s),this.receiveShadow=s.receiveShadow,this}get geometry(){return this._geometry}set geometry(s){if(super.geometry=s,s){let e=s.morphTargetDictionary!=null;e&&(this.morphData||=new Zh,this.morphData.morphTargetsRelative=s.morphTargetsRelative,this.morphData.initMorphTarget(s)),this.morphData&&(this.morphData.enable=e),this.morphData?.enable?this.addRendererMask(Be.MorphTarget):this.removeRendererMask(Be.MorphTarget),this.object3D.bound=this._geometry.bounds.clone()}else this.morphData&&(this.morphData.enable=!1),this.removeRendererMask(Be.MorphTarget);this._readyPipeline||(this.initPipeline(),this._computes&&(this.onCompute=ss(this.onCompute,()=>{for(let e=0;e<this._computes.length;e++)this._computes[e].onUpdate()})))}get material(){return this._materials[0]}set material(s){this.materials=[s]}setMorphInfluence(s,e){if(this.morphData&&this.morphData.enable){let t=this._geometry.morphTargetDictionary[s];t>=0&&this.morphData.updateInfluence(t,e)}}setMorphInfluenceIndex(s,e){this.morphData&&this.morphData.enable&&s>=0&&this.morphData.updateInfluence(s,e)}onCompute(s,e){this.morphData&&this.morphData.enable&&this.morphData.computeMorphTarget(e)}nodeUpdate(s,e,t,r){if(this.morphData&&this.morphData.enable)for(let i=0;i<this.materials.length;i++){let o=this.materials[i].getPass(e);if(o)for(let n=0;n<o.length;n++)this.morphData.applyRenderShader(o[n])}super.nodeUpdate(s,e,t,r)}destroy(s){super.destroy(s)}};Fo([zi],j.prototype,"geometry",1),Fo([zi],j.prototype,"material",1),j=Fo([Wt(j,"MeshRenderer")],j);class _r{static compressGBufferTex_NAME="compressGBufferTex_NAME";static colorBufferTex_NAME="colorBufferTex";static positionBufferTex_NAME="positionBufferTex";static normalBufferTex_NAME="normalBufferTex";static materialBufferTex_NAME="materialBufferTex";static zBufferTexture_NAME="zBufferTexture";static zPreDepthTexture_NAME="zPreDepthTexture";static outTex_NAME="outTex"}class Yh{label="";customSize=!1;zPreTexture=null;depthTexture=null;renderTargetTextures;outColor=-1;renderTargets;rtTextureDescriptors;irradianceBuffer;multisample=0;multiTexture;depthViewIndex=0;depthCleanValue=0;isOutTarget=!0;camera3D;rtFrame;renderPassDescriptor;renderBundleEncoderDescriptor;depthLoadOp;getLastRenderTexture(){return this.renderTargets&&this.renderTargets.length>0?this.renderTargets[0]:m.res.redTexture}}class mt extends $e{resolveTarget;sampleCount;autoResize;clear;constructor(e,t,r=X.rgba8unorm,i=!1,a,o=1,n=0,l=!0,h=!0){super(e,t,o),this.name=It(),this.autoResize=h,this.useMipmap=i,this.sampleCount=n,this.format=r,this.numberLayer=o,this.clear=l,a!=null?this.usage=a:this.usage=a|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST,this.resize(e,t),this.autoResize&&R.addEventListener(Yr.RESIZE,u=>{let{width:c,height:f}=u.data;this.resize(c,f),this._textureChange=!0},this)}resize(e,t){let r=R.device;this.gpuTexture&&($e.delayDestroyTexture(this.gpuTexture),this.gpuTexture=null,this.view=null),this.width=e,this.height=t,this.createTextureDescriptor(e,t,1,this.format,this.usage,this.numberLayer,this.sampleCount),this.useMipmap=!1,this.visibility=GPUShaderStage.COMPUTE|GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,this.format==X.rgba32float?(this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="unfilterable-float",this.gpuSampler=r.createSampler({})):this.format==X.depth32float?(this.samplerBindingLayout.type="filtering",this.sampler_comparisonBindingLayout.type="comparison",this.textureBindingLayout.sampleType="depth",this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})):this.format==X.depth24plus?(this.samplerBindingLayout={type:"filtering"},this.sampler_comparisonBindingLayout={type:"comparison"},this.textureBindingLayout.sampleType="depth",this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})):(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float",this.sampleCount>0&&(this.textureBindingLayout.multisampled=!0),this.minFilter="linear",this.magFilter="linear",this.mipmapFilter="linear",this.addressModeU=Pt.clamp_to_edge,this.addressModeV=Pt.clamp_to_edge,this.gpuSampler=r.createSampler(this)),this._textureChange=!0}create(e,t,r=!0){let i=R.device;const a=e*4;let o=new Float32Array(e*t*4);const n=i.createBuffer({size:o.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(n,0,o);const l=F.beginCommandEncoder();l.copyBufferToTexture({buffer:n,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(l)}clone(){let e=new mt(this.width,this.height,this.format,this.useMipmap,this.usage,this.numberLayer,this.sampleCount,this.clear,this.autoResize);return e.name="clone_"+e.name,e}readTextureToImage(){let e=R.device,t=R.windowWidth,r=R.windowHeight,i=new Float32Array(t*r*4);const a=e.createBuffer({size:i.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});return F.beginCommandEncoder().copyTextureToBuffer({texture:this.getGPUTexture()},{buffer:a},[t,r]),a.getMappedRange(0,i.byteLength)}}class Qe{storeOp="store";loadOp="clear";clearValue=[0,0,0,0]}class Ze{label;customSize=!1;renderTargets;rtDescriptors;zPreTexture;depthTexture;depthViewIndex=0;depthCleanValue=1;depthLoadOp="clear";isOutTarget=!0;constructor(e,t,r,i,a=!0){this.renderTargets=e,this.rtDescriptors=t,this.depthTexture=r,this.zPreTexture=i,this.isOutTarget=a}clone2Frame(e){e.renderTargets.push(...this.renderTargets.concat());for(let t=0;t<this.rtDescriptors.length;t++){const r=this.rtDescriptors[t];let i=new Qe;i.loadOp=r.loadOp,i.storeOp=r.storeOp,i.clearValue=r.clearValue,e.rtDescriptors.push(i)}e.depthTexture=this.depthTexture,e.zPreTexture=this.zPreTexture,e.customSize=this.customSize}clone(){let e=new Ze([],[]);return this.clone2Frame(e),e}}class se extends Ze{static colorPass_GBuffer="ColorPassGBuffer";static reflections_GBuffer="reflections_GBuffer";static gui_GBuffer="gui_GBuffer";static gBufferMap=new Map;_colorBufferTex;_compressGBufferTex;constructor(){super([],[])}createGBuffer(e,t,r,i=!0,a=!0,o){let n=this.renderTargets,l=this.rtDescriptors;if(a){let u=new Qe;u.loadOp="clear",this._colorBufferTex=Bt.createRTTexture(e+_r.colorBufferTex_NAME,t,r,X.rgba16float,!0),n.push(this._colorBufferTex),l.push(u)}this._compressGBufferTex=new mt(t,r,X.rgba32float,!1,void 0,1,0,!0,!0),n.push(this._compressGBufferTex),o?this.depthTexture=o:(this.depthTexture=new mt(t,r,X.depth24plus,!1,void 0,1,0,!0,!0),this.depthTexture.name=e+"_depthTexture");let h;h=new Qe,l.push(h)}getPositionMap(){return this.renderTargets[1]}getNormalMap(){return this.renderTargets[2]}getColorTexture(){return this._colorBufferTex}getCompressGBufferTexture(){return this._compressGBufferTex}static getGBufferFrame(e,t=0,r=0,i=!0,a){let o;if(se.gBufferMap.has(e))o=se.gBufferMap.get(e);else{o=new se;let n=R.presentationSize;o.createGBuffer(e,t==0?n[0]:t,r==0?n[1]:r,t!=0&&r!=0,i,a),se.gBufferMap.set(e,o)}return o}static getGUIBufferFrame(){let e=this.getGBufferFrame(this.colorPass_GBuffer);return se.getGBufferFrame(se.gui_GBuffer,0,0,!0,e.depthTexture)}clone(){let e=new se;return this.clone2Frame(e),e}}class Te{static rendererPassState=new Map;static createRendererPassState(e,t=null){let r=Te.rendererPassState.get(e);if(r||(r=new Yh,r.label=e.label,r.customSize=e.customSize,r.rtFrame=e,r.zPreTexture=e.zPreTexture,r.depthTexture=e.depthTexture,r.depthViewIndex=e.depthViewIndex,r.isOutTarget=e.isOutTarget,r.depthCleanValue=e.depthCleanValue,r.depthLoadOp=e.depthLoadOp,Te.rendererPassState.set(e,r)),e&&e.renderTargets.length>0){r.renderTargets=e.renderTargets,r.rtTextureDescriptors=e.rtDescriptors,r.renderPassDescriptor=Te.getRenderPassDescriptor(r),r.renderPassDescriptor.depthStencilAttachment&&(r.renderPassDescriptor.depthStencilAttachment.depthLoadOp=e.depthLoadOp),t=="load"&&e?.renderTargets[0]&&e.renderTargets[0].name.startsWith(se.gui_GBuffer)&&(r.renderPassDescriptor.colorAttachments[0].loadOp="load"),r.depthLoadOp=e.depthLoadOp,r.renderBundleEncoderDescriptor=Te.getRenderBundleDescriptor(r),r.renderTargetTextures=[];for(let i=0;i<e.renderTargets.length;i++){const a=e.renderTargets[i];r.renderTargetTextures[i]={format:a.format},a.name.indexOf(_r.colorBufferTex_NAME)!=-1&&(r.outColor=i)}}else r.renderPassDescriptor=Te.getRenderPassDescriptor(r,t),r.renderBundleEncoderDescriptor=Te.getRenderBundleDescriptor(r),r.renderTargetTextures=[{format:R.presentationFormat}],r.outColor=0;return r}static getRenderPassDescriptor(e,t=null){if(e.renderPassDescriptor)return e.renderPassDescriptor;R.device,R.presentationSize;let r=[];if(e.renderTargets&&e.renderTargets.length>0){e.renderTargets[0].width,e.renderTargets[0].height;for(let a=0;a<e.renderTargets.length;a++){const o=e.renderTargets[a],n=e.rtTextureDescriptors[a];r.push({view:o.getGPUView(),resolveTarget:void 0,loadOp:n.loadOp,clearValue:n.clearValue,storeOp:n.storeOp})}}else if(!e.customSize){let a=R.canvasConfig&&R.canvasConfig.alpha?[1,1,1,0]:[0,0,0,1];e.isOutTarget==!0&&r.push({view:void 0,resolveTarget:void 0,loadOp:R.canvasConfig&&R.canvasConfig.alpha||t!=null?"load":"clear",clearValue:a,storeOp:"store"})}let i=null;return e.depthTexture||e.zPreTexture?(e.zPreTexture&&(e.depthTexture=e.zPreTexture),i={label:`${e.label} renderPassDescriptor zPreTexture${e.zPreTexture?"load":"clear"}`,colorAttachments:r,depthStencilAttachment:{view:e.depthTexture.getGPUView(),depthLoadOp:e.zPreTexture?"load":e.depthLoadOp,depthClearValue:e.zPreTexture?1:e.depthCleanValue,depthStoreOp:"store"}}):i={colorAttachments:r,label:"renderPassDescriptor not writeDepth"},e.renderPassDescriptor=i,i}static getRenderBundleDescriptor(e){if(e.renderBundleEncoderDescriptor)return e.renderBundleEncoderDescriptor;R.presentationSize;let t=[];if(e.renderTargets&&e.renderTargets.length>0){e.renderTargets[0].width,e.renderTargets[0].height;for(let i=0;i<e.renderTargets.length;i++){const a=e.renderTargets[i];t.push(a.format)}}let r=null;return e.depthTexture?r={colorFormats:t,depthStencilFormat:e.depthTexture.format}:r={colorFormats:t},e.renderBundleEncoderDescriptor=r,e.renderBundleEncoderDescriptor}}var Wg=Object.getOwnPropertyDescriptor,Jg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Wg(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let ga=class extends pt{constructor(s="QuadGlsl_vs",e="QuadGlsl_fs"){super();let t=new Oe(s,e);this.addRenderPass(t);let r=t.shaderState;t.blendMode=ae.NONE,r.frontFace="cw",r.depthWriteEnabled=!1,r.depthCompare=rt.always,r.multisample=0,this.setTexture("baseMap",m.res.blackTexture),this.setUniformFloat("x",0),this.setUniformFloat("y",0),this.setUniformFloat("width",100),this.setUniformFloat("height",100)}};ga=Jg([yi(ga,"QuadShader")],ga);class yo extends q{width=128;height=128;quadRenderer;material;rendererPassState;quadShader;constructor(e="QuadGlsl_vs",t="QuadGlsl_fs",r,i=0,a=!1){super();let o=r?r.renderTargets:[];this.material=new yt,this.quadShader=new ga(e,t),this.material.shader=this.quadShader,this.quadRenderer=this.addComponent(j),this.quadRenderer.material=this.material,this.quadRenderer.castGI=!1,this.quadRenderer.castShadow=!1,this.quadRenderer.drawType=a?2:0,this.quadRenderer.geometry=new Qi(100,100,1,1),this.quadRenderer.material=this.material,this.quadRenderer.__start(),this.quadRenderer._enable=!0,this.quadRenderer.onEnable(),this.rendererPassState=Te.createRendererPassState(r,"load"),i>0&&(this.rendererPassState.multisample=this.quadShader.getDefaultColorShader().shaderState.multisample,this.rendererPassState.multiTexture=R.device.createTexture({size:{width:R.presentationSize[0],height:R.presentationSize[1]},sampleCount:i,format:o.length>0?o[0].format:R.presentationFormat,usage:GPUTextureUsage.RENDER_ATTACHMENT})),R.addEventListener(Yr.RESIZE,n=>{this.rendererPassState=Te.createRendererPassState(r,"load"),i>0&&(this.rendererPassState.multisample=this.quadShader.getDefaultColorShader().shaderState.multisample,this.rendererPassState.multiTexture=R.device.createTexture({size:{width:R.presentationSize[0],height:R.presentationSize[1]},sampleCount:i,format:o.length>0?o[0].format:R.presentationFormat,usage:GPUTextureUsage.RENDER_ATTACHMENT}))},this)}renderTarget(e,t,r){let i=e.camera,a=F.beginRenderPass(r,t.rendererPassState);F.bindCamera(a,i),t.quadRenderer.nodeUpdate(e,H.COLOR,t.rendererPassState,null),t.quadRenderer.renderPass2(e,H.COLOR,t.rendererPassState,null,a),F.endPass(a)}renderToViewQuad(e,t,r,i){let a=e.camera;t.quadShader.setTexture("baseMap",i);let o=F.beginRenderPass(r,t.rendererPassState);F.bindCamera(o,a),t.quadRenderer.nodeUpdate(e,H.COLOR,t.rendererPassState,null),t.quadRenderer.renderPass2(e,H.COLOR,t.rendererPassState,null,o),F.endPass(o)}}class Bt{static rtTextureMap;static rtViewQuad;static init(){this.rtTextureMap=new Map,this.rtViewQuad=new Map}static createRTTexture(e,t,r,i,a=!1,o=0){let n=this.rtTextureMap.get(e);return n||(e==_r.colorBufferTex_NAME?n=new mt(t,r,i,a,void 0,1,o,!1):n=new mt(t,r,i,a,void 0,1,o,!0),n.name=e,Bt.rtTextureMap.set(e,n)),n}static createRTTextureArray(e,t,r,i,a=1,o=!1,n=0){let l=this.rtTextureMap.get(e);return l||(l=new mt(t,r,i,o,void 0,a,n),l.name=e,Bt.rtTextureMap.set(e,l)),l}static createViewQuad(e,t,r,i,a=0){let o=new Ze([i],[new Qe]),n=new yo(t,r,o,a);return Bt.rtViewQuad.set(e,n),n}static getTexture(e){return this.rtTextureMap.get(e)}static CreateSplitTexture(e){let t=this.getTexture(_r.colorBufferTex_NAME),r=this.getTexture(e+"_split");return r||(r=this.createRTTexture(e+"_split",t.width,t.height,t.format,!1)),r}static WriteSplitColorTexture(e){let t=this.getTexture(_r.colorBufferTex_NAME),r=this.getTexture(e+"_split");const i=F.beginCommandEncoder();i.copyTextureToTexture({texture:t.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:r.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{width:r.width,height:r.height,depthOrArrayLayers:1}),F.endCommandEncoder(i)}}class bo{command;encoder;rendererPassStates;rtFrame;constructor(e){this.rtFrame=e,this.rendererPassStates=[]}clean(){this.rendererPassStates.length=0,F.cleanCache()}beginContinueRendererPassState(e="load",t="load"){if(this.rendererPassStates.length>0){let r=this.rtFrame.clone();for(const a of r.rtDescriptors)a.loadOp="load";r.depthLoadOp=t;let i=Te.createRendererPassState(r,e);return this.rendererPassStates.push(i),i}else{this.rtFrame.depthLoadOp=t;let r=Te.createRendererPassState(this.rtFrame,e);return this.rendererPassStates.push(r),r}}get rendererPassState(){return this.rendererPassStates[this.rendererPassStates.length-1]}beginOpaqueRenderPass(){this.beginContinueRendererPassState("clear","clear"),this.begineNewCommand(),this.beginNewEncoder()}beginTransparentRenderPass(){this.beginContinueRendererPassState("load","load"),this.begineNewCommand(),this.beginNewEncoder()}specialtRenderPass(){this.beginContinueRendererPassState("load","load"),this.begineNewCommand(),this.beginNewEncoder()}endRenderPass(){this.endEncoder(),this.endCommand()}begineNewCommand(){return this.command=F.beginCommandEncoder(),this.command}endCommand(){F.endCommandEncoder(this.command),this.command=null}beginNewEncoder(){return this.encoder=F.beginRenderPass(this.command,this.rendererPassState),this.encoder}endEncoder(){F.endPass(this.encoder),this.encoder=null}}class Fr extends Er{rendererPassState;splitRendererPassState;useRenderBundle=!1;debugViewQuads;debugTextures;renderContext;_rendererType;_rtFrame;get passType(){return this._rendererType}set passType(e){this._rendererType=e}constructor(){super(),this.debugTextures=[],this.debugViewQuads=[]}setRenderStates(e){if(this._rtFrame=e,e){this.rendererPassState=Te.createRendererPassState(e);let t=e.clone();t.depthLoadOp="load";for(const r of t.rtDescriptors)r.loadOp="load";this.splitRendererPassState=Te.createRendererPassState(t)}this.renderContext=new bo(e)}getRenderContext(e){return this._rtFrame=e,new bo(e)}setIrradiance(e,t){this.rendererPassState.irradianceBuffer=[e,t]}compute(e,t){}render(e,t,r,i=!1){F.cleanCache();let a=e.camera,o=e.scene;this.rendererPassState.camera3D=a;let n=G.instance.getRenderNodes(o,a),l=this.renderBundleOp(e,n,t,r),h=i?[]:this.renderBundleTr(e,n,t,r);{let u=F.beginCommandEncoder(),c=F.beginRenderPass(u,this.rendererPassState);l.length>0&&c.executeBundles(l),!i&&G.instance.sky&&(F.bindCamera(c,a),G.instance.sky.renderPass2(e,this._rendererType,this.rendererPassState,r,c)),this.drawRenderNodes(e,c,u,n.opaqueList,t),F.endPass(c),F.endCommandEncoder(u)}{let u=F.beginCommandEncoder(),c=F.beginRenderPass(u,this.rendererPassState);h.length>0&&c.executeBundles(h),i||(F.bindCamera(c,a),this.drawRenderNodes(e,c,u,n.transparentList,t)),F.endPass(c),F.endCommandEncoder(u)}}nodeUpload(e,t,r){}occlusionRenderNodeTest(e,t,r){return r?r.occlusionRenderNodeTest(e)>0:!0}renderOp(e,t,r,i,a){}renderTr(e,t,r,i,a){}renderBundleOp(e,t,r,i){let a=G.instance.getOpRenderGroup(e.scene);if(a){let o=[];return a.renderGroup.forEach(n=>{if(n.bundleMap.has(this._rendererType))o.push(n.bundleMap.get(this._rendererType));else{let l=F.recordBundleEncoder(this.rendererPassState.renderBundleEncoderDescriptor);this.recordRenderBundleNode(e,l,n.renderNodes,i);let h=l.finish();n.bundleMap.set(this._rendererType,h),o.push(h)}}),o}return[]}renderBundleTr(e,t,r,i){let a=G.instance.getTrRenderGroup(e.scene);if(a){let o=[];return a.renderGroup.forEach(n=>{if(n.bundleMap.has(this._rendererType))o.push(n.bundleMap.get(this._rendererType));else{let l=F.recordBundleEncoder(this.rendererPassState.renderBundleEncoderDescriptor);this.recordRenderBundleNode(e,l,n.renderNodes,i);let h=l.finish();n.bundleMap.set(this._rendererType,h),o.push(h)}}),o}return[]}recordRenderBundleNode(e,t,r,i){F.bindCamera(t,e.camera),F.bindGeometryBuffer(t,r[0].geometry);for(let a=0;a<r.length;++a){let o=r[a];o.transform.worldMatrix.index,o.transform.enable&&o.recordRenderPass2(e,this._rendererType,this.rendererPassState,i,t)}}drawRenderNodes(e,t,r,i,a,o){F.bindCamera(t,e.camera);for(let n=m.setting.render.drawOpMin;n<Math.min(i.length,m.setting.render.drawOpMax);++n){let l=i[n];l.transform.enable&&l.enable&&l.renderPass2(e,this._rendererType,this.rendererPassState,o,t)}}}class Xh extends Fr{constructor(){super(),this.passType=H.COLOR}render(e,t,r,i=!1){this.renderContext.clean();let a=e.scene,o=e.camera;ne.updateCameraGroup(o),this.rendererPassState.camera3D=o;let n=G.instance.getRenderNodes(a,o),l=this.renderBundleOp(e,n,t,r),h=i?[]:this.renderBundleTr(e,n,t,r);{this.renderContext.beginOpaqueRenderPass();let u=this.renderContext.encoder;l.length>0&&(G.instance.getOpRenderGroup(a),u.executeBundles(l)),!i&&G.instance.sky&&(F.bindCamera(u,o),G.instance.sky.preInit(this._rendererType)||G.instance.sky.nodeUpdate(e,this._rendererType,this.rendererPassState,r),G.instance.sky.renderPass2(e,this._rendererType,this.rendererPassState,r,u)),n.opaqueList&&(F.bindCamera(u,o),this.drawNodes(e,this.renderContext,n.opaqueList,t,r))}{let u=this.renderContext.encoder;h.length>0&&u.executeBundles(h),!i&&n.transparentList&&(F.bindCamera(u,o),this.drawNodes(e,this.renderContext,n.transparentList,t,r));let c=G.instance.getGraphicList();for(let f=0;f<c.length;f++){const g=c[f];g.nodeUpdate(e,this._rendererType,this.splitRendererPassState,r),g.renderPass2(e,this._rendererType,this.splitRendererPassState,r,u)}this.renderContext.endRenderPass(),Ye.end("ColorPass Draw Transparent")}}drawNodes(e,t,r,i,a){let o=G.instance.getRenderShaderCollect(e);if(o){for(const n of o){let l=n[1];for(const h of l){let u=h[1];if(!u.isDestroyed&&u.preInit(this._rendererType)){u.nodeUpdate(e,this._rendererType,this.rendererPassState,a);break}}}for(let n=m.setting.render.drawOpMin;n<Math.min(r.length,m.setting.render.drawOpMax);++n){let l=r[n];l.transform.enable&&l.enable&&(l.hasMask(Be.UI)&&!l.isRecievePostEffectUI||l.isDestroyed||(l.preInit(this._rendererType)||l.nodeUpdate(e,this._rendererType,this.rendererPassState,a),l.renderPass(e,this.passType,this.renderContext)))}}}occlusionRenderNodeTest(e,t,r){return r.zDepthRenderNodeTest(t)>0}}class Qo{frustumCullingList;zVisibleList;_renderList;static enable=!0;constructor(){this._renderList=new Map}occlusionRenderNodeTest(e){return m.setting.occlusionQuery.enable?this.frustumCullingList?this.frustumCullingList[e]:0:1}zDepthRenderNodeTest(e){return this.zVisibleList?this.zVisibleList[e]:0}update(e,t){}collect(e,t){}renderCommitTesting(e,t){return!0}}class Hi extends wr{constructor(e,t){super(),this.bufferType=tr.ComputeGPUBuffer,this.createBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,e,t,"ComputeGPUBuffer")}}class Hh{clusterBuffer;lightAssignBuffer;assignTableBuffer;clustersUniformBuffer;constructor(e,t){this.clusterBuffer=new Hi(e*2*4),this.clustersUniformBuffer=new ht(10),this.clustersUniformBuffer.visibility=GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,this.lightAssignBuffer=new Hi(e*t),this.lightAssignBuffer.visibility=GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,this.assignTableBuffer=new Hi(e*4),this.assignTableBuffer.visibility=GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE}update(e,t,r,i,a,o,n,l,h,u){this.clustersUniformBuffer.setFloat("clusterTileX",i),this.clustersUniformBuffer.setFloat("clusterTileY",a),this.clustersUniformBuffer.setFloat("clusterTileZ",o),this.clustersUniformBuffer.setFloat("numLights",n),this.clustersUniformBuffer.setFloat("maxNumLightsPerCluster",l),this.clustersUniformBuffer.setFloat("near",h),this.clustersUniformBuffer.setFloat("far",u),this.clustersUniformBuffer.setFloat("screenWidth",e),this.clustersUniformBuffer.setFloat("screenHeight",t),this.clustersUniformBuffer.setFloat("clusterPix",r),this.clustersUniformBuffer.apply()}}class dt{static clusterTileX=16;static clusterTileY=16;static clusterTileZ=32}let jh=`
|
|
5824
|
+
`;class Th extends yt{constructor(){super(),O.register("gsplat_vs_dc",Eh),O.register("gsplat_fs_dc",wh);const e=new Oe("gsplat_vs_dc","gsplat_fs_dc");e.passType=H.COLOR,e.setShaderEntry("VertMain","FragMain"),e.topology=qs.triangle_strip,e.depthWriteEnabled=!1,e.cullMode="none",e.shaderState.transparent=!0,e.shaderState.blendMode=ae.NORMAL,e.shaderState.writeMasks=[15,15];const t=new mt;t.addRenderPass(e),this.shader=t}setSplatTextures(e,t,r,i,a){const o=this.shader.getDefaultColorShader();o.setTexture("splatColor",e),o.setTexture("transformA",t),o.setTexture("transformB",r),o.setUniformArray("tex_params",i),a&&o.setTexture("splatOrder",a)}setTransformMatrix(e){this.shader.getDefaultColorShader().setUniform("modelMatrix",e.rawData)}setPixelCulling(e,t,r=0){this.shader.getDefaultColorShader().setUniform("pixelCull",new Float32Array([e,t,r,0]))}}class cs extends wr{node;constructor(e){super(),this.bufferType=tr.VertexGPUBuffer,this.createVertexBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX,e)}createVertexBuffer(e,t){let r=R.device;this.byteSize=t*Float32Array.BYTES_PER_ELEMENT,this.usage=e,this.buffer&&this.destroy(),this.buffer=r.createBuffer({label:"VertexGPUBuffer",size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new Xr,this.memoryNodes=new Map,this.memory.allocation(this.byteSize),this.node=this.memory.allocation_node(this.byteSize)}}var ft=(s=>(s[s.split=0]="split",s[s.compose=1]="compose",s[s.compose_bin=2]="compose_bin",s))(ft||{});class Dh{vertexCount=0;vertexGPUBuffer;geometryType=ft.compose;_vertexBufferLayouts;_attributeSlotLayouts;_attributeLocation;constructor(){this._vertexBufferLayouts=[],this._attributeLocation={},this._attributeSlotLayouts=[]}get vertexBufferLayouts(){return this._vertexBufferLayouts}createVertexBuffer(e,t){switch(this.geometryType){case ft.split:this.createSplitVertexBuffer(e,t);break;case ft.compose:this.createComposeVertexBuffer(e,t);break;case ft.compose_bin:this.createComposBinVertexBuffer(e,t);break}}createSplitVertexBuffer(e,t){let r=0;for(let i=0;i<t.attributes.length;i++){const a=t.attributes[i];if(a.name=="index")continue;this._attributeLocation[a.name]=a.location;let o={name:a.name,format:a.format,offset:0,shaderLocation:a.location,stride:jr[a.format]};this._attributeSlotLayouts[a.location]=[o];let n=e.get(a.name);n||(n={attribute:a.name,data:new Float32Array(a.size*this.vertexCount)},e.set(a.name,n));let l=n.data.length/o.stride;this.vertexCount!=0&&this.vertexCount!=l&&console.error(" vertex count not match attribute count"),this.vertexCount=l,this._vertexBufferLayouts[a.location]={name:a.name,arrayStride:a.size*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[a.location],offset:r*4,size:this.vertexCount*a.size*4},r+=this.vertexCount*a.size}this.vertexGPUBuffer=new cs(r)}createComposeVertexBuffer(e,t){this._attributeSlotLayouts[0]=[];let r=0;for(let i=0;i<t.attributes.length;i++){const a=t.attributes[i];if(a.name=="index"||a.type=="builtin")continue;this._attributeLocation[a.name]=a.location;let o={name:a.name,format:a.format,offset:r*4,shaderLocation:a.location,stride:jr[a.format]};this._attributeSlotLayouts[0][a.location]=o;let n=e.get(a.name);if(n||(n={attribute:a.name,data:new Float32Array(a.size*this.vertexCount)},e.set(a.name,n)),n.data){let l=n.data.length/o.stride;this.vertexCount!=0&&this.vertexCount!=l&&console.error(" vertex count not match attribute count"),this.vertexCount=l}r+=a.size}this._vertexBufferLayouts[0]={name:"composeStruct",arrayStride:r*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[0],offset:0,size:this.vertexCount*r*4},this.vertexGPUBuffer=new cs(this.vertexCount*r)}createComposBinVertexBuffer(e,t){this._attributeSlotLayouts[0]=[];let r=0;for(let o=0;o<t.attributes.length;o++){const n=t.attributes[o];if(n.name=="index"||n.type=="builtin")continue;this._attributeLocation[n.name]=n.location;let l={name:n.name,format:n.format,offset:r*4,shaderLocation:n.location,stride:jr[n.format]};this._attributeSlotLayouts[0][n.location]=l;let h=e.get(n.name);if(h||(h={attribute:n.name,data:new Float32Array(n.size*this.vertexCount)},e.set(n.name,h)),h.data){let u=h.data.length/l.stride;this.vertexCount!=0&&this.vertexCount!=u&&console.error(" vertex count not match attribute count"),this.vertexCount=u}r+=n.size}let a=e.get(V.all).data.length/r;this.vertexCount=a,this._vertexBufferLayouts[0]={name:"composeStruct",arrayStride:r*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[0],offset:0,size:this.vertexCount*r*4},this.vertexGPUBuffer=new cs(this.vertexCount*r)}upload(e,t){if(this.vertexGPUBuffer){switch(this.geometryType){case ft.split:{let r=this._attributeLocation[e],i=this._vertexBufferLayouts[r];this.vertexGPUBuffer.node.setFloat32Array(i.offset/4,t.data)}break;case ft.compose:for(let r=0;r<this.vertexCount;r++){const i=this._attributeSlotLayouts[0][this._attributeLocation[e]];for(let a=0;a<i.stride;a++){let o=t.data[r*i.stride+a],n=r*(this._vertexBufferLayouts[0].arrayStride/4)+i.offset/4+a;this.vertexGPUBuffer.node.setFloat(o,n)}}break;case ft.compose_bin:this.vertexGPUBuffer.node.setFloat32Array(0,t.data);break}this.vertexGPUBuffer?.apply()}}updateAttributes(e){switch(this.geometryType){case ft.split:for(let t=0;t<this._vertexBufferLayouts.length;t++){const r=this._vertexBufferLayouts[t];let i=e.get(r.name);this.vertexGPUBuffer.node.setFloat32Array(r.offset/4,i.data)}break;case ft.compose:for(let t=0;t<this.vertexCount;t++)this._attributeSlotLayouts.forEach(r=>{for(let i=0;i<r.length;i++){const a=r[i];let o=e.get(a.name);for(let n=0;n<a.stride;n++){let l=o.data[t*a.stride+n],h=t*(this._vertexBufferLayouts[0].arrayStride/4)+a.offset/4+n;this.vertexGPUBuffer.node.setFloat(l,h)}}});break;case ft.compose_bin:{let t=e.get(V.all);this.vertexGPUBuffer.node.setFloat32Array(0,t.data)}break}this.vertexGPUBuffer.apply()}compute(){}destroy(e){this.vertexCount=null,this.geometryType=null,this._vertexBufferLayouts=null,this._attributeSlotLayouts=null,this._attributeLocation=null,this.vertexGPUBuffer&&this.vertexGPUBuffer.destroy(e),this.vertexGPUBuffer=null}}class Mh extends wr{indicesNode;constructor(e){super(),this.bufferType=tr.IndicesGPUBuffer,this.createIndicesBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.INDEX|GPUBufferUsage.INDIRECT,e)}createIndicesBuffer(e,t){let r=R.device;if(this.byteSize=t.length*4,this.usage=e,this.buffer&&this.destroy(),this.buffer=r.createBuffer({label:"IndicesGPUBuffer",size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new Xr,this.memoryNodes=new Map,this.memory.allocation(this.byteSize),t){this.indicesNode=this.memory.allocation_node(t.length*4);const i=t.buffer instanceof ArrayBuffer?t.buffer:new Uint8Array(t.buffer).buffer;this.indicesNode.setArrayBuffer(0,i),this.apply()}}}class Nh{uuid="";name;indicesGPUBuffer;indicesFormat="uint16";indicesCount=0;constructor(){}createIndicesBuffer(e){e.data instanceof Uint16Array?this.indicesFormat="uint16":e.data instanceof Uint32Array&&(this.indicesFormat="uint32"),this.indicesCount=e.data.length,this.indicesGPUBuffer=new Mh(e.data)}upload(e){this.indicesGPUBuffer.indicesNode.setArrayBuffer(0,e),this.indicesGPUBuffer.apply()}compute(){}destroy(){this.uuid=null,this.name=null,this.indicesFormat=null,this.indicesCount=null,this.indicesGPUBuffer.destroy(),this.indicesGPUBuffer=null}}class Vh{lodLevels}class Ne{instanceID;name;subGeometries=[];morphTargetsRelative;morphTargetDictionary;skinNames;bindPose;blendShapeData;vertexDim;vertexCount=0;_bounds;_attributeMap;_attributes;_indicesBuffer;_vertexBuffer;_onChange=!0;_wireframeLines;constructor(){this.instanceID=It(),this._attributeMap=new Map,this._attributes=[],this._vertexBuffer=new Dh}get indicesBuffer(){return this._indicesBuffer}get vertexBuffer(){return this._vertexBuffer}get vertexAttributes(){return this._attributes}get vertexAttributeMap(){return this._attributeMap}get geometryType(){return this._vertexBuffer.geometryType}set geometryType(e){this._vertexBuffer.geometryType=e}get bounds(){if(!this._bounds){this._bounds=new Re(new d,new d(1,1,1)),this._bounds.min.x=Number.MAX_VALUE,this._bounds.min.y=Number.MAX_VALUE,this._bounds.min.z=Number.MAX_VALUE,this._bounds.max.x=-Number.MAX_VALUE,this._bounds.max.y=-Number.MAX_VALUE,this._bounds.max.z=-Number.MAX_VALUE;let e=this.getAttribute(V.position);if(e&&e.data)for(let t=0;t<e.data.length/3;t++){const r=e.data[t*3+0],i=e.data[t*3+1],a=e.data[t*3+2];this._bounds.min.x>r&&(this._bounds.min.x=r),this._bounds.min.y>i&&(this._bounds.min.y=i),this._bounds.min.z>a&&(this._bounds.min.z=a),this._bounds.max.x<r&&(this._bounds.max.x=r),this._bounds.max.y<i&&(this._bounds.max.y=i),this._bounds.max.z<a&&(this._bounds.max.z=a)}this._bounds.setFromMinMax(this._bounds.min,this._bounds.max)}return this._bounds}set bounds(e){this._bounds=e}addSubGeometry(...e){let t=new Vh;return t.lodLevels=e,this.subGeometries.push(t),t}generate(e){this._onChange&&(this._onChange=!1,this._indicesBuffer.upload(this.getAttribute(V.indices).data),this._vertexBuffer.createVertexBuffer(this._attributeMap,e),this._vertexBuffer.updateAttributes(this._attributeMap),this.vertexCount=this._vertexBuffer.vertexCount)}setIndices(e){if(!this._attributeMap.has(V.indices)){let t={attribute:V.indices,data:e};this._attributeMap.set(V.indices,t),this._indicesBuffer=new Nh,this._indicesBuffer.createIndicesBuffer(t)}}setAttribute(e,t){if(e==V.indices)this.setIndices(t);else{let r={attribute:e,data:t};this._attributeMap.set(e,r),this._attributes.push(e)}}getAttribute(e){return this._attributeMap.get(e)}hasAttribute(e){return this._attributeMap.has(e)}genWireframe(){if(this._wireframeLines)return this._wireframeLines;if(this.geometryType==ft.split||this.geometryType==ft.compose){let e=this.getAttribute(V.position),t=this.getAttribute(V.indices);if(t&&e&&t.data.length>0){let r=e.data,i=[];for(let a=0;a<t.data.length/3;a++){const o=t.data[a*3+0],n=t.data[a*3+1],l=t.data[a*3+2];let h=new d(r[o*3+0],r[o*3+1],r[o*3+2]),u=new d(r[n*3+0],r[n*3+1],r[n*3+2]),c=new d(r[l*3+0],r[l*3+1],r[l*3+2]);i.push(h,u),i.push(u,c),i.push(c,h)}return this._wireframeLines=i,i}}else if(this.geometryType==ft.compose_bin){let e=this.getAttribute(V.all),t=this.vertexDim,r=this.getAttribute(V.indices);if(r&&e&&r.data.length>0){let i=e.data,a=[];for(let o=0;o<r.data.length/3;o++){const n=r.data[o*3+0],l=r.data[o*3+1],h=r.data[o*3+2];let u=new d(i[n*t+0],i[n*t+1],i[n*t+2]),c=new d(i[l*t+0],i[l*t+1],i[l*t+2]),f=new d(i[h*t+0],i[h*t+1],i[h*t+2]);a.push(u,c),a.push(c,f),a.push(f,u)}return this._wireframeLines=a,a}}return null}compute(){this._indicesBuffer&&this._indicesBuffer.compute(),this._vertexBuffer&&this._vertexBuffer.compute()}static crossA=d.UP.clone();static crossB=d.UP.clone();static crossRet=d.UP.clone();static point1=d.UP.clone();static point2=d.UP.clone();static point3=d.UP.clone();computeNormals(){let e=this.getAttribute(V.position),t=this.getAttribute(V.normal),r=this.getAttribute(V.indices);if(!e||!t||!r)return this;let i=r.data.length/3,a=Ne.point1,o=Ne.point2,n=Ne.point3,l=Ne.crossA,h=Ne.crossB,u=Ne.crossRet;for(let c=0;c<i;c++){let f=r.data[c*3],g=r.data[c*3+1],p=r.data[c*3+2];a.set(e.data[f*3],e.data[f*3+1],e.data[f*3+2]),o.set(e.data[g*3],e.data[g*3+1],e.data[g*3+2]),n.set(e.data[p*3],e.data[p*3+1],e.data[p*3+2]),d.sub(a,o,l).normalize(),d.sub(a,n,h).normalize();let A=l.crossProduct(h,u).normalize();t.data[f*3]=t.data[g*3]=t.data[p*3]=A.x,t.data[f*3+1]=t.data[g*3+1]=t.data[p*3+1]=A.y,t.data[f*3+2]=t.data[g*3+2]=t.data[p*3+2]=A.z}return this._vertexBuffer.upload(V.normal,t),this}isPrimitive(){return!1}destroy(e){this.instanceID=null,this.name=null,this.subGeometries=null,this.morphTargetDictionary=null,this._bounds.destroy(),this._bounds=null,this._attributeMap=null,this._attributes=null,this._indicesBuffer.destroy(),this._vertexBuffer.destroy(),this._indicesBuffer=null,this._vertexBuffer=null}}class Qi extends Ne{width;height;segmentW;segmentH;up;constructor(e,t,r=1,i=1,a=d.Y_AXIS){super(),this.width=e,this.height=t,this.segmentW=r,this.segmentH=i,this.up=a,this.buildGeometry(this.up)}buildGeometry(e){var t,r,i,a,o=this.segmentW+1;(this.segmentH+1)*o,this.bounds=new Re(d.ZERO.clone(),new d(this.width,1,this.height)),i=this.segmentH*this.segmentW*6;let n=(this.segmentW+1)*(this.segmentH+1),l=new Float32Array(n*3),h=new Float32Array(n*3),u=new Float32Array(n*2),c;this.segmentW*this.segmentH*2*3>=Uint16Array.length?c=new Uint32Array(this.segmentW*this.segmentH*2*3):c=new Uint16Array(this.segmentW*this.segmentH*2*3),i=0;for(var g=0,p=0,A=0,U=0;U<=this.segmentH;++U)for(var x=0;x<=this.segmentW;++x){switch(t=(x/this.segmentW-.5)*this.width,r=(U/this.segmentH-.5)*this.height,e){case d.Y_AXIS:l[g++]=t,l[g++]=0,l[g++]=r,h[p++]=0,h[p++]=1,h[p++]=0;break;case d.Z_AXIS:l[g++]=t,l[g++]=-r,l[g++]=0,h[p++]=0,h[p++]=0,h[p++]=1;break;case d.X_AXIS:l[g++]=0,l[g++]=t,l[g++]=r,h[p++]=1,h[p++]=0,h[p++]=0;break;default:l[g++]=t,l[g++]=0,l[g++]=r,h[p++]=0,h[p++]=1,h[p++]=0;break}u[A++]=x/this.segmentW,u[A++]=U/this.segmentH,x!=this.segmentW&&U!=this.segmentH&&(a=x+U*o,c[i++]=a+1,c[i++]=a,c[i++]=a+o,c[i++]=a+1,c[i++]=a+o,c[i++]=a+o+1)}this.setIndices(c),this.setAttribute(V.position,l),this.setAttribute(V.normal,h),this.setAttribute(V.uv,u),this.setAttribute(V.TEXCOORD_1,u),this.addSubGeometry({indexStart:0,indexCount:c.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class Bo extends $e{_dataBuffer;create(e,t,r,i=!1){let a=R.device;const o=Math.ceil(e*4/256)*256;this.format=X.rgba8unorm,this.mipmapCount=Math.floor(i?Math.log2(e):1),this.createTextureDescriptor(e,t,this.mipmapCount,this.format);const n=this._dataBuffer=a.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});a.queue.writeBuffer(n,0,r);const l=F.beginCommandEncoder();return l.copyBufferToTexture({buffer:n,bytesPerRow:o},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(l),i&&dr.webGPUGenerateMipmap(this),this}updateTexture(e,t,r){let i=R.device;const a=Math.ceil(e*4/256)*256;this.mipmapCount=Math.floor(Math.log2(e)),this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=null;const o=this._dataBuffer=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(o,0,r);const n=F.beginCommandEncoder();n.copyBufferToTexture({buffer:o,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(n),this.gpuSampler=i.createSampler(this),this.mipmapCount>1&&dr.webGPUGenerateMipmap(this)}}class vo extends $e{_dataBuffer;create(e,t,r){let i=R.device;const a=e*4*4;this.format=X.rgba32uint,this.createTextureDescriptor(e,t,1,this.format);const n=this._dataBuffer=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(n,0,r.buffer);const l=i.createCommandEncoder();return l.copyBufferToTexture({buffer:n,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),i.queue.submit([l.finish()]),this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="uint",this.gpuSampler=i.createSampler({}),this}updateTexture(e,t,r){let i=R.device;const a=e*4*4,o=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(o,0,r.buffer);const n=i.createCommandEncoder();n.copyBufferToTexture({buffer:o,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),i.queue.submit([n.finish()])}}const Ph=new Float32Array(1),Ng=new Int32Array(Ph.buffer);let ti=function(s){Ph[0]=s;const e=Ng[0];let t=e>>16&32768,r=e>>12&2047;const i=e>>23&255;return i<103?t:i>142?(t|=31744,t|=(i==255?1:0)&&e&8388607,t):i<114?(r|=2048,t|=(r>>114-i)+(r>>113-i&1),t):(t|=i-112<<10|r>>1,t+=r&1,t)};class Co extends $e{uint16Array;floatArray;_dataBuffer;create(e,t,r=null,i=!0){if(r==null){r=[];for(let a=0,o=e*t*4;a<o;a++)r[a]=0}return this.updateTexture(e,t,r,i),this}updateTexture(e,t,r,i=!0){(e!=this.width||t!=this.height)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=null,this.gpuTexture&&this.gpuTexture.destroy(),this.gpuTexture=null),this.floatArray=r;let a=R.device;const o=e*4*2;this.format=X.rgba16float,this.mipmapCount=Math.floor(i?Math.log2(e):1),this.createTextureDescriptor(e,t,this.mipmapCount,this.format),(!this.uint16Array||this.uint16Array.length!=r.length)&&(this.uint16Array=new Uint16Array(r.length));let n=this.uint16Array;for(let u=0,c=n.length;u<c;u++)n[u]=ti(r[u]);const l=this._dataBuffer=a.createBuffer({size:n.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});a.queue.writeBuffer(l,0,n);const h=F.beginCommandEncoder();h.copyBufferToTexture({buffer:l,bytesPerRow:o},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),this.useMipmap||(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float"),F.endCommandEncoder(h),this.gpuSampler=a.createSampler(this),this.gpuTexture=this.getGPUTexture(),this.mipmapCount>1&&dr.webGPUGenerateMipmap(this)}}var Vg=Object.getOwnPropertyDescriptor,Pg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Vg(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let da=class extends ei{count=0;size=new K;splatColor;transformA;transformB;texParams;splatOrder;gsplatMaterial;_positions;get positions(){return this._positions}_worldPositions;_orderData;_sortWorker;_lastSentTime=0;_minIntervalMs=0;_centersSent=!1;_lastViewMatrixHash=0;_lastCameraSpeed=0;_adaptiveSorting=!0;_lodEnabled=!1;_lodDistances=[5,10,20,40];_lodRatios=[1,.75,.5,.25,.1];_currentLodLevel=0;_minPixelCoverage=4;_maxPixelCoverage=0;_maxPixelCullDistance=0;_mapping=null;_fullCount=0;get fullCount(){return this._fullCount}constructor(){super()}initAsset(s){this.count=s.count,this._fullCount=s.count,this.size=this.evalTextureSize(s.count),this.buildColor(s),this.buildTransform(s),this.texParams=new Float32Array([this.count,this.size.x,this.count,1]),this._positions=s.position;const e=this.size.x*this.size.y;this._orderData=new Uint32Array(e*4);for(let t=0;t<e;t++){const r=t<this.count?t:this.count>0?this.count-1:0,i=t*4;this._orderData[i+0]=r,this._orderData[i+1]=0,this._orderData[i+2]=0,this._orderData[i+3]=0}this.splatOrder=new vo().create(this.size.x,this.size.y,this._orderData),this.splatOrder.name="splatOrder",this.splatOrder.minFilter="nearest",this.splatOrder.magFilter="nearest",this.splatOrder.addressModeU="clamp-to-edge",this.splatOrder.addressModeV="clamp-to-edge",this.gsplatMaterial=new Th,this.geometry=new Qi(1,1,1,1),this.materials=[this.gsplatMaterial]}onBeforeUpdate(s){this.count>0&&s?.camera&&(this._lodEnabled&&this.updateLOD(s),s.camera.viewMatrix&&this.scheduleOrder(s.camera.viewMatrix))}updateLOD(s){if(!this._worldPositions||this._fullCount===0)return;const t=s.camera.viewMatrix.rawData,r=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),i=-(t[4]*t[12]+t[5]*t[13]+t[6]*t[14]),a=-(t[8]*t[12]+t[9]*t[13]+t[10]*t[14]);let o=0,n=0,l=0;const h=Math.min(100,this._fullCount);for(let A=0;A<h;A++){const U=Math.floor(A/h*this._fullCount)*3;o+=this._worldPositions[U+0],n+=this._worldPositions[U+1],l+=this._worldPositions[U+2]}o/=h,n/=h,l/=h;const u=r-o,c=i-n,f=a-l,g=Math.sqrt(u*u+c*c+f*f);let p=this._lodDistances.length;for(let A=0;A<this._lodDistances.length;A++)if(g<this._lodDistances[A]){p=A;break}if(p!==this._currentLodLevel){this._currentLodLevel=p;const A=this._lodRatios[p],U=Math.floor(this._fullCount*A);if(this._mapping){const x=this._mapping;this._mapping=new Uint32Array(Math.min(U,x.length));for(let B=0;B<this._mapping.length;B++)this._mapping[B]=x[B];this.setMapping(this._mapping)}else this.count=U,this.texParams[0]=this.count,this.texParams[2]=this.count}}setMapping(s){this._mapping=s&&s.length>0?s:null,this.count=this._mapping?this._mapping.length:this._fullCount,this.texParams[0]=this.count,this.texParams[2]=Math.min(this.texParams[0],this.count);const e=this.size.x*this.size.y;for(let t=0;t<e;t++){const r=t<this.count?t:this.count>0?this.count-1:0,i=t*4;this._orderData[i+0]=r,this._orderData[i+1]=0,this._orderData[i+2]=0,this._orderData[i+3]=0}if(this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData),this._sortWorker){const t=this._worldPositions||this._positions,r=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(t);if(this._mapping)for(let i=0;i<this._mapping.length;++i){const a=this._mapping[i]*3,o=i*3;r[o+0]=t[a+0],r[o+1]=t[a+1],r[o+2]=t[a+2]}this._sortWorker.postMessage({type:"centers",centers:r.buffer,mapping:this._mapping?this._mapping:null},[r.buffer]),this._centersSent=!0}else this._centersSent=!1}setVisBoost(s){this.texParams[3]=Math.max(0,s)}setSortThrottle(s){this._minIntervalMs=Math.max(0,s|0)}setAdaptiveSorting(s){this._adaptiveSorting=s}setLOD(s,e,t){this._lodEnabled=s,e&&(this._lodDistances=e),t&&(this._lodRatios=t)}getLODStats(){return{enabled:this._lodEnabled,currentLevel:this._currentLodLevel,distances:this._lodDistances,ratios:this._lodRatios,currentRatio:this._lodRatios[this._currentLodLevel],visibleCount:this._lodEnabled?Math.floor(this._fullCount*this._lodRatios[this._currentLodLevel]):this._fullCount}}setPixelCulling(s,e=0,t=0){this._minPixelCoverage=Math.max(0,s),this._maxPixelCoverage=Math.max(0,e),this._maxPixelCullDistance=Math.max(0,t)}getPixelCullingStats(){return{minPixels:this._minPixelCoverage,maxPixels:this._maxPixelCoverage,maxPixelCullDistance:this._maxPixelCullDistance,maxEnabled:this._maxPixelCoverage>0,distanceEnabled:this._maxPixelCullDistance>0}}evalTextureSize(s){let e=Math.ceil(Math.sqrt(s));const t=64;e=Math.ceil(e/t)*t;const r=Math.ceil(s/e);return new K(e,r)}buildColor(s){const e=this.size.x|0,t=this.size.y|0,r=new Uint8Array(e*t*4),i=.28209479177387814,a=s.count,o=s.sh?.coeffs,n=o?o.length/(3*a):1;for(let l=0;l<a;l++){let h=.5,u=.5,c=.5;if(o&&n>=1){const p=l*n*3;h=.5+o[p+0]*i,u=.5+o[p+n+0]*i,c=.5+o[p+2*n+0]*i}const f=s.opacity?1/(1+Math.exp(-s.opacity[l])):1,g=l*4;r[g+0]=Math.max(0,Math.min(255,Math.floor(h*255))),r[g+1]=Math.max(0,Math.min(255,Math.floor(u*255))),r[g+2]=Math.max(0,Math.min(255,Math.floor(c*255))),r[g+3]=Math.max(0,Math.min(255,Math.floor(f*255)))}this.splatColor=new Bo().create(e,t,r,!1),this.splatColor.name="splatColor",this.splatColor.minFilter="nearest",this.splatColor.magFilter="nearest",this.splatColor.mipmapFilter="nearest",this.splatColor.addressModeU="clamp-to-edge",this.splatColor.addressModeV="clamp-to-edge"}buildTransform(s){const e=this.size.x|0,t=this.size.y|0,r=s.count,i=new Uint32Array(e*t*4),a=new Array(e*t*4).fill(0),o=new ArrayBuffer(4),n=new Float32Array(o),l=new Uint32Array(o),h=g=>(n[0]=g,l[0]),u=s.position,c=s.rotation,f=s.scale;for(let g=0;g<r;g++){const p=g*4,A=u[g*3+0],U=u[g*3+1],x=u[g*3+2];i[p+0]=h(A),i[p+1]=h(U),i[p+2]=h(x);let B=0,S=0,C=0,_=1;if(c){B=c[g*4+0],S=c[g*4+1],C=c[g*4+2],_=c[g*4+3];const zt=1/Math.hypot(B,S,C,_);B*=zt,S*=zt,C*=zt,_*=zt}let y=1,b=1,w=1;f&&(y=Math.exp(f[g*3+0]),b=Math.exp(f[g*3+1]),w=Math.exp(f[g*3+2]));const Q=B+B,E=S+S,M=C+C,z=B*Q,Y=B*E,ee=B*M,oe=S*E,te=S*M,ge=C*M,Ce=_*Q,J=_*E,ce=_*M,he=1-(oe+ge),Ue=Y+ce,xe=ee-J,Ve=Y-ce,Ie=1-(z+ge),Fe=te+Ce,Me=ee+J,nt=te-Ce,pr=1-(z+oe),Mt=he*y,Qt=Ue*y,Rt=xe*y,Nt=Ve*b,St=Ie*b,mr=Fe*b,Ar=Me*w,Ur=nt*w,xr=pr*w,gi=Mt*Mt+Nt*Nt+Ar*Ar,Wr=Mt*Qt+Nt*St+Ar*Ur,Br=Mt*Rt+Nt*mr+Ar*xr,pi=Qt*Qt+St*St+Ur*Ur,Jr=Qt*Rt+St*mr+Ur*xr,mi=Rt*Rt+mr*mr+xr*xr,vr=p;a[vr+0]=gi,a[vr+1]=Wr,a[vr+2]=Br,a[vr+3]=mi;const Ai=ti(pi)&65535,Ui=ti(Jr)&65535;i[p+3]=Ai|Ui<<16}this.transformA=new vo().create(e,t,i),this.transformA.name="transformA",this.transformA.minFilter="nearest",this.transformA.magFilter="nearest",this.transformA.addressModeU="clamp-to-edge",this.transformA.addressModeV="clamp-to-edge",this.transformB=new Co().create(e,t,a,!1),this.transformB.name="transformB",this.transformB.minFilter="nearest",this.transformB.magFilter="nearest",this.transformB.mipmapFilter="nearest",this.transformB.addressModeU="clamp-to-edge",this.transformB.addressModeV="clamp-to-edge"}updateWorldPositions(){if(!this._positions)return;const s=this.object3D.transform.worldMatrix,e=this._positions,t=this._fullCount;this._worldPositions||(this._worldPositions=new Float32Array(e.length));const r=s.rawData;for(let i=0;i<t;i++){const a=i*3,o=e[a+0],n=e[a+1],l=e[a+2];this._worldPositions[a+0]=r[0]*o+r[4]*n+r[8]*l+r[12],this._worldPositions[a+1]=r[1]*o+r[5]*n+r[9]*l+r[13],this._worldPositions[a+2]=r[2]*o+r[6]*n+r[10]*l+r[14]}this._centersSent=!1}scheduleOrder(s){if(this.count===0)return;const e=this.object3D.transform.localChange;(e||!this._worldPositions)&&this.updateWorldPositions();const t=s.rawData,r=t[2],i=t[6],a=t[10],o=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),n=-(t[4]*t[12]+t[5]*t[13]+t[6]*t[14]),l=-(t[8]*t[12]+t[9]*t[13]+t[10]*t[14]),h=performance.now(),u=(h-this._lastSentTime)/1e3,c=Math.floor(o*1e3)^Math.floor(n*1e3)^Math.floor(l*1e3),f=Math.floor(r*1e3)^Math.floor(i*1e3)^Math.floor(a*1e3),g=c^f;if(g===this._lastViewMatrixHash&&!e)return;let p=this._minIntervalMs;if(this._adaptiveSorting&&this._minIntervalMs>0){const U=Math.abs(g-this._lastViewMatrixHash)/Math.max(u,.001);U<1e3?p=this._minIntervalMs:U<1e4?p=this._minIntervalMs*.5:p=this._minIntervalMs*.2,this._lastCameraSpeed=U}if(!(h-this._lastSentTime<p)){if(this._lastViewMatrixHash=g,this._lastSentTime=h,!this._sortWorker){this._sortWorker=this.createSortWorker(),this._sortWorker.onmessage=B=>{const S=B.data.order,C=this._orderData.buffer;this._sortWorker.postMessage({order:C},[C]);const _=new Uint32Array(S),y=this.size.x*this.size.y,b=this.count;this._orderData=new Uint32Array(y*4);for(let Q=0;Q<y;Q++){const E=Q<b?_[Q]:b>0?b-1:0,M=Q*4;this._orderData[M+0]=E,this._orderData[M+1]=0,this._orderData[M+2]=0,this._orderData[M+3]=0}this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData);const w=Math.max(0,Math.min(this.count,B.data.count|0));this.texParams[2]=w};const A=this._worldPositions||this._positions,U=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(A);if(this._mapping)for(let B=0;B<this._mapping.length;++B){const S=this._mapping[B]*3,C=B*3;U[C+0]=A[S+0],U[C+1]=A[S+1],U[C+2]=A[S+2]}const x=new Uint32Array(this.count);for(let B=0;B<this.count;B++)x[B]=B;this._sortWorker.postMessage({order:x.buffer,centers:U.buffer,mapping:this._mapping},[x.buffer,U.buffer]),this._centersSent=!0}if(!this._centersSent&&this._sortWorker){const A=this._worldPositions||this._positions,U=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(A);if(this._mapping)for(let x=0;x<this._mapping.length;++x){const B=this._mapping[x]*3,S=x*3;U[S+0]=A[B+0],U[S+1]=A[B+1],U[S+2]=A[B+2]}this._sortWorker.postMessage({type:"centers",centers:U.buffer,mapping:this._mapping?this._mapping:null},[U.buffer]),this._centersSent=!0}this._sortWorker.postMessage({cameraPosition:{x:o,y:n,z:l},cameraDirection:{x:-r,y:-i,z:-a}})}}createSortWorker(){function s(){let o,n,l,h,u,c=!1;const f={x:0,y:0,z:0},g={x:0,y:0,z:0},p={x:0,y:0,z:0},A={x:0,y:0,z:0};let U,x;const B=(C,_,y)=>{for(;C<=_;){const b=_+C>>1,w=y(b);if(w>0)C=b+1;else if(w<0)_=b-1;else return b}return~C},S=()=>{if(!o||!n||!h||!u)return;const C=h.x,_=h.y,y=h.z,b=u.x,w=u.y,Q=u.z,E=.001;if(!c&&Math.abs(C-f.x)<E&&Math.abs(_-f.y)<E&&Math.abs(y-f.z)<E&&Math.abs(b-g.x)<E&&Math.abs(w-g.y)<E&&Math.abs(Q-g.z)<E)return;c=!1,f.x=C,f.y=_,f.z=y,g.x=b,g.y=w,g.z=Q;const M=n.length/3;U?.length!==M&&(U=new Uint32Array(M));let z,Y;for(let J=0;J<8;++J){const ce=(J&1?p.x:A.x)-C,he=(J&2?p.y:A.y)-_,Ue=(J&4?p.z:A.z)-y,xe=ce*b+he*w+Ue*Q;J===0?z=Y=xe:(z=Math.min(z,xe),Y=Math.max(Y,xe))}x?x.fill(0):x=new Uint32Array(65537);const ee=Y-z,oe=ee<1e-6?0:1/ee*2**16;for(let J=0;J<M;++J){const ce=J*3,he=n[ce+0]-C,Ue=n[ce+1]-_,xe=n[ce+2]-y,Ve=he*b+Ue*w+xe*Q,Ie=Math.floor((Ve-z)*oe);U[J]=Ie,x[Ie]++}for(let J=1;J<65537;J++)x[J]+=x[J-1];for(let J=0;J<M;J++){const ce=U[J],he=--x[ce];o[he]=J}const te=J=>U[o[J]]/oe+z,ge=()=>{const J=B(0,M-1,ce=>-te(ce));return Math.min(M,Math.abs(J))},Ce=te(M-1)>=0?ge():M;if(l)for(let J=0;J<M;++J)o[J]=l[o[J]];self.postMessage({order:o.buffer,count:Ce},[o.buffer]),o=null};self.onmessage=C=>{if(C.data.order&&(o=new Uint32Array(C.data.order)),C.data.centers){n=new Float32Array(C.data.centers),p.x=A.x=n[0],p.y=A.y=n[1],p.z=A.z=n[2];const _=n.length/3;for(let y=1;y<_;++y){const b=n[y*3+0],w=n[y*3+1],Q=n[y*3+2];p.x=Math.min(p.x,b),p.y=Math.min(p.y,w),p.z=Math.min(p.z,Q),A.x=Math.max(A.x,b),A.y=Math.max(A.y,w),A.z=Math.max(A.z,Q)}c=!0}C.data.hasOwnProperty("mapping")&&(l=C.data.mapping?new Uint32Array(C.data.mapping):null,c=!0),C.data.cameraPosition&&(h=C.data.cameraPosition),C.data.cameraDirection&&(u=C.data.cameraDirection),S()}}const e=`(${s.toString()})()`,t=new Blob([e],{type:"application/javascript"}),r=URL.createObjectURL(t);return new Worker(r)}nodeUpdate(s,e,t,r){const i=this.object3D.transform.worldMatrix;this.gsplatMaterial.setTransformMatrix(i),this.gsplatMaterial.setPixelCulling(this._minPixelCoverage,this._maxPixelCoverage,this._maxPixelCullDistance),this.gsplatMaterial.setSplatTextures(this.splatColor,this.transformA,this.transformB,this.texParams,this.splatOrder),super.nodeUpdate(s,e,t,r)}renderPass2(s,e,t,r,i,a=!1){for(let o of this.materials){const n=o.getPass(e);if(!(!n||n.length===0))for(const l of n)l.pipeline&&(l.apply(this.geometry,t),F.bindPipeline(i,l),F.draw(i,4,this.count,0,0))}}renderPass(s,e,t){const r=t.encoder;for(let i of this.materials){const a=i.getPass(e);if(!(!a||a.length===0))for(const o of a)o.pipeline&&(o.apply(this.geometry,t.rendererPassState||t),F.bindPipeline(r,o),F.draw(r,4,this.count,0,0))}}destroy(s){this._sortWorker&&(this._sortWorker.terminate(),this._sortWorker=null),super.destroy(s)}};da=Pg([Wt(da,"GSplatRenderer")],da);class So{static maxVector=new d(Number.MAX_VALUE*.1,Number.MAX_VALUE*.1,Number.MAX_VALUE*.1);static minVector=this.maxVector.clone().multiplyScalar(-1);static genMeshMaxVector=d.ZERO.clone();static genMeshMinVector=d.ZERO.clone();static genMeshVectorList8=[new d,new d,new d,new d,new d,new d,new d,new d];static genGSplatBounds(e,t){t||=new Re(d.ZERO,d.ZERO),t.setFromMinMax(this.maxVector,this.minVector);let r=e.getComponent(da);if(!r)return console.warn("genGSplatBounds: No GSplatRenderer found on object"),t;const i=r.positions,a=r.fullCount;if(!i||a===0)return console.warn("genGSplatBounds: No position data available"),t;const o=e.transform.worldMatrix,n=new d;for(let l=0;l<a;l++){const h=l*3;n.set(i[h+0],i[h+1],i[h+2]),o.transformPoint(n,n),t.expandByPoint(n)}return t.setFromMinMax(t.min,t.max),t}static genMeshBounds(e,t){let r=this.genMeshMinVector,i=this.genMeshMaxVector,a=this.genMeshVectorList8;t||=new Re(d.ZERO,d.ZERO),t.setFromMinMax(this.maxVector,this.minVector);let o=e.getComponents(j);for(const n of o)if(n&&n.geometry){let l=n.object3D.transform.worldMatrix;r.copy(n.geometry.bounds.min),i.copy(n.geometry.bounds.max),a[0].set(r.x,r.y,r.z),a[1].set(r.x,r.y,i.z),a[2].set(r.x,i.y,r.z),a[3].set(r.x,i.y,i.z),a[4].set(i.x,r.y,r.z),a[5].set(i.x,r.y,i.z),a[6].set(i.x,i.y,r.z),a[7].set(i.x,i.y,i.z);for(const h of a)l.transformPoint(h,h),t.expandByPoint(h)}return i.copyFrom(t.max),r.copyFrom(t.min),t.setFromMinMax(r,i),t}static transformBound(e,t,r){let i=this.genMeshMinVector.copyFrom(t.min),a=this.genMeshMaxVector.copyFrom(t.max),o=this.genMeshVectorList8;r||=new Re(d.ZERO,d.ZERO),r.setFromMinMax(this.maxVector,this.minVector),o[0].set(i.x,i.y,i.z),o[1].set(i.x,i.y,a.z),o[2].set(i.x,a.y,i.z),o[3].set(i.x,a.y,a.z),o[4].set(a.x,i.y,i.z),o[5].set(a.x,i.y,a.z),o[6].set(a.x,a.y,i.z),o[7].set(a.x,a.y,a.z);for(const n of o)e.transformPoint(n,n),r.expandByPoint(n);return a.copyFrom(r.max),i.copyFrom(r.min),r.setFromMinMax(i,a),r}}class kh extends Er{name="";_instanceID="";_numChildren;get instanceID(){return this._instanceID}transform;renderNode;entityChildren;components;waitDisposeComponents;_bound;_boundWorld;_isBoundChange=!0;_dispose=!1;get dispose(){return this._dispose}getObjectByName(e){if(e.indexOf("/")>=0){let r=e.split("/"),i=this;for(;r.length>0&&i;){let a=r.shift();if(i=i.getChildByName(a,!1),!i)return null}return i}else return this.getChildByName(e,!1)}constructor(){super(),this.entityChildren=[],this.components=new Map,this._instanceID=js().toString(),this.waitDisposeComponents=[]}get numChildren(){return this._numChildren}addChild(e){if(e==null)throw new Error("child is null!");if(e===this)throw new Error("child is self!");return this.entityChildren.indexOf(e)==-1?(e.removeFromParent(),e.transform.parent=this.transform,this.entityChildren.push(e),this._numChildren=this.entityChildren.length,this.noticeComponents("onAddChild",e),e):null}removeChild(e){if(e===null)return;if(e===this)throw new Error("add child is self!");let t=this.entityChildren.indexOf(e);t!=-1&&(this.entityChildren.splice(t,1),e.transform.parent=null,this._numChildren=this.entityChildren.length,this.noticeComponents("onRemoveChild",e))}removeAllChild(){for(;this.numChildren>0;)this.removeChild(this.entityChildren[0])}removeSelf(){return this.removeFromParent()}removeChildByIndex(e){e>=0&&e<this.entityChildren.length?this.removeChild(this.entityChildren[e]):console.error("remove child by index , index out of range")}hasChild(e){return this.entityChildren.indexOf(e)!=-1}removeFromParent(){let e=this.transform.parent;return e&&e.object3D&&e.object3D.removeChild(this),this}getChildByIndex(e){let t=null;return e<this.entityChildren.length&&(t=this.entityChildren[e]),t}getChildByName(e,t=!0){let r=null;for(const i of this.entityChildren){if(i.name==e)return r=i,r;if(t&&(r=i.getChildByName(e,t),r))return r}return r}update(){}instantiate(){return null}onTransformLocalChange(e){this._isBoundChange=!0}get bound(){return(this._isBoundChange||!this._bound)&&this.updateBound(),this._boundWorld}set bound(e){this._bound=e,this._boundWorld=this._bound.clone(),this._isBoundChange=!0}updateBound(){return this._bound||(this._bound=new Re,this._boundWorld=this._bound.clone(),this._isBoundChange=!0),this._isBoundChange&&(So.transformBound(this.transform.worldMatrix,this._bound,this._boundWorld),this._isBoundChange=!1),this._boundWorld}waitUpdate(){this._dispose?(this.transform.parent&&this.transform.parent.object3D.removeChild(this),this.components.forEach((e,t)=>{e.enable=!1,e.beforeDestroy(),e.destroy()}),this.components.clear()):Se.waitStartComponent.forEach((e,t)=>{for(;e.length>0;){const r=e.shift();r.__start(),Se.waitStartComponent.delete(r.object3D)}})}noticeComponents(e,t){for(let r of this.components.values())r[e]?.(t)}destroy(e){this._dispose||(this.components.forEach(t=>{t.beforeDestroy(e)}),this.components.forEach(t=>{t.destroy(e)}),this.components.clear(),this.entityChildren.forEach(t=>{t.destroy(e)}),this.removeAllChild(),this.transform.parent=null,this._dispose=!0,super.destroy())}}var kg=Object.getOwnPropertyDescriptor,Lg=(s,e,t,r)=>{for(var i=r>1?void 0:r?kg(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let q=class extends kh{_isScene3D;prefabRef;serializeTag;constructor(){super(),this.transform=this.addComponent(Tt),this.transform.eventDispatcher.addEventListener(Tt.LOCAL_ONCHANGE,this.onTransformLocalChange,this)}get isScene3D(){return this._isScene3D}forChild(s){this.entityChildren.forEach(e=>{s(e),e.forChild(s)})}addComponent(s,e){if(!this.components.has(s)){let t=new s;return t.object3D=this,this.components.set(s,t),t.__init(e),Se.appendWaitStart(t),t}return this.components.get(s)}getOrAddComponent(s){let e=this.components.get(s);return e||(e=this.addComponent(s)),e}removeComponent(s){if(this.components.has(s)){let e=this.components.get(s);Se.removeWaitStart(this,e),this.components.delete(s),e.__stop(),e.beforeDestroy(),e.destroy()}}hasComponent(s){return this.components.has(s)}getComponent(s){return this.components.get(s)}getComponentFromParent(s){if(!this.parent)return null;let e=this.parent.object3D.getComponent(s);return e||this.parent.object3D.getComponentFromParent(s)}getComponentsInChild(s){let e=[],t=this.components.get(s);t&&e.push(t);for(let r=0;r<this.entityChildren.length;r++){let a=this.entityChildren[r].getComponentsInChild(s);e.push(...a)}return e}getComponents(s,e,t){e||=[];let r=this.getComponent(s);r&&(r.enable||t)&&e.push(r);for(let i=0,a=this.entityChildren.length;i<a;i++){let o=this.entityChildren[i];o&&o instanceof q&&o.getComponents(s,e,t)}return e}getComponentsExt(s,e,t){e||=[];let r=this.components.get(s);if(r&&(r.enable||t))e.push(r);else for(const i of this.entityChildren)i instanceof q&&i.getComponentsExt(s,e,t);return e}getComponentsByProperty(s,e,t=!0,r,i){r||=[];let a;for(const o of this.components.values())o&&(o.enable||i)&&o[s]===e&&(r.push(o),a=!0);if(!(a&&t))for(const o of this.entityChildren)o instanceof q&&o.getComponentsByProperty(s,e,t,r,i);return r}clone(){return this.instantiate()}instantiate(){let s=new q;return s.name=this.name,s.serializeTag=this.serializeTag,s.prefabRef=this.prefabRef,this.entityChildren.forEach((e,t)=>{let r=e.instantiate();s.addChild(r)}),this.components.forEach((e,t)=>{e.cloneTo(s)}),s}get localPosition(){return this.transform.localPosition}set localPosition(s){this.transform.localPosition=s}get localRotation(){return this.transform.localRotation}set localRotation(s){this.transform.localRotation=s}get localScale(){return this.transform.localScale}set localScale(s){this.transform.localScale=s}get localQuaternion(){return this.transform.localRotQuat}set localQuaternion(s){this.transform.localRotQuat=s}notifyChange(){this.transform.notifyChange()}get parent(){return this.transform.parent}get parentObject(){return this.transform.parent.object3D}set x(s){this.transform.x=s}get x(){return this.transform.x}set y(s){this.transform.y=s}get y(){return this.transform.y}set z(s){this.transform.z=s}get z(){return this.transform.z}set scaleX(s){this.transform.scaleX=s}get scaleX(){return this.transform.scaleX}set scaleY(s){this.transform.scaleY=s}get scaleY(){return this.transform.scaleY}set scaleZ(s){this.transform.scaleZ=s}get scaleZ(){return this.transform.scaleZ}set rotationX(s){this.transform.rotationX=s}get rotationX(){return this.transform.rotationX}set rotationY(s){this.transform.rotationY=s}get rotationY(){return this.transform.rotationY}set rotationZ(s){this.transform.rotationZ=s}get rotationZ(){return this.transform.rotationZ}fixedUpdate(){}lateUpdate(){}traverse(s){s(this);for(let e=0,t=this.entityChildren.length;e<t;e++){let r=this.entityChildren[e];r instanceof q&&r.traverse(s)}}destroy(s){this.transform.eventDispatcher.removeEventListener(Tt.LOCAL_ONCHANGE,this.onTransformLocalChange,this),super.destroy(s)}};q=Lg([Og],q);function Og(s,e){return class extends q{set active(t){this.transform.enable=t>0}get active(){return this.transform.enable?1:0}get materialColor(){return this.getComponent(j)?.material?.shader.getDefaultColorShader().baseColor}set materialColor(t){let r=this.getComponent(j)?.material;r&&(r.shader.getDefaultColorShader().baseColor=t)}notifyMaterialColorChange(t,r){this.getComponent(j).materials?.[t]?.shader.getDefaultColorShader().uniforms[r].onChange()}}}class je{static createCamera3DObject(e,t){return this.createCamera3D(null,e,t)}static createCamera3D(e,t,r){return e||=new q,t&&t.addChild(e),r&&(e.name=r),e.getOrAddComponent(Zi)}static UnProjection(e,t,r=1,i){let a=new d(e,t,0),o=1,n=d.HELP_0,l=R.canvas.offsetLeft,h=R.canvas.offsetTop,u=R.canvas.clientWidth,c=R.canvas.clientHeight;n.x=((a.x-l)*o/u-.5)*2,n.y=-((a.y-h)*o/c-.5)*2,n.z=r;let f=new d(0,0,0),g=I.helpMatrix2;g.copyFrom(i.projectionMatrix),g.invert();let p=I.helpMatrix;return p.identity(),p.multiply(g),p.multiply(i.transform.worldMatrix),p.perspectiveMultiplyPoint3(n,f),f}static Projection(e,t,r){let i=r||new d(0,0,0),a=I.helpMatrix;a.copyFrom(t.viewMatrix),a.multiply(t.projectionMatrix),a.perspectiveMultiplyPoint3(e,i);let o=R.canvas.clientWidth/2,n=R.canvas.clientHeight/2;return i.x=i.x*o+o,i.y=n-i.y*n,i}static UnProjection2(e,t,r,i,a){let o=a||new d(0,0,0),n=I.helpMatrix;n.copyFrom(i.pvMatrixInv);let l=R.canvas.clientWidth/2,h=R.canvas.clientHeight/2;return o.x=(e-l)/l,o.y=(h-t)/h,o.z=r,n.perspectiveMultiplyPoint3(o,o),o}}class wt{static maxNumDirectionShadow=8;static maxNumPointShadow=8;static directionLightList;static pointLightList;static shadowLights;static init(){this.directionLightList=new Map,this.pointLightList=new Map,this.shadowLights=new Map}static createBuffer(e){if(!this.shadowLights.has(e.scene)){let t=new Float32Array(16);this.shadowLights.set(e.scene,t)}}static getShadowLightList(e){if(!e.transform.view3D)return null;if(e.lightData.lightType==Xe.DirectionLight){let t=this.directionLightList.get(e.transform.view3D.scene);return t||(t=[],this.directionLightList.set(e.transform.view3D.scene,t)),t}else if(e.lightData.lightType==Xe.PointLight){let t=this.pointLightList.get(e.transform.view3D.scene);return t||(t=[],this.pointLightList.set(e.transform.view3D.scene,t)),t}else if(e.lightData.lightType==Xe.SpotLight){let t=this.pointLightList.get(e.transform.view3D.scene);return t||(t=[],this.pointLightList.set(e.transform.view3D.scene,t)),t}}static getShadowLightWhichScene(e,t){if(t==Xe.DirectionLight){let r=this.directionLightList.get(e);return r||(r=[],this.directionLightList.set(e,r)),r}else if(t==Xe.PointLight){let r=this.pointLightList.get(e);return r||(r=[],this.pointLightList.set(e,r)),r}}static getDirectShadowLightWhichScene(e){let t=this.directionLightList.get(e);return t||(t=[],this.directionLightList.set(e,t)),t}static getPointShadowLightWhichScene(e){let t=this.pointLightList.get(e);return t||(t=[],this.pointLightList.set(e,t)),t}static addShadowLight(e){if(!e.transform.view3D)return null;let t=e.transform.view3D.scene;if(e.lightData.lightType==Xe.DirectionLight){let r=this.directionLightList.get(t);if(r||(r=[],this.directionLightList.set(t,r)),!e.shadowCamera){e.shadowCamera=je.createCamera3DObject(null,"shadowCamera"),e.shadowCamera.isShadowCamera=!0;let i=-1e3;e.shadowCamera.orthoOffCenter(i,-i,i,-i,1,1e4)}return r.indexOf(e)==-1&&r.push(e),r}else if(e.lightData.lightType==Xe.PointLight||e.lightData.lightType==Xe.SpotLight){let r=this.pointLightList.get(t);return r&&r.length>=8||(r||(r=[],this.pointLightList.set(t,r)),r.indexOf(e)==-1&&r.push(e)),r}}static removeShadowLight(e){if(e.lightData.castShadowIndex=-1,!e.transform.view3D)return null;if(e.lightData.lightType==Xe.DirectionLight){let t=this.directionLightList.get(e.transform.view3D.scene);if(t){let r=t.indexOf(e);r!=-1&&t.splice(r,1)}return e.lightData.castShadowIndex=-1,t}else if(e.lightData.lightType==Xe.PointLight||e.lightData.lightType==Xe.SpotLight){let t=this.pointLightList.get(e.transform.view3D.scene);if(t){let r=t.indexOf(e);r!=-1&&t.splice(r,1)}return e.lightData.castShadowIndex=-1,t}}static update(e){let t=this.shadowLights.get(e.scene),r=wt.directionLightList.get(e.scene),i=wt.pointLightList.get(e.scene),a=0,o=0,n=0,l=0;if(t.fill(0),r){let u=0;for(let c=0;c<r.length;c++){const f=r[c];t[c]=f.lightData.index,f.lightData.castShadowIndex=u++}o=r.length}if(i){n=o;let u=0;for(let c=n;c<i.length;c++){const f=i[c];t[c]=f.lightData.index,f.lightData.castShadowIndex=u++}l=n+i.length}ne.getAllCameraGroup().forEach(u=>{u.dirShadowStart=a,u.dirShadowEnd=o,u.pointShadowStart=n,u.pointShadowEnd=l,u.shadowLights.set(new Float32Array(t))})}}class _o{uuid;usage;globalBindGroup;uniformGPUBuffer;matrixBindGroup;uniformByteLength;matrixesByteLength;shadowMatrixRaw=new Float32Array(128);csmMatrixRaw=new Float32Array(Zt.Cascades*16);csmShadowBias=new Float32Array(4);shadowLights=new Float32Array(16);dirShadowStart=0;dirShadowEnd=0;pointShadowStart=0;pointShadowEnd=0;constructor(e){this.uuid=It(),this.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,this.uniformGPUBuffer=new ht(8336),this.uniformGPUBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,this.matrixBindGroup=e,this.createBindGroup()}createBindGroup(){this.uniformByteLength=this.uniformGPUBuffer.memory.shareDataBuffer.byteLength,this.matrixesByteLength=I.block*4*I.maxCount,this.globalBindGroup=R.device.createBindGroup({label:"global_bindGroupLayout",layout:fo.getGlobalDataBindGroupLayout(),entries:[{binding:0,resource:{buffer:this.uniformGPUBuffer.buffer,offset:0,size:this.uniformByteLength}},{binding:1,resource:{buffer:this.matrixBindGroup.matrixBufferDst.buffer,offset:0,size:this.matrixesByteLength}}]})}setCamera(e){this.uniformGPUBuffer.setMatrix("_projectionMatrix",e.projectionMatrix),this.uniformGPUBuffer.setMatrix("_viewMatrix",e.viewMatrix),this.uniformGPUBuffer.setMatrix("_cameraWorldMatrix",e.transform.worldMatrix),this.uniformGPUBuffer.setMatrix("pvMatrixInv",e.projectionMatrixInv),this.uniformGPUBuffer.setMatrix("viewToWorld",e.cameraToWorld);let t=wt.getDirectShadowLightWhichScene(e.transform.scene3D);this.csmShadowBias.fill(1e-4),this.shadowMatrixRaw.fill(0),this.csmMatrixRaw.fill(0);for(let l=0;l<8;l++)if(l<t.length){let h=t[l].shadowCamera;this.shadowMatrixRaw.set(h.pvMatrix.rawData,l*16)}else this.shadowMatrixRaw.set(e.transform.worldMatrix.rawData,l*16);this.uniformGPUBuffer.setFloat32Array("shadowMatrix",this.shadowMatrixRaw);let r=m.setting.shadow.shadowSize;if(Zt.Cascades>1&&e.enableCSM&&t[0])for(let l=0;l<Zt.Cascades;l++){let h=e.csm.children[l].shadowCamera;this.csmMatrixRaw.set(h.pvMatrix.rawData,l*16),this.csmShadowBias[l]=e.getCSMShadowBiasScale(h)}this.uniformGPUBuffer.setFloat32Array("csmShadowBias",this.csmShadowBias),this.uniformGPUBuffer.setFloat32Array("csmMatrix",this.csmMatrixRaw),this.uniformGPUBuffer.setFloat32Array("shadowLights",this.shadowLights);let i=m.setting.reflectionSetting,a=G.instance.getReflections(e.transform.scene3D).length;this.uniformGPUBuffer.setFloat("reflectionProbeSize",i.reflectionProbeSize),this.uniformGPUBuffer.setFloat("reflectionProbeMaxCount",i.reflectionProbeMaxCount),this.uniformGPUBuffer.setFloat("reflectionMapWidth",i.width),this.uniformGPUBuffer.setFloat("reflectionMapHeight",i.height),this.uniformGPUBuffer.setFloat("reflectionCount",a),this.uniformGPUBuffer.setFloat("test2",Ye.testObj.testValue2),this.uniformGPUBuffer.setFloat("test3",Ye.testObj.testValue3),this.uniformGPUBuffer.setFloat("test4",Ye.testObj.testValue4),this.uniformGPUBuffer.setVector3("CameraPos",e.transform.worldPosition),this.uniformGPUBuffer.setFloat("frame",be.frame),this.uniformGPUBuffer.setFloat32Array("SH",e.sh),this.uniformGPUBuffer.setFloat("time",be.time),this.uniformGPUBuffer.setFloat("delta",be.delta),this.uniformGPUBuffer.setFloat("shadowBias",e.getShadowBias(r)),this.uniformGPUBuffer.setFloat("skyExposure",m.setting.sky.skyExposure),this.uniformGPUBuffer.setFloat("renderPassState",m.setting.render.renderPassState),this.uniformGPUBuffer.setFloat("quadScale",m.setting.render.quadScale),this.uniformGPUBuffer.setFloat("hdrExposure",m.setting.render.hdrExposure),this.uniformGPUBuffer.setInt32("renderState_left",m.setting.render.renderState_left),this.uniformGPUBuffer.setInt32("renderState_right",m.setting.render.renderState_right),this.uniformGPUBuffer.setFloat("renderState_split",m.setting.render.renderState_split);let o=m.inputSystem.mouseX*R.pixelRatio,n=m.inputSystem.mouseY*R.pixelRatio;this.uniformGPUBuffer.setFloat("mouseX",o),this.uniformGPUBuffer.setFloat("mouseY",n),this.uniformGPUBuffer.setFloat("windowWidth",R.windowWidth),this.uniformGPUBuffer.setFloat("windowHeight",R.windowHeight),this.uniformGPUBuffer.setFloat("near",e.near),this.uniformGPUBuffer.setFloat("far",e.far),this.uniformGPUBuffer.setFloat("pointShadowBias",m.setting.shadow.pointShadowBias),this.uniformGPUBuffer.setFloat("shadowMapSize",r),this.uniformGPUBuffer.setFloat("shadowSoft",m.setting.shadow.shadowSoft),this.uniformGPUBuffer.setFloat("enableCSM",e.enableCSM?1:0),this.uniformGPUBuffer.setFloat("csmMargin",m.setting.shadow.csmMargin),this.uniformGPUBuffer.setInt32("nDirShadowStart",this.dirShadowStart),this.uniformGPUBuffer.setInt32("nDirShadowEnd",this.dirShadowEnd),this.uniformGPUBuffer.setInt32("nPointShadowStart",this.pointShadowStart),this.uniformGPUBuffer.setInt32("nPointShadowEnd",this.pointShadowEnd),this.uniformGPUBuffer.setVector3("cameraForward",e.transform.forward),this.uniformGPUBuffer.setVector4Array("frustumPlanes",e.frustum.planes),this.uniformGPUBuffer.apply()}setShadowCamera(e){this.uniformGPUBuffer.setMatrix("_projectionMatrix",e.projectionMatrix),this.uniformGPUBuffer.setMatrix("_viewMatrix",e.viewMatrix),this.uniformGPUBuffer.setMatrix("_pvMatrix",e.pvMatrix),this.uniformGPUBuffer.setMatrix("pvMatrixInv",e.projectionMatrixInv),this.uniformGPUBuffer.setMatrix("viewToWorld",e.cameraToWorld),this.csmShadowBias.fill(1e-4),this.shadowMatrixRaw.fill(0),this.csmMatrixRaw.fill(0),this.uniformGPUBuffer.setFloat32Array("shadowCamera",this.shadowMatrixRaw),this.uniformGPUBuffer.setFloat32Array("csmShadowBias",this.csmShadowBias),this.uniformGPUBuffer.setFloat32Array("csmMatrix",this.csmMatrixRaw),this.uniformGPUBuffer.setFloat32Array("shadowLights",this.shadowLights),this.uniformGPUBuffer.setVector3("CameraPos",e.transform.worldPosition),this.uniformGPUBuffer.setFloat("frame",be.frame),this.uniformGPUBuffer.setFloat32Array("SH",e.sh),this.uniformGPUBuffer.setFloat("time",be.time),this.uniformGPUBuffer.setFloat("delta",be.delta),this.uniformGPUBuffer.setFloat("shadowBias",m.setting.shadow.shadowBias),this.uniformGPUBuffer.setFloat("skyExposure",m.setting.sky.skyExposure),this.uniformGPUBuffer.setFloat("renderPassState",m.setting.render.renderPassState),this.uniformGPUBuffer.setFloat("quadScale",m.setting.render.quadScale),this.uniformGPUBuffer.setFloat("hdrExposure",m.setting.render.hdrExposure),this.uniformGPUBuffer.setInt32("renderState_left",m.setting.render.renderState_left),this.uniformGPUBuffer.setInt32("renderState_right",m.setting.render.renderState_right),this.uniformGPUBuffer.setFloat("renderState_split",m.setting.render.renderState_split);let t=m.inputSystem.mouseX*R.pixelRatio,r=m.inputSystem.mouseY*R.pixelRatio;this.uniformGPUBuffer.setFloat("mouseX",t),this.uniformGPUBuffer.setFloat("mouseY",r),this.uniformGPUBuffer.setFloat("windowWidth",R.windowWidth),this.uniformGPUBuffer.setFloat("windowHeight",R.windowHeight),this.uniformGPUBuffer.setFloat("near",e.near),this.uniformGPUBuffer.setFloat("far",e.far),this.uniformGPUBuffer.setFloat("pointShadowBias",m.setting.shadow.pointShadowBias),this.uniformGPUBuffer.setFloat("shadowMapSize",m.setting.shadow.shadowSize),this.uniformGPUBuffer.setFloat("shadowSoft",m.setting.shadow.shadowSoft),this.uniformGPUBuffer.setFloat("enableCSM",0),this.uniformGPUBuffer.setFloat("csmMargin",m.setting.shadow.csmMargin),this.uniformGPUBuffer.setInt32("nDirShadowStart",this.dirShadowStart),this.uniformGPUBuffer.setInt32("nDirShadowEnd",this.dirShadowEnd),this.uniformGPUBuffer.setInt32("nPointShadowStart",this.pointShadowStart),this.uniformGPUBuffer.setInt32("nPointShadowEnd",this.pointShadowEnd),this.uniformGPUBuffer.apply()}setShadowLight(){}}class Lh{setting;probesBufferData;probesBuffer;isVolumeFrameChange=!0;randomOrientation;startPosition=new d;isVolumeChange=!0;irradianceVolumeBuffer;directionDistance=20;randomSeedCount=3;useRandomIndex=0;centerDirection=new d(0,0,this.directionDistance).normalize(1);arroundPositions=[];updateOrientation(){return this.useRandomIndex++,this.useRandomIndex>=this.arroundPositions.length&&(this.useRandomIndex=0),I.fromToRotation(this.centerDirection,this.arroundPositions[this.useRandomIndex],this.randomOrientation),this.randomOrientation}init(e){this.setting=e,this.randomOrientation=new I(!1),this.randomOrientation.identity(),this.irradianceVolumeBuffer=new ht(80),this.createFramesBuffer(),this.arroundPositions.push(this.centerDirection.clone());for(let t=0;t<this.randomSeedCount;t++){let r=Math.PI*2*t/this.randomSeedCount,i=new d(Math.sin(r),Math.cos(r),this.directionDistance).normalize(1);this.arroundPositions.push(i)}}setVolumeDataChange(){this.isVolumeChange=!0}updateProbes(e){let t=this.probesBufferData;for(let r of e){let i=r.index*4;t[i+3]=r.drawCallFrame}}createFramesBuffer(){if(!this.probesBufferData){let e=this.setting.probeXCount*this.setting.probeYCount*this.setting.probeZCount;this.probesBufferData=new Float32Array(e*4),this.probesBufferData.fill(-1),this.probesBuffer=new ve(e*4,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST)}}uploadBuffer(){this.isVolumeChange&&(this.fillIrradianceData(),this.isVolumeChange=!1,this.isVolumeFrameChange=!0),this.probesBuffer.setFloat32Array("uniformFramesBuffer",this.probesBufferData)}calcPosition(e,t,r,i){let a=this.setting,o=this.setting.probeSpace;return i=i||new d,i.x=e*o-o*(a.probeXCount-1)*.5+a.offsetX,i.y=t*o-o*(a.probeYCount-1)*.5+a.offsetY,i.z=r*o-o*(a.probeZCount-1)*.5+a.offsetZ,i}debugX=0;debugY=0;debugZ=0;fillIrradianceData(){let e=this.setting,t=this.calcPosition(0,0,0,this.startPosition);this.irradianceVolumeBuffer.setFloat("orientationIndex",this.randomOrientation.index),this.irradianceVolumeBuffer.setFloat("hysteresis",e.hysteresis),this.irradianceVolumeBuffer.setFloat("OctRTSideSize",e.octRTSideSize),this.irradianceVolumeBuffer.setFloat("OctRTMaxSize",e.octRTMaxSize),this.irradianceVolumeBuffer.setFloat("startX",t.x),this.irradianceVolumeBuffer.setFloat("startY",t.y),this.irradianceVolumeBuffer.setFloat("startZ",t.z),this.irradianceVolumeBuffer.setFloat("ProbeSpace",e.probeSpace),this.irradianceVolumeBuffer.setFloat("probeXCount",e.probeXCount),this.irradianceVolumeBuffer.setFloat("probeYCount",e.probeYCount),this.irradianceVolumeBuffer.setFloat("probeZCount",e.probeZCount),this.irradianceVolumeBuffer.setFloat("maxDistance",e.probeSpace*1.732),this.irradianceVolumeBuffer.setFloat("depthSharpness",e.depthSharpness),this.irradianceVolumeBuffer.setFloat("ProbeSourceTextureSize",e.probeSourceTextureSize),this.irradianceVolumeBuffer.setFloat("ProbeSize",e.probeSize),this.irradianceVolumeBuffer.setFloat("bounceIntensity",e.bounceIntensity),this.irradianceVolumeBuffer.setFloat("probeRoughness",e.probeRoughness),this.irradianceVolumeBuffer.setFloat("normalBias",e.normalBias),this.irradianceVolumeBuffer.setFloat("irradianceChebyshevBias",e.irradianceChebyshevBias),this.irradianceVolumeBuffer.setFloat("rayNumber",e.rayNumber),this.irradianceVolumeBuffer.setFloat("irradianceDistanceBias",e.irradianceDistanceBias),this.irradianceVolumeBuffer.setFloat("indirectIntensity",e.indirectIntensity),this.irradianceVolumeBuffer.setFloat("ddgiGamma",e.ddgiGamma),this.irradianceVolumeBuffer.setFloat("lerpHysteresis",e.lerpHysteresis),this.irradianceVolumeBuffer.setFloat("debugX",this.debugX),this.irradianceVolumeBuffer.setFloat("debugY",this.debugY),this.irradianceVolumeBuffer.setFloat("debugZ",this.debugZ),this.irradianceVolumeBuffer.apply()}}class Oh{storageGPUBuffer;irradianceVolume;_lightList=[];constructor(){this.storageGPUBuffer=new ve(hs.lightSize*m.setting.light.maxLight,GPUBufferUsage.COPY_SRC),this.irradianceVolume=new Lh,this.irradianceVolume.init(m.setting.gi);for(let e=0;e<m.setting.light.maxLight;e++){let t=this.storageGPUBuffer.memory.allocation_node(hs.lightSize*4);this._lightList.push(t)}this.storageGPUBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE}update(e){this.storageGPUBuffer.clean();let t=G.instance.getLights(e.scene);for(let r=0;r<t.length;r++){const i=t[r].lightData;i.index=r,this.writeLightBytes(i,this._lightList[r])}this.storageGPUBuffer.apply()}writeLightBytes(e,t){t.offset=0,t.writeFloat(e.index),t.writeInt32(e.lightType),t.writeFloat(e.radius),t.writeFloat(e.linear),t.writeVector3(e.lightPosition),t.writeFloat(e.lightMatrixIndex),t.writeVector3(e.direction),t.writeFloat(e.quadratic),t.writeRGBColor(e.lightColor),t.writeFloat(e.intensity),t.writeFloat(e.innerAngle),t.writeFloat(e.outerAngle),t.writeFloat(e.range),t.writeInt32(e.castShadowIndex),t.writeVector3(e.lightTangent),t.writeFloat(e.iesIndex)}}class zh{storageGPUBuffer;reflectionMap;sourceReflectionMap;count;constructor(){this.storageGPUBuffer=new ve(768)}update(e){this.storageGPUBuffer.clean();let t=G.instance.getReflections(e.scene);for(let r=0;r<t.length;r++){const i=t[r];i.gid=r,this.storageGPUBuffer.setFloat("gid",i.gid),this.storageGPUBuffer.setVector3("worldPosition",i.transform.worldPosition),this.storageGPUBuffer.setFloat("radius",i.radius),this.storageGPUBuffer.setVector3("bound",i.transform.worldPosition)}this.count=t.length,this.storageGPUBuffer.apply()}}class Gh extends wr{size;constructor(e,t=0,r){super(),this.bufferType=tr.StorageGPUBuffer,this.size=e,this.createBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|t,e,r,"MatrixGPUBuffer")}writeBufferByHeap(e,t){let r;e instanceof Float64Array?r=new Float32Array(e):r=e;let i=R.device;if(r.length>0){let a=null;for(;this.mapAsyncReady.length&&(a=this.mapAsyncReady.shift(),a.usedSize!=r.byteLength);)a.destroy(),this.mapAsyncBuffersOutstanding--,a=null;a||(a=i.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_SRC|GPUBufferUsage.MAP_WRITE,mappedAtCreation:!0}),a.usedSize=r.byteLength,this.mapAsyncBuffersOutstanding++,this.mapAsyncBuffersOutstanding>10&&console.warn(` Warning: mapAsync requests from ${this.mapAsyncBuffersOutstanding} frames ago have not resolved yet. MB of staging buffers allocated.`));let o=new Float32Array(r.buffer,r.byteOffset,t);new Float32Array(a.getMappedRange(0,t*4)).set(o),a.unmap();const l=i.createCommandEncoder();l.copyBufferToBuffer(a,0,this.buffer,0,t*4),i.queue.submit([l.finish()]),a.mapAsync(GPUMapMode.WRITE).then(()=>this.mapAsyncReady.push(a))}}}class Wh{uuid;index;usage;groupBufferSize;matrixBufferDst;constructor(){this.uuid=It(),this.groupBufferSize=0,this.usage=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,this.cacheWorldMatrix()}cacheWorldMatrix(){this.groupBufferSize=I.maxCount*I.blockBytes,this.matrixBufferDst=new Gh(this.groupBufferSize/4),this.matrixBufferDst.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,this.matrixBufferDst.buffer.label=this.groupBufferSize.toString()}writeBuffer(e){const t=I.dynamicMatrixBytes;this.matrixBufferDst.mapAsyncWrite(t,e)}}class ne{static _cameraBindGroups;static _lightEntriesMap;static _reflectionEntriesMap;static modelMatrixBindGroup;static init(){this.modelMatrixBindGroup=new Wh,this._cameraBindGroups=new Map,this._lightEntriesMap=new Map,this._reflectionEntriesMap=new Map}static getAllCameraGroup(){return this._cameraBindGroups}static getCameraGroup(e){let t=this._cameraBindGroups.get(e);return t||(t=new _o(this.modelMatrixBindGroup),this._cameraBindGroups.set(e,t)),e.isShadowCamera?t.setShadowCamera(e):t.setCamera(e),t}static updateCameraGroup(e){let t=this._cameraBindGroups.get(e);t||(t=new _o(this.modelMatrixBindGroup),this._cameraBindGroups.set(e,t)),e.isShadowCamera?t.setShadowCamera(e):t.setCamera(e)}static getLightEntries(e){e||console.log("getLightEntries scene is null");let t=this._lightEntriesMap.get(e);return t||(t=new Oh,this._lightEntriesMap.set(e,t)),this._lightEntriesMap.get(e)}static getReflectionEntries(e){e||console.log("getLightEntries scene is null");let t=this._reflectionEntriesMap.get(e);return t||(t=new zh,this._reflectionEntriesMap.set(e,t)),this._reflectionEntriesMap.get(e)}}class F{static lastGeometry;static lastPipeline;static lastShader;static drawCount=0;static renderPassCount=0;static geometryCount=0;static pipelineCount=0;static matrixCount=0;static lastRenderPassState;static LastCommand;static bindPipeline(e,t){if(F.lastShader!=t)F.lastShader=t;else return!1;F.lastPipeline!=t.pipeline&&(F.lastPipeline=t.pipeline,e.setPipeline(t.pipeline));for(let r=1;r<t.bindGroups.length;r++){const i=t.bindGroups[r];i&&e.setBindGroup(r,i)}return!0}static bindCamera(e,t){let r=ne.getCameraGroup(t);e.setBindGroup(0,r.globalBindGroup)}static bindGeometryBuffer(e,t){if(this.lastGeometry!=t&&(this.lastGeometry=t,t.indicesBuffer)){e.setIndexBuffer(t.indicesBuffer.indicesGPUBuffer.buffer,t.indicesBuffer.indicesFormat);let r=t.vertexBuffer.vertexGPUBuffer,i=t.vertexBuffer.vertexBufferLayouts;for(let a=0;a<i.length;a++){const o=i[a];e.setVertexBuffer(a,r.buffer,o.offset,o.size)}}}static cleanCache(){this.lastGeometry=null,this.lastPipeline=null,this.lastShader=null}static createPipeline(e){return Ye.countStart("GPUContext","pipeline"),R.device.createRenderPipeline(e)}static beginCommandEncoder(){return Ye.countStart("GPUContext","beginCommandEncoder"),this.LastCommand&&R.device.queue.submit([this.LastCommand.finish()]),this.LastCommand=R.device.createCommandEncoder(),this.LastCommand}static endCommandEncoder(e){this.LastCommand==e&&(R.device.queue.submit([this.LastCommand.finish()]),this.LastCommand=null,Ye.countStart("GPUContext","endCommandEncoder"))}static recordBundleEncoder(e){return R.device.createRenderBundleEncoder(e)}static beginRenderPass(e,t){if(this.cleanCache(),this.renderPassCount++,this.lastRenderPassState=t,t.depthTexture){let r=t.renderPassDescriptor.depthStencilAttachment;r.view=t.depthTexture.getGPUView()}if(t.renderTargets&&t.renderTargets.length>0){for(let r=0;r<t.renderTargets.length;++r){const i=t.renderTargets[r];let a=t.renderPassDescriptor.colorAttachments[r];t.multisample>0&&t.renderTargets.length==1?(a.view=t.multiTexture.createView(),a.resolveTarget=i.getGPUView()):a.view=i.getGPUTexture().createView()}return e.beginRenderPass(t.renderPassDescriptor)}else{let r=t.renderPassDescriptor.colorAttachments[0];return r&&(t.multisample>0?(r.view=t.multiTexture.createView(),r.resolveTarget=R.context.getCurrentTexture().createView()):r.view=R.context.getCurrentTexture().createView()),e.beginRenderPass(t.renderPassDescriptor)}}static drawIndexed(e,t,r,i,a,o){e.drawIndexed(t,r,i,a,o),this.drawCount++}static draw(e,t,r,i,a){e.draw(t,r,i,a),this.drawCount++}static endPass(e){e.insertDebugMarker("end"),e.end()}static computeCommand(e,t){let r=e.beginComputePass();for(let i=0;i<t.length;i++)t[i].compute(r);r.end()}static copyTexture(e,t,r){e.copyTextureToTexture({texture:t.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:r.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{width:r.width,height:r.height,depthOrArrayLayers:1})}}class Jh{source;input;output;reset(e){this.input&&this.input.destroy(),this.output&&this.output.destroy(),this.input=this.output=null,this.source=e}apply(e){if(this.source){if(!this.input){let t=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST;this.input=new ve(this.source.length,t,this.source),this.input.apply()}if(!this.output){let t=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC;this.output=new ve(e*3,t),this.output.apply()}}}}class Zh{enable;morphTargetsRelative;MaxMorphTargetCount=64;_computeConfigArray;_computeConfigBuffer;_morphInfluenceArray;_morphInfluenceBuffer;_positionAttrDataGroup;_normalAttrDataGroup;_isInfluenceDirty;_morphTargetCount;_totalVertexCount;_computeShader;_computeShaders;_computeWorkGroupXY=1;_collectMorphTargetData;_blendTarget;constructor(){this._isInfluenceDirty=!0,this.generateGPUBuffer(),this._positionAttrDataGroup=new Jh,this._normalAttrDataGroup=new Jh}initMorphTarget(e){this._collectMorphTargetData=this.collectMorphTargetList(e),this._computeShader&&this._computeShader.destroy();let t=Vt.CsMain;this._computeShader=new ue(t),this._collectMorphTargetData.mergedNormal?this._computeShader.setDefine("USE_MORPHNORMALS",!0):this._computeShader.deleteDefine("USE_MORPHNORMALS"),this._computeShaders=[this._computeShader],this._isInfluenceDirty=!0,this._morphTargetCount=this._collectMorphTargetData.mtCount,this._totalVertexCount=this._collectMorphTargetData.vCount,this._morphInfluenceArray.fill(0),this._computeWorkGroupXY=this.calcWorkGroup(this._totalVertexCount),this._positionAttrDataGroup.reset(this._collectMorphTargetData.mergedPos),this._normalAttrDataGroup.reset(this._collectMorphTargetData.mergedNormal)}applyRenderShader(e){this.uploadMorphTargetBuffer(),this.uploadConfigGBuffer(),e.setUniformBuffer("morphTargetConfig",this._computeConfigBuffer),e.setStorageBuffer("morphTargetOpPositions",this._positionAttrDataGroup.output),this._collectMorphTargetData.mergedNormal&&e.setStorageBuffer("morphTargetOpNormals",this._normalAttrDataGroup.output)}computeMorphTarget(e){this.uploadConfigGBuffer(),this.uploadMorphTargetBuffer(),this._computeShader.setUniformBuffer("morphTargetConfig",this._computeConfigBuffer),this._computeShader.setStorageBuffer("morphTargetInfluence",this._morphInfluenceBuffer),this._computeShader.setStorageBuffer("morphTargetPositions",this._positionAttrDataGroup.input),this._computeShader.setStorageBuffer("morphTargetOpPositions",this._positionAttrDataGroup.output),this._collectMorphTargetData.mergedNormal&&(this._computeShader.setStorageBuffer("morphTargetNormals",this._normalAttrDataGroup.input),this._computeShader.setStorageBuffer("morphTargetOpNormals",this._normalAttrDataGroup.output)),this._computeShader.workerSizeX=this._computeWorkGroupXY,this._computeShader.workerSizeY=this._computeWorkGroupXY,this._computeShader.workerSizeZ=1,F.computeCommand(e,this._computeShaders)}updateInfluence(e,t){this._isInfluenceDirty=!0,this._morphInfluenceArray[e]=t}get blendShape(){return this._blendTarget}collectMorphTargetList(e){let t=this.collectAttribute("a_morphPositions_",e),r=t.length,i=t[0].data.length/3;if(this._blendTarget={},e.blendShapeData)for(let l=0;l<e.blendShapeData.shapeIndexs.length;l++){let h=e.blendShapeData.shapeIndexs[l],u=e.blendShapeData.shapeNames[l].split("."),c=u[u.length-1];this._blendTarget[c]=f=>this.updateInfluence(h,f)}let a=new Float32Array(i*r*3);{let l=0;for(let h=0;h<r;h++){let u=t[h];a.set(u.data,l),l+=u.data.length}}let o=this.collectAttribute("a_morphNormals_",e),n;if(o&&o.length>0){let l=0;n=new Float32Array(i*r*3);for(let h=0;h<r;h++){let u=o[h];n.set(u.data,l),l+=u.data.length}}return{mtCount:r,vCount:i,mergedPos:a,mergedNormal:n}}collectAttribute(e,t){let r=[];for(let i=0;i<this.MaxMorphTargetCount;i++){let a=e+i,o=t.getAttribute(a);if(o)r[i]=o;else break}return r}uploadConfigGBuffer(){if(this._isInfluenceDirty){let e=0;for(let t=0;t<this._morphTargetCount;t++)e+=this._morphInfluenceArray[t];this._morphInfluenceBuffer.setFloat32Array("data",this._morphInfluenceArray),this._morphInfluenceBuffer.apply(),this._computeConfigArray[0]=this.morphTargetsRelative?1:1-e,this._computeConfigArray[1]=this._morphTargetCount,this._computeConfigArray[2]=this._totalVertexCount,this._computeConfigArray[3]=this._computeWorkGroupXY,this._computeConfigBuffer.setFloat32Array("data",this._computeConfigArray),this._computeConfigBuffer.apply(),this._isInfluenceDirty=!1}}calcWorkGroup(e){let t=Math.ceil(Math.sqrt(e)),r=Math.ceil(Math.log2(t));return t=Math.pow(2,r),t}uploadMorphTargetBuffer(){this._positionAttrDataGroup.output||this._positionAttrDataGroup.apply(this._totalVertexCount),this._normalAttrDataGroup.output||this._normalAttrDataGroup.apply(this._totalVertexCount)}generateGPUBuffer(){this._computeConfigArray=new Float32Array(4),this._computeConfigBuffer=new ht(4),this._morphInfluenceArray=new Float32Array(this.MaxMorphTargetCount);let e=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST;this._morphInfluenceBuffer=new ve(this.MaxMorphTargetCount,e)}}var zg=Object.defineProperty,Gg=Object.getOwnPropertyDescriptor,Fo=(s,e,t,r)=>{for(var i=r>1?void 0:r?Gg(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&zg(e,t,i),i};let j=class extends ei{receiveShadow;morphData;constructor(){super()}onEnable(){super.onEnable()}onDisable(){super.onDisable()}cloneTo(s){s.addComponent(j).copyComponent(this)}copyComponent(s){return super.copyComponent(s),this.receiveShadow=s.receiveShadow,this}get geometry(){return this._geometry}set geometry(s){if(super.geometry=s,s){let e=s.morphTargetDictionary!=null;e&&(this.morphData||=new Zh,this.morphData.morphTargetsRelative=s.morphTargetsRelative,this.morphData.initMorphTarget(s)),this.morphData&&(this.morphData.enable=e),this.morphData?.enable?this.addRendererMask(Be.MorphTarget):this.removeRendererMask(Be.MorphTarget),this.object3D.bound=this._geometry.bounds.clone()}else this.morphData&&(this.morphData.enable=!1),this.removeRendererMask(Be.MorphTarget);this._readyPipeline||(this.initPipeline(),this._computes&&(this.onCompute=ss(this.onCompute,()=>{for(let e=0;e<this._computes.length;e++)this._computes[e].onUpdate()})))}get material(){return this._materials[0]}set material(s){this.materials=[s]}setMorphInfluence(s,e){if(this.morphData&&this.morphData.enable){let t=this._geometry.morphTargetDictionary[s];t>=0&&this.morphData.updateInfluence(t,e)}}setMorphInfluenceIndex(s,e){this.morphData&&this.morphData.enable&&s>=0&&this.morphData.updateInfluence(s,e)}onCompute(s,e){this.morphData&&this.morphData.enable&&this.morphData.computeMorphTarget(e)}nodeUpdate(s,e,t,r){if(this.morphData&&this.morphData.enable)for(let i=0;i<this.materials.length;i++){let o=this.materials[i].getPass(e);if(o)for(let n=0;n<o.length;n++)this.morphData.applyRenderShader(o[n])}super.nodeUpdate(s,e,t,r)}destroy(s){super.destroy(s)}};Fo([zi],j.prototype,"geometry",1),Fo([zi],j.prototype,"material",1),j=Fo([Wt(j,"MeshRenderer")],j);class Sr{static compressGBufferTex_NAME="compressGBufferTex_NAME";static colorBufferTex_NAME="colorBufferTex";static positionBufferTex_NAME="positionBufferTex";static normalBufferTex_NAME="normalBufferTex";static materialBufferTex_NAME="materialBufferTex";static zBufferTexture_NAME="zBufferTexture";static zPreDepthTexture_NAME="zPreDepthTexture";static outTex_NAME="outTex"}class Yh{label="";customSize=!1;zPreTexture=null;depthTexture=null;renderTargetTextures;outColor=-1;renderTargets;rtTextureDescriptors;irradianceBuffer;multisample=0;multiTexture;depthViewIndex=0;depthCleanValue=0;isOutTarget=!0;camera3D;rtFrame;renderPassDescriptor;renderBundleEncoderDescriptor;depthLoadOp;getLastRenderTexture(){return this.renderTargets&&this.renderTargets.length>0?this.renderTargets[0]:m.res.redTexture}}class At extends $e{resolveTarget;sampleCount;autoResize;clear;constructor(e,t,r=X.rgba8unorm,i=!1,a,o=1,n=0,l=!0,h=!0){super(e,t,o),this.name=It(),this.autoResize=h,this.useMipmap=i,this.sampleCount=n,this.format=r,this.numberLayer=o,this.clear=l,a!=null?this.usage=a:this.usage=a|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST,this.resize(e,t),this.autoResize&&R.addEventListener(Yr.RESIZE,u=>{let{width:c,height:f}=u.data;this.resize(c,f),this._textureChange=!0},this)}resize(e,t){let r=R.device;this.gpuTexture&&($e.delayDestroyTexture(this.gpuTexture),this.gpuTexture=null,this.view=null),this.width=e,this.height=t,this.createTextureDescriptor(e,t,1,this.format,this.usage,this.numberLayer,this.sampleCount),this.useMipmap=!1,this.visibility=GPUShaderStage.COMPUTE|GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,this.format==X.rgba32float?(this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="unfilterable-float",this.gpuSampler=r.createSampler({})):this.format==X.depth32float?(this.samplerBindingLayout.type="filtering",this.sampler_comparisonBindingLayout.type="comparison",this.textureBindingLayout.sampleType="depth",this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})):this.format==X.depth24plus?(this.samplerBindingLayout={type:"filtering"},this.sampler_comparisonBindingLayout={type:"comparison"},this.textureBindingLayout.sampleType="depth",this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})):(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float",this.sampleCount>0&&(this.textureBindingLayout.multisampled=!0),this.minFilter="linear",this.magFilter="linear",this.mipmapFilter="linear",this.addressModeU=Pt.clamp_to_edge,this.addressModeV=Pt.clamp_to_edge,this.gpuSampler=r.createSampler(this)),this._textureChange=!0}create(e,t,r=!0){let i=R.device;const a=e*4;let o=new Float32Array(e*t*4);const n=i.createBuffer({size:o.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(n,0,o);const l=F.beginCommandEncoder();l.copyBufferToTexture({buffer:n,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(l)}clone(){let e=new At(this.width,this.height,this.format,this.useMipmap,this.usage,this.numberLayer,this.sampleCount,this.clear,this.autoResize);return e.name="clone_"+e.name,e}readTextureToImage(){let e=R.device,t=R.windowWidth,r=R.windowHeight,i=new Float32Array(t*r*4);const a=e.createBuffer({size:i.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});return F.beginCommandEncoder().copyTextureToBuffer({texture:this.getGPUTexture()},{buffer:a},[t,r]),a.getMappedRange(0,i.byteLength)}}class Qe{storeOp="store";loadOp="clear";clearValue=[0,0,0,0]}class Ze{label;customSize=!1;renderTargets;rtDescriptors;zPreTexture;depthTexture;depthViewIndex=0;depthCleanValue=1;depthLoadOp="clear";isOutTarget=!0;constructor(e,t,r,i,a=!0){this.renderTargets=e,this.rtDescriptors=t,this.depthTexture=r,this.zPreTexture=i,this.isOutTarget=a}clone2Frame(e){e.renderTargets.push(...this.renderTargets.concat());for(let t=0;t<this.rtDescriptors.length;t++){const r=this.rtDescriptors[t];let i=new Qe;i.loadOp=r.loadOp,i.storeOp=r.storeOp,i.clearValue=r.clearValue,e.rtDescriptors.push(i)}e.depthTexture=this.depthTexture,e.zPreTexture=this.zPreTexture,e.customSize=this.customSize}clone(){let e=new Ze([],[]);return this.clone2Frame(e),e}}class se extends Ze{static colorPass_GBuffer="ColorPassGBuffer";static reflections_GBuffer="reflections_GBuffer";static gui_GBuffer="gui_GBuffer";static gBufferMap=new Map;_colorBufferTex;_compressGBufferTex;constructor(){super([],[])}createGBuffer(e,t,r,i=!0,a=!0,o){let n=this.renderTargets,l=this.rtDescriptors;if(a){let u=new Qe;u.loadOp="clear",this._colorBufferTex=vt.createRTTexture(e+Sr.colorBufferTex_NAME,t,r,X.rgba16float,!0),n.push(this._colorBufferTex),l.push(u)}this._compressGBufferTex=new At(t,r,X.rgba32float,!1,void 0,1,0,!0,!0),n.push(this._compressGBufferTex),o?this.depthTexture=o:(this.depthTexture=new At(t,r,X.depth24plus,!1,void 0,1,0,!0,!0),this.depthTexture.name=e+"_depthTexture");let h;h=new Qe,l.push(h)}getPositionMap(){return this.renderTargets[1]}getNormalMap(){return this.renderTargets[2]}getColorTexture(){return this._colorBufferTex}getCompressGBufferTexture(){return this._compressGBufferTex}static getGBufferFrame(e,t=0,r=0,i=!0,a){let o;if(se.gBufferMap.has(e))o=se.gBufferMap.get(e);else{o=new se;let n=R.presentationSize;o.createGBuffer(e,t==0?n[0]:t,r==0?n[1]:r,t!=0&&r!=0,i,a),se.gBufferMap.set(e,o)}return o}static getGUIBufferFrame(){let e=this.getGBufferFrame(this.colorPass_GBuffer);return se.getGBufferFrame(se.gui_GBuffer,0,0,!0,e.depthTexture)}clone(){let e=new se;return this.clone2Frame(e),e}}class Te{static rendererPassState=new Map;static createRendererPassState(e,t=null){let r=Te.rendererPassState.get(e);if(r||(r=new Yh,r.label=e.label,r.customSize=e.customSize,r.rtFrame=e,r.zPreTexture=e.zPreTexture,r.depthTexture=e.depthTexture,r.depthViewIndex=e.depthViewIndex,r.isOutTarget=e.isOutTarget,r.depthCleanValue=e.depthCleanValue,r.depthLoadOp=e.depthLoadOp,Te.rendererPassState.set(e,r)),e&&e.renderTargets.length>0){r.renderTargets=e.renderTargets,r.rtTextureDescriptors=e.rtDescriptors,r.renderPassDescriptor=Te.getRenderPassDescriptor(r),r.renderPassDescriptor.depthStencilAttachment&&(r.renderPassDescriptor.depthStencilAttachment.depthLoadOp=e.depthLoadOp),t=="load"&&e?.renderTargets[0]&&e.renderTargets[0].name.startsWith(se.gui_GBuffer)&&(r.renderPassDescriptor.colorAttachments[0].loadOp="load"),r.depthLoadOp=e.depthLoadOp,r.renderBundleEncoderDescriptor=Te.getRenderBundleDescriptor(r),r.renderTargetTextures=[];for(let i=0;i<e.renderTargets.length;i++){const a=e.renderTargets[i];r.renderTargetTextures[i]={format:a.format},a.name.indexOf(Sr.colorBufferTex_NAME)!=-1&&(r.outColor=i)}}else r.renderPassDescriptor=Te.getRenderPassDescriptor(r,t),r.renderBundleEncoderDescriptor=Te.getRenderBundleDescriptor(r),r.renderTargetTextures=[{format:R.presentationFormat}],r.outColor=0;return r}static getRenderPassDescriptor(e,t=null){if(e.renderPassDescriptor)return e.renderPassDescriptor;R.device,R.presentationSize;let r=[];if(e.renderTargets&&e.renderTargets.length>0){e.renderTargets[0].width,e.renderTargets[0].height;for(let a=0;a<e.renderTargets.length;a++){const o=e.renderTargets[a],n=e.rtTextureDescriptors[a];r.push({view:o.getGPUView(),resolveTarget:void 0,loadOp:n.loadOp,clearValue:n.clearValue,storeOp:n.storeOp})}}else if(!e.customSize){let a=R.canvasConfig&&R.canvasConfig.alpha?[1,1,1,0]:[0,0,0,1];e.isOutTarget==!0&&r.push({view:void 0,resolveTarget:void 0,loadOp:R.canvasConfig&&R.canvasConfig.alpha||t!=null?"load":"clear",clearValue:a,storeOp:"store"})}let i=null;return e.depthTexture||e.zPreTexture?(e.zPreTexture&&(e.depthTexture=e.zPreTexture),i={label:`${e.label} renderPassDescriptor zPreTexture${e.zPreTexture?"load":"clear"}`,colorAttachments:r,depthStencilAttachment:{view:e.depthTexture.getGPUView(),depthLoadOp:e.zPreTexture?"load":e.depthLoadOp,depthClearValue:e.zPreTexture?1:e.depthCleanValue,depthStoreOp:"store"}}):i={colorAttachments:r,label:"renderPassDescriptor not writeDepth"},e.renderPassDescriptor=i,i}static getRenderBundleDescriptor(e){if(e.renderBundleEncoderDescriptor)return e.renderBundleEncoderDescriptor;R.presentationSize;let t=[];if(e.renderTargets&&e.renderTargets.length>0){e.renderTargets[0].width,e.renderTargets[0].height;for(let i=0;i<e.renderTargets.length;i++){const a=e.renderTargets[i];t.push(a.format)}}let r=null;return e.depthTexture?r={colorFormats:t,depthStencilFormat:e.depthTexture.format}:r={colorFormats:t},e.renderBundleEncoderDescriptor=r,e.renderBundleEncoderDescriptor}}var Wg=Object.getOwnPropertyDescriptor,Jg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Wg(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let ga=class extends mt{constructor(s="QuadGlsl_vs",e="QuadGlsl_fs"){super();let t=new Oe(s,e);this.addRenderPass(t);let r=t.shaderState;t.blendMode=ae.NONE,r.frontFace="cw",r.depthWriteEnabled=!1,r.depthCompare=rt.always,r.multisample=0,this.setTexture("baseMap",m.res.blackTexture),this.setUniformFloat("x",0),this.setUniformFloat("y",0),this.setUniformFloat("width",100),this.setUniformFloat("height",100)}};ga=Jg([yi(ga,"QuadShader")],ga);class yo extends q{width=128;height=128;quadRenderer;material;rendererPassState;quadShader;constructor(e="QuadGlsl_vs",t="QuadGlsl_fs",r,i=0,a=!1){super();let o=r?r.renderTargets:[];this.material=new yt,this.quadShader=new ga(e,t),this.material.shader=this.quadShader,this.quadRenderer=this.addComponent(j),this.quadRenderer.material=this.material,this.quadRenderer.castGI=!1,this.quadRenderer.castShadow=!1,this.quadRenderer.drawType=a?2:0,this.quadRenderer.geometry=new Qi(100,100,1,1),this.quadRenderer.material=this.material,this.quadRenderer.__start(),this.quadRenderer._enable=!0,this.quadRenderer.onEnable(),this.rendererPassState=Te.createRendererPassState(r,"load"),i>0&&(this.rendererPassState.multisample=this.quadShader.getDefaultColorShader().shaderState.multisample,this.rendererPassState.multiTexture=R.device.createTexture({size:{width:R.presentationSize[0],height:R.presentationSize[1]},sampleCount:i,format:o.length>0?o[0].format:R.presentationFormat,usage:GPUTextureUsage.RENDER_ATTACHMENT})),R.addEventListener(Yr.RESIZE,n=>{this.rendererPassState=Te.createRendererPassState(r,"load"),i>0&&(this.rendererPassState.multisample=this.quadShader.getDefaultColorShader().shaderState.multisample,this.rendererPassState.multiTexture=R.device.createTexture({size:{width:R.presentationSize[0],height:R.presentationSize[1]},sampleCount:i,format:o.length>0?o[0].format:R.presentationFormat,usage:GPUTextureUsage.RENDER_ATTACHMENT}))},this)}renderTarget(e,t,r){let i=e.camera,a=F.beginRenderPass(r,t.rendererPassState);F.bindCamera(a,i),t.quadRenderer.nodeUpdate(e,H.COLOR,t.rendererPassState,null),t.quadRenderer.renderPass2(e,H.COLOR,t.rendererPassState,null,a),F.endPass(a)}renderToViewQuad(e,t,r,i){let a=e.camera;t.quadShader.setTexture("baseMap",i);let o=F.beginRenderPass(r,t.rendererPassState);F.bindCamera(o,a),t.quadRenderer.nodeUpdate(e,H.COLOR,t.rendererPassState,null),t.quadRenderer.renderPass2(e,H.COLOR,t.rendererPassState,null,o),F.endPass(o)}}class vt{static rtTextureMap;static rtViewQuad;static init(){this.rtTextureMap=new Map,this.rtViewQuad=new Map}static createRTTexture(e,t,r,i,a=!1,o=0){let n=this.rtTextureMap.get(e);return n||(e==Sr.colorBufferTex_NAME?n=new At(t,r,i,a,void 0,1,o,!1):n=new At(t,r,i,a,void 0,1,o,!0),n.name=e,vt.rtTextureMap.set(e,n)),n}static createRTTextureArray(e,t,r,i,a=1,o=!1,n=0){let l=this.rtTextureMap.get(e);return l||(l=new At(t,r,i,o,void 0,a,n),l.name=e,vt.rtTextureMap.set(e,l)),l}static createViewQuad(e,t,r,i,a=0){let o=new Ze([i],[new Qe]),n=new yo(t,r,o,a);return vt.rtViewQuad.set(e,n),n}static getTexture(e){return this.rtTextureMap.get(e)}static CreateSplitTexture(e){let t=this.getTexture(Sr.colorBufferTex_NAME),r=this.getTexture(e+"_split");return r||(r=this.createRTTexture(e+"_split",t.width,t.height,t.format,!1)),r}static WriteSplitColorTexture(e){let t=this.getTexture(Sr.colorBufferTex_NAME),r=this.getTexture(e+"_split");const i=F.beginCommandEncoder();i.copyTextureToTexture({texture:t.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:r.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{width:r.width,height:r.height,depthOrArrayLayers:1}),F.endCommandEncoder(i)}}class bo{command;encoder;rendererPassStates;rtFrame;constructor(e){this.rtFrame=e,this.rendererPassStates=[]}clean(){this.rendererPassStates.length=0,F.cleanCache()}beginContinueRendererPassState(e="load",t="load"){if(this.rendererPassStates.length>0){let r=this.rtFrame.clone();for(const a of r.rtDescriptors)a.loadOp="load";r.depthLoadOp=t;let i=Te.createRendererPassState(r,e);return this.rendererPassStates.push(i),i}else{this.rtFrame.depthLoadOp=t;let r=Te.createRendererPassState(this.rtFrame,e);return this.rendererPassStates.push(r),r}}get rendererPassState(){return this.rendererPassStates[this.rendererPassStates.length-1]}beginOpaqueRenderPass(){this.beginContinueRendererPassState("clear","clear"),this.begineNewCommand(),this.beginNewEncoder()}beginTransparentRenderPass(){this.beginContinueRendererPassState("load","load"),this.begineNewCommand(),this.beginNewEncoder()}specialtRenderPass(){this.beginContinueRendererPassState("load","load"),this.begineNewCommand(),this.beginNewEncoder()}endRenderPass(){this.endEncoder(),this.endCommand()}begineNewCommand(){return this.command=F.beginCommandEncoder(),this.command}endCommand(){F.endCommandEncoder(this.command),this.command=null}beginNewEncoder(){return this.encoder=F.beginRenderPass(this.command,this.rendererPassState),this.encoder}endEncoder(){F.endPass(this.encoder),this.encoder=null}}class _r extends Er{rendererPassState;splitRendererPassState;useRenderBundle=!1;debugViewQuads;debugTextures;renderContext;_rendererType;_rtFrame;get passType(){return this._rendererType}set passType(e){this._rendererType=e}constructor(){super(),this.debugTextures=[],this.debugViewQuads=[]}setRenderStates(e){if(this._rtFrame=e,e){this.rendererPassState=Te.createRendererPassState(e);let t=e.clone();t.depthLoadOp="load";for(const r of t.rtDescriptors)r.loadOp="load";this.splitRendererPassState=Te.createRendererPassState(t)}this.renderContext=new bo(e)}getRenderContext(e){return this._rtFrame=e,new bo(e)}setIrradiance(e,t){this.rendererPassState.irradianceBuffer=[e,t]}compute(e,t){}render(e,t,r,i=!1){F.cleanCache();let a=e.camera,o=e.scene;this.rendererPassState.camera3D=a;let n=G.instance.getRenderNodes(o,a),l=this.renderBundleOp(e,n,t,r),h=i?[]:this.renderBundleTr(e,n,t,r);{let u=F.beginCommandEncoder(),c=F.beginRenderPass(u,this.rendererPassState);l.length>0&&c.executeBundles(l),!i&&G.instance.sky&&(F.bindCamera(c,a),G.instance.sky.renderPass2(e,this._rendererType,this.rendererPassState,r,c)),this.drawRenderNodes(e,c,u,n.opaqueList,t),F.endPass(c),F.endCommandEncoder(u)}{let u=F.beginCommandEncoder(),c=F.beginRenderPass(u,this.rendererPassState);h.length>0&&c.executeBundles(h),i||(F.bindCamera(c,a),this.drawRenderNodes(e,c,u,n.transparentList,t)),F.endPass(c),F.endCommandEncoder(u)}}nodeUpload(e,t,r){}occlusionRenderNodeTest(e,t,r){return r?r.occlusionRenderNodeTest(e)>0:!0}renderOp(e,t,r,i,a){}renderTr(e,t,r,i,a){}renderBundleOp(e,t,r,i){let a=G.instance.getOpRenderGroup(e.scene);if(a){let o=[];return a.renderGroup.forEach(n=>{if(n.bundleMap.has(this._rendererType))o.push(n.bundleMap.get(this._rendererType));else{let l=F.recordBundleEncoder(this.rendererPassState.renderBundleEncoderDescriptor);this.recordRenderBundleNode(e,l,n.renderNodes,i);let h=l.finish();n.bundleMap.set(this._rendererType,h),o.push(h)}}),o}return[]}renderBundleTr(e,t,r,i){let a=G.instance.getTrRenderGroup(e.scene);if(a){let o=[];return a.renderGroup.forEach(n=>{if(n.bundleMap.has(this._rendererType))o.push(n.bundleMap.get(this._rendererType));else{let l=F.recordBundleEncoder(this.rendererPassState.renderBundleEncoderDescriptor);this.recordRenderBundleNode(e,l,n.renderNodes,i);let h=l.finish();n.bundleMap.set(this._rendererType,h),o.push(h)}}),o}return[]}recordRenderBundleNode(e,t,r,i){F.bindCamera(t,e.camera),F.bindGeometryBuffer(t,r[0].geometry);for(let a=0;a<r.length;++a){let o=r[a];o.transform.worldMatrix.index,o.transform.enable&&o.recordRenderPass2(e,this._rendererType,this.rendererPassState,i,t)}}drawRenderNodes(e,t,r,i,a,o){F.bindCamera(t,e.camera);for(let n=m.setting.render.drawOpMin;n<Math.min(i.length,m.setting.render.drawOpMax);++n){let l=i[n];l.transform.enable&&l.enable&&l.renderPass2(e,this._rendererType,this.rendererPassState,o,t)}}}class Xh extends _r{constructor(){super(),this.passType=H.COLOR}render(e,t,r,i=!1){this.renderContext.clean();let a=e.scene,o=e.camera;ne.updateCameraGroup(o),this.rendererPassState.camera3D=o;let n=G.instance.getRenderNodes(a,o),l=this.renderBundleOp(e,n,t,r),h=i?[]:this.renderBundleTr(e,n,t,r);{this.renderContext.beginOpaqueRenderPass();let u=this.renderContext.encoder;l.length>0&&(G.instance.getOpRenderGroup(a),u.executeBundles(l)),!i&&G.instance.sky&&(F.bindCamera(u,o),G.instance.sky.preInit(this._rendererType)||G.instance.sky.nodeUpdate(e,this._rendererType,this.rendererPassState,r),G.instance.sky.renderPass2(e,this._rendererType,this.rendererPassState,r,u)),n.opaqueList&&(F.bindCamera(u,o),this.drawNodes(e,this.renderContext,n.opaqueList,t,r))}{let u=this.renderContext.encoder;h.length>0&&u.executeBundles(h),!i&&n.transparentList&&(F.bindCamera(u,o),this.drawNodes(e,this.renderContext,n.transparentList,t,r));let c=G.instance.getGraphicList();for(let f=0;f<c.length;f++){const g=c[f];g.nodeUpdate(e,this._rendererType,this.splitRendererPassState,r),g.renderPass2(e,this._rendererType,this.splitRendererPassState,r,u)}this.renderContext.endRenderPass(),Ye.end("ColorPass Draw Transparent")}}drawNodes(e,t,r,i,a){let o=G.instance.getRenderShaderCollect(e);if(o){for(const n of o){let l=n[1];for(const h of l){let u=h[1];if(!u.isDestroyed&&u.preInit(this._rendererType)){u.nodeUpdate(e,this._rendererType,this.rendererPassState,a);break}}}for(let n=m.setting.render.drawOpMin;n<Math.min(r.length,m.setting.render.drawOpMax);++n){let l=r[n];l.transform.enable&&l.enable&&(l.hasMask(Be.UI)&&!l.isRecievePostEffectUI||l.isDestroyed||(l.preInit(this._rendererType)||l.nodeUpdate(e,this._rendererType,this.rendererPassState,a),l.renderPass(e,this.passType,this.renderContext)))}}}occlusionRenderNodeTest(e,t,r){return r.zDepthRenderNodeTest(t)>0}}class Qo{frustumCullingList;zVisibleList;_renderList;static enable=!0;constructor(){this._renderList=new Map}occlusionRenderNodeTest(e){return m.setting.occlusionQuery.enable?this.frustumCullingList?this.frustumCullingList[e]:0:1}zDepthRenderNodeTest(e){return this.zVisibleList?this.zVisibleList[e]:0}update(e,t){}collect(e,t){}renderCommitTesting(e,t){return!0}}class Hi extends wr{constructor(e,t){super(),this.bufferType=tr.ComputeGPUBuffer,this.createBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,e,t,"ComputeGPUBuffer")}}class Hh{clusterBuffer;lightAssignBuffer;assignTableBuffer;clustersUniformBuffer;constructor(e,t){this.clusterBuffer=new Hi(e*2*4),this.clustersUniformBuffer=new ht(10),this.clustersUniformBuffer.visibility=GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,this.lightAssignBuffer=new Hi(e*t),this.lightAssignBuffer.visibility=GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE,this.assignTableBuffer=new Hi(e*4),this.assignTableBuffer.visibility=GPUShaderStage.FRAGMENT|GPUShaderStage.COMPUTE}update(e,t,r,i,a,o,n,l,h,u){this.clustersUniformBuffer.setFloat("clusterTileX",i),this.clustersUniformBuffer.setFloat("clusterTileY",a),this.clustersUniformBuffer.setFloat("clusterTileZ",o),this.clustersUniformBuffer.setFloat("numLights",n),this.clustersUniformBuffer.setFloat("maxNumLightsPerCluster",l),this.clustersUniformBuffer.setFloat("near",h),this.clustersUniformBuffer.setFloat("far",u),this.clustersUniformBuffer.setFloat("screenWidth",e),this.clustersUniformBuffer.setFloat("screenHeight",t),this.clustersUniformBuffer.setFloat("clusterPix",r),this.clustersUniformBuffer.apply()}}class dt{static clusterTileX=16;static clusterTileY=16;static clusterTileZ=32}let jh=`
|
|
5825
5825
|
#include "GlobalUniform"
|
|
5826
5826
|
|
|
5827
5827
|
struct ClusterBox{
|
|
@@ -6032,7 +6032,7 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
6032
6032
|
idx.empty1 = f32(clustersUniform.maxNumLightsPerCluster);
|
|
6033
6033
|
assignTable[clusterId_1D] = idx;
|
|
6034
6034
|
}
|
|
6035
|
-
`;class qh extends Fr{maxNumLightsPerCluster=64;clusterPix=1;clusterLightingBuffer;_currentLightCount=0;_clusterGenerateCompute;_clusterLightingCompute;_useCamera;resize=!1;constructor(e){super(),this.passType=H.Cluster,this.initCompute(e)}initCompute(e){this._clusterGenerateCompute=new ue(jh),this._clusterLightingCompute=new ue(Kh);let t=R.presentationSize,r=dt.clusterTileX*dt.clusterTileY*dt.clusterTileZ,i=e.camera,a=i.near,o=i.far;this.clusterLightingBuffer=new Hh(r,this.maxNumLightsPerCluster),this.clusterLightingBuffer.update(t[0],t[1],this.clusterPix,dt.clusterTileX,dt.clusterTileY,dt.clusterTileZ,0,this.maxNumLightsPerCluster,a,o),this._clusterGenerateCompute.setUniformBuffer("clustersUniform",this.clusterLightingBuffer.clustersUniformBuffer),this._clusterGenerateCompute.setStorageBuffer("clusterBuffer",this.clusterLightingBuffer.clusterBuffer);let n=ne.getLightEntries(e.scene);this._clusterLightingCompute.setStorageBuffer("models",ne.modelMatrixBindGroup.matrixBufferDst),this._clusterLightingCompute.setUniformBuffer("clustersUniform",this.clusterLightingBuffer.clustersUniformBuffer),this._clusterLightingCompute.setStorageBuffer("clusterBuffer",this.clusterLightingBuffer.clusterBuffer),this._clusterLightingCompute.setStorageBuffer("lightBuffer",n.storageGPUBuffer),this._clusterLightingCompute.setStorageBuffer("lightAssignBuffer",this.clusterLightingBuffer.lightAssignBuffer),this._clusterLightingCompute.setStorageBuffer("assignTable",this.clusterLightingBuffer.assignTableBuffer),this.resize=!0}render(e,t){let r=e.scene,i=G.instance.getLights(r);if(this._useCamera!=e.camera){this._useCamera=e.camera;let n=ne.getCameraGroup(this._useCamera);this._clusterGenerateCompute.setUniformBuffer("globalUniform",n.uniformGPUBuffer),this._clusterLightingCompute.setUniformBuffer("globalUniform",n.uniformGPUBuffer)}this._currentLightCount!=i.length&&(this._currentLightCount=i.length,this.clusterLightingBuffer.clustersUniformBuffer.setFloat("numLights",i.length),this.clusterLightingBuffer.clustersUniformBuffer.apply(),this._clusterGenerateCompute.workerSizeX=dt.clusterTileZ,this._clusterLightingCompute.workerSizeX=dt.clusterTileZ);let a=R.presentationSize;this.clusterLightingBuffer.update(a[0],a[1],this.clusterPix,dt.clusterTileX,dt.clusterTileY,dt.clusterTileZ,i.length,this.maxNumLightsPerCluster,e.camera.near,e.camera.far),this.resize=!1;let o=F.beginCommandEncoder();F.computeCommand(o,[this._clusterGenerateCompute,this._clusterLightingCompute]),F.endCommandEncoder(o)}}class Ae extends $e{resolveTarget;sampleCount;clone(){let e=new Ae(this.width,this.height,this.format,this.useMipmap,this.usage,this.numberLayer,this.sampleCount);return e.name="clone_"+e.name,e}constructor(e,t,r=X.rgba8unorm,i=!1,a,o=1,n=0,l=1){super(e,t,o),R.device,this.name=It(),this.useMipmap=i,this.sampleCount=n,this.format=r,this.numberLayer=o,this.mipmapCount=l,a!=null?this.usage=a:this.usage=a|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST,this.resize(e,t)}resize(e,t){let r=R.device;this.gpuTexture&&($e.delayDestroyTexture(this.gpuTexture),this.gpuTexture=null,this.view=null),this.width=e,this.height=t,this.createTextureDescriptor(e,t,this.mipmapCount,this.format,this.usage,this.numberLayer,this.sampleCount),this.useMipmap=!1,this.visibility=GPUShaderStage.COMPUTE|GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,this.format==X.rgba32float?(this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="unfilterable-float",this.gpuSampler=r.createSampler({})):this.format==X.depth32float?(this.samplerBindingLayout.type="filtering",this.sampler_comparisonBindingLayout.type="comparison",this.textureBindingLayout.sampleType="depth",this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})):this.format==X.depth24plus?(this.samplerBindingLayout={type:"filtering"},this.sampler_comparisonBindingLayout={type:"comparison"},this.textureBindingLayout.sampleType="depth",this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})):(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float",this.sampleCount>0&&(this.textureBindingLayout.multisampled=!0),this.minFilter="linear",this.magFilter="linear",this.mipmapFilter="nearest",this.maxAnisotropy=1,this.addressModeU=Pt.mirror_repeat,this.addressModeV=Pt.mirror_repeat,this.gpuSampler=r.createSampler(this)),this._textureChange=!0}create(e,t,r=!0){let i=R.device;const a=e*4;let o=new Float32Array(e*t*4);const n=i.createBuffer({size:o.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(n,0,o);const l=F.beginCommandEncoder();l.copyBufferToTexture({buffer:n,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(l)}readTextureToImage(){let e=R.device,t=R.windowWidth,r=R.windowHeight,i=new Float32Array(t*r*4);const a=e.createBuffer({size:i.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});return F.beginCommandEncoder().copyTextureToBuffer({texture:this.getGPUTexture()},{buffer:a},[t,r]),a.getMappedRange(0,i.byteLength)}}class $h extends q{up_camera;down_camera;left_camera;right_camera;front_camera;back_camera;set label(e){this.up_camera.name=e+"up",this.down_camera.name=e+"down",this.left_camera.name=e+"left",this.right_camera.name=e+"right",this.front_camera.name=e+"front",this.back_camera.name=e+"back"}constructor(e=.001,t=1e4,r=90,i=!1){super(),this.initCubeCamera(e,t,r,i)}initCubeCamera(e,t,r=90,i=!1){this.up_camera=je.createCamera3DObject(this,"up"),this.down_camera=je.createCamera3DObject(this,"down"),this.left_camera=je.createCamera3DObject(this,"left"),this.right_camera=je.createCamera3DObject(this,"right"),this.front_camera=je.createCamera3DObject(this,"front"),this.back_camera=je.createCamera3DObject(this,"back"),this.up_camera.isShadowCamera=i,this.down_camera.isShadowCamera=i,this.left_camera.isShadowCamera=i,this.right_camera.isShadowCamera=i,this.front_camera.isShadowCamera=i,this.back_camera.isShadowCamera=i;let a=1;this.up_camera.perspective(r,a,e,t),this.up_camera.lookAt(d.ZERO,d.UP,d.DOWN),this.up_camera.object3D.scaleX=-1,this.up_camera.object3D.rotationY=180,this.down_camera.perspective(r,a,e,t),this.down_camera.lookAt(d.ZERO,d.DOWN,d.DOWN),this.down_camera.object3D.scaleX=-1,this.down_camera.object3D.rotationY=180,this.left_camera.perspective(r,a,e,t),this.left_camera.lookAt(d.ZERO,d.LEFT),this.left_camera.object3D.scaleX=-1,this.right_camera.perspective(r,a,e,t),this.right_camera.lookAt(d.ZERO,d.RIGHT),this.right_camera.object3D.scaleX=-1,this.front_camera.perspective(r,a,e,t),this.front_camera.lookAt(d.ZERO,d.FORWARD),this.front_camera.object3D.scaleX=-1,this.back_camera.perspective(r,a,e,t),this.back_camera.lookAt(d.ZERO,d.BACK),this.back_camera.object3D.scaleX=-1,this.up_camera.type=He.shadow,this.down_camera.type=He.shadow,this.left_camera.type=He.shadow,this.right_camera.type=He.shadow,this.front_camera.type=He.shadow,this.back_camera.type=He.shadow}}class eu extends $e{constructor(e,t,r){super(e,t,r),this.format=X.depth32float,this.mipmapCount=1,this.init()}internalCreateBindingLayoutDesc(){this.textureBindingLayout.sampleType="depth",this.textureBindingLayout.viewDimension="cube-array",this.samplerBindingLayout.type="filtering",this.sampler_comparisonBindingLayout.type="comparison"}internalCreateTexture(){this.textureDescriptor={format:this.format,size:{width:this.width,height:this.height,depthOrArrayLayers:6*this.numberLayer},dimension:"2d",usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING},this.gpuTexture=this.getGPUTexture()}internalCreateView(){this.viewDescriptor={dimension:"cube-array"},this.view=this.getGPUView()}internalCreateSampler(){this.gpuSampler=R.device.createSampler({minFilter:Kr.linear,magFilter:Kr.linear}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})}}class tu extends Fr{shadowPassCount;_forceUpdate=!1;_shadowCameraDic;shadowCamera;cubeArrayTexture;colorTexture;shadowSize=1024;constructor(){super(),this.passType=H.POINT_SHADOW,this._shadowCameraDic=new Map,this.cubeArrayTexture=new eu(this.shadowSize,this.shadowSize,8),this.colorTexture=new Ae(this.shadowSize,this.shadowSize,X.bgra8unorm,!1),me.getInstance().attached(this.cubeArrayTexture,this)}getShadowCamera(e,t){let r;if(this._shadowCameraDic.has(t))r=this._shadowCameraDic.get(t);else{let i=new $h(e.camera.near,e.camera.far,90,!0);i.label=t.name;let a=[],o=[];for(let n=0;n<6;n++){let l=new Ae(this.shadowSize,this.shadowSize,this.cubeArrayTexture.format,!1),h=new Ze([this.colorTexture],[new Qe]);l.name="shadowDepthTexture_"+t.name+n+"_face",a[n]=l,h.depthTexture=l,h.label="shadowRender",h.customSize=!0,o[n]=this.getRenderContext(h)}r={cubeCamera:i,depthTexture:a,renderContext:o},this._shadowCameraDic.set(t,r)}return r}render(e,t){if(!m.setting.shadow.enable)return;this.shadowPassCount=0,e.camera;let r=e.scene,i=wt.getPointShadowLightWhichScene(r),a=i.length;for(let o=0;o<a;o++){let n=i[o];if(n.lightData.lightType!=Xe.DirectionLight&&n.lightData.castShadowIndex>-1&&(n.needUpdateShadow||this._forceUpdate||be.frame<5||n.realTimeShadow)){n.needUpdateShadow=!1;let l=this.getShadowCamera(e,n),h=n.transform.worldPosition;l.cubeCamera.x=h.x,l.cubeCamera.y=h.y,l.cubeCamera.z=h.z;let u;l.cubeCamera.transform.updateWorldMatrix(!0),t.update(l.cubeCamera.right_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.right_camera),this.renderSceneOnce(0,l,e,l.cubeCamera.right_camera,u,t),t.update(l.cubeCamera.left_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.left_camera),this.renderSceneOnce(1,l,e,l.cubeCamera.left_camera,u,t),t.update(l.cubeCamera.up_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.up_camera),this.renderSceneOnce(2,l,e,l.cubeCamera.up_camera,u,t),t.update(l.cubeCamera.down_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.down_camera),this.renderSceneOnce(3,l,e,l.cubeCamera.down_camera,u,t),t.update(l.cubeCamera.front_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.front_camera),this.renderSceneOnce(4,l,e,l.cubeCamera.front_camera,u,t),t.update(l.cubeCamera.back_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.back_camera),this.renderSceneOnce(5,l,e,l.cubeCamera.back_camera,u,t);let c=F.beginCommandEncoder();for(let f=0;f<6;f++)c.copyTextureToTexture({texture:l.depthTexture[f].getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:this.cubeArrayTexture.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:n.shadowIndex*6+f}},{width:this.shadowSize,height:this.shadowSize,depthOrArrayLayers:1});F.endCommandEncoder(c)}}this._forceUpdate=!1}renderSceneOnce(e,t,r,i,a,o){let n=t.renderContext[e];n.clean(),n.beginOpaqueRenderPass(),n.encoder.setViewport(0,0,this.shadowSize,this.shadowSize,0,1),n.encoder.setScissorRect(0,0,this.shadowSize,this.shadowSize),i.onUpdate(),i.transform.updateWorldMatrix(!0);for(const l of a.opaqueList){let h=l;if(!h.isDestroyed&&h.preInit(this._rendererType)){h.nodeUpdate(r,this._rendererType,n.rendererPassState,null);break}}this.drawShadowRenderNodes(r,i,n,a.opaqueList,o),this.drawShadowRenderNodes(r,i,n,a.transparentList,o),n.endRenderPass()}drawShadowRenderNodes(e,t,r,i,a){ne.updateCameraGroup(t),F.bindCamera(r.encoder,t),this.drawNodes(e,t,r,i,a,null)}drawNodes(e,t,r,i,a,o){let n=G.instance.getRenderShaderCollect(e);if(n){for(const l of n){let h=l[1];for(const u of h){let c=u[1];if(!c.isDestroyed&&c.preInit(this._rendererType)){c.nodeUpdate(e,this._rendererType,r.rendererPassState,o);break}}}for(let l=m.setting.render.drawOpMin;l<Math.min(i.length,m.setting.render.drawOpMax);++l){let h=i[l];if(h.transform.enable&&h.enable&&h.castShadow&&!h.isDestroyed){h.preInit(this._rendererType)||h.nodeUpdate(e,this._rendererType,r.rendererPassState,o);for(let u of h.materials){let c=u.getPass(this._rendererType);if(!(!c||c.length==0))for(let f of c){const g=f;g.pipeline&&(g.setUniformFloat("cameraFar",t.far),g.setUniformVector3("lightWorldPos",t.transform.worldPosition),g.materialDataUniformBuffer.apply())}}h.renderPass(e,this.passType,r)}}}}}class ru extends $e{constructor(e,t,r=X.depth32float,i=4){super(e,t,i),this.format=r,this.mipmapCount=1,this.init()}internalCreateBindingLayoutDesc(){this.textureBindingLayout.sampleType="depth",this.textureBindingLayout.viewDimension="2d-array",this.samplerBindingLayout.type="filtering",this.sampler_comparisonBindingLayout.type="comparison"}internalCreateTexture(){this.textureDescriptor={format:this.format,size:{width:this.width,height:this.height,depthOrArrayLayers:this.numberLayer},dimension:"2d",usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING},this.gpuTexture=this.getGPUTexture()}internalCreateView(){this.viewDescriptor={dimension:"2d-array"},this.view=this.getGPUView()}internalCreateSampler(){this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})}}class iu extends Fr{shadowPassCount;depth2DArrayTexture;rendererPassStates;_forceUpdate=!1;constructor(){super(),this.setShadowMap(m.setting.shadow.shadowSize,Zt.Cascades),this.passType=H.SHADOW}setShadowMap(e,t){this.rendererPassStates=[],this.depth2DArrayTexture=new ru(e,e,X.depth32float,8),me.getInstance().attached(this.depth2DArrayTexture,this);for(let r=0;r<8;r++){let i=new Ze([],[]);const a=new Ae(e,e,X.depth32float,!1);a.name=`shadowDepthTexture_${r}`,i.depthTexture=a,i.label="shadowRender",i.customSize=!0,i.depthCleanValue=1;let o=Te.createRendererPassState(i);this.rendererPassStates[r]=o}}render(e,t){let r=m.setting.shadow;if(!r.enable)return;let i=e.camera,a=e.scene;if(this.shadowPassCount=0,!r.needUpdate||be.frame%r.updateFrameRate!=0)return;let o=wt.getDirectShadowLightWhichScene(a),n=r.shadowSize;const l=Zt.Cascades;for(let h of o){const u=h;let c=u.shadowIndex;this.rendererPassState=this.rendererPassStates[c],n=this.rendererPassState.depthTexture.width;let f=G.instance.getRenderShaderCollect(e);for(const g of f){let p=g[1];for(const A of p){let U=A[1];if(!U.isDestroyed&&U.preInit(this._rendererType)){U.nodeUpdate(e,this._rendererType,this.rendererPassState,null);break}}}if(u.castShadow&&u.needUpdateShadow||this._forceUpdate||u.castShadow&&r.autoUpdate)if(u.needUpdateShadow=!1,i.enableCSM&&c==0)for(let g=0;g<l;g++){this.rendererPassState=this.rendererPassStates[g];let p=i.csm.children[g],A=i.getCSMShadowWorldExtents(g);this.poseShadowCamera(i,u.direction,p.shadowCamera,A,p.bound.center),this.renderShadow(e,p.shadowCamera,t,this.rendererPassState),this.copyDepthTexture(this.rendererPassState.depthTexture,this.depth2DArrayTexture,g,n)}else{i.enableCSM&&(c+=l-1);let g=i.getShadowWorldExtents();this.rendererPassState=this.rendererPassStates[c],this.poseShadowCamera(i,u.direction,u.shadowCamera,g,i.lookTarget),this.renderShadow(e,u.shadowCamera,t,this.rendererPassState),this.copyDepthTexture(this.rendererPassState.depthTexture,this.depth2DArrayTexture,c,n)}}this._forceUpdate=!1}copyDepthTexture(e,t,r,i){let a=F.beginCommandEncoder();a.copyTextureToTexture({texture:e.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:t.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:r}},{width:i,height:i,depthOrArrayLayers:1}),F.endCommandEncoder(a)}_shadowPos=new d;_shadowCameraTarget=new d;poseShadowCamera(e,t,r,i,a){this._shadowPos.copy(t).normalize(e.far),a.add(this._shadowPos,this._shadowCameraTarget),a.subtract(this._shadowPos,this._shadowPos),r.transform.lookAt(this._shadowPos,this._shadowCameraTarget),r.orthoOffCenter(-i,i,-i,i,e.near,e.far*2)}compute(){}renderShadow(e,t,r,i){let a=G.instance.getRenderNodes(e.scene,t),o=F.beginCommandEncoder(),n=F.beginRenderPass(o,i);t.transform.updateWorldMatrix(),Qo.enable&&(r.update(t,e.scene),r.collect(a,t)),ne.updateCameraGroup(t),F.bindCamera(n,t);let l=this.renderShadowBundleOp(e,t,i),h=this.renderShadowBundleTr(e,t,i);l.length>0&&n.executeBundles(l),this.drawShadowRenderNodes(e,t,n,a.opaqueList),h.length>0&&n.executeBundles(h),this.drawShadowRenderNodes(e,t,n,a.transparentList),F.endPass(n),F.endCommandEncoder(o)}renderShadowBundleOp(e,t,r){let i=G.instance.getOpRenderGroup(e.scene);if(i){let a=[];return i.renderGroup.forEach(o=>{if(o.bundleMap.has(this._rendererType))a.push(o.bundleMap.get(this._rendererType));else{let n=F.recordBundleEncoder(r.renderBundleEncoderDescriptor);this.recordShadowRenderBundleNode(e,t,n,o.renderNodes);let l=n.finish();o.bundleMap.set(this._rendererType,l),a.push(l)}}),a}return[]}renderShadowBundleTr(e,t,r){let i=G.instance.getTrRenderGroup(e.scene);if(i){let a=[];return i.renderGroup.forEach(o=>{if(o.bundleMap.has(this._rendererType))a.push(o.bundleMap.get(this._rendererType));else{let n=F.recordBundleEncoder(r.renderBundleEncoderDescriptor);this.recordShadowRenderBundleNode(e,t,n,o.renderNodes);let l=n.finish();o.bundleMap.set(this._rendererType,l),a.push(l)}}),a}return[]}recordShadowRenderBundleNode(e,t,r,i,a){if(ne.updateCameraGroup(t),F.bindCamera(r,t),i){F.bindGeometryBuffer(r,i[0].geometry);for(let o=0;o<i.length;++o){let n=i[o];n.transform.enable&&n.recordRenderPass2(e,this._rendererType,this.rendererPassState,a,r)}}}drawShadowRenderNodes(e,t,r,i,a){if(ne.updateCameraGroup(t),F.bindCamera(r,t),i)for(let o=m.setting.render.drawOpMin;o<Math.min(i.length,m.setting.render.drawOpMax);++o){let n=i[o];n.transform.enable&&n.enable&&n.castShadow&&(n.isDestroyed||(n.preInit(this._rendererType)||n.nodeUpdate(e,this._rendererType,this.rendererPassState,a),n.renderPass2(e,this._rendererType,this.rendererPassState,a,r)))}}}class au extends Fr{zBufferTexture;useRenderBundle=!1;shadowPassCount;zCullingCompute;constructor(){super(),this.passType=H.DEPTH;let e=R.presentationSize,t=1;this.zBufferTexture=Bt.createRTTexture(_r.zBufferTexture_NAME,Math.floor(e[0]*t),Math.floor(e[1]*t),X.rgba16float,!1);let r=new Qe;r.clearValue=[0,0,0,0],r.loadOp="clear";let i=new Ze([],[],Bt.createRTTexture(_r.zPreDepthTexture_NAME,Math.floor(e[0]),Math.floor(e[1]),X.depth32float,!1),null,!1);this.setRenderStates(i)}render(e,t){let r=e.camera,i=e.scene;F.cleanCache(),Ye.start("DepthPass Renderer");let a=i;this.rendererPassState.camera3D=r;let o=G.instance.getRenderNodes(a,r);this.compute(e,t);let n=this.renderBundleOp(e,o,t),l=[],h=F.beginCommandEncoder(),u=F.beginRenderPass(h,this.rendererPassState);n.length>0&&u.executeBundles(n);let c=G.instance.getRenderShaderCollect(e);for(const f of c){let g=f[1];for(const p of g){let A=p[1];if(!A.isDestroyed&&A.preInit(this._rendererType)){A.nodeUpdate(e,this._rendererType,this.rendererPassState,null);break}}}this.drawRenderNodes(e,u,h,o.opaqueList,t),l.length>0&&u.executeBundles(l),F.endPass(u),F.endCommandEncoder(h),Ye.end("DepthPass Renderer")}drawRenderNodes(e,t,r,i,a,o){F.bindCamera(t,e.camera);for(let n=m.setting.render.drawOpMin;n<Math.min(i.length,m.setting.render.drawOpMax);++n){let l=i[n];l.transform.enable&&l.enable&&(l.isDestroyed||(l.preInit(this._rendererType)||l.nodeUpdate(e,this._rendererType,this.rendererPassState),l.renderPass2(e,this._rendererType,this.rendererPassState,o,t)))}}}class su{map;passRendererList;constructor(){this.map=new Map,this.passRendererList=[]}addRenderer(e){this.map.has(e.passType)?console.error("same renderer pass repeat!"):(this.map.set(e.passType,e),e.passType<=8&&this.addPassRenderer(e))}getRenderer(e){return this.map.get(e)}addPassRenderer(e){this.passRendererList.push(e)}getAllRenderer(){return this.map}getAllPassRenderer(){return this.passRendererList}}class ou extends Fr{finalQuadView;postList;constructor(){super(),this._rendererType=H.POST,this.postList=new Map,this.initRenderer()}initRenderer(){O.register("FullQuad_vert_wgsl",Sl),this.finalQuadView=new yo("Quad_vert_wgsl","Quad_frag_wgsl",new Ze([],[]),0,!1)}attachPost(e,t){t.postRenderer=this;let r=t.constructor.name;this.postList.get(r)||(this.postList.set(r,t),t.onAttach(e))}detachPost(e,t){let r=t.constructor.name,i=this.postList.get(r);return i&&(this.postList.delete(r),t.onDetach(e),t.postRenderer=null),i!=null}render(e){this.postList.forEach(r=>{r.enable&&r.compute(e)});let t=F.beginCommandEncoder();this.postList.forEach(r=>{r.enable&&r.render(e,t)}),F.endCommandEncoder(t)}presentContent(e,t){let r=F.beginCommandEncoder();this.finalQuadView.renderToViewQuad(e,this.finalQuadView,r,t),F.endCommandEncoder(r)}}class Et{enable=!0;postRenderer;rtViewQuad;virtualTexture;constructor(){this.rtViewQuad=new Map,this.virtualTexture=new Map,R.addEventListener(Yr.RESIZE,this.onResize,this)}createRTTexture(e,t,r,i,a=!1,o=0){let n=Bt.createRTTexture(e,t,r,i,a,o);return n.name=e,this.virtualTexture.set(e,n),me.getInstance().attached(n,this),n}createViewQuad(e,t,r,i=0){let a=Bt.createViewQuad(e,"Quad_vert_wgsl",t,r,i);return this.rtViewQuad.set(e,a),a}getOutTexture(){let e,t=F.lastRenderPassState.renderTargets;return t.length>0?e=t[0]:e=Bt.getTexture(_r.colorBufferTex_NAME),e}autoSetColorTexture(e,t){let r=this.getOutTexture();t.setSamplerTexture(e,r)}compute(e){}onAttach(e){}onDetach(e){}onResize(){}render(e,t){this.compute(e),this.rtViewQuad.forEach((r,i)=>{let a=F.lastRenderPassState.getLastRenderTexture();r.renderToViewQuad(e,r,t,a)})}destroy(e){this.postRenderer=null;for(let t=0;t<this.rtViewQuad.size;t++)this.rtViewQuad.values[t].destroy(e);this.rtViewQuad.clear(),this.rtViewQuad=null;for(let t=0;t<this.virtualTexture.size;t++){const r=this.virtualTexture.values[t];me.getInstance().detached(r,this),r.destroy(e)}}}class Ro extends q{up_camera;down_camera;left_camera;right_camera;front_camera;back_camera;_near;_far;constructor(e=.001,t=1e4,r=90,i=!1){super(),this.initCubeCamera(e,t,r,i)}initCubeCamera(e,t,r=90,i=!1){this.up_camera=je.createCamera3DObject(this,"up"),this.down_camera=je.createCamera3DObject(this,"down"),this.left_camera=je.createCamera3DObject(this,"left"),this.right_camera=je.createCamera3DObject(this,"right"),this.front_camera=je.createCamera3DObject(this,"front"),this.back_camera=je.createCamera3DObject(this,"back"),this.up_camera.isShadowCamera=i,this.down_camera.isShadowCamera=i,this.left_camera.isShadowCamera=i,this.right_camera.isShadowCamera=i,this.front_camera.isShadowCamera=i,this.back_camera.isShadowCamera=i;let a=1;this.up_camera.perspective(r,a,e,t),this.up_camera.lookAt(d.ZERO,d.UP,d.DOWN),this.down_camera.perspective(r,a,e,t),this.down_camera.lookAt(d.ZERO,d.DOWN,d.DOWN),this.left_camera.perspective(r,a,e,t),this.left_camera.lookAt(d.ZERO,d.LEFT),this.right_camera.perspective(r,a,e,t),this.right_camera.lookAt(d.ZERO,d.RIGHT),this.front_camera.perspective(r,a,e,t),this.front_camera.lookAt(d.ZERO,d.FORWARD),this.back_camera.perspective(r,a,e,t),this.back_camera.lookAt(d.ZERO,d.BACK),this.up_camera.type=He.shadow,this.down_camera.type=He.shadow,this.left_camera.type=He.shadow,this.right_camera.type=He.shadow,this.front_camera.type=He.shadow,this.back_camera.type=He.shadow}set near(e){this._near=e,this.up_camera.near=e,this.down_camera.near=e,this.left_camera.near=e,this.right_camera.near=e,this.front_camera.near=e,this.back_camera.near=e}get near(){return this._near}set far(e){this._far=e,this.up_camera.far=e,this.down_camera.far=e,this.left_camera.far=e,this.right_camera.far=e,this.front_camera.far=e,this.back_camera.far=e}get far(){return this._far}}let nu=`
|
|
6035
|
+
`;class qh extends _r{maxNumLightsPerCluster=64;clusterPix=1;clusterLightingBuffer;_currentLightCount=0;_clusterGenerateCompute;_clusterLightingCompute;_useCamera;resize=!1;constructor(e){super(),this.passType=H.Cluster,this.initCompute(e)}initCompute(e){this._clusterGenerateCompute=new ue(jh),this._clusterLightingCompute=new ue(Kh);let t=R.presentationSize,r=dt.clusterTileX*dt.clusterTileY*dt.clusterTileZ,i=e.camera,a=i.near,o=i.far;this.clusterLightingBuffer=new Hh(r,this.maxNumLightsPerCluster),this.clusterLightingBuffer.update(t[0],t[1],this.clusterPix,dt.clusterTileX,dt.clusterTileY,dt.clusterTileZ,0,this.maxNumLightsPerCluster,a,o),this._clusterGenerateCompute.setUniformBuffer("clustersUniform",this.clusterLightingBuffer.clustersUniformBuffer),this._clusterGenerateCompute.setStorageBuffer("clusterBuffer",this.clusterLightingBuffer.clusterBuffer);let n=ne.getLightEntries(e.scene);this._clusterLightingCompute.setStorageBuffer("models",ne.modelMatrixBindGroup.matrixBufferDst),this._clusterLightingCompute.setUniformBuffer("clustersUniform",this.clusterLightingBuffer.clustersUniformBuffer),this._clusterLightingCompute.setStorageBuffer("clusterBuffer",this.clusterLightingBuffer.clusterBuffer),this._clusterLightingCompute.setStorageBuffer("lightBuffer",n.storageGPUBuffer),this._clusterLightingCompute.setStorageBuffer("lightAssignBuffer",this.clusterLightingBuffer.lightAssignBuffer),this._clusterLightingCompute.setStorageBuffer("assignTable",this.clusterLightingBuffer.assignTableBuffer),this.resize=!0}render(e,t){let r=e.scene,i=G.instance.getLights(r);if(this._useCamera!=e.camera){this._useCamera=e.camera;let n=ne.getCameraGroup(this._useCamera);this._clusterGenerateCompute.setUniformBuffer("globalUniform",n.uniformGPUBuffer),this._clusterLightingCompute.setUniformBuffer("globalUniform",n.uniformGPUBuffer)}this._currentLightCount!=i.length&&(this._currentLightCount=i.length,this.clusterLightingBuffer.clustersUniformBuffer.setFloat("numLights",i.length),this.clusterLightingBuffer.clustersUniformBuffer.apply(),this._clusterGenerateCompute.workerSizeX=dt.clusterTileZ,this._clusterLightingCompute.workerSizeX=dt.clusterTileZ);let a=R.presentationSize;this.clusterLightingBuffer.update(a[0],a[1],this.clusterPix,dt.clusterTileX,dt.clusterTileY,dt.clusterTileZ,i.length,this.maxNumLightsPerCluster,e.camera.near,e.camera.far),this.resize=!1;let o=F.beginCommandEncoder();F.computeCommand(o,[this._clusterGenerateCompute,this._clusterLightingCompute]),F.endCommandEncoder(o)}}class Ae extends $e{resolveTarget;sampleCount;clone(){let e=new Ae(this.width,this.height,this.format,this.useMipmap,this.usage,this.numberLayer,this.sampleCount);return e.name="clone_"+e.name,e}constructor(e,t,r=X.rgba8unorm,i=!1,a,o=1,n=0,l=1){super(e,t,o),R.device,this.name=It(),this.useMipmap=i,this.sampleCount=n,this.format=r,this.numberLayer=o,this.mipmapCount=l,a!=null?this.usage=a:this.usage=a|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST,this.resize(e,t)}resize(e,t){let r=R.device;this.gpuTexture&&($e.delayDestroyTexture(this.gpuTexture),this.gpuTexture=null,this.view=null),this.width=e,this.height=t,this.createTextureDescriptor(e,t,this.mipmapCount,this.format,this.usage,this.numberLayer,this.sampleCount),this.useMipmap=!1,this.visibility=GPUShaderStage.COMPUTE|GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,this.format==X.rgba32float?(this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="unfilterable-float",this.gpuSampler=r.createSampler({})):this.format==X.depth32float?(this.samplerBindingLayout.type="filtering",this.sampler_comparisonBindingLayout.type="comparison",this.textureBindingLayout.sampleType="depth",this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})):this.format==X.depth24plus?(this.samplerBindingLayout={type:"filtering"},this.sampler_comparisonBindingLayout={type:"comparison"},this.textureBindingLayout.sampleType="depth",this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})):(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float",this.sampleCount>0&&(this.textureBindingLayout.multisampled=!0),this.minFilter="linear",this.magFilter="linear",this.mipmapFilter="nearest",this.maxAnisotropy=1,this.addressModeU=Pt.mirror_repeat,this.addressModeV=Pt.mirror_repeat,this.gpuSampler=r.createSampler(this)),this._textureChange=!0}create(e,t,r=!0){let i=R.device;const a=e*4;let o=new Float32Array(e*t*4);const n=i.createBuffer({size:o.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(n,0,o);const l=F.beginCommandEncoder();l.copyBufferToTexture({buffer:n,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(l)}readTextureToImage(){let e=R.device,t=R.windowWidth,r=R.windowHeight,i=new Float32Array(t*r*4);const a=e.createBuffer({size:i.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});return F.beginCommandEncoder().copyTextureToBuffer({texture:this.getGPUTexture()},{buffer:a},[t,r]),a.getMappedRange(0,i.byteLength)}}class $h extends q{up_camera;down_camera;left_camera;right_camera;front_camera;back_camera;set label(e){this.up_camera.name=e+"up",this.down_camera.name=e+"down",this.left_camera.name=e+"left",this.right_camera.name=e+"right",this.front_camera.name=e+"front",this.back_camera.name=e+"back"}constructor(e=.001,t=1e4,r=90,i=!1){super(),this.initCubeCamera(e,t,r,i)}initCubeCamera(e,t,r=90,i=!1){this.up_camera=je.createCamera3DObject(this,"up"),this.down_camera=je.createCamera3DObject(this,"down"),this.left_camera=je.createCamera3DObject(this,"left"),this.right_camera=je.createCamera3DObject(this,"right"),this.front_camera=je.createCamera3DObject(this,"front"),this.back_camera=je.createCamera3DObject(this,"back"),this.up_camera.isShadowCamera=i,this.down_camera.isShadowCamera=i,this.left_camera.isShadowCamera=i,this.right_camera.isShadowCamera=i,this.front_camera.isShadowCamera=i,this.back_camera.isShadowCamera=i;let a=1;this.up_camera.perspective(r,a,e,t),this.up_camera.lookAt(d.ZERO,d.UP,d.DOWN),this.up_camera.object3D.scaleX=-1,this.up_camera.object3D.rotationY=180,this.down_camera.perspective(r,a,e,t),this.down_camera.lookAt(d.ZERO,d.DOWN,d.DOWN),this.down_camera.object3D.scaleX=-1,this.down_camera.object3D.rotationY=180,this.left_camera.perspective(r,a,e,t),this.left_camera.lookAt(d.ZERO,d.LEFT),this.left_camera.object3D.scaleX=-1,this.right_camera.perspective(r,a,e,t),this.right_camera.lookAt(d.ZERO,d.RIGHT),this.right_camera.object3D.scaleX=-1,this.front_camera.perspective(r,a,e,t),this.front_camera.lookAt(d.ZERO,d.FORWARD),this.front_camera.object3D.scaleX=-1,this.back_camera.perspective(r,a,e,t),this.back_camera.lookAt(d.ZERO,d.BACK),this.back_camera.object3D.scaleX=-1,this.up_camera.type=He.shadow,this.down_camera.type=He.shadow,this.left_camera.type=He.shadow,this.right_camera.type=He.shadow,this.front_camera.type=He.shadow,this.back_camera.type=He.shadow}}class eu extends $e{constructor(e,t,r){super(e,t,r),this.format=X.depth32float,this.mipmapCount=1,this.init()}internalCreateBindingLayoutDesc(){this.textureBindingLayout.sampleType="depth",this.textureBindingLayout.viewDimension="cube-array",this.samplerBindingLayout.type="filtering",this.sampler_comparisonBindingLayout.type="comparison"}internalCreateTexture(){this.textureDescriptor={format:this.format,size:{width:this.width,height:this.height,depthOrArrayLayers:6*this.numberLayer},dimension:"2d",usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING},this.gpuTexture=this.getGPUTexture()}internalCreateView(){this.viewDescriptor={dimension:"cube-array"},this.view=this.getGPUView()}internalCreateSampler(){this.gpuSampler=R.device.createSampler({minFilter:Kr.linear,magFilter:Kr.linear}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})}}class tu extends _r{shadowPassCount;_forceUpdate=!1;_shadowCameraDic;shadowCamera;cubeArrayTexture;colorTexture;shadowSize=1024;constructor(){super(),this.passType=H.POINT_SHADOW,this._shadowCameraDic=new Map,this.cubeArrayTexture=new eu(this.shadowSize,this.shadowSize,8),this.colorTexture=new Ae(this.shadowSize,this.shadowSize,X.bgra8unorm,!1),me.getInstance().attached(this.cubeArrayTexture,this)}getShadowCamera(e,t){let r;if(this._shadowCameraDic.has(t))r=this._shadowCameraDic.get(t);else{let i=new $h(e.camera.near,e.camera.far,90,!0);i.label=t.name;let a=[],o=[];for(let n=0;n<6;n++){let l=new Ae(this.shadowSize,this.shadowSize,this.cubeArrayTexture.format,!1),h=new Ze([this.colorTexture],[new Qe]);l.name="shadowDepthTexture_"+t.name+n+"_face",a[n]=l,h.depthTexture=l,h.label="shadowRender",h.customSize=!0,o[n]=this.getRenderContext(h)}r={cubeCamera:i,depthTexture:a,renderContext:o},this._shadowCameraDic.set(t,r)}return r}render(e,t){if(!m.setting.shadow.enable)return;this.shadowPassCount=0,e.camera;let r=e.scene,i=wt.getPointShadowLightWhichScene(r),a=i.length;for(let o=0;o<a;o++){let n=i[o];if(n.lightData.lightType!=Xe.DirectionLight&&n.lightData.castShadowIndex>-1&&(n.needUpdateShadow||this._forceUpdate||be.frame<5||n.realTimeShadow)){n.needUpdateShadow=!1;let l=this.getShadowCamera(e,n),h=n.transform.worldPosition;l.cubeCamera.x=h.x,l.cubeCamera.y=h.y,l.cubeCamera.z=h.z;let u;l.cubeCamera.transform.updateWorldMatrix(!0),t.update(l.cubeCamera.right_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.right_camera),this.renderSceneOnce(0,l,e,l.cubeCamera.right_camera,u,t),t.update(l.cubeCamera.left_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.left_camera),this.renderSceneOnce(1,l,e,l.cubeCamera.left_camera,u,t),t.update(l.cubeCamera.up_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.up_camera),this.renderSceneOnce(2,l,e,l.cubeCamera.up_camera,u,t),t.update(l.cubeCamera.down_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.down_camera),this.renderSceneOnce(3,l,e,l.cubeCamera.down_camera,u,t),t.update(l.cubeCamera.front_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.front_camera),this.renderSceneOnce(4,l,e,l.cubeCamera.front_camera,u,t),t.update(l.cubeCamera.back_camera,r),u=G.instance.getRenderNodes(r,l.cubeCamera.back_camera),this.renderSceneOnce(5,l,e,l.cubeCamera.back_camera,u,t);let c=F.beginCommandEncoder();for(let f=0;f<6;f++)c.copyTextureToTexture({texture:l.depthTexture[f].getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:this.cubeArrayTexture.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:n.shadowIndex*6+f}},{width:this.shadowSize,height:this.shadowSize,depthOrArrayLayers:1});F.endCommandEncoder(c)}}this._forceUpdate=!1}renderSceneOnce(e,t,r,i,a,o){let n=t.renderContext[e];n.clean(),n.beginOpaqueRenderPass(),n.encoder.setViewport(0,0,this.shadowSize,this.shadowSize,0,1),n.encoder.setScissorRect(0,0,this.shadowSize,this.shadowSize),i.onUpdate(),i.transform.updateWorldMatrix(!0);for(const l of a.opaqueList){let h=l;if(!h.isDestroyed&&h.preInit(this._rendererType)){h.nodeUpdate(r,this._rendererType,n.rendererPassState,null);break}}this.drawShadowRenderNodes(r,i,n,a.opaqueList,o),this.drawShadowRenderNodes(r,i,n,a.transparentList,o),n.endRenderPass()}drawShadowRenderNodes(e,t,r,i,a){ne.updateCameraGroup(t),F.bindCamera(r.encoder,t),this.drawNodes(e,t,r,i,a,null)}drawNodes(e,t,r,i,a,o){let n=G.instance.getRenderShaderCollect(e);if(n){for(const l of n){let h=l[1];for(const u of h){let c=u[1];if(!c.isDestroyed&&c.preInit(this._rendererType)){c.nodeUpdate(e,this._rendererType,r.rendererPassState,o);break}}}for(let l=m.setting.render.drawOpMin;l<Math.min(i.length,m.setting.render.drawOpMax);++l){let h=i[l];if(h.transform.enable&&h.enable&&h.castShadow&&!h.isDestroyed){h.preInit(this._rendererType)||h.nodeUpdate(e,this._rendererType,r.rendererPassState,o);for(let u of h.materials){let c=u.getPass(this._rendererType);if(!(!c||c.length==0))for(let f of c){const g=f;g.pipeline&&(g.setUniformFloat("cameraFar",t.far),g.setUniformVector3("lightWorldPos",t.transform.worldPosition),g.materialDataUniformBuffer.apply())}}h.renderPass(e,this.passType,r)}}}}}class ru extends $e{constructor(e,t,r=X.depth32float,i=4){super(e,t,i),this.format=r,this.mipmapCount=1,this.init()}internalCreateBindingLayoutDesc(){this.textureBindingLayout.sampleType="depth",this.textureBindingLayout.viewDimension="2d-array",this.samplerBindingLayout.type="filtering",this.sampler_comparisonBindingLayout.type="comparison"}internalCreateTexture(){this.textureDescriptor={format:this.format,size:{width:this.width,height:this.height,depthOrArrayLayers:this.numberLayer},dimension:"2d",usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING},this.gpuTexture=this.getGPUTexture()}internalCreateView(){this.viewDescriptor={dimension:"2d-array"},this.view=this.getGPUView()}internalCreateSampler(){this.gpuSampler=R.device.createSampler({}),this.gpuSampler_comparison=R.device.createSampler({compare:"less",label:"sampler_comparison"})}}class iu extends _r{shadowPassCount;depth2DArrayTexture;rendererPassStates;_forceUpdate=!1;constructor(){super(),this.setShadowMap(m.setting.shadow.shadowSize,Zt.Cascades),this.passType=H.SHADOW}setShadowMap(e,t){this.rendererPassStates=[],this.depth2DArrayTexture=new ru(e,e,X.depth32float,8),me.getInstance().attached(this.depth2DArrayTexture,this);for(let r=0;r<8;r++){let i=new Ze([],[]);const a=new Ae(e,e,X.depth32float,!1);a.name=`shadowDepthTexture_${r}`,i.depthTexture=a,i.label="shadowRender",i.customSize=!0,i.depthCleanValue=1;let o=Te.createRendererPassState(i);this.rendererPassStates[r]=o}}render(e,t){let r=m.setting.shadow;if(!r.enable)return;let i=e.camera,a=e.scene;if(this.shadowPassCount=0,!r.needUpdate||be.frame%r.updateFrameRate!=0)return;let o=wt.getDirectShadowLightWhichScene(a),n=r.shadowSize;const l=Zt.Cascades;for(let h of o){const u=h;let c=u.shadowIndex;this.rendererPassState=this.rendererPassStates[c],n=this.rendererPassState.depthTexture.width;let f=G.instance.getRenderShaderCollect(e);for(const g of f){let p=g[1];for(const A of p){let U=A[1];if(!U.isDestroyed&&U.preInit(this._rendererType)){U.nodeUpdate(e,this._rendererType,this.rendererPassState,null);break}}}if(u.castShadow&&u.needUpdateShadow||this._forceUpdate||u.castShadow&&r.autoUpdate)if(u.needUpdateShadow=!1,i.enableCSM&&c==0)for(let g=0;g<l;g++){this.rendererPassState=this.rendererPassStates[g];let p=i.csm.children[g],A=i.getCSMShadowWorldExtents(g);this.poseShadowCamera(i,u.direction,p.shadowCamera,A,p.bound.center),this.renderShadow(e,p.shadowCamera,t,this.rendererPassState),this.copyDepthTexture(this.rendererPassState.depthTexture,this.depth2DArrayTexture,g,n)}else{i.enableCSM&&(c+=l-1);let g=i.getShadowWorldExtents();this.rendererPassState=this.rendererPassStates[c],this.poseShadowCamera(i,u.direction,u.shadowCamera,g,i.lookTarget),this.renderShadow(e,u.shadowCamera,t,this.rendererPassState),this.copyDepthTexture(this.rendererPassState.depthTexture,this.depth2DArrayTexture,c,n)}}this._forceUpdate=!1}copyDepthTexture(e,t,r,i){let a=F.beginCommandEncoder();a.copyTextureToTexture({texture:e.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:0}},{texture:t.getGPUTexture(),mipLevel:0,origin:{x:0,y:0,z:r}},{width:i,height:i,depthOrArrayLayers:1}),F.endCommandEncoder(a)}_shadowPos=new d;_shadowCameraTarget=new d;poseShadowCamera(e,t,r,i,a){this._shadowPos.copy(t).normalize(e.far),a.add(this._shadowPos,this._shadowCameraTarget),a.subtract(this._shadowPos,this._shadowPos),r.transform.lookAt(this._shadowPos,this._shadowCameraTarget),r.orthoOffCenter(-i,i,-i,i,e.near,e.far*2)}compute(){}renderShadow(e,t,r,i){let a=G.instance.getRenderNodes(e.scene,t),o=F.beginCommandEncoder(),n=F.beginRenderPass(o,i);t.transform.updateWorldMatrix(),Qo.enable&&(r.update(t,e.scene),r.collect(a,t)),ne.updateCameraGroup(t),F.bindCamera(n,t);let l=this.renderShadowBundleOp(e,t,i),h=this.renderShadowBundleTr(e,t,i);l.length>0&&n.executeBundles(l),this.drawShadowRenderNodes(e,t,n,a.opaqueList),h.length>0&&n.executeBundles(h),this.drawShadowRenderNodes(e,t,n,a.transparentList),F.endPass(n),F.endCommandEncoder(o)}renderShadowBundleOp(e,t,r){let i=G.instance.getOpRenderGroup(e.scene);if(i){let a=[];return i.renderGroup.forEach(o=>{if(o.bundleMap.has(this._rendererType))a.push(o.bundleMap.get(this._rendererType));else{let n=F.recordBundleEncoder(r.renderBundleEncoderDescriptor);this.recordShadowRenderBundleNode(e,t,n,o.renderNodes);let l=n.finish();o.bundleMap.set(this._rendererType,l),a.push(l)}}),a}return[]}renderShadowBundleTr(e,t,r){let i=G.instance.getTrRenderGroup(e.scene);if(i){let a=[];return i.renderGroup.forEach(o=>{if(o.bundleMap.has(this._rendererType))a.push(o.bundleMap.get(this._rendererType));else{let n=F.recordBundleEncoder(r.renderBundleEncoderDescriptor);this.recordShadowRenderBundleNode(e,t,n,o.renderNodes);let l=n.finish();o.bundleMap.set(this._rendererType,l),a.push(l)}}),a}return[]}recordShadowRenderBundleNode(e,t,r,i,a){if(ne.updateCameraGroup(t),F.bindCamera(r,t),i){F.bindGeometryBuffer(r,i[0].geometry);for(let o=0;o<i.length;++o){let n=i[o];n.transform.enable&&n.recordRenderPass2(e,this._rendererType,this.rendererPassState,a,r)}}}drawShadowRenderNodes(e,t,r,i,a){if(ne.updateCameraGroup(t),F.bindCamera(r,t),i)for(let o=m.setting.render.drawOpMin;o<Math.min(i.length,m.setting.render.drawOpMax);++o){let n=i[o];n.transform.enable&&n.enable&&n.castShadow&&(n.isDestroyed||(n.preInit(this._rendererType)||n.nodeUpdate(e,this._rendererType,this.rendererPassState,a),n.renderPass2(e,this._rendererType,this.rendererPassState,a,r)))}}}class au extends _r{zBufferTexture;useRenderBundle=!1;shadowPassCount;zCullingCompute;constructor(){super(),this.passType=H.DEPTH;let e=R.presentationSize,t=1;this.zBufferTexture=vt.createRTTexture(Sr.zBufferTexture_NAME,Math.floor(e[0]*t),Math.floor(e[1]*t),X.rgba16float,!1);let r=new Qe;r.clearValue=[0,0,0,0],r.loadOp="clear";let i=new Ze([],[],vt.createRTTexture(Sr.zPreDepthTexture_NAME,Math.floor(e[0]),Math.floor(e[1]),X.depth32float,!1),null,!1);this.setRenderStates(i)}render(e,t){let r=e.camera,i=e.scene;F.cleanCache(),Ye.start("DepthPass Renderer");let a=i;this.rendererPassState.camera3D=r;let o=G.instance.getRenderNodes(a,r);this.compute(e,t);let n=this.renderBundleOp(e,o,t),l=[],h=F.beginCommandEncoder(),u=F.beginRenderPass(h,this.rendererPassState);n.length>0&&u.executeBundles(n);let c=G.instance.getRenderShaderCollect(e);for(const f of c){let g=f[1];for(const p of g){let A=p[1];if(!A.isDestroyed&&A.preInit(this._rendererType)){A.nodeUpdate(e,this._rendererType,this.rendererPassState,null);break}}}this.drawRenderNodes(e,u,h,o.opaqueList,t),l.length>0&&u.executeBundles(l),F.endPass(u),F.endCommandEncoder(h),Ye.end("DepthPass Renderer")}drawRenderNodes(e,t,r,i,a,o){F.bindCamera(t,e.camera);for(let n=m.setting.render.drawOpMin;n<Math.min(i.length,m.setting.render.drawOpMax);++n){let l=i[n];l.transform.enable&&l.enable&&(l.isDestroyed||(l.preInit(this._rendererType)||l.nodeUpdate(e,this._rendererType,this.rendererPassState),l.renderPass2(e,this._rendererType,this.rendererPassState,o,t)))}}}class su{map;passRendererList;constructor(){this.map=new Map,this.passRendererList=[]}addRenderer(e){this.map.has(e.passType)?console.error("same renderer pass repeat!"):(this.map.set(e.passType,e),e.passType<=8&&this.addPassRenderer(e))}getRenderer(e){return this.map.get(e)}addPassRenderer(e){this.passRendererList.push(e)}getAllRenderer(){return this.map}getAllPassRenderer(){return this.passRendererList}}class ou extends _r{finalQuadView;postList;constructor(){super(),this._rendererType=H.POST,this.postList=new Map,this.initRenderer()}initRenderer(){O.register("FullQuad_vert_wgsl",Sl),this.finalQuadView=new yo("Quad_vert_wgsl","Quad_frag_wgsl",new Ze([],[]),0,!1)}attachPost(e,t){t.postRenderer=this;let r=t.constructor.name;this.postList.get(r)||(this.postList.set(r,t),t.onAttach(e))}detachPost(e,t){let r=t.constructor.name,i=this.postList.get(r);return i&&(this.postList.delete(r),t.onDetach(e),t.postRenderer=null),i!=null}render(e){this.postList.forEach(r=>{r.enable&&r.compute(e)});let t=F.beginCommandEncoder();this.postList.forEach(r=>{r.enable&&r.render(e,t)}),F.endCommandEncoder(t)}presentContent(e,t){let r=F.beginCommandEncoder();this.finalQuadView.renderToViewQuad(e,this.finalQuadView,r,t),F.endCommandEncoder(r)}}class Et{enable=!0;postRenderer;rtViewQuad;virtualTexture;constructor(){this.rtViewQuad=new Map,this.virtualTexture=new Map,R.addEventListener(Yr.RESIZE,this.onResize,this)}createRTTexture(e,t,r,i,a=!1,o=0){let n=vt.createRTTexture(e,t,r,i,a,o);return n.name=e,this.virtualTexture.set(e,n),me.getInstance().attached(n,this),n}createViewQuad(e,t,r,i=0){let a=vt.createViewQuad(e,"Quad_vert_wgsl",t,r,i);return this.rtViewQuad.set(e,a),a}getOutTexture(){let e,t=F.lastRenderPassState.renderTargets;return t.length>0?e=t[0]:e=vt.getTexture(Sr.colorBufferTex_NAME),e}autoSetColorTexture(e,t){let r=this.getOutTexture();t.setSamplerTexture(e,r)}compute(e){}onAttach(e){}onDetach(e){}onResize(){}render(e,t){this.compute(e),this.rtViewQuad.forEach((r,i)=>{let a=F.lastRenderPassState.getLastRenderTexture();r.renderToViewQuad(e,r,t,a)})}destroy(e){this.postRenderer=null;for(let t=0;t<this.rtViewQuad.size;t++)this.rtViewQuad.values[t].destroy(e);this.rtViewQuad.clear(),this.rtViewQuad=null;for(let t=0;t<this.virtualTexture.size;t++){const r=this.virtualTexture.values[t];me.getInstance().detached(r,this),r.destroy(e)}}}class Ro extends q{up_camera;down_camera;left_camera;right_camera;front_camera;back_camera;_near;_far;constructor(e=.001,t=1e4,r=90,i=!1){super(),this.initCubeCamera(e,t,r,i)}initCubeCamera(e,t,r=90,i=!1){this.up_camera=je.createCamera3DObject(this,"up"),this.down_camera=je.createCamera3DObject(this,"down"),this.left_camera=je.createCamera3DObject(this,"left"),this.right_camera=je.createCamera3DObject(this,"right"),this.front_camera=je.createCamera3DObject(this,"front"),this.back_camera=je.createCamera3DObject(this,"back"),this.up_camera.isShadowCamera=i,this.down_camera.isShadowCamera=i,this.left_camera.isShadowCamera=i,this.right_camera.isShadowCamera=i,this.front_camera.isShadowCamera=i,this.back_camera.isShadowCamera=i;let a=1;this.up_camera.perspective(r,a,e,t),this.up_camera.lookAt(d.ZERO,d.UP,d.DOWN),this.down_camera.perspective(r,a,e,t),this.down_camera.lookAt(d.ZERO,d.DOWN,d.DOWN),this.left_camera.perspective(r,a,e,t),this.left_camera.lookAt(d.ZERO,d.LEFT),this.right_camera.perspective(r,a,e,t),this.right_camera.lookAt(d.ZERO,d.RIGHT),this.front_camera.perspective(r,a,e,t),this.front_camera.lookAt(d.ZERO,d.FORWARD),this.back_camera.perspective(r,a,e,t),this.back_camera.lookAt(d.ZERO,d.BACK),this.up_camera.type=He.shadow,this.down_camera.type=He.shadow,this.left_camera.type=He.shadow,this.right_camera.type=He.shadow,this.front_camera.type=He.shadow,this.back_camera.type=He.shadow}set near(e){this._near=e,this.up_camera.near=e,this.down_camera.near=e,this.left_camera.near=e,this.right_camera.near=e,this.front_camera.near=e,this.back_camera.near=e}get near(){return this._near}set far(e){this._far=e,this.up_camera.far=e,this.down_camera.far=e,this.left_camera.far=e,this.right_camera.far=e,this.front_camera.far=e,this.back_camera.far=e}get far(){return this._far}}let nu=`
|
|
6036
6036
|
#include "GenerayRandomDir"
|
|
6037
6037
|
#include "BitUtil"
|
|
6038
6038
|
#include "MathShader"
|
|
@@ -6229,7 +6229,7 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
6229
6229
|
return r2 / pow(NoH2 * (r2 - 1.0) + 1.0, 2.0);
|
|
6230
6230
|
}
|
|
6231
6231
|
|
|
6232
|
-
`;class lu extends
|
|
6232
|
+
`;class lu extends _r{cubeCamera;gBuffer;sizeW=0;sizeH=0;probeSize=64;probeCount=32;mipCount=8;preFilteredEnvironmentCompute;outTexture;preFilteredEnvironmentUniform;onChange=!0;needUpdate=!0;constructor(){super(),this.passType=H.REFLECTION,this.cubeCamera=new Ro(.01,5e3);let e=1;this.probeSize=m.setting.reflectionSetting.reflectionProbeSize,this.probeCount=m.setting.reflectionSetting.reflectionProbeMaxCount,this.sizeW=m.setting.reflectionSetting.width,this.sizeH=m.setting.reflectionSetting.height,this.gBuffer=se.getGBufferFrame(se.reflections_GBuffer,this.sizeW,this.sizeH,!1),this.setRenderStates(this.gBuffer),this.outTexture=new Ae(this.probeSize*this.mipCount,this.sizeH,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,1,0,e),this.outTexture.name="texture_AAA",this.preFilteredEnvironmentUniform=new ht(4+this.probeCount*4),this.preFilteredEnvironmentUniform.setFloat("probeSize",this.probeSize),this.preFilteredEnvironmentUniform.setFloat("probeCount",this.probeCount),this.preFilteredEnvironmentUniform.setFloat("width",this.sizeW),this.preFilteredEnvironmentUniform.setFloat("height",this.sizeH),this.preFilteredEnvironmentUniform.apply(),this.preFilteredEnvironmentCompute=new ue(nu),this.preFilteredEnvironmentCompute.setSamplerTexture("inputTex",this.gBuffer.getCompressGBufferTexture()),this.preFilteredEnvironmentCompute.setStorageTexture("outputTexture",this.outTexture),this.preFilteredEnvironmentCompute.setUniformBuffer("uniformData",this.preFilteredEnvironmentUniform)}forceUpdate(){this.onChange=!0}compute(e,t){if(this.needUpdate){this.needUpdate=!1;let r=ne.getReflectionEntries(e.scene);r.reflectionMap=this.outTexture,this.preFilteredEnvironmentCompute.workerSizeX=Math.ceil(this.probeSize*this.mipCount/16),this.preFilteredEnvironmentCompute.workerSizeY=Math.ceil(this.sizeH/16),this.preFilteredEnvironmentCompute.workerSizeZ=this.mipCount*r.count;let i=F.beginCommandEncoder();F.computeCommand(i,[this.preFilteredEnvironmentCompute]),F.endCommandEncoder(i)}}render(e,t,r,i=!1,a=!1){this.renderContext.clean();let o=this.probeSize,n=this.probeSize,l=G.instance.getReflections(e.scene);for(let h=0;h<l.length;h++){let u=l[h];if(u.autoUpdate&&(u.needUpdate||this.onChange)||be.frame<10){u.needUpdate=!1,this.needUpdate=!0,this.renderContext.beginOpaqueRenderPass();let c=this.renderContext.encoder,f=h*n;l[h].transform.updateWorldMatrix();let g=l[h].transform.worldPosition;this.cubeCamera.x=g.x,this.cubeCamera.y=g.y,this.cubeCamera.z=g.z,this.cubeCamera.far=1e4,this.cubeCamera.transform.updateWorldMatrix(),c.setViewport(o*0,f,o,n,0,1),this.renderOnce(e,this.cubeCamera.right_camera,c,t,r,i),c.setViewport(o*1,f,o,n,0,1),this.renderOnce(e,this.cubeCamera.left_camera,c,t,r,i),c.setViewport(o*2,f,o,n,0,1),this.renderOnce(e,this.cubeCamera.up_camera,c,t,r,i),c.setViewport(o*3,f,o,n,0,1),this.renderOnce(e,this.cubeCamera.down_camera,c,t,r,i),c.setViewport(o*4,f,o,n,0,1),this.renderOnce(e,this.cubeCamera.front_camera,c,t,r,i),c.setViewport(o*5,f,o,n,0,1),this.renderOnce(e,this.cubeCamera.back_camera,c,t,r,i),this.renderContext.endRenderPass()}}this.onChange=!1}renderOnce(e,t,r,i,a,o=!1){let n=e.scene;t.transform.scene3D=n,this.rendererPassState.camera3D=t;let l=G.instance.getRenderNodes(n,t);{let h=r;ne.updateCameraGroup(t),!o&&G.instance.sky&&(F.bindCamera(h,t),G.instance.sky.preInit(H.REFLECTION)||G.instance.sky.nodeUpdate(e,H.REFLECTION,this.rendererPassState,a),G.instance.sky.renderPass2(e,H.REFLECTION,this.rendererPassState,a,h)),l.opaqueList&&(F.bindCamera(h,t),this.drawNodes(e,this.renderContext,l.opaqueList,i,a)),!o&&l.transparentList&&(F.bindCamera(h,t),this.drawNodes(e,this.renderContext,l.transparentList,i,a))}}drawNodes(e,t,r,i,a){let o=G.instance.getRenderShaderCollect(e);if(o){for(const n of o){let l=n[1];for(const h of l){let u=h[1];if(!u.hasMask(Be.ReflectionDebug)&&!u.isDestroyed&&u.preInit(H.REFLECTION)){u.nodeUpdate(e,H.REFLECTION,this.rendererPassState,a);break}}}for(let n=0;n<r.length;n++){let l=r[n];l.hasMask(Be.ReflectionDebug)||l.transform.enable&&l.enable&&(l.isDestroyed||(l.preInit(H.REFLECTION)||l.nodeUpdate(e,H.REFLECTION,this.rendererPassState,a),l.renderPass(e,H.REFLECTION,this.renderContext)))}}}occlusionRenderNodeTest(e,t,r){return!0}}let hu=`
|
|
6233
6233
|
#include 'BitUtil'
|
|
6234
6234
|
struct FragmentOutput {
|
|
6235
6235
|
@location(auto) o_Target: vec4<f32>
|
|
@@ -6307,7 +6307,7 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
6307
6307
|
}
|
|
6308
6308
|
return FragmentOutput(vec4<f32>(color.rgb,basecol.a));
|
|
6309
6309
|
}
|
|
6310
|
-
`;class Io extends Et{postQuad;renderTexture;constructor(){super();let[e,t]=R.presentationSize;O.register("FXAA_Shader",hu),this.renderTexture=this.createRTTexture("FXAAPost",e,t,X.rgba16float),this.postQuad=this.createViewQuad("fxaa","FXAA_Shader",this.renderTexture),this.postQuad.quadShader.setUniform("u_texel",new K(1/e,1/t)),this.postQuad.quadShader.setUniform("u_strength",4)}onResize(){let[e,t]=R.presentationSize;this.renderTexture.resize(e,t)}onAttach(e){m.setting.render.postProcessing.fxaa.enable=!0}onDetach(e){m.setting.render.postProcessing.fxaa.enable=!1}}class uu{rendererMap;shadowMapPassRenderer;pointLightShadowRenderer;ddgiProbeRenderer;postRenderer;clusterLightingRender;reflectionRenderer;occlusionSystem;depthPassRenderer;get colorPassRenderer(){return this.rendererMap.getRenderer(H.COLOR)}pauseRender=!1;pickFire;renderState=!1;_view;constructor(e){this._view=e,this.rendererMap=new su,this.occlusionSystem=new Qo,this.clusterLightingRender=this.addRenderer(qh,e),this.reflectionRenderer=this.addRenderer(lu,e),m.setting.render.zPrePass&&(this.depthPassRenderer=this.addRenderer(au)),this.shadowMapPassRenderer=new iu,this.pointLightShadowRenderer=new tu,this.addPost(new Io)}addRenderer(e,t){let r;return t?r=new e(t):r=new e,this.rendererMap.addRenderer(r),r}get view(){return this._view}set view(e){this._view=e}start(){this.renderState=!0}stop(){}pause(){this.pauseRender=!0}resume(){this.pauseRender=!1}addPost(e){if(!this.postRenderer){let t=se.getGBufferFrame("ColorPassGBuffer");this.postRenderer=this.addRenderer(ou),this.postRenderer.setRenderStates(t)}return e instanceof Et&&this.postRenderer.attachPost(this.view,e),e}removePost(e){if(e instanceof Et)this.postRenderer.detachPost(this.view,e);else for(let t=0;t<e.length;t++)this.postRenderer.detachPost(this.view,e[t])}renderFrame(){let e=this._view;Ye.startView(e),ne.getLightEntries(e.scene).update(e),ne.getReflectionEntries(e.scene).update(e),this.occlusionSystem.update(e.camera,e.scene),this.clusterLightingRender.render(e,this.occlusionSystem),this.shadowMapPassRenderer&&(wt.update(e),this.shadowMapPassRenderer.render(e,this.occlusionSystem)),this.pointLightShadowRenderer&&this.pointLightShadowRenderer.render(e,this.occlusionSystem),this.depthPassRenderer&&(this.depthPassRenderer.compute(e,this.occlusionSystem),this.depthPassRenderer.render(e,this.occlusionSystem)),m.setting.gi.enable&&this.ddgiProbeRenderer&&(this.ddgiProbeRenderer.compute(e,this.occlusionSystem),this.ddgiProbeRenderer.render(e,this.occlusionSystem));let t=this.rendererMap.getAllPassRenderer();for(let a=0;a<t.length;a++){const o=t[a];o.compute(e,this.occlusionSystem),o.render(e,this.occlusionSystem,this.clusterLightingRender.clusterLightingBuffer,!1)}this.postRenderer.render(e);let r=this.rendererMap.getRenderer(H.UI);r.compute(e,this.occlusionSystem),r.render(e,this.occlusionSystem,this.clusterLightingRender.clusterLightingBuffer,!1);let i=se.getGUIBufferFrame().getColorTexture();this.postRenderer.presentContent(e,i)}debug(){}}class cu extends Ze{constructor(e,t,r=!0){super([],[]),this.crateGBuffer(e,t,r)}crateGBuffer(e,t,r){let i=this.renderTargets,a=this.rtDescriptors,o=new
|
|
6310
|
+
`;class Io extends Et{postQuad;renderTexture;constructor(){super();let[e,t]=R.presentationSize;O.register("FXAA_Shader",hu),this.renderTexture=this.createRTTexture("FXAAPost",e,t,X.rgba16float),this.postQuad=this.createViewQuad("fxaa","FXAA_Shader",this.renderTexture),this.postQuad.quadShader.setUniform("u_texel",new K(1/e,1/t)),this.postQuad.quadShader.setUniform("u_strength",4)}onResize(){let[e,t]=R.presentationSize;this.renderTexture.resize(e,t)}onAttach(e){m.setting.render.postProcessing.fxaa.enable=!0}onDetach(e){m.setting.render.postProcessing.fxaa.enable=!1}}class uu{rendererMap;shadowMapPassRenderer;pointLightShadowRenderer;ddgiProbeRenderer;postRenderer;clusterLightingRender;reflectionRenderer;occlusionSystem;depthPassRenderer;get colorPassRenderer(){return this.rendererMap.getRenderer(H.COLOR)}pauseRender=!1;pickFire;renderState=!1;_view;constructor(e){this._view=e,this.rendererMap=new su,this.occlusionSystem=new Qo,this.clusterLightingRender=this.addRenderer(qh,e),this.reflectionRenderer=this.addRenderer(lu,e),m.setting.render.zPrePass&&(this.depthPassRenderer=this.addRenderer(au)),this.shadowMapPassRenderer=new iu,this.pointLightShadowRenderer=new tu,this.addPost(new Io)}addRenderer(e,t){let r;return t?r=new e(t):r=new e,this.rendererMap.addRenderer(r),r}get view(){return this._view}set view(e){this._view=e}start(){this.renderState=!0}stop(){}pause(){this.pauseRender=!0}resume(){this.pauseRender=!1}addPost(e){if(!this.postRenderer){let t=se.getGBufferFrame("ColorPassGBuffer");this.postRenderer=this.addRenderer(ou),this.postRenderer.setRenderStates(t)}return e instanceof Et&&this.postRenderer.attachPost(this.view,e),e}removePost(e){if(e instanceof Et)this.postRenderer.detachPost(this.view,e);else for(let t=0;t<e.length;t++)this.postRenderer.detachPost(this.view,e[t])}renderFrame(){let e=this._view;Ye.startView(e),ne.getLightEntries(e.scene).update(e),ne.getReflectionEntries(e.scene).update(e),this.occlusionSystem.update(e.camera,e.scene),this.clusterLightingRender.render(e,this.occlusionSystem),this.shadowMapPassRenderer&&(wt.update(e),this.shadowMapPassRenderer.render(e,this.occlusionSystem)),this.pointLightShadowRenderer&&this.pointLightShadowRenderer.render(e,this.occlusionSystem),this.depthPassRenderer&&(this.depthPassRenderer.compute(e,this.occlusionSystem),this.depthPassRenderer.render(e,this.occlusionSystem)),m.setting.gi.enable&&this.ddgiProbeRenderer&&(this.ddgiProbeRenderer.compute(e,this.occlusionSystem),this.ddgiProbeRenderer.render(e,this.occlusionSystem));let t=this.rendererMap.getAllPassRenderer();for(let a=0;a<t.length;a++){const o=t[a];o.compute(e,this.occlusionSystem),o.render(e,this.occlusionSystem,this.clusterLightingRender.clusterLightingBuffer,!1)}this.postRenderer.render(e);let r=this.rendererMap.getRenderer(H.UI);r.compute(e,this.occlusionSystem),r.render(e,this.occlusionSystem,this.clusterLightingRender.clusterLightingBuffer,!1);let i=se.getGUIBufferFrame().getColorTexture();this.postRenderer.presentContent(e,i)}debug(){}}class cu extends Ze{constructor(e,t,r=!0){super([],[]),this.crateGBuffer(e,t,r)}crateGBuffer(e,t,r){let i=this.renderTargets,a=this.rtDescriptors,o=new At(e,t,X.rgba16float,!1,void 0,1,0,!0,r);o.name="positionMap";let n=new Qe;n.loadOp="load";let l=new At(e,t,X.rgba16float,!1,void 0,1,0,!0,r);l.name="normalMap";let h=new Qe;h.loadOp="load";let u=new At(e,t,X.rgba16float,!1,void 0,1,0,!0,r);u.name="colorMap";let c=new Qe;c.loadOp="load";let f=new At(e,t,X.depth24plus,!1,void 0,1,0,!0,r);f.name="depthTexture";let g=new Qe;g.loadOp="load",i.push(o),i.push(l),i.push(u),a.push(n),a.push(h),a.push(c),this.depthTexture=f}}let fu=`
|
|
6311
6311
|
#include "GenerayRandomDir"
|
|
6312
6312
|
#include "MathShader"
|
|
6313
6313
|
#include "IrradianceVolumeData_frag"
|
|
@@ -6775,7 +6775,7 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
6775
6775
|
pixelCoord.y = pixelCoord.y % pixelCountYMax;
|
|
6776
6776
|
return pixelCoord;
|
|
6777
6777
|
}
|
|
6778
|
-
`;class pu{blendTexture;volume;computerShader;constructor(e){this.volume=e,this.initPipeline()}initPipeline(){let e=m.setting.gi;this.blendTexture=new
|
|
6778
|
+
`;class pu{blendTexture;volume;computerShader;constructor(e){this.volume=e,this.initPipeline()}initPipeline(){let e=m.setting.gi;this.blendTexture=new At(e.probeSourceTextureSize,e.probeSourceTextureSize,X.rgba16float,!1,GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.STORAGE_BINDING),this.computerShader=new ue(gu),this.computerShader.setStorageTexture("outputBuffer",this.blendTexture),this.computerShader.setUniformBuffer("uniformData",this.volume.irradianceVolumeBuffer)}setInputs(e){let t=e[0],r=e[1],i=e[2],a=e[3];this.computerShader.setSamplerTexture("normalMap",t),this.computerShader.setSamplerTexture("colorMap",r),this.computerShader.setSamplerTexture("litMap",i),this.computerShader.setSamplerTexture("irradianceMap",a)}compute(e,t){let r=F.beginCommandEncoder(),i=this.volume.setting,a=i.probeXCount*i.probeYCount*i.probeZCount,o=i.probeSize;this.computerShader.workerSizeX=o*6/8,this.computerShader.workerSizeY=o/8,this.computerShader.workerSizeZ=a,F.computeCommand(r,[this.computerShader]),F.endCommandEncoder(r)}}let mu=`
|
|
6779
6779
|
var<private> PI: f32 = 3.14159265359;
|
|
6780
6780
|
#include "GlobalUniform"
|
|
6781
6781
|
#include "MathShader"
|
|
@@ -7055,7 +7055,7 @@ fn CsMain( @builtin(workgroup_id) workgroup_id : vec3<u32> , @builtin(global_inv
|
|
|
7055
7055
|
var color = coordFun(fragCoord);
|
|
7056
7056
|
textureStore(outputBuffer, fragCoord, color);
|
|
7057
7057
|
}
|
|
7058
|
-
`;class Au{computeShader;worldPosMap;worldNormalMap;colorMap;shadowMap;pointShadowMap;lightingTexture;constructor(){let e=m.setting.gi;this.lightingTexture=new mt(e.probeSourceTextureSize,e.probeSourceTextureSize,X.rgba16float,!1,GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.STORAGE_BINDING)}create(e){let t=ne.getLightEntries(e.scene);this.computeShader=new ue(mu);let r=ne.getCameraGroup(e.camera);this.computeShader.setUniformBuffer("globalUniform",r.uniformGPUBuffer),this.computeShader.setStorageTexture("outputBuffer",this.lightingTexture),this.computeShader.setStorageBuffer("lightBuffer",t.storageGPUBuffer),this.computeShader.setStorageBuffer("models",ne.modelMatrixBindGroup.matrixBufferDst),this.computeShader.setSamplerTexture("positionMap",this.worldPosMap),this.computeShader.setSamplerTexture("normalMap",this.worldNormalMap),this.computeShader.setSamplerTexture("colorMap",this.colorMap),this.computeShader.setSamplerTexture("shadowMap",this.shadowMap),this.computeShader.setSamplerTexture("pointShadowMap",this.pointShadowMap),this.computeShader.setSamplerTexture("prefilterMap",m.res.defaultSky)}setInputs(e){this.worldPosMap=e[0],this.worldNormalMap=e[1],this.colorMap=e[2],this.shadowMap=e[3],this.pointShadowMap=e[4]}compute(e,t){this.computeShader||this.create(e);let r=F.beginCommandEncoder(),i=m.setting.gi;this.computeShader.workerSizeX=i.probeSourceTextureSize/8,this.computeShader.workerSizeY=i.probeSourceTextureSize/8,this.computeShader.workerSizeZ=1,F.computeCommand(r,[this.computeShader]),F.endCommandEncoder(r)}}let fs=new qe("GIRenderStartEvent"),Eo=new qe("GIRenderCompleteEvent");class Zg{count;complete}class Uu extends Fr{cubeCamera;volume;probeCountPerFrame=1;nextProbeIndex=-1;tempProbeList=[];isRenderCloudGI;probeRenderResult;renderStatus="none";positionMap;normalMap;colorMap;probeNext=128;sizeW;sizeH;lightingPass;bouncePass;irradianceComputePass;irradianceDepthMap;irradianceColorMap;constructor(e){super(),this.passType=H.GI,this.volume=e;let t=e.setting;this.cubeCamera=new Ro(.01,5e3),this.sizeW=t.probeSourceTextureSize,this.sizeH=t.probeSourceTextureSize,this.probeNext=t.probeSourceTextureSize/t.probeSize,this.initIrradianceMap(e),this.probeRenderResult=new Zg;let r=new cu(this.sizeW,this.sizeH,!1);this.positionMap=r.renderTargets[0],this.normalMap=r.renderTargets[1],this.colorMap=r.renderTargets[2],this.setRenderStates(r)}setInputTexture(e){this.lightingPass=new Au,this.bouncePass=new pu(this.volume),this.irradianceComputePass=new du(this.volume),this.lightingPass.setInputs([this.positionMap,this.normalMap,this.colorMap,e[0],e[1]]),this.bouncePass.setInputs([this.normalMap,this.colorMap,this.lightingPass.lightingTexture,this.irradianceColorMap]),this.irradianceComputePass.setTextures([this.positionMap,this.normalMap,this.bouncePass.blendTexture],this.irradianceColorMap,this.irradianceDepthMap)}setIrradianceData(e,t,r,i){if(r!=this.irradianceColorMap.width||i!=this.irradianceColorMap.height){console.error("irradiance image size not match !");return}this.writeToTexture(this.irradianceColorMap,e,r,i),this.writeToTexture(this.irradianceDepthMap,t,r,i)}updateProbe(e,t,r){let i=G.instance.getLights(e.scene),a=this.volume.setting.probeSize;t.drawCallFrame+=1,this.cubeCamera.x=t.x,this.cubeCamera.y=t.y,this.cubeCamera.z=t.z,this.volume.setting.debugCamera?(this.cubeCamera.x=e.camera.transform.x,this.cubeCamera.y=e.camera.transform.y,this.cubeCamera.z=e.camera.transform.z,this.cubeCamera.rotationX=e.camera.transform.rotationX,this.cubeCamera.rotationY=e.camera.transform.rotationY,this.cubeCamera.rotationZ=e.camera.transform.rotationZ):(this.cubeCamera.rotationX=t.rotationX,this.cubeCamera.rotationY=t.rotationY,this.cubeCamera.rotationZ=t.rotationZ);let o=this.cubeCamera,n=Math.floor(t.index/this.probeNext)*(a*6),l=Math.floor(t.index%this.probeNext)*a;r.setViewport(0+n,l,a,a,0,1),this.renderSceneOnce(e,o.right_camera,r,i),r.setViewport(a+n,l,a,a,0,1),this.renderSceneOnce(e,o.left_camera,r,i),r.setViewport(a*2+n,l,a,a,0,1),this.renderSceneOnce(e,o.up_camera,r,i),r.setViewport(a*3+n,l,a,a,0,1),this.renderSceneOnce(e,o.down_camera,r,i),r.setViewport(a*4+n,l,a,a,0,1),this.renderSceneOnce(e,o.front_camera,r,i),r.setViewport(a*5+n,l,a,a,0,1),this.renderSceneOnce(e,o.back_camera,r,i)}renderSceneOnce(e,t,r,i){this.volume.uploadBuffer();let a=G.instance.getRenderNodes(e.scene,t);F.bindCamera(r,t);let o=Math.max(0,m.setting.render.drawOpMin),n=Math.min(m.setting.render.drawOpMax,a.opaqueList.length),l=G.instance.getRenderShaderCollect(e);for(const h of l){let u=h[1];for(const c of u){let f=c[1];if(!f.isDestroyed&&f.preInit(this.passType)){f.nodeUpdate(e,this.passType,this.rendererPassState,null);break}}}for(let h=o;h<n;++h){let u=a.opaqueList[h];u.enable&&u.transform.enable&&!u.isDestroyed&&(u.preInit(this.passType)||u.nodeUpdate(e,this.passType,this.rendererPassState,null),u.renderPass2(e,this.passType,this.rendererPassState,null,r))}G.instance.sky&&(G.instance.sky.preInit(this.passType)||G.instance.sky.nodeUpdate(e,this.passType,this.rendererPassState,null),G.instance.sky.renderPass2(e,this.passType,this.rendererPassState,null,r)),o=Math.max(0,m.setting.render.drawTrMin),n=Math.min(m.setting.render.drawTrMax,a.transparentList.length);for(let h=o;h<n;++h){let u=a.transparentList[h];u.enable&&u.transform.enable&&!u.isDestroyed&&(u.preInit(this.passType)||u.nodeUpdate(e,this.passType,this.rendererPassState,null),u.renderPass2(e,this.passType,this.rendererPassState,null,r))}}render(e,t){if(!m.setting.gi.enable)return;this.volume.updateOrientation(),this.volume.isVolumeFrameChange=!1,this.volume.uploadBuffer(),this.rendProbe(e);let r=this.probeRenderResult.count>0;(G.instance.state.giLightingChange||r||m.setting.gi.realTimeGI)&&(G.instance.state.giLightingChange=!1,this.lightingPass.compute(e,this.rendererPassState),this.bouncePass.compute(e,this.rendererPassState),this.irradianceComputePass.compute(e,this.rendererPassState)),this.probeRenderResult.complete&&this.dispatchEvent(Eo)}startRenderGI(e=0){this.nextProbeIndex==-1&&e==0&&this.dispatchEvent(fs),this.nextProbeIndex=e,this.renderStatus="rendering"}startRenderCloudGI(){this.dispatchEvent(fs),this.nextProbeIndex=0,this.renderStatus="rendering",this.isRenderCloudGI=!0}rendProbe(e){let t=m.setting.gi.autoRenderProbe,r=!1;if(t?(this.nextProbeIndex==-1&&this.startRenderGI(),r=!0):r=this.renderStatus=="rendering",this.probeRenderResult.count=0,this.probeRenderResult.complete=!1,r){let i=G.instance.getProbes(e.scene);this.renderContext.clean(),this.renderContext.beginOpaqueRenderPass(),this.tempProbeList.length=0;let a=Math.min(this.probeCountPerFrame,i.length);for(this.probeRenderResult.count=a;a>0;){const n=i[this.nextProbeIndex];this.updateProbe(e,n,this.renderContext.encoder),a--,this.nextProbeIndex++,n.drawCallFrame<3&&this.tempProbeList.push(n)}this.tempProbeList.length>0&&this.volume.updateProbes(this.tempProbeList);let o=this.nextProbeIndex>=i.length;this.nextProbeIndex>=i.length&&this.isRenderCloudGI&&this.updateProbe(e,i[0],this.renderContext.encoder),this.renderContext.endRenderPass(),o&&(this.nextProbeIndex=-1,this.renderStatus="complete",this.probeRenderResult.complete=!0)}}initIrradianceMap(e){let t=e.setting,r=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST;this.irradianceDepthMap=new mt(t.octRTMaxSize,t.octRTMaxSize,X.rgba16float,!1,r),this.irradianceDepthMap.name="irradianceDepthMap",this.irradianceColorMap=new mt(t.octRTMaxSize,t.octRTMaxSize,X.rgba16float,!1,r),this.irradianceColorMap.name="irradianceColorMap"}writeToTexture(e,t,r,i){console.log(e.name);const a=R.device.createBuffer({size:t.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});R.device.queue.writeBuffer(a,0,t);const o=F.beginCommandEncoder();o.copyBufferToTexture({buffer:a,bytesPerRow:r*16},{texture:e.getGPUTexture()},{width:r,height:i,depthOrArrayLayers:1}),F.endCommandEncoder(o)}}class xu extends Fr{constructor(){super(),this.passType=H.UI}compute(e,t){let r=F.beginCommandEncoder(),i=F.lastRenderPassState.getLastRenderTexture(),a=se.getGUIBufferFrame().getColorTexture();F.copyTexture(r,i,a),F.endCommandEncoder(r)}render(e,t,r,i=!1){this.renderContext.clean();let a=e.scene,o=e.camera;ne.updateCameraGroup(o),this.rendererPassState.camera3D=o;let n=G.instance.getRenderNodes(a,o);{this.renderContext.specialtRenderPass();let l=this.renderContext.encoder;n.opaqueList&&(F.bindCamera(l,o),this.drawNodes(e,this.renderContext,n.opaqueList,t,r))}{let l=this.renderContext.encoder;!i&&n.transparentList&&(F.bindCamera(l,o),this.drawNodes(e,this.renderContext,n.transparentList,t,r)),this.renderContext.endRenderPass()}}drawNodes(e,t,r,i,a){let o=G.instance.getRenderShaderCollect(e);if(o){for(const n of o){let l=n[1];for(const h of l){let u=h[1];if(!u.isDestroyed&&u.preInit(this._rendererType)){u.nodeUpdate(e,this._rendererType,this.rendererPassState,a);break}}}for(let n=m.setting.render.drawOpMin;n<Math.min(r.length,m.setting.render.drawOpMax);++n){let l=r[n];l.transform.enable&&l.enable&&(!l.hasMask(Be.UI)||l.isRecievePostEffectUI||l.isDestroyed||(l.preInit(this._rendererType)||l.nodeUpdate(e,this._rendererType,this.rendererPassState,a),l.renderPass(e,this.passType,this.renderContext)))}}}occlusionRenderNodeTest(e,t,r){return r.zDepthRenderNodeTest(t)>0}}class Bu extends uu{constructor(e){super(e)}start(){super.start();{let e=new Xh,t=se.getGBufferFrame(se.colorPass_GBuffer);if(m.setting.render.zPrePass&&(t.zPreTexture=this.depthPassRenderer.rendererPassState.depthTexture),e.setRenderStates(t),m.setting.gi.enable){let r=ne.getLightEntries(this.view.scene);this.ddgiProbeRenderer=new Uu(r.irradianceVolume),this.ddgiProbeRenderer.setInputTexture([this.shadowMapPassRenderer.depth2DArrayTexture,this.pointLightShadowRenderer.cubeArrayTexture]),e.setIrradiance(this.ddgiProbeRenderer.irradianceColorMap,this.ddgiProbeRenderer.irradianceDepthMap),this.rendererMap.addRenderer(this.ddgiProbeRenderer)}this.rendererMap.addRenderer(e)}{let e=se.getGUIBufferFrame(),t=new xu;t.setRenderStates(e),this.rendererMap.addRenderer(t)}m.setting.render.debug&&this.debug()}debug(){}}class vu{_factor;_doubleFactor;constructor(){this._factor=1,this._doubleFactor=2}get accelerateInterpolator(){return this._factor}set accelerateInterpolator(e){this._factor=e,this._doubleFactor=2*this._factor}getInterpolation(e){return this._factor==1?e*e:Math.pow(e,this._doubleFactor)}}class Cu{_factor=1;constructor(){}get decelerateInterpolator(){return this._factor}set decelerateInterpolator(e){this._factor=e}getInterpolation(e){let t;return this._factor==1?t=1-(1-e)*(1-e):t=1-Math.pow(1-e,2*this._factor),t}}class Su{_factor=1;constructor(){}getInterpolation(e){return Math.cos((e+1)*Math.PI)/2+.5}}class _u{getInterpolation(e){return e}}class Fu{getInterpolation(e){return 4.9*e+4.9*e}}class Ot{constructor(){}static bounce(e){return e*e*9.8}getInterpolation(e){return e*=1.1226,e<.3535?Ot.bounce(e):e<.7408?Ot.bounce(e-.54719)+.7:e<.9644?Ot.bounce(e-.8526)+.9:Ot.bounce(e-1.0435)+.95}getBounceInterpolation(e){return e<.5?Ot.bounce(e):Ot.bounce(e-1)}geJumpUp(e,t){return t<.5?(t=t/.5,e*t-Ot.bounce(t)):t<.8?(t=(t-.5)/(.8-.5),(e*t-Ot.bounce(t))*.3):t<1?(t=(t-.8)/(1-.8),(e*t-Ot.bounce(t))*.15):e*t-Ot.bounce(t)}}class yu{_tension;constructor(){this._tension=2}get anticipateInterpolator(){return this._tension}set anticipateInterpolator(e){this._tension=e}getInterpolation(e){return e*e*((this._tension+1)*e-this._tension)}}class qa{_tension;constructor(){this._tension=1*1.5}anticipateOvershootInterpolator(e){this._tension=e*1.5}anticipateOvershootInterpolator2(e,t){this._tension=e*t}getInterpolation(e){return e<.5?.5*qa.a(e*2,this._tension):.5*(qa.o(e*2-2,this._tension)+2)}static a(e,t){return e*e*((t+1)*e-t)}static o(e,t){return e*e*((t+1)*e+t)}}class bu{_cycles;constructor(e){this._cycles=e}getInterpolation(e){return Math.sin(2*this._cycles*Math.PI*e)}}class Qu{_tension;constructor(){this._tension=2}getInterpolation(e){return e-=1,e*e*((this._tension+1)*e+this._tension)+1}}var wo=(s=>(s[s.AccelerateInterpolator=0]="AccelerateInterpolator",s[s.DecelerateInterpolator=1]="DecelerateInterpolator",s[s.AccelerateDecelerateInterpolator=2]="AccelerateDecelerateInterpolator",s[s.LinearInterpolator=3]="LinearInterpolator",s[s.BounceInterpolator=4]="BounceInterpolator",s[s.AnticipateInterpolator=5]="AnticipateInterpolator",s[s.AnticipateOvershootInterpolator=6]="AnticipateOvershootInterpolator",s[s.CycleInterpolator=7]="CycleInterpolator",s[s.OvershootInterpolator=8]="OvershootInterpolator",s[s.JumperInterpolator=9]="JumperInterpolator",s))(wo||{});class ci{static interpolators=[];complete=!1;onComplete;onProgress;target;property;targetProperty;durtion;interpolatorEnum;delayTime=0;_interpolator;_ct=0;_p=0;static to(e,t,r,i=0){var a=new ci;return a.target=e,a.property=t,a.durtion=r,a.interpolatorEnum=i,a.start(),a.delayTime=t.delayTime?t.delayTime:0,t.onComplete&&(a.onComplete=t.onComplete),t.onProgress&&(a.onProgress=t.onProgress),this.interpolators.push(a),a}static tick(e){let t=ci.interpolators;for(let r of t)r.complete?ci.remove(r,!0):r.tick(e)}static remove(e,t){let r=ci.interpolators,i=r.indexOf(e);i!=-1&&r.splice(i,1),t&&e.dispose()}static removeList(e,t){e.forEach(r=>{this.remove(r,t)})}start(){window.AccelerateInterpolator=vu,window.DecelerateInterpolator=Cu,window.AccelerateDecelerateInterpolator=Su,window.LinearInterpolator=_u,window.BounceInterpolator=Ot,window.AnticipateInterpolator=yu,window.AnticipateOvershootInterpolator=qa,window.CycleInterpolator=bu,window.OvershootInterpolator=Qu,window.JumperInterpolator=Fu,this._interpolator=new window[wo[this.interpolatorEnum]],this.targetProperty={};for(let e in this.property)this.targetProperty[e]=this.target[e]}tick(e){if(this.delayTime<=0){this._p=Math.min(this._ct/this.durtion,1);let t=this._interpolator.getInterpolation(this._p),r=this.property,i=this.target,a=this.targetProperty,o,n;for(let l in r)n=r[l],o=a[l],i[l]=o+(n-o)*t;this.onProgress!=null&&this.onProgress(this._p),this._ct>=this.durtion&&(this.complete=!0,this.onComplete!=null&&this.onComplete(this.target)),this._ct+=e}else this.delayTime-=e}dispose(){this.onComplete=null,this.onProgress=null,this.target=null,this.property=null,this.targetProperty=null,this.interpolatorEnum=null,this._interpolator=null,ci.remove(this)}}class _t{static _filterChar=[" "," ",";",`
|
|
7058
|
+
`;class Au{computeShader;worldPosMap;worldNormalMap;colorMap;shadowMap;pointShadowMap;lightingTexture;constructor(){let e=m.setting.gi;this.lightingTexture=new At(e.probeSourceTextureSize,e.probeSourceTextureSize,X.rgba16float,!1,GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.STORAGE_BINDING)}create(e){let t=ne.getLightEntries(e.scene);this.computeShader=new ue(mu);let r=ne.getCameraGroup(e.camera);this.computeShader.setUniformBuffer("globalUniform",r.uniformGPUBuffer),this.computeShader.setStorageTexture("outputBuffer",this.lightingTexture),this.computeShader.setStorageBuffer("lightBuffer",t.storageGPUBuffer),this.computeShader.setStorageBuffer("models",ne.modelMatrixBindGroup.matrixBufferDst),this.computeShader.setSamplerTexture("positionMap",this.worldPosMap),this.computeShader.setSamplerTexture("normalMap",this.worldNormalMap),this.computeShader.setSamplerTexture("colorMap",this.colorMap),this.computeShader.setSamplerTexture("shadowMap",this.shadowMap),this.computeShader.setSamplerTexture("pointShadowMap",this.pointShadowMap),this.computeShader.setSamplerTexture("prefilterMap",m.res.defaultSky)}setInputs(e){this.worldPosMap=e[0],this.worldNormalMap=e[1],this.colorMap=e[2],this.shadowMap=e[3],this.pointShadowMap=e[4]}compute(e,t){this.computeShader||this.create(e);let r=F.beginCommandEncoder(),i=m.setting.gi;this.computeShader.workerSizeX=i.probeSourceTextureSize/8,this.computeShader.workerSizeY=i.probeSourceTextureSize/8,this.computeShader.workerSizeZ=1,F.computeCommand(r,[this.computeShader]),F.endCommandEncoder(r)}}let fs=new qe("GIRenderStartEvent"),Eo=new qe("GIRenderCompleteEvent");class Zg{count;complete}class Uu extends _r{cubeCamera;volume;probeCountPerFrame=1;nextProbeIndex=-1;tempProbeList=[];isRenderCloudGI;probeRenderResult;renderStatus="none";positionMap;normalMap;colorMap;probeNext=128;sizeW;sizeH;lightingPass;bouncePass;irradianceComputePass;irradianceDepthMap;irradianceColorMap;constructor(e){super(),this.passType=H.GI,this.volume=e;let t=e.setting;this.cubeCamera=new Ro(.01,5e3),this.sizeW=t.probeSourceTextureSize,this.sizeH=t.probeSourceTextureSize,this.probeNext=t.probeSourceTextureSize/t.probeSize,this.initIrradianceMap(e),this.probeRenderResult=new Zg;let r=new cu(this.sizeW,this.sizeH,!1);this.positionMap=r.renderTargets[0],this.normalMap=r.renderTargets[1],this.colorMap=r.renderTargets[2],this.setRenderStates(r)}setInputTexture(e){this.lightingPass=new Au,this.bouncePass=new pu(this.volume),this.irradianceComputePass=new du(this.volume),this.lightingPass.setInputs([this.positionMap,this.normalMap,this.colorMap,e[0],e[1]]),this.bouncePass.setInputs([this.normalMap,this.colorMap,this.lightingPass.lightingTexture,this.irradianceColorMap]),this.irradianceComputePass.setTextures([this.positionMap,this.normalMap,this.bouncePass.blendTexture],this.irradianceColorMap,this.irradianceDepthMap)}setIrradianceData(e,t,r,i){if(r!=this.irradianceColorMap.width||i!=this.irradianceColorMap.height){console.error("irradiance image size not match !");return}this.writeToTexture(this.irradianceColorMap,e,r,i),this.writeToTexture(this.irradianceDepthMap,t,r,i)}updateProbe(e,t,r){let i=G.instance.getLights(e.scene),a=this.volume.setting.probeSize;t.drawCallFrame+=1,this.cubeCamera.x=t.x,this.cubeCamera.y=t.y,this.cubeCamera.z=t.z,this.volume.setting.debugCamera?(this.cubeCamera.x=e.camera.transform.x,this.cubeCamera.y=e.camera.transform.y,this.cubeCamera.z=e.camera.transform.z,this.cubeCamera.rotationX=e.camera.transform.rotationX,this.cubeCamera.rotationY=e.camera.transform.rotationY,this.cubeCamera.rotationZ=e.camera.transform.rotationZ):(this.cubeCamera.rotationX=t.rotationX,this.cubeCamera.rotationY=t.rotationY,this.cubeCamera.rotationZ=t.rotationZ);let o=this.cubeCamera,n=Math.floor(t.index/this.probeNext)*(a*6),l=Math.floor(t.index%this.probeNext)*a;r.setViewport(0+n,l,a,a,0,1),this.renderSceneOnce(e,o.right_camera,r,i),r.setViewport(a+n,l,a,a,0,1),this.renderSceneOnce(e,o.left_camera,r,i),r.setViewport(a*2+n,l,a,a,0,1),this.renderSceneOnce(e,o.up_camera,r,i),r.setViewport(a*3+n,l,a,a,0,1),this.renderSceneOnce(e,o.down_camera,r,i),r.setViewport(a*4+n,l,a,a,0,1),this.renderSceneOnce(e,o.front_camera,r,i),r.setViewport(a*5+n,l,a,a,0,1),this.renderSceneOnce(e,o.back_camera,r,i)}renderSceneOnce(e,t,r,i){this.volume.uploadBuffer();let a=G.instance.getRenderNodes(e.scene,t);F.bindCamera(r,t);let o=Math.max(0,m.setting.render.drawOpMin),n=Math.min(m.setting.render.drawOpMax,a.opaqueList.length),l=G.instance.getRenderShaderCollect(e);for(const h of l){let u=h[1];for(const c of u){let f=c[1];if(!f.isDestroyed&&f.preInit(this.passType)){f.nodeUpdate(e,this.passType,this.rendererPassState,null);break}}}for(let h=o;h<n;++h){let u=a.opaqueList[h];u.enable&&u.transform.enable&&!u.isDestroyed&&(u.preInit(this.passType)||u.nodeUpdate(e,this.passType,this.rendererPassState,null),u.renderPass2(e,this.passType,this.rendererPassState,null,r))}G.instance.sky&&(G.instance.sky.preInit(this.passType)||G.instance.sky.nodeUpdate(e,this.passType,this.rendererPassState,null),G.instance.sky.renderPass2(e,this.passType,this.rendererPassState,null,r)),o=Math.max(0,m.setting.render.drawTrMin),n=Math.min(m.setting.render.drawTrMax,a.transparentList.length);for(let h=o;h<n;++h){let u=a.transparentList[h];u.enable&&u.transform.enable&&!u.isDestroyed&&(u.preInit(this.passType)||u.nodeUpdate(e,this.passType,this.rendererPassState,null),u.renderPass2(e,this.passType,this.rendererPassState,null,r))}}render(e,t){if(!m.setting.gi.enable)return;this.volume.updateOrientation(),this.volume.isVolumeFrameChange=!1,this.volume.uploadBuffer(),this.rendProbe(e);let r=this.probeRenderResult.count>0;(G.instance.state.giLightingChange||r||m.setting.gi.realTimeGI)&&(G.instance.state.giLightingChange=!1,this.lightingPass.compute(e,this.rendererPassState),this.bouncePass.compute(e,this.rendererPassState),this.irradianceComputePass.compute(e,this.rendererPassState)),this.probeRenderResult.complete&&this.dispatchEvent(Eo)}startRenderGI(e=0){this.nextProbeIndex==-1&&e==0&&this.dispatchEvent(fs),this.nextProbeIndex=e,this.renderStatus="rendering"}startRenderCloudGI(){this.dispatchEvent(fs),this.nextProbeIndex=0,this.renderStatus="rendering",this.isRenderCloudGI=!0}rendProbe(e){let t=m.setting.gi.autoRenderProbe,r=!1;if(t?(this.nextProbeIndex==-1&&this.startRenderGI(),r=!0):r=this.renderStatus=="rendering",this.probeRenderResult.count=0,this.probeRenderResult.complete=!1,r){let i=G.instance.getProbes(e.scene);this.renderContext.clean(),this.renderContext.beginOpaqueRenderPass(),this.tempProbeList.length=0;let a=Math.min(this.probeCountPerFrame,i.length);for(this.probeRenderResult.count=a;a>0;){const n=i[this.nextProbeIndex];this.updateProbe(e,n,this.renderContext.encoder),a--,this.nextProbeIndex++,n.drawCallFrame<3&&this.tempProbeList.push(n)}this.tempProbeList.length>0&&this.volume.updateProbes(this.tempProbeList);let o=this.nextProbeIndex>=i.length;this.nextProbeIndex>=i.length&&this.isRenderCloudGI&&this.updateProbe(e,i[0],this.renderContext.encoder),this.renderContext.endRenderPass(),o&&(this.nextProbeIndex=-1,this.renderStatus="complete",this.probeRenderResult.complete=!0)}}initIrradianceMap(e){let t=e.setting,r=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST;this.irradianceDepthMap=new At(t.octRTMaxSize,t.octRTMaxSize,X.rgba16float,!1,r),this.irradianceDepthMap.name="irradianceDepthMap",this.irradianceColorMap=new At(t.octRTMaxSize,t.octRTMaxSize,X.rgba16float,!1,r),this.irradianceColorMap.name="irradianceColorMap"}writeToTexture(e,t,r,i){console.log(e.name);const a=R.device.createBuffer({size:t.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});R.device.queue.writeBuffer(a,0,t);const o=F.beginCommandEncoder();o.copyBufferToTexture({buffer:a,bytesPerRow:r*16},{texture:e.getGPUTexture()},{width:r,height:i,depthOrArrayLayers:1}),F.endCommandEncoder(o)}}class xu extends _r{constructor(){super(),this.passType=H.UI}compute(e,t){let r=F.beginCommandEncoder(),i=F.lastRenderPassState.getLastRenderTexture(),a=se.getGUIBufferFrame().getColorTexture();F.copyTexture(r,i,a),F.endCommandEncoder(r)}render(e,t,r,i=!1){this.renderContext.clean();let a=e.scene,o=e.camera;ne.updateCameraGroup(o),this.rendererPassState.camera3D=o;let n=G.instance.getRenderNodes(a,o);{this.renderContext.specialtRenderPass();let l=this.renderContext.encoder;n.opaqueList&&(F.bindCamera(l,o),this.drawNodes(e,this.renderContext,n.opaqueList,t,r))}{let l=this.renderContext.encoder;!i&&n.transparentList&&(F.bindCamera(l,o),this.drawNodes(e,this.renderContext,n.transparentList,t,r)),this.renderContext.endRenderPass()}}drawNodes(e,t,r,i,a){let o=G.instance.getRenderShaderCollect(e);if(o){for(const n of o){let l=n[1];for(const h of l){let u=h[1];if(!u.isDestroyed&&u.preInit(this._rendererType)){u.nodeUpdate(e,this._rendererType,this.rendererPassState,a);break}}}for(let n=m.setting.render.drawOpMin;n<Math.min(r.length,m.setting.render.drawOpMax);++n){let l=r[n];l.transform.enable&&l.enable&&(!l.hasMask(Be.UI)||l.isRecievePostEffectUI||l.isDestroyed||(l.preInit(this._rendererType)||l.nodeUpdate(e,this._rendererType,this.rendererPassState,a),l.renderPass(e,this.passType,this.renderContext)))}}}occlusionRenderNodeTest(e,t,r){return r.zDepthRenderNodeTest(t)>0}}class Bu extends uu{constructor(e){super(e)}start(){super.start();{let e=new Xh,t=se.getGBufferFrame(se.colorPass_GBuffer);if(m.setting.render.zPrePass&&(t.zPreTexture=this.depthPassRenderer.rendererPassState.depthTexture),e.setRenderStates(t),m.setting.gi.enable){let r=ne.getLightEntries(this.view.scene);this.ddgiProbeRenderer=new Uu(r.irradianceVolume),this.ddgiProbeRenderer.setInputTexture([this.shadowMapPassRenderer.depth2DArrayTexture,this.pointLightShadowRenderer.cubeArrayTexture]),e.setIrradiance(this.ddgiProbeRenderer.irradianceColorMap,this.ddgiProbeRenderer.irradianceDepthMap),this.rendererMap.addRenderer(this.ddgiProbeRenderer)}this.rendererMap.addRenderer(e)}{let e=se.getGUIBufferFrame(),t=new xu;t.setRenderStates(e),this.rendererMap.addRenderer(t)}m.setting.render.debug&&this.debug()}debug(){}}class vu{_factor;_doubleFactor;constructor(){this._factor=1,this._doubleFactor=2}get accelerateInterpolator(){return this._factor}set accelerateInterpolator(e){this._factor=e,this._doubleFactor=2*this._factor}getInterpolation(e){return this._factor==1?e*e:Math.pow(e,this._doubleFactor)}}class Cu{_factor=1;constructor(){}get decelerateInterpolator(){return this._factor}set decelerateInterpolator(e){this._factor=e}getInterpolation(e){let t;return this._factor==1?t=1-(1-e)*(1-e):t=1-Math.pow(1-e,2*this._factor),t}}class Su{_factor=1;constructor(){}getInterpolation(e){return Math.cos((e+1)*Math.PI)/2+.5}}class _u{getInterpolation(e){return e}}class Fu{getInterpolation(e){return 4.9*e+4.9*e}}class Ot{constructor(){}static bounce(e){return e*e*9.8}getInterpolation(e){return e*=1.1226,e<.3535?Ot.bounce(e):e<.7408?Ot.bounce(e-.54719)+.7:e<.9644?Ot.bounce(e-.8526)+.9:Ot.bounce(e-1.0435)+.95}getBounceInterpolation(e){return e<.5?Ot.bounce(e):Ot.bounce(e-1)}geJumpUp(e,t){return t<.5?(t=t/.5,e*t-Ot.bounce(t)):t<.8?(t=(t-.5)/(.8-.5),(e*t-Ot.bounce(t))*.3):t<1?(t=(t-.8)/(1-.8),(e*t-Ot.bounce(t))*.15):e*t-Ot.bounce(t)}}class yu{_tension;constructor(){this._tension=2}get anticipateInterpolator(){return this._tension}set anticipateInterpolator(e){this._tension=e}getInterpolation(e){return e*e*((this._tension+1)*e-this._tension)}}class qa{_tension;constructor(){this._tension=1*1.5}anticipateOvershootInterpolator(e){this._tension=e*1.5}anticipateOvershootInterpolator2(e,t){this._tension=e*t}getInterpolation(e){return e<.5?.5*qa.a(e*2,this._tension):.5*(qa.o(e*2-2,this._tension)+2)}static a(e,t){return e*e*((t+1)*e-t)}static o(e,t){return e*e*((t+1)*e+t)}}class bu{_cycles;constructor(e){this._cycles=e}getInterpolation(e){return Math.sin(2*this._cycles*Math.PI*e)}}class Qu{_tension;constructor(){this._tension=2}getInterpolation(e){return e-=1,e*e*((this._tension+1)*e+this._tension)+1}}var wo=(s=>(s[s.AccelerateInterpolator=0]="AccelerateInterpolator",s[s.DecelerateInterpolator=1]="DecelerateInterpolator",s[s.AccelerateDecelerateInterpolator=2]="AccelerateDecelerateInterpolator",s[s.LinearInterpolator=3]="LinearInterpolator",s[s.BounceInterpolator=4]="BounceInterpolator",s[s.AnticipateInterpolator=5]="AnticipateInterpolator",s[s.AnticipateOvershootInterpolator=6]="AnticipateOvershootInterpolator",s[s.CycleInterpolator=7]="CycleInterpolator",s[s.OvershootInterpolator=8]="OvershootInterpolator",s[s.JumperInterpolator=9]="JumperInterpolator",s))(wo||{});class ci{static interpolators=[];complete=!1;onComplete;onProgress;target;property;targetProperty;durtion;interpolatorEnum;delayTime=0;_interpolator;_ct=0;_p=0;static to(e,t,r,i=0){var a=new ci;return a.target=e,a.property=t,a.durtion=r,a.interpolatorEnum=i,a.start(),a.delayTime=t.delayTime?t.delayTime:0,t.onComplete&&(a.onComplete=t.onComplete),t.onProgress&&(a.onProgress=t.onProgress),this.interpolators.push(a),a}static tick(e){let t=ci.interpolators;for(let r of t)r.complete?ci.remove(r,!0):r.tick(e)}static remove(e,t){let r=ci.interpolators,i=r.indexOf(e);i!=-1&&r.splice(i,1),t&&e.dispose()}static removeList(e,t){e.forEach(r=>{this.remove(r,t)})}start(){window.AccelerateInterpolator=vu,window.DecelerateInterpolator=Cu,window.AccelerateDecelerateInterpolator=Su,window.LinearInterpolator=_u,window.BounceInterpolator=Ot,window.AnticipateInterpolator=yu,window.AnticipateOvershootInterpolator=qa,window.CycleInterpolator=bu,window.OvershootInterpolator=Qu,window.JumperInterpolator=Fu,this._interpolator=new window[wo[this.interpolatorEnum]],this.targetProperty={};for(let e in this.property)this.targetProperty[e]=this.target[e]}tick(e){if(this.delayTime<=0){this._p=Math.min(this._ct/this.durtion,1);let t=this._interpolator.getInterpolation(this._p),r=this.property,i=this.target,a=this.targetProperty,o,n;for(let l in r)n=r[l],o=a[l],i[l]=o+(n-o)*t;this.onProgress!=null&&this.onProgress(this._p),this._ct>=this.durtion&&(this.complete=!0,this.onComplete!=null&&this.onComplete(this.target)),this._ct+=e}else this.delayTime-=e}dispose(){this.onComplete=null,this.onProgress=null,this.target=null,this.property=null,this.targetProperty=null,this.interpolatorEnum=null,this._interpolator=null,ci.remove(this)}}class Ft{static _filterChar=[" "," ",";",`
|
|
7059
7059
|
`,"\r"," ",`
|
|
7060
7060
|
`,"\r"," "];static hasString(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}static getEllipsis(e,t=4){let r=e;return r.length>t&&(r=r.slice(0,t)+"..."),r}static getURLName(e){var t;t=e.split("/");let r=t[t.length-1];return r=r.split(".")[0],r}static getFileFormat(e){var t=e.lastIndexOf(".");t++;var r=e.length;e.indexOf("?",t)!==-1&&(r=e.indexOf("?",t));var i=e.substr(t,r-t);return i=i.toLowerCase(),i}static readLineProperty(e,t){e.trim().split(" ").forEach((r,i)=>{let a=r.split("=");if(a.length>1){let o=a[0],n=a[1];Object.prototype.hasOwnProperty.call(t,o)&&(n.indexOf('"')==-1?t[o]=parseFloat(a[1]):t[o]=n.replace('"',"").replace('"',""))}})}static getPath(e){var t=e.lastIndexOf("/");return t++,e.substring(0,t)}static normalizePath(e){var t=e.replaceAll("//","/");return t=t.replaceAll("\\","/"),t}static getStringList(e,t=";"){return e.split(t)}static formatTime(e){let r=e/1e3/60,i=Math.floor(r),a=Math.floor(r-i);return[i.toString(),a.toString()]}static trim(e){return e.replace(/^\s+/g,"").replace(/\s+$/g,"")}static isEmpty(e){return!e||typeof e>"u"||e==null||typeof e=="string"&&this.trim(e)===""||e==="null"}static strCut(e,t){if(e.length*2<=t)return e;for(var r=0,i="",a=0;a<e.length;a++)if(i=i+e.charAt(a),e.charCodeAt(a)>128){if(r=r+2,r>=t)return i.substring(0,i.length-1)+"..."}else if(r=r+1,r>=t)return i.substring(0,i.length-2)+"...";return i}static toQueryPair(e,t,r=!1){return e+"="+(r?encodeURIComponent(t):t)}static stringFormat(e,...t){if(arguments.length===0)throw new Error("please give arg at least one !");if(arguments.length===2&&typeof arguments[1]=="object")for(let r in arguments[1]){let i=new RegExp("({"+r+"})","g");e=e.replace(i,arguments[1][r])}else for(let r=0;r<t.length;r++){if(t[r]==null)return e;{let i=new RegExp("({["+r+"]})","g");e=e.replace(i,t[r])}}return e}static parseJson2String(e,t){let r=null,i="",a=0,o=" ";return t=t||{},t.newlineAfterColonIfBeforeBraceOrBracket=t.newlineAfterColonIfBeforeBraceOrBracket===!0,t.spaceAfterColon=t.spaceAfterColon!==!1,typeof e!="string"||(e=JSON.parse(e)),e=JSON.stringify(e),r=/([\{\}])/g,e=e.replace(r,`\r
|
|
7061
7061
|
$1\r
|
|
@@ -7065,9 +7065,9 @@ $1\r
|
|
|
7065
7065
|
`),r=/(\r\n\r\n)/g,e=e.replace(r,`\r
|
|
7066
7066
|
`),r=/\r\n\,/g,e=e.replace(r,","),t.newlineAfterColonIfBeforeBraceOrBracket||(r=/\:\r\n\{/g,e=e.replace(r,":{"),r=/\:\r\n\[/g,e=e.replace(r,":[")),t.spaceAfterColon&&(r=/\:/g,e=e.replace(r,":")),e.split(`\r
|
|
7067
7067
|
`).forEach(function(n,l){let h=0,u=0,c="";for(n.match(/\{$/)||n.match(/\[$/)?u=1:n.match(/\}/)||n.match(/\]/)?a!==0&&(a-=1):u=0,h=0;h<a;h++)c+=o;i+=c+n+`\r
|
|
7068
|
-
`,a+=u}),i}static compareVersion(e,t){e=e.split("."),t=t.split(".");let r=Math.max(e.length,t.length);for(;e.length<r;)e.push("0");for(;t.length<r;)t.push("0");for(let i=0;i<r;i++){let a=parseInt(e[i]),o=parseInt(t[i]);if(a>o)return 1;if(a<o)return-1}return 0}static buildRandomCode(){let e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",t=e.length,r="";for(let a=0;a<26;a++){let o=Math.floor(Math.random()*t);r+=e.charAt(o)}return`${new Date().getTime()}-${r}`}static UUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=Math.random()*16|0,r=e=="x"?t:t&3|8;return r.toString(16)})}static stringToHash(e){let t=0;if(e.length==0)return t;for(let r=0;r<e.length;r++){const i=e.charCodeAt(r);t=(t<<5)-t+i,t=t&t}return t}static parseUrl(e,t){return t.match(/^(blob|http|https):/)?t:e+t}}class Mr extends $e{_source;premultiplyAlpha="none";constructor(e=!0){super(),this.useMipmap=e,this.lodMinClamp=0,this.lodMaxClamp=4}get source(){return this._source}set source(e){this._source=e,this._source instanceof HTMLImageElement?this._source.decode().then(async()=>{if(this._source instanceof HTMLImageElement){const t=await createImageBitmap(this._source,{imageOrientation:this.flipY?"flipY":"from-image",premultiplyAlpha:"none"});this.generate(t)}}):(this._source instanceof HTMLCanvasElement||this._source instanceof ImageBitmap)&&this.generate(this._source)}async load(e,t){if(this.name=_t.getURLName(e),e.indexOf(";base64")!=-1){const r=document.createElement("img");let i=e.indexOf("data:image"),a=e.substring(i,e.length);r.src=a,await r.decode(),r.width=Math.max(r.width,32),r.height=Math.max(r.height,32);const o=await createImageBitmap(r,{resizeWidth:r.width,resizeHeight:r.height,imageOrientation:this.flipY?"flipY":"from-image",premultiplyAlpha:"none"});this.format=X.rgba8unorm,this.generate(o)}else return new Promise((r,i)=>{fetch(e,{headers:Object.assign({Accept:"image/avif,image/webp,*/*"},t?.headers)}).then(a=>{Li.read(e,a,t).then(o=>{let n=new Blob([o],{type:"image/jpeg"});o=null,this.loadFromBlob(n).then(()=>{r(!0)})})})});return!0}imageData;async loadFromBlob(e){this.imageData=e;let t=await createImageBitmap(e,{imageOrientation:this.flipY?"flipY":"from-image",premultiplyAlpha:"none"});if(t.width<32||t.height<32){let r=Math.max(t.width,32),i=Math.max(t.height,32);t=await createImageBitmap(t,{resizeWidth:r,resizeHeight:i,imageOrientation:this.flipY?"flipY":"from-image",premultiplyAlpha:"none"})}return this.format=X.rgba8unorm,this.generate(t),!0}}class Li{baseUrl="";initUrl;_progress=0;constructor(){}async loadBinData(e,t){return this.baseUrl=_t.getPath(e),this.initUrl=e,new Promise(async(r,i)=>{fetch(e,{headers:t?.headers}).then(async a=>{if(a.ok){let o=await Li.read(e,a,t),n=o.buffer;o=null,r(n)}else throw Error("request rejected with status "+a.status)}).catch(a=>{t.onError&&t.onError(a),i(a)})})}async loadAsyncBitmapTexture(e,t){this.baseUrl=_t.getPath(e),this.initUrl=e;let r=new Mr;return r.url=e,r.name=_t.getURLName(e),await r.load(e,t),m.res.addTexture(e,r),r}async loadJson(e,t){return this.baseUrl=_t.getPath(e),this.initUrl=e,new Promise(async(r,i)=>{fetch(e,{headers:t?.headers}).then(async a=>{if(a.ok){let o=await Li.read(e,a,t);const l=new TextDecoder("utf-8").decode(o);o=null,r(JSON.parse(l))}else throw Error("request rejected with status"+a.status)}).catch(a=>{t.onError&&t.onError(a),i(a)})})}async loadTxt(e,t){return this.baseUrl=_t.getPath(e),new Promise(async(r,i)=>{fetch(e).then(async a=>{if(a.ok){let o=await Li.read(e,a,t);const l=new TextDecoder("utf-8").decode(o);o=null,r({data:l})}else throw Error("request rejected with status"+a.status)}).catch(a=>{t.onError&&t.onError(a),i(a)})})}static async read(e,t,r){const i=t.body.getReader(),a=+t.headers.get("Content-Length");let o=0,n=[],l=[];for(;;){const{done:c,value:f}=await i.read();if(c){a>0&&r&&r.onComplete&&r.onComplete.call(this,e);break}n.push(f),o+=f.length,a>0?r&&r.onProgress&&r.onProgress.call(this,o,a,e):l.push(f.length)}if(l.length>0)for(let c=0;c<n.length;c++)r&&r.onProgress&&r.onProgress.call(this,l[c],o,e),l[c]==o&&r&&r.onComplete&&r.onComplete.call(this,e);let h=new Uint8Array(o),u=0;for(let c of n)h.set(c,u),u+=c.length;return h}}var Ge=(s=>(s[s.TEXT=0]="TEXT",s[s.BIN=1]="BIN",s[s.JSON=2]="JSON",s))(Ge||{});class gt extends Li{async load(e,t,r,i){switch(t.format){case Ge.BIN:return new Promise(async(a,o)=>{this.loadBinData(e,r).then(async n=>{let l=new t;if(l.userData=i,l.baseUrl=this.baseUrl,l.initUrl=e,l.loaderFunctions=r,await l.parseBuffer(n),l.verification())a(l);else throw new Error("parser error")}).catch(n=>{o(n)})});case Ge.JSON:return new Promise((a,o)=>{this.loadJson(e,r).then(async n=>{let l=new t;l.userData=i,l.baseUrl=this.baseUrl,l.initUrl=e,l.loaderFunctions=r,await l.parseJson(n),a(l)}).catch(n=>{o(n)})});case Ge.TEXT:return new Promise((a,o)=>{this.loadTxt(e,r).then(async n=>{let l=new t;l.userData=i,l.baseUrl=this.baseUrl,l.initUrl=e,l.loaderFunctions=r,n.data?(await l.parseString(n.data),a(l)):o("text load is empty!")}).catch(n=>{o(n)})})}}}class st{static format=Ge.BIN;baseUrl;initUrl;loaderFunctions;userData;data;parseString(e){}parseJson(e){}parseBuffer(e){}parseTexture(e){throw this.parserError("Method not implemented.",-1)}parse(e){}verification(e){throw this.parserError("Method not implemented.",-1)}parserError(e,t){console.error(`error id:${t} ${e}`)}}class ds{asset;accessors;buffers;bufferViews;materials;meshes;nodes;scene=0;scenes;textures;cameras;skins;resources;images;samplers;animations;extensions}class Yg{nodes}class Xg{name;type;color;intensity;range;spot;isParsed}class Hg{name;rotation;scale;translation;children;matrix;mesh=-1;isParsed;dnode;camera;skin;nodeId;primitives;extensions;light}class jg{attributes;indices;material;mode;name;targets;extensions;morphTargetsRelative}class Kg{name;primitives;isParsed;dprimitives;weights;extras}class qg{bufferView;componentType;count;type;max;min;isParsed;daccessor;normalized;sparse;byteOffset;computeResult}const $g=window.SharedArrayBuffer?function(e){return e&&e.buffer&&(e.buffer instanceof ArrayBuffer||e.buffer instanceof window.SharedArrayBuffer)}:function(e){return e&&e.buffer&&e.buffer instanceof ArrayBuffer},To=5120,pa=5121,Do=5122,Mo=5123,No=5124,Vo=5125,Po=5126,ep=32819,tp=32820,rp=33635,ip=5131,ap=33640,sp=35899,op=35902,np=36269,lp=34042,Ru={};{const s=Ru;s[To]=Int8Array,s[pa]=Uint8Array,s[Do]=Int16Array,s[Mo]=Uint16Array,s[No]=Int32Array,s[Vo]=Uint32Array,s[Po]=Float32Array,s[ep]=Uint16Array,s[tp]=Uint16Array,s[rp]=Uint16Array,s[ip]=Uint16Array,s[ap]=Uint32Array,s[sp]=Uint32Array,s[op]=Uint32Array,s[np]=Uint32Array,s[lp]=Uint32Array}function hp(s){switch(s){case Int8Array:return To;case Uint8Array:return pa;case Uint8ClampedArray:return pa;case Int16Array:return Do;case Uint16Array:return Mo;case Int32Array:return No;case Uint32Array:return Vo;case Float32Array:return Po;default:throw new Error("unsupported typed array type")}}function up(s){if(s instanceof Int8Array)return To;if(s instanceof Uint8Array||s instanceof Uint8ClampedArray)return pa;if(s instanceof Int16Array)return Do;if(s instanceof Uint16Array)return Mo;if(s instanceof Int32Array)return No;if(s instanceof Uint32Array)return Vo;if(s instanceof Float32Array)return Po;throw new Error("unsupported typed array type")}function ko(s){const e=Ru[s];if(!e)throw new Error("unkonw gl type");return e}function cp(s,e=Float32Array){return $g(s)?s:new e(s)}class Lo{static _workerCode;static _workers=new Map;static async apply(e,t){if(!t.extensions)return;const r=t.extensions.KHR_draco_mesh_compression;if(!r)return;let i=this._workers.get(e.gltf);i||(i=new Worker(await this.initDecoder()),this._workers.set(e.gltf,i)),i.postMessage({type:"init",decoderConfig:{}});let a=e.parseBufferView(r.bufferView);if(!a.result){let o=await new Promise((n,l)=>{i.onmessage=h=>{const u=h.data;u.type=="decode"?n(u.result):u.type=="error"&&l(u.error)},i.postMessage({type:"decoder",buffer:a,attributes:r.attributes},[a])});a.result=o}return a.result}static unload(e){let t=this._workers.get(e);t&&(t.terminate(),this._workers.delete(e))}static async initDecoder(){if(!this._workerCode){let e=await new gt().loadTxt("https://cdn.rings.com/draco_decoder_gltf.js");const t=new Blob([e.data,"",`(${fp})()`],{type:"application/javascript"});this._workerCode=URL.createObjectURL(t)}return this._workerCode}}function fp(){let s,e;onmessage=t=>{const r=t.data;switch(r.type){case"init":s=r.decoderConfig,e=new Promise((o,n)=>{s.onModuleLoaded=l=>{o({draco:l})},DracoDecoderModule(s)});break;case"decoder":const i=r.buffer,a=r.attributes;e.then(o=>{const n=o.draco;let l=new n.Decoder,h=new n.DecoderBuffer;h.Init(new Int8Array(i),i.byteLength);let u,c;try{const f=l.GetEncodedGeometryType(h);f==n.TRIANGULAR_MESH?(c=new n.Mesh,u=l.DecodeBufferToMesh(h,c)):self.postMessage(new Error("INVALID_GEOMETRY_TYPE:"+f)),u.ok()||self.postMessage(new Error("DracoDecode:"+u.error_msg()));let g={};for(const p in a){let A=l.GetAttributeByUniqueId(c,a[p]);const U=A.num_components(),B=c.num_points()*U,S=B*Float32Array.BYTES_PER_ELEMENT,C=n.DT_FLOAT32,_=n._malloc(S);l.GetAttributeDataArrayForAllPoints(c,A,C,S,_);const y=new Float32Array(n.HEAPF32.buffer,_,B).slice();n._free(_),g[p]={data:y,numComponents:U,normalize:!1}}{const A=c.num_faces()*3,U=A*4,x=n._malloc(U);l.GetTrianglesUInt32Array(c,U,x);const B=new Uint32Array(n.HEAPF32.buffer,x,A).slice();n._free(x),g.indices={data:B,numComponents:1,normalize:!1}}self.postMessage({type:"decode",result:g})}catch(f){self.postMessage({type:"error",error:f.message})}finally{n.destroy(c),n.destroy(l),n.destroy(h)}});break}}}class Iu{gltf;constructor(e){this.gltf=e}parse(e){const t=this.gltf.cameras[e];if(!t)return this.errorMiss("camera",e);if(t.isParsed)return t.dcamera;t.isParsed=!0,t.dcamera=!1;const{name:r,type:i,perspective:a,orthographic:o}=t;if(i==="perspective"&&a){const{aspectRatio:n,yfov:l,zfar:h,znear:u}=a;t.dcamera=Object.assign({},{name:r,type:i,yfov:l,znear:u,aspectRatio:n,zfar:h})}else if(i==="orthographic"&&o){const{xmag:n,ymag:l,zfar:h,znear:u}=o;t.dcamera=Object.assign({},{name:r,type:i,xmag:n,ymag:l,zfar:h,znear:u})}return t.dcamera}errorMiss(e,t){throw new Error(e+t)}}class At extends st{static format=Ge.JSON;_gltf;async parseJson(e){this._gltf=new ds,this._gltf={...this._gltf,...e},this._gltf.resources={},await Promise.all([this.load_gltf_bin(),this.load_gltf_textures()]);let t=new gs,r=await t.parse(this.initUrl,this._gltf,this._gltf.scene);return t.destroy(),t=null,r?(this.data=r.rootNode,r.rootNode):(this._gltf=null,null)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}static _counter=0;static getMeshNameCounter(){return function(){return`GLTF_NO_NAME_PRIMITIVE_${At._counter++}`}}static getModelNameCounter(){let e=0;return function(){return`GLTF_NO_NAME_MESH_${e++}`}}static getTexCoordDefine(e){return`UV_NUM ${e}`}static getVertexColorDefine(e){return`HAS_VERTEXCOLOR ${e}`}static getBaseColorTextureDefine(){return"HAS_BASECOLORMAP"}static getMetalRoughnessDefine(){return"HAS_METALROUGHNESSMAP"}static getNormalMapDefine(){return"HAS_NORMALMAP"}static getEmissiveMapDefine(){return"HAS_EMISSIVEMAP"}static getOcclusionMapDefine(){return"HAS_OCCLUSIONMAP"}static getMorphTargetsDefine(e){return`MORPH_TARGET_NUM ${e}`}static getMorphtargetPositionDefine(){return"HAS_MORPH_POSITION"}static getMorphtargetNormalDefine(){return"HAS_MORPH_NORMAL"}static getMorphtargetTangentDefine(){return"HAS_MORPH_TANGENT"}static getJointsNumDefine(e){return`JOINTS_NUM ${e}`}static getJointVec8Define(){return"JOINT_VEC8"}static getHasNormalDefine(){return"HAS_NORMAL"}static getHasTangentDefine(){return"HAS_TANGENT"}static getHasNormalMapDefine(){return"HAS_NORMAL_MAP"}static getAlphaMaskDefine(){return"ALPHA_MASK"}static getAlphaBlendDefine(){return"ALPHA_BLEND"}static defaultMaterial={name:"GLTF_DEFAULT_MATERIAL",alphaCutoff:.33,alphaMode:"MASK",pbrMetallicRoughness:{name:"GLTF_DEFAULT_MATERIAL",defines:[],doubleSided:!1,baseColorFactor:[1,1,1,1],metallicFactor:1,roughnessFactor:1,emissiveFactor:[0,0,0]}};async load_gltf_bin(){if(this._gltf.buffers&&this._gltf.buffers.length>0){let e=[];for(let t=0;t<this._gltf.buffers.length;t++){const r=this._gltf.buffers[t];if(r.uri.substring(0,5)!=="data:"){let i=_t.parseUrl(this.baseUrl,r.uri);this.loaderFunctions?.onUrl&&(i=await this.loaderFunctions.onUrl(i));let a=new gt().loadBinData(i,this.loaderFunctions).then(o=>{this._gltf.resources[r.uri]=o});e.push(a)}}await Promise.all(e)}}async load_gltf_textures(){if(this._gltf,this._gltf.images){let e=[];for(let t=0;t<this._gltf.images.length;t++){const r=this._gltf.images[t];if(r.uri){let i=_t.parseUrl(this.baseUrl,r.uri);this.loaderFunctions?.onUrl&&(i=await this.loaderFunctions.onUrl(i));let a=new gt().loadAsyncBitmapTexture(i,this.loaderFunctions).then(o=>{o.name=_t.getURLName(r.uri),this._gltf.resources[o.name]=o});e.push(a)}}await Promise.all(e)}}}class Eu{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}async parse(e){const t=this.gltf.meshes[e];if(!t)return this.errorMiss("mesh",e);if(t.isParsed)return t.dprimitives;const r=t.primitives,i=t.extras,a=[];for(let o=0;o<r.length;o++){const n=r[o],{attributes:l,indices:h,material:u,mode:c,name:f,targets:g,morphTargetsRelative:p,extensions:A}=n;let U=t.name;for(let b in l)U+=b;U+=`indices:${h}`,U+=`material:${u}`;const x={attribArrays:{indices:[]},weights:[],defines:[],material:null,drawMode:null,meshName:null,modelName:null,morphTargetsRelative:!1,targetNames:i?i.targetNames:null};let B=!1,S=0,C=!1,_;A&&A.KHR_draco_mesh_compression&&(_=await Lo.apply(this.subParser,n));for(const b in l){const w=_?_[b]:this.parseAccessor(l[b]);if(w){let Q;switch(b){case"POSITION":Q=V.position;break;case"NORMAL":Q=V.normal,B=!0;break;case"TEXCOORD_0":Q=V.uv,S++;break;case"JOINTS_0":Q=V.joints0;break;case"JOINTS_1":Q=V.joints1,C=!0;break;case"WEIGHTS_0":Q=V.weights0;break;case"WEIGHTS_1":Q=V.weights1;break;default:Q=b}x.attribArrays[Q]=w}}if(B&&x.defines.push(At.getHasNormalDefine()),S&&x.defines.push(At.getTexCoordDefine(S)),C&&x.defines.push(At.getJointVec8Define()),h!==void 0){const b=_?_.indices:this.parseAccessor(h);b&&(x.attribArrays.indices=b)}const y=await this.parseMaterial(u);if(y&&(x.material=y,x.defines=x.defines.concat(y.defines)),x.drawMode=c===void 0?4:c,x.meshName=()=>U,x.modelName=t.name||At.getModelNameCounter(),g){x.defines.push(At.getMorphTargetsDefine(g.length)),x.morphTargetsRelative=!0;let b=!1,w=!1,Q=!1;for(let E=0;E<g.length;E++){const M=g[E];Object.keys(M).forEach(z=>{const Y=this.parseAccessor(M[z]);if(Y){let ee;switch(z){case"POSITION":ee=Yt.MORPH_POSITION_PREFIX+E,b=!0;break;case"NORMAL":ee=Yt.MORPH_NORMAL_PREFIX+E,w=!0;break;case"TANGENT":ee=Yt.MORPH_TANGENT_PREFIX+E,Q=!0;break;default:ee=!1}ee?x.attribArrays[ee]=Y:console.error(`glTF has unsupported morph target attribute ${z}`)}})}b&&x.defines.push(At.getMorphtargetPositionDefine()),w&&x.defines.push(At.getMorphtargetNormalDefine()),Q&&x.defines.push(At.getMorphtargetTangentDefine()),x.weights=t.weights||new Array(g.length).fill(0)}a.push(x)}return t.dprimitives=a,t.isParsed=!0,t.dprimitives}parseAccessor(e){return this.subParser.parseAccessor(e)}parseMaterial(e){return this.subParser.parseMaterial(e)}errorMiss(e,t){throw new Error(e+t)}}class wu{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}async parse(e){let t;if(e==null?t=At.defaultMaterial:t=this.gltf.materials[e],!t)return this.errorMiss("material",e);if(t.isParsed)return t.dmaterial;let{name:r,pbrMetallicRoughness:i,normalTexture:a,occlusionTexture:o,emissiveTexture:n,emissiveFactor:l,alphaMode:h,alphaCutoff:u,doubleSided:c,extensions:f}=t;const g={name:r,defines:[],doubleSided:!!c,baseColorFactor:[1,1,1,1],emissiveFactor:null,alphaCutoff:0,enableBlend:!1,baseColorTexture:null,metallicRoughnessTexture:null,normalTexture:null,occlusionTexture:null,emissiveTexture:null,extensions:null,baseMapOffsetSize:null,normalMapOffsetSize:null,emissiveMapOffsetSize:null,roughnessMapOffsetSize:null,metallicMapOffsetSize:null,aoMapOffsetSize:null,metallicFactor:0,roughnessFactor:1};if(i){const{baseColorFactor:p,metallicFactor:A,roughnessFactor:U,baseColorTexture:x,metallicRoughnessTexture:B}=i;if(Object.assign(g,{baseColorFactor:p||[1,1,1,1],metallicFactor:A===void 0?1:A,roughnessFactor:U===void 0?.5:U}),x){let S=x.extensions;if(S){let _=S.KHR_texture_transform;if(_){let y=new $(_.offset?_.offset[0]:0,_.offset?_.offset[1]:0,_.scale?_.scale[0]:1,_.scale?_.scale[1]:1);g.baseMapOffsetSize=y}}const C=await this.parseTexture(x.index);C?g.baseColorTexture=C:g.baseColorTexture=m.res.redTexture}if(a){let S=a.extensions;if(S){let _=S.KHR_texture_transform;if(_){let y=new $(_.offset?_.offset[0]:0,_.offset?_.offset[1]:0,_.scale?_.scale[0]:1,_.scale?_.scale[1]:1);g.normalMapOffsetSize=y}}const C=await this.parseTexture(a.index);C?g.normalTexture=C:g.normalTexture=m.res.normalTexture}if(B){let S=B.extensions;if(S){let _=S.KHR_texture_transform;if(_){let y=new $(_.offset?_.offset[0]:0,_.offset?_.offset[1]:0,_.scale?_.scale[0]:1,_.scale?_.scale[1]:1);g.roughnessMapOffsetSize=y}}const C=await this.parseTexture(B.index);C?g.metallicRoughnessTexture=C:g.metallicRoughnessTexture=m.res.blackTexture}}else Object.assign(g,{baseColorFactor:[1,1,1,1],metallicFactor:0,roughnessFactor:.5});if(g.baseColorFactor&&g.baseColorFactor[3]<1&&(h=h==="MASK"?"MASK":"BLEND"),h&&h!=="OPAQUE"&&(h==="MASK"&&(g.defines.push(At.getAlphaMaskDefine()),g.alphaCutoff=u===void 0?.5:u),h==="BLEND"&&(g.defines.push(At.getAlphaBlendDefine()),g.enableBlend=!0)),a){const p=await this.parseTexture(a.index);p?g.normalTexture=p:g.normalTexture=m.res.normalTexture}if(o){const p=await this.parseTexture(o.index);p&&(g.occlusionTexture=p)}if(l&&(g.emissiveFactor=l),n){const p=await this.parseTexture(n.index);p?g.emissiveTexture=p:g.emissiveTexture=m.res.blackTexture}return f&&(g.extensions=f),t.isParsed=!0,t.dmaterial=g,g}async parseTexture(e){return this.subParser.parseTexture(e)}errorMiss(e,t){throw new Error(e+t)}}class Tu{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}parse(e){const t=this.gltf.skins[e];if(!t)return this.errorMiss("skin",e);if(t.isParsed)return t.dskin;const{name:r,joints:i,inverseBindMatrices:a,skeleton:o}=t;if(!i)return this.errorMiss("skin.joints",e);t.isParsed=!0,t.dskin=!1;let n={name:r,skeleton:null,inverseBindMatrices:null,joints:i,defines:[At.getJointsNumDefine(i.length)]};if(o)n.skeleton=o;else{var l=-1;for(let h=0;h<this.gltf.nodes.length;h++)if(this.gltf.nodes[h].name=="root"){l=h;break}if(l==-1){let h=this.gltf.scenes[this.gltf.scene];l=h.nodes[h.nodes.length-1]}n.skeleton=l}if(n.inverseBindMatrices=Yt.IDENTITY_INVERSE_BIND_MATRICES,a!==void 0){const h=this.parseAccessor(a);if(h){const u=h.data,c=[];for(let f=0;f<u.length;f+=16)c.push(u.slice(f,f+16));n.inverseBindMatrices=c}else n=null}return t.dskin=n,t.dskin}parseAccessor(e){return this.subParser.parseAccessor(e)}errorMiss(e,t){throw new Error(e+t)}}class Du{name="";index=0;instanceID="";parent=null;scale=new d;rotation=new Z;translation=new d;constructor(e=""){this.name=e}}class Oo{index;worldMatrix;constructor(e,t=!1){this.index=e,this.worldMatrix=new I(!t)}}class ma{time;_skeleton;_jointsPose;mJointMatrixIndexTable;constructor(e,t=!1){this._skeleton=e,this._jointsPose=new Array(e.numJoint),this.mJointMatrixIndexTable=new Array(e.numJoint);for(let r=0;r<e.numJoint;r++){let i=new Oo(r,t);this._jointsPose[r]=i,this.mJointMatrixIndexTable[r]=i.worldMatrix.index}}buildSkeletonPose(e){let t=new d,r=new Z,i=new d,a=new Array(this._skeleton.numJoint);this.time=e[11]>0?e[11]:e[24];for(let o=0;o<this._skeleton.numJoint;o++){let n=12*o*4,l=new Float32Array(e.buffer,e.byteOffset+n,12),h=new I;t.set(l[0],l[1],l[2]),r.set(l[4],l[5],l[6],l[7]),i.set(l[8],l[9],l[10]),ls(r.getEulerAngles(),i,t,h),a[o]=h;let u=new Oo(o);const c=this._skeleton.getJointParentIndex(o);if(c<0)u.worldMatrix.copyFrom(h);else{let f=this._jointsPose[c];ih(f.worldMatrix,h,u.worldMatrix)}this._jointsPose[o]=u}}get numJoint(){return this._skeleton.numJoint}get joints(){return this._jointsPose}get jointMatrixIndexTable(){return this.mJointMatrixIndexTable}lerp(e,t,r){if(e&&t)for(let i=0;i<this._jointsPose.length;i++){let a=e._jointsPose[i],o=t._jointsPose[i];this._jointsPose[i].worldMatrix.lerp(a.worldMatrix,o.worldMatrix,r)}else for(let i=0;i<this._jointsPose.length;i++){let a=e._jointsPose[i];this._jointsPose[i].worldMatrix.copyFrom(a.worldMatrix)}}copyFrom(e){for(let t=0;t<this._jointsPose.length;t++)this._jointsPose[t].worldMatrix.copyFrom(e._jointsPose[t].worldMatrix)}reset(){for(let e=0;e<this._jointsPose.length;e++)this._jointsPose[e].worldMatrix.identity()}}class Mu extends qe{skeletonAnimation;constructor(e,t){super(),this.type=e,this.time=t}}class Vs{name="";_skeleton;_skeletonPoses;_animationClipData;_events;constructor(e,t,r,i){if(this.name=e,this._skeleton=t,this._animationClipData=i,r>0&&i){this._skeletonPoses=new Array(r);let a=12*t.numJoint;for(let o=0;o<r;o++){let n=a*o*4;const l=i.buffer instanceof ArrayBuffer?i.buffer:new Uint8Array(i.buffer).buffer;let h=new Float32Array(l,n,a),u=new ma(t);u.buildSkeletonPose(h),this._skeletonPoses[o]=u}}}get totalTime(){return this._skeletonPoses[this._skeletonPoses.length-1].time}get frameRate(){return this.totalTime/this._skeletonPoses.length}get skeleton(){return this._skeleton}get numFrame(){return this._skeletonPoses.length-1}get animationClipData(){return this._animationClipData}getSkeletonPose(e){return this._skeletonPoses[e]}getLerpSkeletonPose(e,t,r,i){let a=this.getSkeletonPose(e),o=this.getSkeletonPose(t);return i.lerp(a,o,r),i}createSubClip(e,t,r){var i=new Vs(e,this._skeleton,0,null);const a=Math.max(Math.floor(t/this.frameRate),0),o=Math.min(Math.floor(r/this.frameRate),this._skeletonPoses.length-1);i._skeletonPoses=this._skeletonPoses.slice(a,o);const n=12*this._skeleton.numJoint*4,l=this._animationClipData.buffer instanceof ArrayBuffer?this._animationClipData.buffer:new Uint8Array(this._animationClipData.buffer).buffer;return this._animationClipData=new Float32Array(l,a*n,(o-a)*n),i}addEvent(e,t){this._events||(this._events=new Array),this._events.push(new Mu(e,t))}removeEvent(e){this._events&&(this._events=this._events.filter(t=>t.type!=e))}getEvents(){return this._events}}class zo{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}parse(e){let t=new xn;return t.name="Id:"+e,t.count=0,t.boneData=[],t.boneMap=new Map,this.buildSkeleton(t,void 0,e),t}parseSkeletonAnimation(e,t){let r=new Sn;r.clipName=t.name,r.useSkeletonPos=!1,r.useSkeletonScale=!1;for(let i of t.channels){let a=t.samplers[i.sampler];const o=this.subParser.parseAccessor(a.input),n=this.subParser.parseAccessor(a.output);let l=i.target.node,h=i.target.path,u=this.gltf.nodes[l];if(!u||!e.boneMap.has(u.name))continue;let c=e.boneMap.get(u.name);switch(h){case"scale":{let f=new ni(n.numComponents);f.path="",f.attribute="",f.propertys=f.attribute.split("."),f.preInfinity=0,f.postInfinity=0,f.rotationOrder=0,r.useSkeletonScale=!0,r.scaleCurves.set(c.bonePath,f);for(let g=0;g<o.data.length;g++){const p=o.data[g],A=g*n.numComponents;let U=new Ma(0);U.time=p;const x=new d().set(n.data[A+0],n.data[A+1],n.data[A+2]);U.split(L.vector3,x,"value"),f.addKeyFrame(U)}}break;case"rotation":{let f=new ni(n.numComponents);f.path="",f.attribute="",f.propertys=f.attribute.split("."),f.preInfinity=0,f.postInfinity=0,f.rotationOrder=0,r.rotationCurves.set(c.bonePath,f);for(let g=0;g<o.data.length;g++){const p=o.data[g],A=g*n.numComponents;let U=new Ma(0);U.time=p;const x=new Z().set(n.data[A+0],n.data[A+1],n.data[A+2],n.data[A+3]);U.split(L.quaternion,x,"value"),f.addKeyFrame(U)}}break;case"translation":{let f=new ni(n.numComponents);f.path="",f.attribute="",f.propertys=f.attribute.split("."),f.preInfinity=0,f.postInfinity=0,f.rotationOrder=0,r.useSkeletonPos=!0,r.positionCurves.set(c.bonePath,f);for(let g=0;g<o.data.length;g++){const p=o.data[g],A=g*n.numComponents;let U=new Ma(0);U.time=p;const x=new d().set(n.data[A+0],n.data[A+1],n.data[A+2]);U.split(L.vector3,x,"value"),f.addKeyFrame(U)}}break}}return r}parseSkeletonAnimationOld(e,t){let r=this.subParser.parseAccessor(t.samplers[0].input),i=r.data.length,a=r.data[1]-r.data[0];r.data[r.data.length-1];let o=12*e.numJoint,n=new Float32Array(o*i);for(var l=0;l<e.numJoint;l++)for(var h=0;h<i;h++){var u=o*h+12*l;n[u+0]=1,n[u+1]=1,n[u+2]=1,n[u+3]=1}for(let A of t.channels){let U=t.samplers[A.sampler];const x=this.subParser.parseAccessor(U.input),B=this.subParser.parseAccessor(U.output);let S=A.target.node,C=A.target.path,_=this.gltf.nodes[S];if(!_)continue;let y=e.getJointByName(_.name);if(y)switch(C){case"scale":if(i*B.numComponents==B.data.length)for(var h=0;h<i;h++){var c=h*B.numComponents,u=o*h+12*y.index;n[u+0]=B.data[c+0],n[u+1]=B.data[c+1],n[u+2]=B.data[c+2],n[u+3]=1}else if(x.data.length==2){let b=0;x.data[0];let w=x.data[1];var f=0*B.numComponents;d.HELP_0.set(B.data[f+0],B.data[f+1],B.data[f+2]);var g=1*B.numComponents;d.HELP_1.set(B.data[g+0],B.data[g+1],B.data[g+2]);for(var h=0;h<i;h++){let E=b/w;d.HELP_2.lerp(d.HELP_0,d.HELP_1,E);var u=o*h+12*y.index;n[u+0]=d.HELP_2.x,n[u+1]=d.HELP_2.y,n[u+2]=d.HELP_2.z,n[u+3]=1,b+=a}}else throw new Error("Unsupported animation sampler interpolation.");break;case"rotation":if(i*B.numComponents==B.data.length)for(var h=0;h<i;h++){var c=h*B.numComponents,u=o*h+12*y.index+4;n[u+0]=B.data[c+0],n[u+1]=B.data[c+1],n[u+2]=B.data[c+2],n[u+3]=B.data[c+3]}else if(x.data.length==2){let b=0;x.data[0];let w=x.data[1];var f=0*B.numComponents;d.HELP_0.set(B.data[f+0],B.data[f+1],B.data[f+2],B.data[f+3]);var g=1*B.numComponents;d.HELP_1.set(B.data[g+0],B.data[g+1],B.data[g+2],B.data[g+3]);for(var h=0;h<i;h++){let z=b/w;d.HELP_2.lerp(d.HELP_0,d.HELP_1,z);var u=o*h+12*y.index+4;n[u+0]=d.HELP_2.x,n[u+1]=d.HELP_2.y,n[u+2]=d.HELP_2.z,n[u+3]=d.HELP_2.w,b+=a}}else throw new Error("Unsupported animation sampler interpolation.");break;case"translation":if(i*B.numComponents==B.data.length)for(var h=0;h<i;h++){var c=h*B.numComponents,u=o*h+12*y.index+8;n[u+0]=B.data[c+0],n[u+1]=B.data[c+1],n[u+2]=B.data[c+2],n[u+3]=x.data[h*x.numComponents]}else if(x.data.length==2){let b=0;x.data[0];let w=x.data[1];var f=0*B.numComponents;d.HELP_0.set(B.data[f+0],B.data[f+1],B.data[f+2]);var g=1*B.numComponents;d.HELP_1.set(B.data[g+0],B.data[g+1],B.data[g+2]);for(var h=0;h<i;h++){let z=b/w;d.HELP_2.lerp(d.HELP_0,d.HELP_1,z);var u=o*h+12*y.index+8;n[u+0]=d.HELP_2.x,n[u+1]=d.HELP_2.y,n[u+2]=d.HELP_2.z,n[u+3]=b,b+=a}}else throw new Error("Unsupported animation sampler interpolation.");break}}return new Vs(t.name,e,i,n)}buildSkeleton(e,t,r){let i=this.gltf.nodes[r];i.name||(i.name="Bone"+e.count);let a=new Un;if(a.boneName=i.name,a.bonePath=t?t.bonePath+"/"+i.name:i.name,a.parentBoneName=t?t.boneName:"",a.boneID=e.count++,a.parentBoneID=t?t.boneID:-1,a.instanceID="",a.parentInstanceID="",a.s=new d(1,1,1),i.scale&&a.s.set(i.scale[0],i.scale[1],i.scale[2]),a.q=new Z,i.rotation&&a.q.set(i.rotation[0],i.rotation[1],i.rotation[2],i.rotation[3]),a.t=new d,i.translation&&a.t.set(i.translation[0],i.translation[1],i.translation[2]),e.boneData.push(a),e.boneMap.set(a.boneName,a),i.children)for(let o of i.children)this.buildSkeleton(e,a,o)}buildSkeletonOld(e,t,r,i=0){let a=this.gltf.nodes[r];a.name||(a.name="Node_"+r);let o=new Du(a.name);if(o.parent=t,a.scale&&o.scale.set(a.scale[0],a.scale[1],a.scale[2]),a.rotation&&o.rotation.set(a.rotation[0],a.rotation[1],a.rotation[2],a.rotation[3]),a.translation&&o.translation.set(a.translation[0],a.translation[1],a.translation[2]),e.addJoint(o),a.children)for(let n of a.children)this.buildSkeletonOld(e,o,n,i+1)}}class Go{static list=[];static add(e){this.list.indexOf(e)==-1&&this.list.push(e)}static remove(e){let t=this.list.indexOf(e);t!=-1&&this.list.splice(t,1)}}class Aa extends Pe{name;size=1;lightData;dirFix=1;bindOnChange;needUpdateShadow=!0;realTimeShadow=!0;_castGI=!1;_castShadow=!1;_iesProfiles;constructor(){super()}init(){this.transform.object3D.bound=new Re(new d,new d),this.lightData=new hs,this.lightData.lightMatrixIndex=this.transform.worldMatrix.index}onChange(){this.bindOnChange&&this.bindOnChange(),this.transform.object3D.bound.setFromCenterAndSize(this.transform.worldPosition,new d(this.size,this.size,this.size)),this._castGI&&(G.instance.state.giLightingChange=!0),this._castShadow?(this.needUpdateShadow=!0,wt.addShadowLight(this)):wt.removeShadowLight(this),this.transform.view3D&&m.renderJobs&&m.renderJobs.get(this.transform.view3D).reflectionRenderer&&m.renderJobs.get(this.transform.view3D).reflectionRenderer.forceUpdate()}start(){this.transform.onPositionChange=()=>this.onPositionChange(),this.transform.onRotationChange=()=>this.onRotChange(),this.onPositionChange(),this.onRotChange()}onPositionChange(){this.lightData.lightPosition.copyFrom(this.transform.worldPosition),this.onChange()}onRotChange(){this.dirFix==1?this.lightData.direction.copyFrom(this.transform.forward):this.lightData.direction.copyFrom(this.transform.back),this.lightData.lightTangent.copyFrom(this.transform.up),this.onChange()}onScaleChange(){this.onChange()}onEnable(){this.onChange(),G.instance.addLight(this.transform.scene3D,this)}onDisable(){this.onChange(),G.instance.removeLight(this.transform.scene3D,this),wt.removeShadowLight(this)}set iesProfiles(e){this._iesProfiles=e,this.lightData.iesIndex=e.index,pr.use=!0,this.onChange()}get iesProfile(){return this._iesProfiles}get r(){return this.lightData.lightColor.r}set r(e){this.lightData.lightColor.r=e,this.onChange()}get g(){return this.lightData.lightColor.g}set g(e){this.lightData.lightColor.g=e,this.onChange()}get b(){return this.lightData.lightColor.b}set b(e){this.lightData.lightColor.b=e,this.onChange()}get lightColor(){return this.lightData.lightColor}set lightColor(e){this.lightData.lightColor=e,this.onChange()}get color(){return this.lightData.lightColor}set color(e){this.lightData.lightColor=e,this.onChange()}get intensity(){return this.lightData.intensity}set intensity(e){this.lightData.intensity=e,this.onChange()}set castShadow(e){e!=this._castShadow&&(this._castShadow=e,this.onChange())}get castShadow(){return this._castShadow}get shadowIndex(){return this.lightData.castShadowIndex}get castGI(){return this._castGI}set castGI(e){e?Go.add(this):Go.remove(this),this._castGI=e,e&&this.onChange()}get direction(){return this.lightData.direction}destroy(e){this.bindOnChange=null,G.instance.removeLight(this.transform.scene3D,this),wt.removeShadowLight(this),this.transform.eventDispatcher.removeEventListener(Tt.ROTATION_ONCHANGE,this.onRotChange,this),this.transform.eventDispatcher.removeEventListener(Tt.SCALE_ONCHANGE,this.onScaleChange,this),super.destroy(e)}}var dp=Object.getOwnPropertyDescriptor,gp=(s,e,t,r)=>{for(var i=r>1?void 0:r?dp(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Ua=class extends Aa{shadowCamera;constructor(){super()}init(){super.init(),this.object3D.name==""&&(this.object3D.name="DirectionLight_"+It()),this.radius=Number.MAX_SAFE_INTEGER,this.lightData.lightType=Xe.DirectionLight,this.lightData.linear=0,this.lightData.quadratic=.3}start(){super.start(),this.castGI=!0}get radius(){return this.lightData.range}set radius(s){this.lightData.range=s,this.onChange()}get indirect(){return this.lightData.quadratic}set indirect(s){this.lightData.quadratic=s,this.onChange()}debug(){}};Ua=gp([Wt(Ua,"DirectLight")],Ua);var pp=Object.getOwnPropertyDescriptor,mp=(s,e,t,r)=>{for(var i=r>1?void 0:r?pp(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let ji=class extends Aa{constructor(){super()}init(){super.init(),this.lightData.lightType=Xe.PointLight,this.object3D.name==""&&(this.object3D.name="PointLight"+It())}get range(){return this.lightData.range}set range(s){this.lightData.range=s,this.onChange()}get at(){return this.lightData.linear}set at(s){this.lightData.linear=s,this.onChange()}get radius(){return this.lightData.radius}set radius(s){this.lightData.radius=s,this.onChange()}get quadratic(){return this.lightData.quadratic}set quadratic(s){this.lightData.quadratic=s,this.onChange()}start(){this.transform.rotationX=90,super.start()}onUpdate(){}onGraphic(s){}debug(){}debugDraw(s){}};ji=mp([Wt(ji,"PointLight")],ji);var Ap=Object.getOwnPropertyDescriptor,Up=(s,e,t,r)=>{for(var i=r>1?void 0:r?Ap(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let xa=class extends Aa{constructor(){super()}init(){super.init(),this.lightData.lightType=Xe.SpotLight,this.object3D.name==""&&(this.object3D.name="SpotLight"+It())}get innerAngle(){return this.lightData.innerAngle/this.lightData.outerAngle*100}set innerAngle(s){this.lightData.innerAngle=ie(s,0,100)/100*this.lightData.outerAngle,this.onChange()}get outerAngle(){return this.lightData.outerAngle*Wi*2}set outerAngle(s){this.lightData.outerAngle=ie(s,1,179)*it*.5,this.onChange()}get radius(){return this.lightData.radius}set radius(s){this.lightData.radius=s,this.onChange()}get range(){return this.lightData.range}set range(s){this.lightData.range=s,this.onChange()}get at(){return this.lightData.linear}set at(s){this.lightData.linear=s,this.onChange()}start(){super.start(),this.lightData.lightType=Xe.SpotLight}onUpdate(){}onGraphic(s){}debug(){}debugDraw(s){}};xa=Up([Wt(xa,"SpotLight")],xa);class Nu{static apply(e,t,r){let i=t.extensions;if(i&&i.KHR_materials_clearcoat){r.shader.getDefaultColorShader().setDefine("USE_CLEARCOAT",!0);let a=i.KHR_materials_clearcoat;"clearcoatFactor"in a&&(t.clearcoatFactor=a.clearcoatFactor,r.clearcoatFactor=t.clearcoatFactor),"clearcoatRoughnessFactor"in a&&(t.clearcoatRoughnessFactor=a.clearcoatRoughnessFactor,r.clearcoatRoughnessFactor=t.clearcoatRoughnessFactor)}}}class Vu{static apply(e,t,r){let i=t.extensions;i&&i.KHR_materials_emissive_strength?(r.emissiveIntensity=i.KHR_materials_emissive_strength.emissiveStrength,r.emissiveMap==m.res.blackTexture&&(r.emissiveMap=m.res.whiteTexture)):r.emissiveIntensity=1}}class Pu{static apply(e,t,r){let i=t.extensions;i&&i.KHR_materials_unlit?r.supportLight=!0:r.supportLight=!1}}class ku{gltf;subParser;_testCount=8;_hasCastShadow=!1;constructor(e){this.gltf=e.gltf,this.subParser=e}async convertNodeToObject3D(e,t){const r=new q;if(r.name=e.name,r[Yt.GLTF_NODE_INDEX_PROPERTY]=e.nodeId,e.nodeObj=r,e.matrix&&(e.translation=[0,0,0],e.rotation=[0,0,0,1],e.scale=[1,1,1]),e.translation&&(r.transform.x=e.translation[0],r.transform.y=e.translation[1],r.transform.z=e.translation[2]),e.rotation){let i=new Z;i.setFromArray(e.rotation),r.transform.localRotQuat=i}return e.scale&&(r.transform.scaleX=e.scale[0],r.transform.scaleY=e.scale[1],r.transform.scaleZ=e.scale[2]),t.addChild(r),e.light&&this.convertLight(e,r),e.primitives&&this.convertprimitives(e,r),e.skeleton&&this.convertSkeletonAnim(r,e.skeleton),r}convertSkeletonAnim(e,t){let r=this.subParser.parseSkeleton(t.skeleton);m.res.addObj(r.name,r);let i=[];for(let o=0;o<this.gltf.animations.length;o++){let n=this.gltf.animations[o];n.name||(n.name=o.toString());let l=this.subParser.parseSkeletonAnimation(r,n);i.push(l)}let a=e.addComponent(Nr);a.avatar=r.name,a.clips=i}convertLight(e,t){switch(e.light.type){case"directional":let r=t.addComponent(Ua);t.name=e.light.name,r.intensity=e.light.intensity*.1,r.radius=Number.MAX_SAFE_INTEGER,r.dirFix=-1,this._hasCastShadow||(this._hasCastShadow=!0,r.castShadow=this._hasCastShadow),r.lightColor=e.light.color?new P(e.light.color[0],e.light.color[1],e.light.color[2]):new P(1,1,1,1),r.debug();break;case"point":if(this._testCount>0){let a=t.addComponent(ji);a.name=e.light.name,a.intensity=e.light.intensity?e.light.intensity*8*2:1,a.radius=8,a.at=2,a.range=e.light.range?e.light.range:8,a.lightColor=e.light.color?new P(e.light.color[0],e.light.color[1],e.light.color[2]):new P(1,1,1,1)}this._testCount--;break;case"spot":let i=t.addComponent(xa);i.name=e.light.name,i.intensity=e.light.intensity*5,i.radius=1,i.dirFix=-1,i.at=2,i.range=e.light.range?e.light.range:8,i.outerAngle=e.light.spot.outerConeAngle*Wi,i.lightColor=e.light.color?new P(e.light.color[0],e.light.color[1],e.light.color[2]):new P(1,1,1,1);break}}convertprimitives(e,t){for(let r=0;r<e.primitives.length;r++){const i=e.primitives[r];i.modelName;let a=i.material;a.name==null&&(a.name=It());let o,n=`matkey_${a.name}`;if(a&&this.gltf.resources[n])o=this.gltf.resources[n];else{let f=o=new ur;this.gltf.resources[n]=f,f.name=a.name;let g=a;if(g){const{baseColorTexture:p,baseColorFactor:A,metallicFactor:U,roughnessFactor:x,doubleSided:B,metallicRoughnessTexture:S,normalTexture:C,occlusionTexture:_,emissiveTexture:y,emissiveFactor:b,enableBlend:w,alphaCutoff:Q}=g;let E=f=this.applyMaterialExtensions(g,f);if("enableBlend"in g&&(g.enableBlend?(g.defines?.includes("ALPHA_BLEND")?E.blendMode=ae.ALPHA:E.blendMode=ae.NORMAL,E.castShadow=!1):E.blendMode=ae.NONE),"alphaCutoff"in g&&Q>0&&Q<1&&(E.setUniformFloat("alphaCutoff",Q),E.blendMode=ae.NORMAL,E.transparent=!0),g.baseMapOffsetSize&&E.setUniformVector4("baseMapOffsetSize",g.baseMapOffsetSize),g.normalMapOffsetSize&&E.setUniformVector4("normalMapOffsetSize",g.normalMapOffsetSize),g.emissiveMapOffsetSize&&E.setUniformVector4("emissiveMapOffsetSize",g.emissiveMapOffsetSize),g.roughnessMapOffsetSize&&E.setUniformVector4("roughnessMapOffsetSize",g.roughnessMapOffsetSize),g.metallicMapOffsetSize&&E.setUniformVector4("metallicMapOffsetSize",g.metallicMapOffsetSize),g.aoMapOffsetSize&&E.setUniformVector4("aoMapOffsetSize",g.aoMapOffsetSize),E.setUniformColor("baseColor",new P(A[0],A[1],A[2],A[3])),E.setUniformFloat("roughness",x),E.setUniformFloat("metallic",U),E.setUniformFloat("ao",1),E.doubleSide=B,p&&E.setTexture("baseMap",p),C&&E.setTexture("normalMap",C),S&&E.setTexture("maskMap",S),y&&E.setTexture("emissiveMap",y),b&&(b[0]>0||b[1]>0||b[2]>0)){E.shader.getTexture("emissiveMap")||E.shader.setTexture("emissiveMap",m.res.whiteTexture),E.shader.setDefine("USE_EMISSIVEMAP",!0),E.setUniformColor("emissiveColor",new P(b[0],b[1],b[2],b[3])),E.blendMode!=ae.NONE&&(E.blendMode=ae.ADD);let M=o.getUniformFloat("emissiveIntensity");(!M||M<=0)&&o.setUniformFloat("emissiveIntensity",1)}}}const{attribArrays:l,modelName:h,drawMode:u}=i;let c;if(!l.indices.data){let f=[],g=l.position.data.length/3/3;for(let p=0;p<g;p++){let A=p*3;f.push(A+2),f.push(A+0),f.push(A+1)}l.indices={data:new Uint8Array(f),normalize:!1,numComponents:1}}if(!l.normal){let f=[],g=l.position.data.length/3;for(let p=0;p<g;p++)f.push(0),f.push(0),f.push(0);l.normal={data:new Float32Array(f),normalize:!1,numComponents:3}}if(l.indices.data&&l.indices.data.length>3){let f=i.meshName();this.gltf.resources[f]&&(c=this.gltf.resources[f]);const g=new q;if(g.name=h+r,this.gltf.animations&&l[V.joints0]!=null){c||=this.createGeometryBase(h,l,i,e.skin),this.gltf.resources[f]=c;let p=this.gltf.nodes[e.skin.skeleton];p.dnode&&p.dnode.nodeObj?this.convertSkeletonAnim(t,e.skin):p.dnode.skeleton=e.skin;let A=g.addComponent(oi);A.geometry=c,A.material=o}else{c||=this.createGeometryBase(h,l,i),this.gltf.resources[f]=c,c.hasAttribute(V.joints0)&&c.vertexAttributeMap.delete(V.joints0);let p=g.addComponent(j);p.castShadow=!0,p.castGI=!0,p.geometry=c,p.material=o}e.skin&&e.skin.defines,t.addChild(g)}}}createGeometryBase(e,t,r,i){"indices"in t&&(t.indices.data.length>65534?t.indices.data=new Uint32Array(t.indices.data):t.indices.data=new Uint16Array(t.indices.data));let a=new Ne;if(a.name=e,"indices"in t&&(t.indices.data.length>65535?t.indices.data=new Uint32Array(t.indices.data):t.indices.data=new Uint16Array(t.indices.data)),r.morphTargetsRelative){let l=new Cn,h=r.targetNames;if(h&&h.length>0){l.shapeNames=[],l.shapeIndexs=[];for(let u=0;u<h.length;u++)l.shapeNames.push(h[u]),l.shapeIndexs.push(u)}l.vertexCount=t.position.data.length/3,l.blendCount=l.shapeNames.length,l.blendShapePropertyDatas=[],l.blendShapeMap=new Map;for(let u=0;u<l.blendCount;u++){let c=new vn;c.shapeName=l.shapeNames[u],c.shapeIndex=l.shapeIndexs[u],c.frameCount=1,c.blendPositionList=t[Yt.MORPH_POSITION_PREFIX+u].data,c.blendNormalList=t[Yt.MORPH_NORMAL_PREFIX+u].data,l.blendShapePropertyDatas.push(c),l.blendShapeMap.set(c.shapeName,c)}a.blendShapeData=l}a.morphTargetsRelative=r.morphTargetsRelative;let o=r.targetNames;if(o&&o.length>0){let l=a.morphTargetDictionary={};for(let h=0;h<o.length;h++)l[o[h]]=h}if(a.morphTargetDictionary){let l=t.position.data.length/3,h=new Float32Array(l);for(let u=0;u<l;u++)h[u]=u;t.vIndex={data:h,normalize:!1,numComponents:1}}for(const l in t){let h=t[l];a.setAttribute(l,h.data)}if(i){a.skinNames=new Array(i.joints.length);for(let l=0;l<i.joints.length;l++){const h=i.joints[l],u=this.gltf.nodes[h];a.skinNames[l]=u.name}a.bindPose=new Array(i.inverseBindMatrices.length);for(let l=0;l<i.inverseBindMatrices.length;l++){const h=i.inverseBindMatrices[l];let u=new I;u.rawData.set(h),a.bindPose[l]=u}}let n=a.getAttribute(V.indices);return a.addSubGeometry({indexStart:0,indexCount:n.data.length,vertexStart:0,index:0,vertexCount:0,firstStart:0,topology:0}),a}applyMaterialExtensions(e,t){return e.extensions&&(Nu.apply(this.gltf,e,t),Pu.apply(this.gltf,e,t),Vu.apply(this.gltf,e,t)),t}parseSkinJoints(e){let t=[];for(let r of e.joints){let i=this.gltf.nodes[r];t.push(i.name)}return t}}class gs{currentSceneName;gltf;initUrl;_generator;_version;_BASE64_MARKER=";base64,";_cameraParser=null;_meshParser=null;_materialParser=null;_skinParser=null;_skeletonParser=null;_converter=null;constructor(){}get version(){return this.version?this.version:this.gltf?this.gltf.asset?(this._version=this.gltf.asset.version,this.gltf.asset.minVersion&&(this._version+=`\r minVersion${this.gltf.asset.minVersion}`),this.version):this.errorMiss("asset"):(console.warn("glTF not loaded."),null)}async parse(e,t,r){this.gltf=t,this.initUrl=e;const{version:i,generator:a}=this.gltf.asset;if(this._generator=a,i!=="2.0")return console.error(`GLTFParser only support glTF 2.0 for now! Received glTF version: ${this.version}`),!1;const o={nodes:await this.parseScene(r),animations:this.parseAnimations(),name:this.currentSceneName};return await this.convertToNode(o)}destroy(){Lo.unload(this.gltf),this.gltf=null}async parseScene(e){const t=e||this.gltf.scene||0,r=this.gltf.scenes[t];if(typeof r>"u")return this.errorMiss("scene",t);this.currentSceneName=r.name||"GLTF_NO_NAME_SCENE";const i=[],a=r.nodes;for(let o=0;o<a.length;o++){const n=await this.parseNode(a[o]);n&&i.push(n)}return i}async parseNode(e){const t=this.gltf.nodes[e];if(!t)return this.errorMiss("node",e);if(t.isParsed)return t.dnode;const{name:r,matrix:i,translation:a,rotation:o,scale:n}=t,l={name:r,matrix:i,translation:a,rotation:o,scale:n,nodeId:e,camera:null,primitives:null,skin:null,children:null,light:null};if(t.camera!==void 0&&(l.camera=this.parseCamera(t.camera)),t.mesh!==void 0&&(l.primitives=await this.parseMesh(t.mesh)),t.extensions!==void 0&&this.applyNodeExtensions(t,l),t.skin!==void 0){const h=this.parseSkin(t.skin);h&&(l.skin=h)}if(l.children=[],t.children)for(let h=0;h<t.children.length;h++)l.children.push(await this.parseNode(t.children[h]));return t.dnode=l,t.isParsed=!0,t.dnode}errorMiss(e,t){throw new Error(e+t)}parseCamera(e){return this._cameraParser||(this._cameraParser=new Iu(this.gltf)),this._cameraParser.parse(e)}async parseMesh(e){return this._meshParser||(this._meshParser=new Eu(this)),this._meshParser.parse(e)}async parseTexture(e){let t=this.gltf.textures[e];if(t&&!t.dtexture){if(t&&t.source!=null){let r=this.gltf.images[t.source];if(r.uri){let i=r.uri;i=_t.getURLName(i),t.dtexture=this.gltf.resources[i]}else if(r.bufferView){let i=this.parseBufferView(r.bufferView),a=new Mr,o=new Blob([i],{type:r.mimeType});await a.loadFromBlob(o),t.dtexture=a}else t.dtexture=this.gltf.resources[r.name]}else if(t.name){let r=_t.getURLName(t.name);t.dtexture=this.gltf.resources[r]}}return t.dtexture||console.log("miss texture , please check texture!",e,t),t.dtexture}async parseMaterial(e){return this._materialParser||(this._materialParser=new wu(this)),this._materialParser.parse(e)}parseAnimations(){return[]}async parseObject3D(e,t){return this._converter||(this._converter=new ku(this)),this._converter.convertNodeToObject3D(e,t)}parseSkeleton(e){return this._skeletonParser||(this._skeletonParser=new zo(this)),this._skeletonParser.parse(e)}parseSkeletonAnimation(e,t){return this._skeletonParser||(this._skeletonParser=new zo(this)),this._skeletonParser.parseSkeletonAnimation(e,t)}async traverse(e,t){for(let r=0;r<t.length;r++){const i=await this.parseObject3D(t[r],e);await this.traverse(i,t[r].children)}}async convertToNode(e){const t=new q;t.name=e.name;const r=e.nodes;e.animations;const i=[],a=[];return await this.traverse(t,r),{rootNode:t,textures:i,animations:void 0,cameras:a}}parseSkin(e){return this._skinParser||(this._skinParser=new Tu(this)),this._skinParser.parse(e)}parseAccessor(e){const t=this.gltf.accessors[e];if(!t)return this.errorMiss("accessor",e);if(t.isParsed)return t.daccessor;t.isParsed=!0,t.daccessor=!1;const r=!!t.normalized,i=this.gltf.bufferViews[t.bufferView],a=i&&i.byteStride,o=ko(t.componentType);let n=1;switch(t.type){case"SCALAR":n=1;break;case"VEC2":n=2;break;case"VEC3":n=3;break;case"VEC4":case"MAT2":n=4;break;case"MAT3":n=9;break;case"MAT4":n=16;break;default:n=0;break}if(n===0)return console.error(`glTF has unknown data type in accessor: ${t.type}`),!1;const l=n*o.BYTES_PER_ELEMENT;let h;if(i!==void 0){if(h=this.parseBufferView(t.bufferView),!h)return t.daccessor}else h=new Uint8Array(l*t.count).buffer;let u=this.getTypedArrayFromArrayBuffer(h,a,t.byteOffset||0,o,n,t.count);if(t.sparse){const{count:c,indices:f,values:g}=t.sparse;u=new o(u);const p=f.byteOffset||0,A=this.gltf.bufferViews[f.bufferView],U=ko(f.componentType),x=this.parseBufferView(f.bufferView),B=this.getTypedArrayFromArrayBuffer(x,A.byteStride,p,U,1,c),S=g.byteOffset||0,C=this.gltf.bufferViews[g.bufferView],_=this.parseBufferView(g.bufferView),y=this.getTypedArrayFromArrayBuffer(_,C.byteStride,S,o,n,c);for(let b=0;b<B.length;b++)u.set(y.slice(b*n,b*n+n),B[b]*n)}return t.computeResult={typedArray:u,arrayType:o,numComponents:n},t.daccessor={data:u,numComponents:n,normalize:r},t.daccessor}getTypedArrayFromArrayBuffer(e,t,r,i,a,o){let n;const l=a*i.BYTES_PER_ELEMENT;if(t&&l!==t){const h=a*o;n=new i(h);for(let u=0;u<o;u++){const c=new i(e,r+u*t,a);for(let f=0;f<a;f++)n[u*a+f]=c[f]}}else n=new i(e,r,o*a);return n}parseBufferView(e){const t=this.gltf.bufferViews[e];if(!t)return this.errorMiss("bufferView",e);if(t.isParsed)return t.dbufferView;t.isParsed=!0,t.dbufferView=!1;const r=this.parseBuffer(t.buffer);if(r){const{byteOffset:i,byteLength:a}=t,o=new Uint8Array(r,i||0,a);t.dbufferView=new Uint8Array(o).buffer}return t.dbufferView}parseBuffer(e){const t=this.gltf.buffers[e];if(!t)return this.errorMiss("buffer",e);if(t.isParsed)return t.dbuffer;if(t.isParsed=!0,t.dbuffer=!1,t.uri.substring(0,5)!=="data:"){const r=t.uri,i=this.gltf.resources[r];i?i.byteLength===t.byteLength?t.dbuffer=this.gltf.resources[r]:console.error(`load gltf resource "${r}" at buffers[${e} failed, ArrayBuffer.byteLength not equals buffer's byteLength]`):console.error(`load gltf resource "${r}" at buffers[${e}] failed`)}else{const r=t.uri.indexOf(this._BASE64_MARKER)+this._BASE64_MARKER.length,i=window.atob(t.uri.substring(r)),a=new Uint8Array(i.length);for(let o=0;o<i.length;o++)a[o]=i.charCodeAt(o);t.dbuffer=a.buffer}return t.dbuffer}getLight(e){return this.gltf.extensions.KHR_lights_punctual.lights[e]}applyNodeExtensions(e,t){let r=e.extensions;r.KHR_lights_punctual&&this.gltf.extensions.KHR_lights_punctual&&(t.light=this.getLight(r.KHR_lights_punctual.light))}}class Lu{magic;version;length}class Ou{chunkLength;chunkType;chunkData}class Wo extends st{static format=Ge.BIN;_gltf;async parseBuffer(e){let t=new Uint8Array(e);t.pos=0;const r=this.parseHeader(t);if(r.magic!=1179937895)return console.error("invalid GLB file"),!1;if(r.version!==2)return console.error(`GLBParser only support glTF 2.0 for now! Received glTF version: ${r.version}`),!1;let i=[];for(;t.pos<t.length;){let c=this.parseChunk(t);i.push(c)}if(i[0].chunkType!=1313821514)return console.error("invalid GLBChunk"),!1;let a="",o=65535,n=i[0].chunkData;for(let c=0;c<n.length;c+=o){let f=n.length-c;f=Math.min(f,o);let g=n.subarray(c,c+f);a+=String.fromCharCode(...g)}let l=JSON.parse(a);this._gltf=new ds,this._gltf={...this._gltf,...l},this._gltf.resources={};for(let c=0;c<this._gltf.buffers.length;c++){let f=this._gltf.buffers[c];f.isParsed=!0,f.dbuffer=i[c+1].chunkData.buffer}if(this._gltf.images)for(let c=0;c<this._gltf.images.length;c++){let f=this._gltf.images[c];f.name=f.name||"bufferView_"+f.bufferView.toString();const g=this._gltf.bufferViews[f.bufferView],p=this._gltf.buffers[g.buffer];let A=new Uint8Array(p.dbuffer,g.byteOffset,g.byteLength),U=new Blob([A],{type:f.mimeType}),x=new Mr;await x.loadFromBlob(U),x.name=f.name,this._gltf.resources[f.name]=x}let u=await new gs().parse(this.initUrl,this._gltf,this._gltf.scene);return u?(this.data=u.rootNode,u.rootNode):null}async parseJsonAndBuffer(e,t){this._gltf=new ds,this._gltf={...this._gltf,...e},this._gltf.resources={};let r=this._gltf.buffers[0];if(r.isParsed=!0,r.dbuffer=t,this._gltf.images)for(let o=0;o<this._gltf.images.length;o++){let n=this._gltf.images[o];n.name=n.name||"bufferView_"+n.bufferView.toString();const l=this._gltf.bufferViews[n.bufferView],h=this._gltf.buffers[l.buffer];let u=new Uint8Array(h.dbuffer,l.byteOffset,l.byteLength),c=new Blob([u],{type:n.mimeType}),f=new Mr;await f.loadFromBlob(c),f.name=n.name,this._gltf.resources[n.name]=f}let a=await new gs().parse(this.initUrl,this._gltf,this._gltf.scene);return a?(this.data=a.rootNode,a.rootNode):null}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}parseHeader(e){let t=e.pos,r=new Lu,i=new Uint32Array(e.buffer,t,3);return e.pos+=i.byteLength,r.magic=i[0],r.version=i[1],r.length=i[2],r}parseChunk(e){let t=e.pos,r=new Ou,i=new Uint32Array(e.buffer,t,2);t=e.pos+=i.byteLength,r.chunkLength=i[0],r.chunkType=i[1],r.chunkData=new Uint8Array(e.buffer,t,r.chunkLength);const a=new Uint8Array(r.chunkLength);for(let o=0;o<r.chunkLength;o++)a[o]=r.chunkData[o];return r.chunkData=a,e.pos+=r.chunkLength,r}}class zu extends pt{constructor(){super();let e=new Oe("PBRLItShader","PBRLItShader");e.setShaderEntry("VertMain","FragMain"),e.passType=H.COLOR,this.addRenderPass(e);let t=e.shaderState;t.acceptShadow=!0,t.castShadow=!0,t.receiveEnv=!0,t.acceptGI=!0,t.useLight=!0,this.setDefine("USE_BRDF",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformFloat("shadowBias",35e-5),this.setUniformColor("baseColor",new P(.75,.75,.75,1)),this.setUniformColor("emissiveColor",new P(0,0,0)),this.setUniformVector4("materialF0",new $(.04,.04,.04,1)),this.setUniformColor("specularColor",new P(.04,.04,.04)),this.setUniformFloat("envIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("roughness",1),this.setUniformFloat("metallic",1),this.setUniformFloat("ao",1),this.setUniformFloat("roughness_min",0),this.setUniformFloat("roughness_max",1),this.setUniformFloat("metallic_min",0),this.setUniformFloat("metallic_max",1),this.setUniformFloat("emissiveIntensity",0),this.setUniformFloat("alphaCutoff",0),this.setUniformFloat("ior",1.5),this.setUniformFloat("clearcoatFactor",0),this.setUniformFloat("clearcoatRoughnessFactor",0),this.setUniformColor("clearcoatColor",new P(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this.setUniformFloat("clearcoatIor",1.5),this.setUniformVector4("baseMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("normalMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("emissiveMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("roughnessMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("metallicMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("aoMapOffsetSize",new $(0,0,1,1)),this.baseMap=m.res.whiteTexture,this.normalMap=m.res.normalTexture,this.maskMap=m.res.maskTexture}get baseMap(){return this.getDefaultColorShader().getTexture("baseMap")}set baseMap(e){this.getDefaultColorShader().setTexture("baseMap",e)}get baseColor(){return this.getDefaultColorShader().getUniform("baseColor")}set baseColor(e){this.getDefaultColorShader().setUniformColor("baseColor",e)}get normalMap(){return this.getDefaultColorShader().getTexture("normalMap")}set normalMap(e){this.getDefaultColorShader().setTexture("normalMap",e)}get doubleSide(){return this.getDefaultColorShader().doubleSide}set doubleSide(e){this.getDefaultColorShader().doubleSide=e}get alphaCutoff(){return this.getDefaultColorShader().shaderState.alphaCutoff}set alphaCutoff(e){this.getDefaultColorShader().setDefine("USE_ALPHACUT",!0),this.getDefaultColorShader().shaderState.alphaCutoff=e,this.getDefaultColorShader().setUniform("alphaCutoff",e)}get emissiveColor(){return this.getDefaultColorShader().getUniform("emissiveColor")}set emissiveColor(e){this.getDefaultColorShader().setUniform("emissiveColor",e)}get emissiveIntensity(){return this.getDefaultColorShader().getUniform("emissiveIntensity")}set emissiveIntensity(e){this.getDefaultColorShader().setUniform("emissiveIntensity",e)}get transformUV1(){return this.getDefaultColorShader().uniforms.transformUV1.vector4}set transformUV1(e){this.getDefaultColorShader().setUniform("transformUV1",e)}get uvTransform_2(){return this.getDefaultColorShader().uniforms.transformUV2.vector4}set uvTransform_2(e){this.getDefaultColorShader().setUniform("transformUV2",e)}get depthWriteEnabled(){return this.getDefaultColorShader().shaderState.depthWriteEnabled}set depthWriteEnabled(e){this.getDefaultColorShader().shaderState.depthWriteEnabled=e}get materialF0(){return this.getDefaultColorShader().uniforms.materialF0.vector4}set materialF0(e){this.getDefaultColorShader().setUniform("materialF0",e)}get specularColor(){return this.getDefaultColorShader().uniforms.specularColor.color}set specularColor(e){this.getDefaultColorShader().setUniform("specularColor",e)}get roughness(){return this.getDefaultColorShader().uniforms.roughness.value}set roughness(e){this.getDefaultColorShader().setUniform("roughness",e)}get metallic(){return this.getDefaultColorShader().uniforms.metallic.value}set metallic(e){this.getDefaultColorShader().setUniform("metallic",e)}get ao(){return this.getDefaultColorShader().uniforms.ao.value}set ao(e){this.getDefaultColorShader().setUniform("ao",e)}get metallic_min(){return this.getDefaultColorShader().uniforms.metallic_min.value}set metallic_min(e){this.getDefaultColorShader().setUniform("metallic_min",e)}get metallic_max(){return this.getDefaultColorShader().uniforms.metallic_max.value}set metallic_max(e){this.getDefaultColorShader().setUniform("metallic_max",e)}get roughness_min(){return this.getDefaultColorShader().uniforms.roughness_min.value}set roughness_min(e){this.getDefaultColorShader().setUniform("roughness_min",e)}get roughness_max(){return this.getDefaultColorShader().uniforms.roughness_max.value}set roughness_max(e){this.getDefaultColorShader().setUniform("roughness_max",e)}get normalScale(){return this.getDefaultColorShader().uniforms.normalScale.value}set normalScale(e){this.getDefaultColorShader().setUniform("normalScale",e)}get maskMap(){return this.getDefaultColorShader().textures.maskMap}set maskMap(e){this.getDefaultColorShader().setDefine("USE_MR",!0),this.getDefaultColorShader().setTexture("maskMap",e)}set aoMap(e){e&&(this.getDefaultColorShader().setTexture("aoMap",e),e!=m.res.whiteTexture&&this.getDefaultColorShader().setDefine("USE_AOTEX",!0))}get aoMap(){return this.getDefaultColorShader().textures.aoMap}set clearCoatRoughnessMap(e){e&&(console.log("USE_CLEARCOAT_ROUGHNESS"),this.getDefaultColorShader().setTexture("clearCoatRoughnessMap",e),this.getDefaultColorShader().setDefine("USE_CLEARCOAT_ROUGHNESS",!0))}get clearCoatRoughnessMap(){return this.getDefaultColorShader().textures.clearCoatRoughnessMap}get brdfLUT(){return this.getDefaultColorShader().textures.brdfLUT}set brdfLUT(e){this.getDefaultColorShader().setTexture("brdfLUT",e),this.getDefaultColorShader().setTexture("brdflutMap",e)}get emissiveMap(){return this.getDefaultColorShader().textures.emissiveMap}set emissiveMap(e){this.getDefaultColorShader().setTexture("emissiveMap",e)}set envIntensity(e){this.getDefaultColorShader().setUniformFloat("envIntensity",e)}get envIntensity(){return this.getDefaultColorShader().uniforms.envIntensity.value}set ior(e){this.getDefaultColorShader().setUniformFloat("ior",e)}get ior(){return this.getDefaultColorShader().uniforms.ior.value}useCleanCoat(){this.getDefaultColorShader().setDefine("USE_CLEARCOAT",!0)}set clearcoatFactor(e){this.getDefaultColorShader().setUniformFloat("clearcoatFactor",e),this.useCleanCoat()}get clearcoatFactor(){return this.getDefaultColorShader().uniforms.clearcoatFactor.value}set clearcoatRoughnessFactor(e){this.getDefaultColorShader().setUniformFloat("clearcoatRoughnessFactor",e),this.useCleanCoat()}get clearcoatRoughnessFactor(){return this.getDefaultColorShader().uniforms.clearcoatRoughnessFactor.value}set clearcoatWeight(e){this.getDefaultColorShader().setUniformFloat("clearcoatWeight",e),this.useCleanCoat()}get clearcoatWeight(){return this.getDefaultColorShader().uniforms.clearcoatWeight.value}set clearcoatColor(e){this.getDefaultColorShader().setUniformColor("clearcoatColor",e),this.useCleanCoat()}get clearcoatColor(){return this.getDefaultColorShader().uniforms.clearcoatColor.color}}class ur extends yt{constructor(){super();let e=new zu;this.shader=e}clone(){let e=new ur,t=e.shader.getDefaultColorShader(),r=this.shader.getDefaultColorShader();return t.defineValue={...r.defineValue},t.setUniform("shadowBias",r.getUniform("shadowBias")),t.setUniform("baseColor",r.getUniform("baseColor")),t.setUniform("specularColor",r.getUniform("specularColor")),t.setUniform("emissiveColor",r.getUniform("emissiveColor")),t.setUniform("materialF0",r.getUniform("materialF0")),t.setUniform("envIntensity",r.getUniform("envIntensity")),t.setUniform("normalScale",r.getUniform("normalScale")),t.setUniform("roughness",r.getUniform("roughness")),t.setUniform("metallic",r.getUniform("metallic")),t.setUniform("ao",r.getUniform("ao")),t.setUniform("roughness_min",r.getUniform("roughness_min")),t.setUniform("roughness_max",r.getUniform("roughness_max")),t.setUniform("metallic_min",r.getUniform("metallic_min")),t.setUniform("metallic_max",r.getUniform("metallic_max")),t.setUniform("emissiveIntensity",r.getUniform("emissiveIntensity")),t.setUniform("alphaCutoff",r.getUniform("alphaCutoff")),t.setUniform("ior",r.getUniform("ior")),t.setUniform("clearcoatFactor",r.getUniform("clearcoatFactor")),t.setUniform("clearcoatRoughnessFactor",r.getUniform("clearcoatRoughnessFactor")),t.setUniform("clearcoatColor",r.getUniform("clearcoatColor")),t.setUniform("clearcoatWeight",r.getUniform("clearcoatWeight")),t.setUniform("clearcoatIor",r.getUniform("clearcoatIor")),t.setTexture("baseMap",r.getTexture("baseMap")),t.setTexture("normalMap",r.getTexture("normalMap")),t.setTexture("emissiveMap",r.getTexture("emissiveMap")),t.setTexture("aoMap",r.getTexture("aoMap")),t.setTexture("maskMap",r.getTexture("maskMap")),t.setTexture("empty",r.getTexture("empty")),t.setUniform("baseMapOffsetSize",r.getUniform("baseMapOffsetSize")),t.setUniform("normalMapOffsetSize",r.getUniform("normalMapOffsetSize")),t.setUniform("emissiveMapOffsetSize",r.getUniform("emissiveMapOffsetSize")),t.setUniform("roughnessMapOffsetSize",r.getUniform("roughnessMapOffsetSize")),t.setUniform("metallicMapOffsetSize",r.getUniform("metallicMapOffsetSize")),t.setUniform("aoMapOffsetSize",r.getUniform("aoMapOffsetSize")),e}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set maskMap(e){this.shader.setTexture("maskMap",e)}get maskMap(){return this.shader.getTexture("maskMap")}set normalMap(e){this.shader.setTexture("normalMap",e)}get normalMap(){return this.shader.getTexture("normalMap")}set emissiveMap(e){this.shader.setTexture("emissiveMap",e)}get emissiveMap(){return this.shader.getTexture("emissiveMap")}set aoMap(e){this.shader.setTexture("aoMap",e)}get aoMap(){return this.shader.getTexture("aoMap")}set clearCoatRoughnessMap(e){this.shader.setTexture("clearCoatRoughnessMap",e),this.shader.setDefine("USE_CLEARCOAT",!0),this.shader.setDefine("USE_CLEARCOAT_ROUGHNESS",!0)}get clearCoatRoughnessMap(){return this.shader.getTexture("clearCoatRoughnessMap")}set clearcoatColor(e){this.shader.setUniformColor("clearcoatColor",e),this.shader.setDefine("USE_CLEARCOAT",!0)}get clearcoatColor(){return this.shader.getUniformColor("clearcoatColor")}set clearcoatWeight(e){this.shader.setUniformFloat("clearcoatWeight",e),this.shader.setDefine("USE_CLEARCOAT",!0)}get clearcoatWeight(){return this.shader.getUniformFloat("clearcoatWeight")}set clearcoatFactor(e){this.shader.setUniformFloat("clearcoatFactor",e),this.shader.setDefine("USE_CLEARCOAT",!0)}get clearcoatFactor(){return this.shader.getUniformFloat("clearcoatFactor")}set clearcoatRoughnessFactor(e){this.shader.setUniformFloat("clearcoatRoughnessFactor",e),this.shader.setDefine("USE_CLEARCOAT",!0)}get clearcoatRoughnessFactor(){return this.shader.getUniformFloat("clearcoatRoughnessFactor")}set ior(e){this.shader.setUniformFloat("clearcoatIor",e)}get ior(){return this.shader.getUniformFloat("clearcoatIor")}set alphaCutoff(e){this.shader.setUniform("alphaCutoff",e)}get alphaCutoff(){return this.shader.getUniform("alphaCutoff")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}get roughness(){return this.shader.getUniformFloat("roughness")}set roughness(e){this.shader.setUniformFloat("roughness",e)}get metallic(){return this.shader.getUniformFloat("metallic")}set metallic(e){this.shader.setUniformFloat("metallic",e)}get emissiveColor(){return this.shader.getUniformColor("emissiveColor")}set emissiveColor(e){this.shader.setUniformColor("emissiveColor",e)}get emissiveIntensity(){return this.shader.getUniformFloat("emissiveIntensity")}set emissiveIntensity(e){this.shader.setUniformFloat("emissiveIntensity",e)}get ao(){return this.shader.getUniform("ao")}set ao(e){this.shader.setUniform("ao",e)}}class Gu extends st{static format=Ge.TEXT;textData="";source_vertices;source_normals;source_tangents;source_textureCoords;matLibs;geometrys;activeGeo;facesMaterialsIndex;mtl;mtlUrl;async parseString(e){return this.source_vertices=[],this.source_normals=[],this.source_tangents=[],this.source_textureCoords=[],this.matLibs={},this.geometrys={},this.textData=e,await Promise.all([this.parserOBJ(),this.loadMTL()]),this.parser_mesh(),"null"}applyVector2(e,t,r){t[e]&&t[e].length>0?(r.push(t[e][0]),r.push(t[e][1])):(r.push(0),r.push(0))}applyVector3(e,t,r){r.push(t[e][0]),r.push(t[e][1]),r.push(t[e][2])}applyVector4(e,t,r){r.push(t[e][0]),r.push(t[e][1]),r.push(t[e][2]),r.push(t[e][3])}async loadMTL(){let t=await new gt().loadTxt(this.baseUrl+this.mtlUrl),r=t.data,i,a=r.split(`\r
|
|
7069
|
-
`);for(let l=0;l<a.length;l++){let h=a[l];var o=h.indexOf("#");o!=-1&&(h=h.substring(0,o)),h=h.trim();var n=h.split(/\s+/);n[0]==="newmtl"?(i={name:n[1]},this.matLibs[n[1]]=i):n[0].indexOf("map_")!=-1?(i[n[0]]=n[1],i.textures||(i.textures=[n[n.length-1]]),i.textures.push(n[n.length-1])):n.length==2?i[n[0]]=Number(n[1]):n.length==3?i[n[0]]=[Number(n[1]),Number(n[2])]:n.length==4&&(i[n[0]]=[Number(n[1]),Number(n[2]),Number(n[3])])}for(const l in this.matLibs){const h=this.matLibs[l];if(h.textures&&h.textures.length>0)for(let u=0;u<h.textures.length;u++){const c=
|
|
7070
|
-
`);for(let t=0;t<e.length;t++){const r=e[t];this.parserLine(r)}return this.textData="",!0}async parser_mesh(){let e=new q;for(const t in this.geometrys){const r=this.geometrys[t];r.vertex_arr=[],r.normal_arr=[],r.uv_arr=[],r.indeice_arr=[];let i=0;for(let u=0;u<r.source_faces.length;u++){const c=r.source_faces[u];let f=parseInt(c.indices[0])-1,g=parseInt(c.indices[1])-1,p=parseInt(c.indices[2])-1,A=parseInt(c.normal[0])-1,U=parseInt(c.normal[1])-1,x=parseInt(c.normal[2])-1,B=parseInt(c.texture[0])-1,S=parseInt(c.texture[1])-1,C=parseInt(c.texture[2])-1;if(this.applyVector3(f,this.source_vertices,r.vertex_arr),this.applyVector3(A,this.source_normals,r.normal_arr),this.applyVector2(B,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,this.applyVector3(g,this.source_vertices,r.vertex_arr),this.applyVector3(U,this.source_normals,r.normal_arr),this.applyVector2(S,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,this.applyVector3(p,this.source_vertices,r.vertex_arr),this.applyVector3(x,this.source_normals,r.normal_arr),this.applyVector2(C,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,c.indices.length>3){let _=parseInt(c.indices[3])-1,y=parseInt(c.normal[3])-1,b=parseInt(c.texture[3])-1;this.applyVector3(f,this.source_vertices,r.vertex_arr),this.applyVector3(A,this.source_normals,r.normal_arr),this.applyVector2(B,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,this.applyVector3(p,this.source_vertices,r.vertex_arr),this.applyVector3(x,this.source_normals,r.normal_arr),this.applyVector2(C,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,this.applyVector3(_,this.source_vertices,r.vertex_arr),this.applyVector3(y,this.source_normals,r.normal_arr),this.applyVector2(b,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++}}let a=new Ne;a.setIndices(new Uint32Array(r.indeice_arr)),a.setAttribute(V.position,new Float32Array(r.vertex_arr)),a.setAttribute(V.normal,new Float32Array(r.normal_arr)),a.setAttribute(V.uv,new Float32Array(r.uv_arr)),a.setAttribute(V.TEXCOORD_1,new Float32Array(r.uv_arr)),a.addSubGeometry({indexStart:0,indexCount:r.indeice_arr.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let o=new
|
|
7068
|
+
`,a+=u}),i}static compareVersion(e,t){e=e.split("."),t=t.split(".");let r=Math.max(e.length,t.length);for(;e.length<r;)e.push("0");for(;t.length<r;)t.push("0");for(let i=0;i<r;i++){let a=parseInt(e[i]),o=parseInt(t[i]);if(a>o)return 1;if(a<o)return-1}return 0}static buildRandomCode(){let e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",t=e.length,r="";for(let a=0;a<26;a++){let o=Math.floor(Math.random()*t);r+=e.charAt(o)}return`${new Date().getTime()}-${r}`}static UUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=Math.random()*16|0,r=e=="x"?t:t&3|8;return r.toString(16)})}static stringToHash(e){let t=0;if(e.length==0)return t;for(let r=0;r<e.length;r++){const i=e.charCodeAt(r);t=(t<<5)-t+i,t=t&t}return t}static parseUrl(e,t){return t.match(/^(blob|http|https):/)?t:e+t}}class Mr extends $e{_source;premultiplyAlpha="none";constructor(e=!0){super(),this.useMipmap=e,this.lodMinClamp=0,this.lodMaxClamp=4}get source(){return this._source}set source(e){this._source=e,this._source instanceof HTMLImageElement?this._source.decode().then(async()=>{if(this._source instanceof HTMLImageElement){const t=await createImageBitmap(this._source,{imageOrientation:this.flipY?"flipY":"from-image",premultiplyAlpha:"none"});this.generate(t)}}):(this._source instanceof HTMLCanvasElement||this._source instanceof ImageBitmap)&&this.generate(this._source)}async load(e,t){if(this.name=Ft.getURLName(e),e.indexOf(";base64")!=-1){const r=document.createElement("img");let i=e.indexOf("data:image"),a=e.substring(i,e.length);r.src=a,await r.decode(),r.width=Math.max(r.width,32),r.height=Math.max(r.height,32);const o=await createImageBitmap(r,{resizeWidth:r.width,resizeHeight:r.height,imageOrientation:this.flipY?"flipY":"from-image",premultiplyAlpha:"none"});this.format=X.rgba8unorm,this.generate(o)}else return new Promise((r,i)=>{fetch(e,{headers:Object.assign({Accept:"image/avif,image/webp,*/*"},t?.headers)}).then(a=>{Li.read(e,a,t).then(o=>{let n=new Blob([o],{type:"image/jpeg"});o=null,this.loadFromBlob(n).then(()=>{r(!0)})})})});return!0}imageData;async loadFromBlob(e){this.imageData=e;let t=await createImageBitmap(e,{imageOrientation:this.flipY?"flipY":"from-image",premultiplyAlpha:"none"});if(t.width<32||t.height<32){let r=Math.max(t.width,32),i=Math.max(t.height,32);t=await createImageBitmap(t,{resizeWidth:r,resizeHeight:i,imageOrientation:this.flipY?"flipY":"from-image",premultiplyAlpha:"none"})}return this.format=X.rgba8unorm,this.generate(t),!0}}class Li{baseUrl="";initUrl;_progress=0;constructor(){}async loadBinData(e,t){return this.baseUrl=Ft.getPath(e),this.initUrl=e,new Promise(async(r,i)=>{fetch(e,{headers:t?.headers}).then(async a=>{if(a.ok){let o=await Li.read(e,a,t),n=o.buffer;o=null,r(n)}else throw Error("request rejected with status "+a.status)}).catch(a=>{t.onError&&t.onError(a),i(a)})})}async loadAsyncBitmapTexture(e,t){this.baseUrl=Ft.getPath(e),this.initUrl=e;let r=new Mr;return r.url=e,r.name=Ft.getURLName(e),await r.load(e,t),m.res.addTexture(e,r),r}async loadJson(e,t){return this.baseUrl=Ft.getPath(e),this.initUrl=e,new Promise(async(r,i)=>{fetch(e,{headers:t?.headers}).then(async a=>{if(a.ok){let o=await Li.read(e,a,t);const l=new TextDecoder("utf-8").decode(o);o=null,r(JSON.parse(l))}else throw Error("request rejected with status"+a.status)}).catch(a=>{t.onError&&t.onError(a),i(a)})})}async loadTxt(e,t){return this.baseUrl=Ft.getPath(e),new Promise(async(r,i)=>{fetch(e).then(async a=>{if(a.ok){let o=await Li.read(e,a,t);const l=new TextDecoder("utf-8").decode(o);o=null,r({data:l})}else throw Error("request rejected with status"+a.status)}).catch(a=>{t.onError&&t.onError(a),i(a)})})}static async read(e,t,r){const i=t.body.getReader(),a=+t.headers.get("Content-Length");let o=0,n=[],l=[];for(;;){const{done:c,value:f}=await i.read();if(c){a>0&&r&&r.onComplete&&r.onComplete.call(this,e);break}n.push(f),o+=f.length,a>0?r&&r.onProgress&&r.onProgress.call(this,o,a,e):l.push(f.length)}if(l.length>0)for(let c=0;c<n.length;c++)r&&r.onProgress&&r.onProgress.call(this,l[c],o,e),l[c]==o&&r&&r.onComplete&&r.onComplete.call(this,e);let h=new Uint8Array(o),u=0;for(let c of n)h.set(c,u),u+=c.length;return h}}var Ge=(s=>(s[s.TEXT=0]="TEXT",s[s.BIN=1]="BIN",s[s.JSON=2]="JSON",s))(Ge||{});class gt extends Li{async load(e,t,r,i){switch(t.format){case Ge.BIN:return new Promise(async(a,o)=>{this.loadBinData(e,r).then(async n=>{let l=new t;if(l.userData=i,l.baseUrl=this.baseUrl,l.initUrl=e,l.loaderFunctions=r,await l.parseBuffer(n),l.verification())a(l);else throw new Error("parser error")}).catch(n=>{o(n)})});case Ge.JSON:return new Promise((a,o)=>{this.loadJson(e,r).then(async n=>{let l=new t;l.userData=i,l.baseUrl=this.baseUrl,l.initUrl=e,l.loaderFunctions=r,await l.parseJson(n),a(l)}).catch(n=>{o(n)})});case Ge.TEXT:return new Promise((a,o)=>{this.loadTxt(e,r).then(async n=>{let l=new t;l.userData=i,l.baseUrl=this.baseUrl,l.initUrl=e,l.loaderFunctions=r,n.data?(await l.parseString(n.data),a(l)):o("text load is empty!")}).catch(n=>{o(n)})})}}}class st{static format=Ge.BIN;baseUrl;initUrl;loaderFunctions;userData;data;parseString(e){}parseJson(e){}parseBuffer(e){}parseTexture(e){throw this.parserError("Method not implemented.",-1)}parse(e){}verification(e){throw this.parserError("Method not implemented.",-1)}parserError(e,t){console.error(`error id:${t} ${e}`)}}class ds{asset;accessors;buffers;bufferViews;materials;meshes;nodes;scene=0;scenes;textures;cameras;skins;resources;images;samplers;animations;extensions}class Yg{nodes}class Xg{name;type;color;intensity;range;spot;isParsed}class Hg{name;rotation;scale;translation;children;matrix;mesh=-1;isParsed;dnode;camera;skin;nodeId;primitives;extensions;light}class jg{attributes;indices;material;mode;name;targets;extensions;morphTargetsRelative}class Kg{name;primitives;isParsed;dprimitives;weights;extras}class qg{bufferView;componentType;count;type;max;min;isParsed;daccessor;normalized;sparse;byteOffset;computeResult}const $g=window.SharedArrayBuffer?function(e){return e&&e.buffer&&(e.buffer instanceof ArrayBuffer||e.buffer instanceof window.SharedArrayBuffer)}:function(e){return e&&e.buffer&&e.buffer instanceof ArrayBuffer},To=5120,pa=5121,Do=5122,Mo=5123,No=5124,Vo=5125,Po=5126,ep=32819,tp=32820,rp=33635,ip=5131,ap=33640,sp=35899,op=35902,np=36269,lp=34042,Ru={};{const s=Ru;s[To]=Int8Array,s[pa]=Uint8Array,s[Do]=Int16Array,s[Mo]=Uint16Array,s[No]=Int32Array,s[Vo]=Uint32Array,s[Po]=Float32Array,s[ep]=Uint16Array,s[tp]=Uint16Array,s[rp]=Uint16Array,s[ip]=Uint16Array,s[ap]=Uint32Array,s[sp]=Uint32Array,s[op]=Uint32Array,s[np]=Uint32Array,s[lp]=Uint32Array}function hp(s){switch(s){case Int8Array:return To;case Uint8Array:return pa;case Uint8ClampedArray:return pa;case Int16Array:return Do;case Uint16Array:return Mo;case Int32Array:return No;case Uint32Array:return Vo;case Float32Array:return Po;default:throw new Error("unsupported typed array type")}}function up(s){if(s instanceof Int8Array)return To;if(s instanceof Uint8Array||s instanceof Uint8ClampedArray)return pa;if(s instanceof Int16Array)return Do;if(s instanceof Uint16Array)return Mo;if(s instanceof Int32Array)return No;if(s instanceof Uint32Array)return Vo;if(s instanceof Float32Array)return Po;throw new Error("unsupported typed array type")}function ko(s){const e=Ru[s];if(!e)throw new Error("unkonw gl type");return e}function cp(s,e=Float32Array){return $g(s)?s:new e(s)}class Lo{static _workerCode;static _workers=new Map;static async apply(e,t){if(!t.extensions)return;const r=t.extensions.KHR_draco_mesh_compression;if(!r)return;let i=this._workers.get(e.gltf);i||(i=new Worker(await this.initDecoder()),this._workers.set(e.gltf,i)),i.postMessage({type:"init",decoderConfig:{}});let a=e.parseBufferView(r.bufferView);if(!a.result){let o=await new Promise((n,l)=>{i.onmessage=h=>{const u=h.data;u.type=="decode"?n(u.result):u.type=="error"&&l(u.error)},i.postMessage({type:"decoder",buffer:a,attributes:r.attributes},[a])});a.result=o}return a.result}static unload(e){let t=this._workers.get(e);t&&(t.terminate(),this._workers.delete(e))}static async initDecoder(){if(!this._workerCode){let e=await new gt().loadTxt("https://cdn.rings.com/draco_decoder_gltf.js");const t=new Blob([e.data,"",`(${fp})()`],{type:"application/javascript"});this._workerCode=URL.createObjectURL(t)}return this._workerCode}}function fp(){let s,e;onmessage=t=>{const r=t.data;switch(r.type){case"init":s=r.decoderConfig,e=new Promise((o,n)=>{s.onModuleLoaded=l=>{o({draco:l})},DracoDecoderModule(s)});break;case"decoder":const i=r.buffer,a=r.attributes;e.then(o=>{const n=o.draco;let l=new n.Decoder,h=new n.DecoderBuffer;h.Init(new Int8Array(i),i.byteLength);let u,c;try{const f=l.GetEncodedGeometryType(h);f==n.TRIANGULAR_MESH?(c=new n.Mesh,u=l.DecodeBufferToMesh(h,c)):self.postMessage(new Error("INVALID_GEOMETRY_TYPE:"+f)),u.ok()||self.postMessage(new Error("DracoDecode:"+u.error_msg()));let g={};for(const p in a){let A=l.GetAttributeByUniqueId(c,a[p]);const U=A.num_components(),B=c.num_points()*U,S=B*Float32Array.BYTES_PER_ELEMENT,C=n.DT_FLOAT32,_=n._malloc(S);l.GetAttributeDataArrayForAllPoints(c,A,C,S,_);const y=new Float32Array(n.HEAPF32.buffer,_,B).slice();n._free(_),g[p]={data:y,numComponents:U,normalize:!1}}{const A=c.num_faces()*3,U=A*4,x=n._malloc(U);l.GetTrianglesUInt32Array(c,U,x);const B=new Uint32Array(n.HEAPF32.buffer,x,A).slice();n._free(x),g.indices={data:B,numComponents:1,normalize:!1}}self.postMessage({type:"decode",result:g})}catch(f){self.postMessage({type:"error",error:f.message})}finally{n.destroy(c),n.destroy(l),n.destroy(h)}});break}}}class Iu{gltf;constructor(e){this.gltf=e}parse(e){const t=this.gltf.cameras[e];if(!t)return this.errorMiss("camera",e);if(t.isParsed)return t.dcamera;t.isParsed=!0,t.dcamera=!1;const{name:r,type:i,perspective:a,orthographic:o}=t;if(i==="perspective"&&a){const{aspectRatio:n,yfov:l,zfar:h,znear:u}=a;t.dcamera=Object.assign({},{name:r,type:i,yfov:l,znear:u,aspectRatio:n,zfar:h})}else if(i==="orthographic"&&o){const{xmag:n,ymag:l,zfar:h,znear:u}=o;t.dcamera=Object.assign({},{name:r,type:i,xmag:n,ymag:l,zfar:h,znear:u})}return t.dcamera}errorMiss(e,t){throw new Error(e+t)}}class Ut extends st{static format=Ge.JSON;_gltf;async parseJson(e){this._gltf=new ds,this._gltf={...this._gltf,...e},this._gltf.resources={},await Promise.all([this.load_gltf_bin(),this.load_gltf_textures()]);let t=new gs,r=await t.parse(this.initUrl,this._gltf,this._gltf.scene);return t.destroy(),t=null,r?(this.data=r.rootNode,r.rootNode):(this._gltf=null,null)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}static _counter=0;static getMeshNameCounter(){return function(){return`GLTF_NO_NAME_PRIMITIVE_${Ut._counter++}`}}static getModelNameCounter(){let e=0;return function(){return`GLTF_NO_NAME_MESH_${e++}`}}static getTexCoordDefine(e){return`UV_NUM ${e}`}static getVertexColorDefine(e){return`HAS_VERTEXCOLOR ${e}`}static getBaseColorTextureDefine(){return"HAS_BASECOLORMAP"}static getMetalRoughnessDefine(){return"HAS_METALROUGHNESSMAP"}static getNormalMapDefine(){return"HAS_NORMALMAP"}static getEmissiveMapDefine(){return"HAS_EMISSIVEMAP"}static getOcclusionMapDefine(){return"HAS_OCCLUSIONMAP"}static getMorphTargetsDefine(e){return`MORPH_TARGET_NUM ${e}`}static getMorphtargetPositionDefine(){return"HAS_MORPH_POSITION"}static getMorphtargetNormalDefine(){return"HAS_MORPH_NORMAL"}static getMorphtargetTangentDefine(){return"HAS_MORPH_TANGENT"}static getJointsNumDefine(e){return`JOINTS_NUM ${e}`}static getJointVec8Define(){return"JOINT_VEC8"}static getHasNormalDefine(){return"HAS_NORMAL"}static getHasTangentDefine(){return"HAS_TANGENT"}static getHasNormalMapDefine(){return"HAS_NORMAL_MAP"}static getAlphaMaskDefine(){return"ALPHA_MASK"}static getAlphaBlendDefine(){return"ALPHA_BLEND"}static defaultMaterial={name:"GLTF_DEFAULT_MATERIAL",alphaCutoff:.33,alphaMode:"MASK",pbrMetallicRoughness:{name:"GLTF_DEFAULT_MATERIAL",defines:[],doubleSided:!1,baseColorFactor:[1,1,1,1],metallicFactor:1,roughnessFactor:1,emissiveFactor:[0,0,0]}};async load_gltf_bin(){if(this._gltf.buffers&&this._gltf.buffers.length>0){let e=[];for(let t=0;t<this._gltf.buffers.length;t++){const r=this._gltf.buffers[t];if(r.uri.substring(0,5)!=="data:"){let i=Ft.parseUrl(this.baseUrl,r.uri);this.loaderFunctions?.onUrl&&(i=await this.loaderFunctions.onUrl(i));let a=new gt().loadBinData(i,this.loaderFunctions).then(o=>{this._gltf.resources[r.uri]=o});e.push(a)}}await Promise.all(e)}}async load_gltf_textures(){if(this._gltf,this._gltf.images){let e=[];for(let t=0;t<this._gltf.images.length;t++){const r=this._gltf.images[t];if(r.uri){let i=Ft.parseUrl(this.baseUrl,r.uri);this.loaderFunctions?.onUrl&&(i=await this.loaderFunctions.onUrl(i));let a=new gt().loadAsyncBitmapTexture(i,this.loaderFunctions).then(o=>{o.name=Ft.getURLName(r.uri),this._gltf.resources[o.name]=o});e.push(a)}}await Promise.all(e)}}}class Eu{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}async parse(e){const t=this.gltf.meshes[e];if(!t)return this.errorMiss("mesh",e);if(t.isParsed)return t.dprimitives;const r=t.primitives,i=t.extras,a=[];for(let o=0;o<r.length;o++){const n=r[o],{attributes:l,indices:h,material:u,mode:c,name:f,targets:g,morphTargetsRelative:p,extensions:A}=n;let U=t.name;for(let b in l)U+=b;U+=`indices:${h}`,U+=`material:${u}`;const x={attribArrays:{indices:[]},weights:[],defines:[],material:null,drawMode:null,meshName:null,modelName:null,morphTargetsRelative:!1,targetNames:i?i.targetNames:null};let B=!1,S=0,C=!1,_;A&&A.KHR_draco_mesh_compression&&(_=await Lo.apply(this.subParser,n));for(const b in l){const w=_?_[b]:this.parseAccessor(l[b]);if(w){let Q;switch(b){case"POSITION":Q=V.position;break;case"NORMAL":Q=V.normal,B=!0;break;case"TEXCOORD_0":Q=V.uv,S++;break;case"JOINTS_0":Q=V.joints0;break;case"JOINTS_1":Q=V.joints1,C=!0;break;case"WEIGHTS_0":Q=V.weights0;break;case"WEIGHTS_1":Q=V.weights1;break;default:Q=b}x.attribArrays[Q]=w}}if(B&&x.defines.push(Ut.getHasNormalDefine()),S&&x.defines.push(Ut.getTexCoordDefine(S)),C&&x.defines.push(Ut.getJointVec8Define()),h!==void 0){const b=_?_.indices:this.parseAccessor(h);b&&(x.attribArrays.indices=b)}const y=await this.parseMaterial(u);if(y&&(x.material=y,x.defines=x.defines.concat(y.defines)),x.drawMode=c===void 0?4:c,x.meshName=()=>U,x.modelName=t.name||Ut.getModelNameCounter(),g){x.defines.push(Ut.getMorphTargetsDefine(g.length)),x.morphTargetsRelative=!0;let b=!1,w=!1,Q=!1;for(let E=0;E<g.length;E++){const M=g[E];Object.keys(M).forEach(z=>{const Y=this.parseAccessor(M[z]);if(Y){let ee;switch(z){case"POSITION":ee=Yt.MORPH_POSITION_PREFIX+E,b=!0;break;case"NORMAL":ee=Yt.MORPH_NORMAL_PREFIX+E,w=!0;break;case"TANGENT":ee=Yt.MORPH_TANGENT_PREFIX+E,Q=!0;break;default:ee=!1}ee?x.attribArrays[ee]=Y:console.error(`glTF has unsupported morph target attribute ${z}`)}})}b&&x.defines.push(Ut.getMorphtargetPositionDefine()),w&&x.defines.push(Ut.getMorphtargetNormalDefine()),Q&&x.defines.push(Ut.getMorphtargetTangentDefine()),x.weights=t.weights||new Array(g.length).fill(0)}a.push(x)}return t.dprimitives=a,t.isParsed=!0,t.dprimitives}parseAccessor(e){return this.subParser.parseAccessor(e)}parseMaterial(e){return this.subParser.parseMaterial(e)}errorMiss(e,t){throw new Error(e+t)}}class wu{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}async parse(e){let t;if(e==null?t=Ut.defaultMaterial:t=this.gltf.materials[e],!t)return this.errorMiss("material",e);if(t.isParsed)return t.dmaterial;let{name:r,pbrMetallicRoughness:i,normalTexture:a,occlusionTexture:o,emissiveTexture:n,emissiveFactor:l,alphaMode:h,alphaCutoff:u,doubleSided:c,extensions:f}=t;const g={name:r,defines:[],doubleSided:!!c,baseColorFactor:[1,1,1,1],emissiveFactor:null,alphaCutoff:0,enableBlend:!1,baseColorTexture:null,metallicRoughnessTexture:null,normalTexture:null,occlusionTexture:null,emissiveTexture:null,extensions:null,baseMapOffsetSize:null,normalMapOffsetSize:null,emissiveMapOffsetSize:null,roughnessMapOffsetSize:null,metallicMapOffsetSize:null,aoMapOffsetSize:null,metallicFactor:0,roughnessFactor:1};if(i){const{baseColorFactor:p,metallicFactor:A,roughnessFactor:U,baseColorTexture:x,metallicRoughnessTexture:B}=i;if(Object.assign(g,{baseColorFactor:p||[1,1,1,1],metallicFactor:A===void 0?1:A,roughnessFactor:U===void 0?.5:U}),x){let S=x.extensions;if(S){let _=S.KHR_texture_transform;if(_){let y=new $(_.offset?_.offset[0]:0,_.offset?_.offset[1]:0,_.scale?_.scale[0]:1,_.scale?_.scale[1]:1);g.baseMapOffsetSize=y}}const C=await this.parseTexture(x.index);C?g.baseColorTexture=C:g.baseColorTexture=m.res.redTexture}if(a){let S=a.extensions;if(S){let _=S.KHR_texture_transform;if(_){let y=new $(_.offset?_.offset[0]:0,_.offset?_.offset[1]:0,_.scale?_.scale[0]:1,_.scale?_.scale[1]:1);g.normalMapOffsetSize=y}}const C=await this.parseTexture(a.index);C?g.normalTexture=C:g.normalTexture=m.res.normalTexture}if(B){let S=B.extensions;if(S){let _=S.KHR_texture_transform;if(_){let y=new $(_.offset?_.offset[0]:0,_.offset?_.offset[1]:0,_.scale?_.scale[0]:1,_.scale?_.scale[1]:1);g.roughnessMapOffsetSize=y}}const C=await this.parseTexture(B.index);C?g.metallicRoughnessTexture=C:g.metallicRoughnessTexture=m.res.blackTexture}}else Object.assign(g,{baseColorFactor:[1,1,1,1],metallicFactor:0,roughnessFactor:.5});if(g.baseColorFactor&&g.baseColorFactor[3]<1&&(h=h==="MASK"?"MASK":"BLEND"),h&&h!=="OPAQUE"&&(h==="MASK"&&(g.defines.push(Ut.getAlphaMaskDefine()),g.alphaCutoff=u===void 0?.5:u),h==="BLEND"&&(g.defines.push(Ut.getAlphaBlendDefine()),g.enableBlend=!0)),a){const p=await this.parseTexture(a.index);p?g.normalTexture=p:g.normalTexture=m.res.normalTexture}if(o){const p=await this.parseTexture(o.index);p&&(g.occlusionTexture=p)}if(l&&(g.emissiveFactor=l),n){const p=await this.parseTexture(n.index);p?g.emissiveTexture=p:g.emissiveTexture=m.res.blackTexture}return f&&(g.extensions=f),t.isParsed=!0,t.dmaterial=g,g}async parseTexture(e){return this.subParser.parseTexture(e)}errorMiss(e,t){throw new Error(e+t)}}class Tu{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}parse(e){const t=this.gltf.skins[e];if(!t)return this.errorMiss("skin",e);if(t.isParsed)return t.dskin;const{name:r,joints:i,inverseBindMatrices:a,skeleton:o}=t;if(!i)return this.errorMiss("skin.joints",e);t.isParsed=!0,t.dskin=!1;let n={name:r,skeleton:null,inverseBindMatrices:null,joints:i,defines:[Ut.getJointsNumDefine(i.length)]};if(o)n.skeleton=o;else{var l=-1;for(let h=0;h<this.gltf.nodes.length;h++)if(this.gltf.nodes[h].name=="root"){l=h;break}if(l==-1){let h=this.gltf.scenes[this.gltf.scene];l=h.nodes[h.nodes.length-1]}n.skeleton=l}if(n.inverseBindMatrices=Yt.IDENTITY_INVERSE_BIND_MATRICES,a!==void 0){const h=this.parseAccessor(a);if(h){const u=h.data,c=[];for(let f=0;f<u.length;f+=16)c.push(u.slice(f,f+16));n.inverseBindMatrices=c}else n=null}return t.dskin=n,t.dskin}parseAccessor(e){return this.subParser.parseAccessor(e)}errorMiss(e,t){throw new Error(e+t)}}class Du{name="";index=0;instanceID="";parent=null;scale=new d;rotation=new Z;translation=new d;constructor(e=""){this.name=e}}class Oo{index;worldMatrix;constructor(e,t=!1){this.index=e,this.worldMatrix=new I(!t)}}class ma{time;_skeleton;_jointsPose;mJointMatrixIndexTable;constructor(e,t=!1){this._skeleton=e,this._jointsPose=new Array(e.numJoint),this.mJointMatrixIndexTable=new Array(e.numJoint);for(let r=0;r<e.numJoint;r++){let i=new Oo(r,t);this._jointsPose[r]=i,this.mJointMatrixIndexTable[r]=i.worldMatrix.index}}buildSkeletonPose(e){let t=new d,r=new Z,i=new d,a=new Array(this._skeleton.numJoint);this.time=e[11]>0?e[11]:e[24];for(let o=0;o<this._skeleton.numJoint;o++){let n=12*o*4,l=new Float32Array(e.buffer,e.byteOffset+n,12),h=new I;t.set(l[0],l[1],l[2]),r.set(l[4],l[5],l[6],l[7]),i.set(l[8],l[9],l[10]),ls(r.getEulerAngles(),i,t,h),a[o]=h;let u=new Oo(o);const c=this._skeleton.getJointParentIndex(o);if(c<0)u.worldMatrix.copyFrom(h);else{let f=this._jointsPose[c];ih(f.worldMatrix,h,u.worldMatrix)}this._jointsPose[o]=u}}get numJoint(){return this._skeleton.numJoint}get joints(){return this._jointsPose}get jointMatrixIndexTable(){return this.mJointMatrixIndexTable}lerp(e,t,r){if(e&&t)for(let i=0;i<this._jointsPose.length;i++){let a=e._jointsPose[i],o=t._jointsPose[i];this._jointsPose[i].worldMatrix.lerp(a.worldMatrix,o.worldMatrix,r)}else for(let i=0;i<this._jointsPose.length;i++){let a=e._jointsPose[i];this._jointsPose[i].worldMatrix.copyFrom(a.worldMatrix)}}copyFrom(e){for(let t=0;t<this._jointsPose.length;t++)this._jointsPose[t].worldMatrix.copyFrom(e._jointsPose[t].worldMatrix)}reset(){for(let e=0;e<this._jointsPose.length;e++)this._jointsPose[e].worldMatrix.identity()}}class Mu extends qe{skeletonAnimation;constructor(e,t){super(),this.type=e,this.time=t}}class Vs{name="";_skeleton;_skeletonPoses;_animationClipData;_events;constructor(e,t,r,i){if(this.name=e,this._skeleton=t,this._animationClipData=i,r>0&&i){this._skeletonPoses=new Array(r);let a=12*t.numJoint;for(let o=0;o<r;o++){let n=a*o*4;const l=i.buffer instanceof ArrayBuffer?i.buffer:new Uint8Array(i.buffer).buffer;let h=new Float32Array(l,n,a),u=new ma(t);u.buildSkeletonPose(h),this._skeletonPoses[o]=u}}}get totalTime(){return this._skeletonPoses[this._skeletonPoses.length-1].time}get frameRate(){return this.totalTime/this._skeletonPoses.length}get skeleton(){return this._skeleton}get numFrame(){return this._skeletonPoses.length-1}get animationClipData(){return this._animationClipData}getSkeletonPose(e){return this._skeletonPoses[e]}getLerpSkeletonPose(e,t,r,i){let a=this.getSkeletonPose(e),o=this.getSkeletonPose(t);return i.lerp(a,o,r),i}createSubClip(e,t,r){var i=new Vs(e,this._skeleton,0,null);const a=Math.max(Math.floor(t/this.frameRate),0),o=Math.min(Math.floor(r/this.frameRate),this._skeletonPoses.length-1);i._skeletonPoses=this._skeletonPoses.slice(a,o);const n=12*this._skeleton.numJoint*4,l=this._animationClipData.buffer instanceof ArrayBuffer?this._animationClipData.buffer:new Uint8Array(this._animationClipData.buffer).buffer;return this._animationClipData=new Float32Array(l,a*n,(o-a)*n),i}addEvent(e,t){this._events||(this._events=new Array),this._events.push(new Mu(e,t))}removeEvent(e){this._events&&(this._events=this._events.filter(t=>t.type!=e))}getEvents(){return this._events}}class zo{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}parse(e){let t=new xn;return t.name="Id:"+e,t.count=0,t.boneData=[],t.boneMap=new Map,this.buildSkeleton(t,void 0,e),t}parseSkeletonAnimation(e,t){let r=new Sn;r.clipName=t.name,r.useSkeletonPos=!1,r.useSkeletonScale=!1;for(let i of t.channels){let a=t.samplers[i.sampler];const o=this.subParser.parseAccessor(a.input),n=this.subParser.parseAccessor(a.output);let l=i.target.node,h=i.target.path,u=this.gltf.nodes[l];if(!u||!e.boneMap.has(u.name))continue;let c=e.boneMap.get(u.name);switch(h){case"scale":{let f=new ni(n.numComponents);f.path="",f.attribute="",f.propertys=f.attribute.split("."),f.preInfinity=0,f.postInfinity=0,f.rotationOrder=0,r.useSkeletonScale=!0,r.scaleCurves.set(c.bonePath,f);for(let g=0;g<o.data.length;g++){const p=o.data[g],A=g*n.numComponents;let U=new Ma(0);U.time=p;const x=new d().set(n.data[A+0],n.data[A+1],n.data[A+2]);U.split(L.vector3,x,"value"),f.addKeyFrame(U)}}break;case"rotation":{let f=new ni(n.numComponents);f.path="",f.attribute="",f.propertys=f.attribute.split("."),f.preInfinity=0,f.postInfinity=0,f.rotationOrder=0,r.rotationCurves.set(c.bonePath,f);for(let g=0;g<o.data.length;g++){const p=o.data[g],A=g*n.numComponents;let U=new Ma(0);U.time=p;const x=new Z().set(n.data[A+0],n.data[A+1],n.data[A+2],n.data[A+3]);U.split(L.quaternion,x,"value"),f.addKeyFrame(U)}}break;case"translation":{let f=new ni(n.numComponents);f.path="",f.attribute="",f.propertys=f.attribute.split("."),f.preInfinity=0,f.postInfinity=0,f.rotationOrder=0,r.useSkeletonPos=!0,r.positionCurves.set(c.bonePath,f);for(let g=0;g<o.data.length;g++){const p=o.data[g],A=g*n.numComponents;let U=new Ma(0);U.time=p;const x=new d().set(n.data[A+0],n.data[A+1],n.data[A+2]);U.split(L.vector3,x,"value"),f.addKeyFrame(U)}}break}}return r}parseSkeletonAnimationOld(e,t){let r=this.subParser.parseAccessor(t.samplers[0].input),i=r.data.length,a=r.data[1]-r.data[0];r.data[r.data.length-1];let o=12*e.numJoint,n=new Float32Array(o*i);for(var l=0;l<e.numJoint;l++)for(var h=0;h<i;h++){var u=o*h+12*l;n[u+0]=1,n[u+1]=1,n[u+2]=1,n[u+3]=1}for(let A of t.channels){let U=t.samplers[A.sampler];const x=this.subParser.parseAccessor(U.input),B=this.subParser.parseAccessor(U.output);let S=A.target.node,C=A.target.path,_=this.gltf.nodes[S];if(!_)continue;let y=e.getJointByName(_.name);if(y)switch(C){case"scale":if(i*B.numComponents==B.data.length)for(var h=0;h<i;h++){var c=h*B.numComponents,u=o*h+12*y.index;n[u+0]=B.data[c+0],n[u+1]=B.data[c+1],n[u+2]=B.data[c+2],n[u+3]=1}else if(x.data.length==2){let b=0;x.data[0];let w=x.data[1];var f=0*B.numComponents;d.HELP_0.set(B.data[f+0],B.data[f+1],B.data[f+2]);var g=1*B.numComponents;d.HELP_1.set(B.data[g+0],B.data[g+1],B.data[g+2]);for(var h=0;h<i;h++){let E=b/w;d.HELP_2.lerp(d.HELP_0,d.HELP_1,E);var u=o*h+12*y.index;n[u+0]=d.HELP_2.x,n[u+1]=d.HELP_2.y,n[u+2]=d.HELP_2.z,n[u+3]=1,b+=a}}else throw new Error("Unsupported animation sampler interpolation.");break;case"rotation":if(i*B.numComponents==B.data.length)for(var h=0;h<i;h++){var c=h*B.numComponents,u=o*h+12*y.index+4;n[u+0]=B.data[c+0],n[u+1]=B.data[c+1],n[u+2]=B.data[c+2],n[u+3]=B.data[c+3]}else if(x.data.length==2){let b=0;x.data[0];let w=x.data[1];var f=0*B.numComponents;d.HELP_0.set(B.data[f+0],B.data[f+1],B.data[f+2],B.data[f+3]);var g=1*B.numComponents;d.HELP_1.set(B.data[g+0],B.data[g+1],B.data[g+2],B.data[g+3]);for(var h=0;h<i;h++){let z=b/w;d.HELP_2.lerp(d.HELP_0,d.HELP_1,z);var u=o*h+12*y.index+4;n[u+0]=d.HELP_2.x,n[u+1]=d.HELP_2.y,n[u+2]=d.HELP_2.z,n[u+3]=d.HELP_2.w,b+=a}}else throw new Error("Unsupported animation sampler interpolation.");break;case"translation":if(i*B.numComponents==B.data.length)for(var h=0;h<i;h++){var c=h*B.numComponents,u=o*h+12*y.index+8;n[u+0]=B.data[c+0],n[u+1]=B.data[c+1],n[u+2]=B.data[c+2],n[u+3]=x.data[h*x.numComponents]}else if(x.data.length==2){let b=0;x.data[0];let w=x.data[1];var f=0*B.numComponents;d.HELP_0.set(B.data[f+0],B.data[f+1],B.data[f+2]);var g=1*B.numComponents;d.HELP_1.set(B.data[g+0],B.data[g+1],B.data[g+2]);for(var h=0;h<i;h++){let z=b/w;d.HELP_2.lerp(d.HELP_0,d.HELP_1,z);var u=o*h+12*y.index+8;n[u+0]=d.HELP_2.x,n[u+1]=d.HELP_2.y,n[u+2]=d.HELP_2.z,n[u+3]=b,b+=a}}else throw new Error("Unsupported animation sampler interpolation.");break}}return new Vs(t.name,e,i,n)}buildSkeleton(e,t,r){let i=this.gltf.nodes[r];i.name||(i.name="Bone"+e.count);let a=new Un;if(a.boneName=i.name,a.bonePath=t?t.bonePath+"/"+i.name:i.name,a.parentBoneName=t?t.boneName:"",a.boneID=e.count++,a.parentBoneID=t?t.boneID:-1,a.instanceID="",a.parentInstanceID="",a.s=new d(1,1,1),i.scale&&a.s.set(i.scale[0],i.scale[1],i.scale[2]),a.q=new Z,i.rotation&&a.q.set(i.rotation[0],i.rotation[1],i.rotation[2],i.rotation[3]),a.t=new d,i.translation&&a.t.set(i.translation[0],i.translation[1],i.translation[2]),e.boneData.push(a),e.boneMap.set(a.boneName,a),i.children)for(let o of i.children)this.buildSkeleton(e,a,o)}buildSkeletonOld(e,t,r,i=0){let a=this.gltf.nodes[r];a.name||(a.name="Node_"+r);let o=new Du(a.name);if(o.parent=t,a.scale&&o.scale.set(a.scale[0],a.scale[1],a.scale[2]),a.rotation&&o.rotation.set(a.rotation[0],a.rotation[1],a.rotation[2],a.rotation[3]),a.translation&&o.translation.set(a.translation[0],a.translation[1],a.translation[2]),e.addJoint(o),a.children)for(let n of a.children)this.buildSkeletonOld(e,o,n,i+1)}}class Go{static list=[];static add(e){this.list.indexOf(e)==-1&&this.list.push(e)}static remove(e){let t=this.list.indexOf(e);t!=-1&&this.list.splice(t,1)}}class Aa extends Pe{name;size=1;lightData;dirFix=1;bindOnChange;needUpdateShadow=!0;realTimeShadow=!0;_castGI=!1;_castShadow=!1;_iesProfiles;constructor(){super()}init(){this.transform.object3D.bound=new Re(new d,new d),this.lightData=new hs,this.lightData.lightMatrixIndex=this.transform.worldMatrix.index}onChange(){this.bindOnChange&&this.bindOnChange(),this.transform.object3D.bound.setFromCenterAndSize(this.transform.worldPosition,new d(this.size,this.size,this.size)),this._castGI&&(G.instance.state.giLightingChange=!0),this._castShadow?(this.needUpdateShadow=!0,wt.addShadowLight(this)):wt.removeShadowLight(this),this.transform.view3D&&m.renderJobs&&m.renderJobs.get(this.transform.view3D).reflectionRenderer&&m.renderJobs.get(this.transform.view3D).reflectionRenderer.forceUpdate()}start(){this.transform.onPositionChange=()=>this.onPositionChange(),this.transform.onRotationChange=()=>this.onRotChange(),this.onPositionChange(),this.onRotChange()}onPositionChange(){this.lightData.lightPosition.copyFrom(this.transform.worldPosition),this.onChange()}onRotChange(){this.dirFix==1?this.lightData.direction.copyFrom(this.transform.forward):this.lightData.direction.copyFrom(this.transform.back),this.lightData.lightTangent.copyFrom(this.transform.up),this.onChange()}onScaleChange(){this.onChange()}onEnable(){this.onChange(),G.instance.addLight(this.transform.scene3D,this)}onDisable(){this.onChange(),G.instance.removeLight(this.transform.scene3D,this),wt.removeShadowLight(this)}set iesProfiles(e){this._iesProfiles=e,this.lightData.iesIndex=e.index,gr.use=!0,this.onChange()}get iesProfile(){return this._iesProfiles}get r(){return this.lightData.lightColor.r}set r(e){this.lightData.lightColor.r=e,this.onChange()}get g(){return this.lightData.lightColor.g}set g(e){this.lightData.lightColor.g=e,this.onChange()}get b(){return this.lightData.lightColor.b}set b(e){this.lightData.lightColor.b=e,this.onChange()}get lightColor(){return this.lightData.lightColor}set lightColor(e){this.lightData.lightColor=e,this.onChange()}get color(){return this.lightData.lightColor}set color(e){this.lightData.lightColor=e,this.onChange()}get intensity(){return this.lightData.intensity}set intensity(e){this.lightData.intensity=e,this.onChange()}set castShadow(e){e!=this._castShadow&&(this._castShadow=e,this.onChange())}get castShadow(){return this._castShadow}get shadowIndex(){return this.lightData.castShadowIndex}get castGI(){return this._castGI}set castGI(e){e?Go.add(this):Go.remove(this),this._castGI=e,e&&this.onChange()}get direction(){return this.lightData.direction}destroy(e){this.bindOnChange=null,G.instance.removeLight(this.transform.scene3D,this),wt.removeShadowLight(this),this.transform.eventDispatcher.removeEventListener(Tt.ROTATION_ONCHANGE,this.onRotChange,this),this.transform.eventDispatcher.removeEventListener(Tt.SCALE_ONCHANGE,this.onScaleChange,this),super.destroy(e)}}var dp=Object.getOwnPropertyDescriptor,gp=(s,e,t,r)=>{for(var i=r>1?void 0:r?dp(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Ua=class extends Aa{shadowCamera;constructor(){super()}init(){super.init(),this.object3D.name==""&&(this.object3D.name="DirectionLight_"+It()),this.radius=Number.MAX_SAFE_INTEGER,this.lightData.lightType=Xe.DirectionLight,this.lightData.linear=0,this.lightData.quadratic=.3}start(){super.start(),this.castGI=!0}get radius(){return this.lightData.range}set radius(s){this.lightData.range=s,this.onChange()}get indirect(){return this.lightData.quadratic}set indirect(s){this.lightData.quadratic=s,this.onChange()}debug(){}};Ua=gp([Wt(Ua,"DirectLight")],Ua);var pp=Object.getOwnPropertyDescriptor,mp=(s,e,t,r)=>{for(var i=r>1?void 0:r?pp(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let ji=class extends Aa{constructor(){super()}init(){super.init(),this.lightData.lightType=Xe.PointLight,this.object3D.name==""&&(this.object3D.name="PointLight"+It())}get range(){return this.lightData.range}set range(s){this.lightData.range=s,this.onChange()}get at(){return this.lightData.linear}set at(s){this.lightData.linear=s,this.onChange()}get radius(){return this.lightData.radius}set radius(s){this.lightData.radius=s,this.onChange()}get quadratic(){return this.lightData.quadratic}set quadratic(s){this.lightData.quadratic=s,this.onChange()}start(){this.transform.rotationX=90,super.start()}onUpdate(){}onGraphic(s){}debug(){}debugDraw(s){}};ji=mp([Wt(ji,"PointLight")],ji);var Ap=Object.getOwnPropertyDescriptor,Up=(s,e,t,r)=>{for(var i=r>1?void 0:r?Ap(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let xa=class extends Aa{constructor(){super()}init(){super.init(),this.lightData.lightType=Xe.SpotLight,this.object3D.name==""&&(this.object3D.name="SpotLight"+It())}get innerAngle(){return this.lightData.innerAngle/this.lightData.outerAngle*100}set innerAngle(s){this.lightData.innerAngle=ie(s,0,100)/100*this.lightData.outerAngle,this.onChange()}get outerAngle(){return this.lightData.outerAngle*Wi*2}set outerAngle(s){this.lightData.outerAngle=ie(s,1,179)*it*.5,this.onChange()}get radius(){return this.lightData.radius}set radius(s){this.lightData.radius=s,this.onChange()}get range(){return this.lightData.range}set range(s){this.lightData.range=s,this.onChange()}get at(){return this.lightData.linear}set at(s){this.lightData.linear=s,this.onChange()}start(){super.start(),this.lightData.lightType=Xe.SpotLight}onUpdate(){}onGraphic(s){}debug(){}debugDraw(s){}};xa=Up([Wt(xa,"SpotLight")],xa);class Nu{static apply(e,t,r){let i=t.extensions;if(i&&i.KHR_materials_clearcoat){r.shader.getDefaultColorShader().setDefine("USE_CLEARCOAT",!0);let a=i.KHR_materials_clearcoat;"clearcoatFactor"in a&&(t.clearcoatFactor=a.clearcoatFactor,r.clearcoatFactor=t.clearcoatFactor),"clearcoatRoughnessFactor"in a&&(t.clearcoatRoughnessFactor=a.clearcoatRoughnessFactor,r.clearcoatRoughnessFactor=t.clearcoatRoughnessFactor)}}}class Vu{static apply(e,t,r){let i=t.extensions;i&&i.KHR_materials_emissive_strength?(r.emissiveIntensity=i.KHR_materials_emissive_strength.emissiveStrength,r.emissiveMap==m.res.blackTexture&&(r.emissiveMap=m.res.whiteTexture)):r.emissiveIntensity=1}}class Pu{static apply(e,t,r){let i=t.extensions;i&&i.KHR_materials_unlit?r.supportLight=!0:r.supportLight=!1}}class ku{gltf;subParser;_testCount=8;_hasCastShadow=!1;constructor(e){this.gltf=e.gltf,this.subParser=e}async convertNodeToObject3D(e,t){const r=new q;if(r.name=e.name,r[Yt.GLTF_NODE_INDEX_PROPERTY]=e.nodeId,e.nodeObj=r,e.matrix&&(e.translation=[0,0,0],e.rotation=[0,0,0,1],e.scale=[1,1,1]),e.translation&&(r.transform.x=e.translation[0],r.transform.y=e.translation[1],r.transform.z=e.translation[2]),e.rotation){let i=new Z;i.setFromArray(e.rotation),r.transform.localRotQuat=i}return e.scale&&(r.transform.scaleX=e.scale[0],r.transform.scaleY=e.scale[1],r.transform.scaleZ=e.scale[2]),t.addChild(r),e.light&&this.convertLight(e,r),e.primitives&&this.convertprimitives(e,r),e.skeleton&&this.convertSkeletonAnim(r,e.skeleton),r}convertSkeletonAnim(e,t){let r=this.subParser.parseSkeleton(t.skeleton);m.res.addObj(r.name,r);let i=[];for(let o=0;o<this.gltf.animations.length;o++){let n=this.gltf.animations[o];n.name||(n.name=o.toString());let l=this.subParser.parseSkeletonAnimation(r,n);i.push(l)}let a=e.addComponent(Nr);a.avatar=r.name,a.clips=i}convertLight(e,t){switch(e.light.type){case"directional":let r=t.addComponent(Ua);t.name=e.light.name,r.intensity=e.light.intensity*.1,r.radius=Number.MAX_SAFE_INTEGER,r.dirFix=-1,this._hasCastShadow||(this._hasCastShadow=!0,r.castShadow=this._hasCastShadow),r.lightColor=e.light.color?new P(e.light.color[0],e.light.color[1],e.light.color[2]):new P(1,1,1,1),r.debug();break;case"point":if(this._testCount>0){let a=t.addComponent(ji);a.name=e.light.name,a.intensity=e.light.intensity?e.light.intensity*8*2:1,a.radius=8,a.at=2,a.range=e.light.range?e.light.range:8,a.lightColor=e.light.color?new P(e.light.color[0],e.light.color[1],e.light.color[2]):new P(1,1,1,1)}this._testCount--;break;case"spot":let i=t.addComponent(xa);i.name=e.light.name,i.intensity=e.light.intensity*5,i.radius=1,i.dirFix=-1,i.at=2,i.range=e.light.range?e.light.range:8,i.outerAngle=e.light.spot.outerConeAngle*Wi,i.lightColor=e.light.color?new P(e.light.color[0],e.light.color[1],e.light.color[2]):new P(1,1,1,1);break}}convertprimitives(e,t){for(let r=0;r<e.primitives.length;r++){const i=e.primitives[r];i.modelName;let a=i.material;a.name==null&&(a.name=It());let o,n=`matkey_${a.name}`;if(a&&this.gltf.resources[n])o=this.gltf.resources[n];else{let f=o=new Qr;this.gltf.resources[n]=f,f.name=a.name;let g=a;if(g){const{baseColorTexture:p,baseColorFactor:A,metallicFactor:U,roughnessFactor:x,doubleSided:B,metallicRoughnessTexture:S,normalTexture:C,occlusionTexture:_,emissiveTexture:y,emissiveFactor:b,enableBlend:w,alphaCutoff:Q}=g;let E=f=this.applyMaterialExtensions(g,f);if("enableBlend"in g&&(g.enableBlend?(g.defines?.includes("ALPHA_BLEND")?E.blendMode=ae.ALPHA:E.blendMode=ae.NORMAL,E.castShadow=!1):E.blendMode=ae.NONE),"alphaCutoff"in g&&Q>0&&Q<1&&(E.setUniformFloat("alphaCutoff",Q),E.blendMode=ae.NORMAL,E.transparent=!0),g.baseMapOffsetSize&&E.setUniformVector4("baseMapOffsetSize",g.baseMapOffsetSize),g.normalMapOffsetSize&&E.setUniformVector4("normalMapOffsetSize",g.normalMapOffsetSize),g.emissiveMapOffsetSize&&E.setUniformVector4("emissiveMapOffsetSize",g.emissiveMapOffsetSize),g.roughnessMapOffsetSize&&E.setUniformVector4("roughnessMapOffsetSize",g.roughnessMapOffsetSize),g.metallicMapOffsetSize&&E.setUniformVector4("metallicMapOffsetSize",g.metallicMapOffsetSize),g.aoMapOffsetSize&&E.setUniformVector4("aoMapOffsetSize",g.aoMapOffsetSize),E.setUniformColor("baseColor",new P(A[0],A[1],A[2],A[3])),E.setUniformFloat("roughness",x),E.setUniformFloat("metallic",U),E.setUniformFloat("ao",1),E.doubleSide=B,p&&E.setTexture("baseMap",p),C&&E.setTexture("normalMap",C),S&&E.setTexture("maskMap",S),y&&E.setTexture("emissiveMap",y),b&&(b[0]>0||b[1]>0||b[2]>0)){E.shader.getTexture("emissiveMap")||E.shader.setTexture("emissiveMap",m.res.whiteTexture),E.shader.setDefine("USE_EMISSIVEMAP",!0),E.setUniformColor("emissiveColor",new P(b[0],b[1],b[2],b[3])),E.blendMode!=ae.NONE&&(E.blendMode=ae.ADD);let M=o.getUniformFloat("emissiveIntensity");(!M||M<=0)&&o.setUniformFloat("emissiveIntensity",1)}}}const{attribArrays:l,modelName:h,drawMode:u}=i;let c;if(!l.indices.data){let f=[],g=l.position.data.length/3/3;for(let p=0;p<g;p++){let A=p*3;f.push(A+2),f.push(A+0),f.push(A+1)}l.indices={data:new Uint8Array(f),normalize:!1,numComponents:1}}if(!l.normal){let f=[],g=l.position.data.length/3;for(let p=0;p<g;p++)f.push(0),f.push(0),f.push(0);l.normal={data:new Float32Array(f),normalize:!1,numComponents:3}}if(l.indices.data&&l.indices.data.length>3){let f=i.meshName();this.gltf.resources[f]&&(c=this.gltf.resources[f]);const g=new q;if(g.name=h+r,this.gltf.animations&&l[V.joints0]!=null){c||=this.createGeometryBase(h,l,i,e.skin),this.gltf.resources[f]=c;let p=this.gltf.nodes[e.skin.skeleton];p.dnode&&p.dnode.nodeObj?this.convertSkeletonAnim(t,e.skin):p.dnode.skeleton=e.skin;let A=g.addComponent(oi);A.geometry=c,A.material=o}else{c||=this.createGeometryBase(h,l,i),this.gltf.resources[f]=c,c.hasAttribute(V.joints0)&&c.vertexAttributeMap.delete(V.joints0);let p=g.addComponent(j);p.castShadow=!0,p.castGI=!0,p.geometry=c,p.material=o}e.skin&&e.skin.defines,t.addChild(g)}}}createGeometryBase(e,t,r,i){"indices"in t&&(t.indices.data.length>65534?t.indices.data=new Uint32Array(t.indices.data):t.indices.data=new Uint16Array(t.indices.data));let a=new Ne;if(a.name=e,"indices"in t&&(t.indices.data.length>65535?t.indices.data=new Uint32Array(t.indices.data):t.indices.data=new Uint16Array(t.indices.data)),r.morphTargetsRelative){let l=new Cn,h=r.targetNames;if(h&&h.length>0){l.shapeNames=[],l.shapeIndexs=[];for(let u=0;u<h.length;u++)l.shapeNames.push(h[u]),l.shapeIndexs.push(u)}l.vertexCount=t.position.data.length/3,l.blendCount=l.shapeNames.length,l.blendShapePropertyDatas=[],l.blendShapeMap=new Map;for(let u=0;u<l.blendCount;u++){let c=new vn;c.shapeName=l.shapeNames[u],c.shapeIndex=l.shapeIndexs[u],c.frameCount=1,c.blendPositionList=t[Yt.MORPH_POSITION_PREFIX+u].data,c.blendNormalList=t[Yt.MORPH_NORMAL_PREFIX+u].data,l.blendShapePropertyDatas.push(c),l.blendShapeMap.set(c.shapeName,c)}a.blendShapeData=l}a.morphTargetsRelative=r.morphTargetsRelative;let o=r.targetNames;if(o&&o.length>0){let l=a.morphTargetDictionary={};for(let h=0;h<o.length;h++)l[o[h]]=h}if(a.morphTargetDictionary){let l=t.position.data.length/3,h=new Float32Array(l);for(let u=0;u<l;u++)h[u]=u;t.vIndex={data:h,normalize:!1,numComponents:1}}for(const l in t){let h=t[l];a.setAttribute(l,h.data)}if(i){a.skinNames=new Array(i.joints.length);for(let l=0;l<i.joints.length;l++){const h=i.joints[l],u=this.gltf.nodes[h];a.skinNames[l]=u.name}a.bindPose=new Array(i.inverseBindMatrices.length);for(let l=0;l<i.inverseBindMatrices.length;l++){const h=i.inverseBindMatrices[l];let u=new I;u.rawData.set(h),a.bindPose[l]=u}}let n=a.getAttribute(V.indices);return a.addSubGeometry({indexStart:0,indexCount:n.data.length,vertexStart:0,index:0,vertexCount:0,firstStart:0,topology:0}),a}applyMaterialExtensions(e,t){return e.extensions&&(Nu.apply(this.gltf,e,t),Pu.apply(this.gltf,e,t),Vu.apply(this.gltf,e,t)),t}parseSkinJoints(e){let t=[];for(let r of e.joints){let i=this.gltf.nodes[r];t.push(i.name)}return t}}class gs{currentSceneName;gltf;initUrl;_generator;_version;_BASE64_MARKER=";base64,";_cameraParser=null;_meshParser=null;_materialParser=null;_skinParser=null;_skeletonParser=null;_converter=null;constructor(){}get version(){return this.version?this.version:this.gltf?this.gltf.asset?(this._version=this.gltf.asset.version,this.gltf.asset.minVersion&&(this._version+=`\r minVersion${this.gltf.asset.minVersion}`),this.version):this.errorMiss("asset"):(console.warn("glTF not loaded."),null)}async parse(e,t,r){this.gltf=t,this.initUrl=e;const{version:i,generator:a}=this.gltf.asset;if(this._generator=a,i!=="2.0")return console.error(`GLTFParser only support glTF 2.0 for now! Received glTF version: ${this.version}`),!1;const o={nodes:await this.parseScene(r),animations:this.parseAnimations(),name:this.currentSceneName};return await this.convertToNode(o)}destroy(){Lo.unload(this.gltf),this.gltf=null}async parseScene(e){const t=e||this.gltf.scene||0,r=this.gltf.scenes[t];if(typeof r>"u")return this.errorMiss("scene",t);this.currentSceneName=r.name||"GLTF_NO_NAME_SCENE";const i=[],a=r.nodes;for(let o=0;o<a.length;o++){const n=await this.parseNode(a[o]);n&&i.push(n)}return i}async parseNode(e){const t=this.gltf.nodes[e];if(!t)return this.errorMiss("node",e);if(t.isParsed)return t.dnode;const{name:r,matrix:i,translation:a,rotation:o,scale:n}=t,l={name:r,matrix:i,translation:a,rotation:o,scale:n,nodeId:e,camera:null,primitives:null,skin:null,children:null,light:null};if(t.camera!==void 0&&(l.camera=this.parseCamera(t.camera)),t.mesh!==void 0&&(l.primitives=await this.parseMesh(t.mesh)),t.extensions!==void 0&&this.applyNodeExtensions(t,l),t.skin!==void 0){const h=this.parseSkin(t.skin);h&&(l.skin=h)}if(l.children=[],t.children)for(let h=0;h<t.children.length;h++)l.children.push(await this.parseNode(t.children[h]));return t.dnode=l,t.isParsed=!0,t.dnode}errorMiss(e,t){throw new Error(e+t)}parseCamera(e){return this._cameraParser||(this._cameraParser=new Iu(this.gltf)),this._cameraParser.parse(e)}async parseMesh(e){return this._meshParser||(this._meshParser=new Eu(this)),this._meshParser.parse(e)}async parseTexture(e){let t=this.gltf.textures[e];if(t&&!t.dtexture){if(t&&t.source!=null){let r=this.gltf.images[t.source];if(r.uri){let i=r.uri;i=Ft.getURLName(i),t.dtexture=this.gltf.resources[i]}else if(r.bufferView){let i=this.parseBufferView(r.bufferView),a=new Mr,o=new Blob([i],{type:r.mimeType});await a.loadFromBlob(o),t.dtexture=a}else t.dtexture=this.gltf.resources[r.name]}else if(t.name){let r=Ft.getURLName(t.name);t.dtexture=this.gltf.resources[r]}}return t.dtexture||console.log("miss texture , please check texture!",e,t),t.dtexture}async parseMaterial(e){return this._materialParser||(this._materialParser=new wu(this)),this._materialParser.parse(e)}parseAnimations(){return[]}async parseObject3D(e,t){return this._converter||(this._converter=new ku(this)),this._converter.convertNodeToObject3D(e,t)}parseSkeleton(e){return this._skeletonParser||(this._skeletonParser=new zo(this)),this._skeletonParser.parse(e)}parseSkeletonAnimation(e,t){return this._skeletonParser||(this._skeletonParser=new zo(this)),this._skeletonParser.parseSkeletonAnimation(e,t)}async traverse(e,t){for(let r=0;r<t.length;r++){const i=await this.parseObject3D(t[r],e);await this.traverse(i,t[r].children)}}async convertToNode(e){const t=new q;t.name=e.name;const r=e.nodes;e.animations;const i=[],a=[];return await this.traverse(t,r),{rootNode:t,textures:i,animations:void 0,cameras:a}}parseSkin(e){return this._skinParser||(this._skinParser=new Tu(this)),this._skinParser.parse(e)}parseAccessor(e){const t=this.gltf.accessors[e];if(!t)return this.errorMiss("accessor",e);if(t.isParsed)return t.daccessor;t.isParsed=!0,t.daccessor=!1;const r=!!t.normalized,i=this.gltf.bufferViews[t.bufferView],a=i&&i.byteStride,o=ko(t.componentType);let n=1;switch(t.type){case"SCALAR":n=1;break;case"VEC2":n=2;break;case"VEC3":n=3;break;case"VEC4":case"MAT2":n=4;break;case"MAT3":n=9;break;case"MAT4":n=16;break;default:n=0;break}if(n===0)return console.error(`glTF has unknown data type in accessor: ${t.type}`),!1;const l=n*o.BYTES_PER_ELEMENT;let h;if(i!==void 0){if(h=this.parseBufferView(t.bufferView),!h)return t.daccessor}else h=new Uint8Array(l*t.count).buffer;let u=this.getTypedArrayFromArrayBuffer(h,a,t.byteOffset||0,o,n,t.count);if(t.sparse){const{count:c,indices:f,values:g}=t.sparse;u=new o(u);const p=f.byteOffset||0,A=this.gltf.bufferViews[f.bufferView],U=ko(f.componentType),x=this.parseBufferView(f.bufferView),B=this.getTypedArrayFromArrayBuffer(x,A.byteStride,p,U,1,c),S=g.byteOffset||0,C=this.gltf.bufferViews[g.bufferView],_=this.parseBufferView(g.bufferView),y=this.getTypedArrayFromArrayBuffer(_,C.byteStride,S,o,n,c);for(let b=0;b<B.length;b++)u.set(y.slice(b*n,b*n+n),B[b]*n)}return t.computeResult={typedArray:u,arrayType:o,numComponents:n},t.daccessor={data:u,numComponents:n,normalize:r},t.daccessor}getTypedArrayFromArrayBuffer(e,t,r,i,a,o){let n;const l=a*i.BYTES_PER_ELEMENT;if(t&&l!==t){const h=a*o;n=new i(h);for(let u=0;u<o;u++){const c=new i(e,r+u*t,a);for(let f=0;f<a;f++)n[u*a+f]=c[f]}}else n=new i(e,r,o*a);return n}parseBufferView(e){const t=this.gltf.bufferViews[e];if(!t)return this.errorMiss("bufferView",e);if(t.isParsed)return t.dbufferView;t.isParsed=!0,t.dbufferView=!1;const r=this.parseBuffer(t.buffer);if(r){const{byteOffset:i,byteLength:a}=t,o=new Uint8Array(r,i||0,a);t.dbufferView=new Uint8Array(o).buffer}return t.dbufferView}parseBuffer(e){const t=this.gltf.buffers[e];if(!t)return this.errorMiss("buffer",e);if(t.isParsed)return t.dbuffer;if(t.isParsed=!0,t.dbuffer=!1,t.uri.substring(0,5)!=="data:"){const r=t.uri,i=this.gltf.resources[r];i?i.byteLength===t.byteLength?t.dbuffer=this.gltf.resources[r]:console.error(`load gltf resource "${r}" at buffers[${e} failed, ArrayBuffer.byteLength not equals buffer's byteLength]`):console.error(`load gltf resource "${r}" at buffers[${e}] failed`)}else{const r=t.uri.indexOf(this._BASE64_MARKER)+this._BASE64_MARKER.length,i=window.atob(t.uri.substring(r)),a=new Uint8Array(i.length);for(let o=0;o<i.length;o++)a[o]=i.charCodeAt(o);t.dbuffer=a.buffer}return t.dbuffer}getLight(e){return this.gltf.extensions.KHR_lights_punctual.lights[e]}applyNodeExtensions(e,t){let r=e.extensions;r.KHR_lights_punctual&&this.gltf.extensions.KHR_lights_punctual&&(t.light=this.getLight(r.KHR_lights_punctual.light))}}class Lu{magic;version;length}class Ou{chunkLength;chunkType;chunkData}class Wo extends st{static format=Ge.BIN;_gltf;async parseBuffer(e){let t=new Uint8Array(e);t.pos=0;const r=this.parseHeader(t);if(r.magic!=1179937895)return console.error("invalid GLB file"),!1;if(r.version!==2)return console.error(`GLBParser only support glTF 2.0 for now! Received glTF version: ${r.version}`),!1;let i=[];for(;t.pos<t.length;){let c=this.parseChunk(t);i.push(c)}if(i[0].chunkType!=1313821514)return console.error("invalid GLBChunk"),!1;let a="",o=65535,n=i[0].chunkData;for(let c=0;c<n.length;c+=o){let f=n.length-c;f=Math.min(f,o);let g=n.subarray(c,c+f);a+=String.fromCharCode(...g)}let l=JSON.parse(a);this._gltf=new ds,this._gltf={...this._gltf,...l},this._gltf.resources={};for(let c=0;c<this._gltf.buffers.length;c++){let f=this._gltf.buffers[c];f.isParsed=!0,f.dbuffer=i[c+1].chunkData.buffer}if(this._gltf.images)for(let c=0;c<this._gltf.images.length;c++){let f=this._gltf.images[c];f.name=f.name||"bufferView_"+f.bufferView.toString();const g=this._gltf.bufferViews[f.bufferView],p=this._gltf.buffers[g.buffer];let A=new Uint8Array(p.dbuffer,g.byteOffset,g.byteLength),U=new Blob([A],{type:f.mimeType}),x=new Mr;await x.loadFromBlob(U),x.name=f.name,this._gltf.resources[f.name]=x}let u=await new gs().parse(this.initUrl,this._gltf,this._gltf.scene);return u?(this.data=u.rootNode,u.rootNode):null}async parseJsonAndBuffer(e,t){this._gltf=new ds,this._gltf={...this._gltf,...e},this._gltf.resources={};let r=this._gltf.buffers[0];if(r.isParsed=!0,r.dbuffer=t,this._gltf.images)for(let o=0;o<this._gltf.images.length;o++){let n=this._gltf.images[o];n.name=n.name||"bufferView_"+n.bufferView.toString();const l=this._gltf.bufferViews[n.bufferView],h=this._gltf.buffers[l.buffer];let u=new Uint8Array(h.dbuffer,l.byteOffset,l.byteLength),c=new Blob([u],{type:n.mimeType}),f=new Mr;await f.loadFromBlob(c),f.name=n.name,this._gltf.resources[n.name]=f}let a=await new gs().parse(this.initUrl,this._gltf,this._gltf.scene);return a?(this.data=a.rootNode,a.rootNode):null}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}parseHeader(e){let t=e.pos,r=new Lu,i=new Uint32Array(e.buffer,t,3);return e.pos+=i.byteLength,r.magic=i[0],r.version=i[1],r.length=i[2],r}parseChunk(e){let t=e.pos,r=new Ou,i=new Uint32Array(e.buffer,t,2);t=e.pos+=i.byteLength,r.chunkLength=i[0],r.chunkType=i[1],r.chunkData=new Uint8Array(e.buffer,t,r.chunkLength);const a=new Uint8Array(r.chunkLength);for(let o=0;o<r.chunkLength;o++)a[o]=r.chunkData[o];return r.chunkData=a,e.pos+=r.chunkLength,r}}class zu extends mt{constructor(){super();let e=new Oe("PBRLItShader","PBRLItShader");e.setShaderEntry("VertMain","FragMain"),e.passType=H.COLOR,this.addRenderPass(e);let t=e.shaderState;t.acceptShadow=!0,t.castShadow=!0,t.receiveEnv=!0,t.acceptGI=!0,t.useLight=!0,this.setDefine("USE_BRDF",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformFloat("shadowBias",35e-5),this.setUniformColor("baseColor",new P(.75,.75,.75,1)),this.setUniformColor("emissiveColor",new P(0,0,0)),this.setUniformVector4("materialF0",new $(.04,.04,.04,1)),this.setUniformColor("specularColor",new P(.04,.04,.04)),this.setUniformFloat("envIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("roughness",1),this.setUniformFloat("metallic",1),this.setUniformFloat("ao",1),this.setUniformFloat("roughness_min",0),this.setUniformFloat("roughness_max",1),this.setUniformFloat("metallic_min",0),this.setUniformFloat("metallic_max",1),this.setUniformFloat("emissiveIntensity",0),this.setUniformFloat("alphaCutoff",0),this.setUniformFloat("ior",1.5),this.setUniformFloat("clearcoatFactor",0),this.setUniformFloat("clearcoatRoughnessFactor",0),this.setUniformColor("clearcoatColor",new P(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this.setUniformFloat("clearcoatIor",1.5),this.setUniformVector4("baseMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("normalMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("emissiveMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("roughnessMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("metallicMapOffsetSize",new $(0,0,1,1)),this.setUniformVector4("aoMapOffsetSize",new $(0,0,1,1)),this.baseMap=m.res.whiteTexture,this.normalMap=m.res.normalTexture,this.maskMap=m.res.maskTexture}get baseMap(){return this.getDefaultColorShader().getTexture("baseMap")}set baseMap(e){this.getDefaultColorShader().setTexture("baseMap",e)}get baseColor(){return this.getDefaultColorShader().getUniform("baseColor")}set baseColor(e){this.getDefaultColorShader().setUniformColor("baseColor",e)}get normalMap(){return this.getDefaultColorShader().getTexture("normalMap")}set normalMap(e){this.getDefaultColorShader().setTexture("normalMap",e)}get doubleSide(){return this.getDefaultColorShader().doubleSide}set doubleSide(e){this.getDefaultColorShader().doubleSide=e}get alphaCutoff(){return this.getDefaultColorShader().shaderState.alphaCutoff}set alphaCutoff(e){this.getDefaultColorShader().setDefine("USE_ALPHACUT",!0),this.getDefaultColorShader().shaderState.alphaCutoff=e,this.getDefaultColorShader().setUniform("alphaCutoff",e)}get emissiveColor(){return this.getDefaultColorShader().getUniform("emissiveColor")}set emissiveColor(e){this.getDefaultColorShader().setUniform("emissiveColor",e)}get emissiveIntensity(){return this.getDefaultColorShader().getUniform("emissiveIntensity")}set emissiveIntensity(e){this.getDefaultColorShader().setUniform("emissiveIntensity",e)}get transformUV1(){return this.getDefaultColorShader().uniforms.transformUV1.vector4}set transformUV1(e){this.getDefaultColorShader().setUniform("transformUV1",e)}get uvTransform_2(){return this.getDefaultColorShader().uniforms.transformUV2.vector4}set uvTransform_2(e){this.getDefaultColorShader().setUniform("transformUV2",e)}get depthWriteEnabled(){return this.getDefaultColorShader().shaderState.depthWriteEnabled}set depthWriteEnabled(e){this.getDefaultColorShader().shaderState.depthWriteEnabled=e}get materialF0(){return this.getDefaultColorShader().uniforms.materialF0.vector4}set materialF0(e){this.getDefaultColorShader().setUniform("materialF0",e)}get specularColor(){return this.getDefaultColorShader().uniforms.specularColor.color}set specularColor(e){this.getDefaultColorShader().setUniform("specularColor",e)}get roughness(){return this.getDefaultColorShader().uniforms.roughness.value}set roughness(e){this.getDefaultColorShader().setUniform("roughness",e)}get metallic(){return this.getDefaultColorShader().uniforms.metallic.value}set metallic(e){this.getDefaultColorShader().setUniform("metallic",e)}get ao(){return this.getDefaultColorShader().uniforms.ao.value}set ao(e){this.getDefaultColorShader().setUniform("ao",e)}get metallic_min(){return this.getDefaultColorShader().uniforms.metallic_min.value}set metallic_min(e){this.getDefaultColorShader().setUniform("metallic_min",e)}get metallic_max(){return this.getDefaultColorShader().uniforms.metallic_max.value}set metallic_max(e){this.getDefaultColorShader().setUniform("metallic_max",e)}get roughness_min(){return this.getDefaultColorShader().uniforms.roughness_min.value}set roughness_min(e){this.getDefaultColorShader().setUniform("roughness_min",e)}get roughness_max(){return this.getDefaultColorShader().uniforms.roughness_max.value}set roughness_max(e){this.getDefaultColorShader().setUniform("roughness_max",e)}get normalScale(){return this.getDefaultColorShader().uniforms.normalScale.value}set normalScale(e){this.getDefaultColorShader().setUniform("normalScale",e)}get maskMap(){return this.getDefaultColorShader().textures.maskMap}set maskMap(e){this.getDefaultColorShader().setDefine("USE_MR",!0),this.getDefaultColorShader().setTexture("maskMap",e)}set aoMap(e){e&&(this.getDefaultColorShader().setTexture("aoMap",e),e!=m.res.whiteTexture&&this.getDefaultColorShader().setDefine("USE_AOTEX",!0))}get aoMap(){return this.getDefaultColorShader().textures.aoMap}set clearCoatRoughnessMap(e){e&&(console.log("USE_CLEARCOAT_ROUGHNESS"),this.getDefaultColorShader().setTexture("clearCoatRoughnessMap",e),this.getDefaultColorShader().setDefine("USE_CLEARCOAT_ROUGHNESS",!0))}get clearCoatRoughnessMap(){return this.getDefaultColorShader().textures.clearCoatRoughnessMap}get brdfLUT(){return this.getDefaultColorShader().textures.brdfLUT}set brdfLUT(e){this.getDefaultColorShader().setTexture("brdfLUT",e),this.getDefaultColorShader().setTexture("brdflutMap",e)}get emissiveMap(){return this.getDefaultColorShader().textures.emissiveMap}set emissiveMap(e){this.getDefaultColorShader().setTexture("emissiveMap",e)}set envIntensity(e){this.getDefaultColorShader().setUniformFloat("envIntensity",e)}get envIntensity(){return this.getDefaultColorShader().uniforms.envIntensity.value}set ior(e){this.getDefaultColorShader().setUniformFloat("ior",e)}get ior(){return this.getDefaultColorShader().uniforms.ior.value}useCleanCoat(){this.getDefaultColorShader().setDefine("USE_CLEARCOAT",!0)}set clearcoatFactor(e){this.getDefaultColorShader().setUniformFloat("clearcoatFactor",e),this.useCleanCoat()}get clearcoatFactor(){return this.getDefaultColorShader().uniforms.clearcoatFactor.value}set clearcoatRoughnessFactor(e){this.getDefaultColorShader().setUniformFloat("clearcoatRoughnessFactor",e),this.useCleanCoat()}get clearcoatRoughnessFactor(){return this.getDefaultColorShader().uniforms.clearcoatRoughnessFactor.value}set clearcoatWeight(e){this.getDefaultColorShader().setUniformFloat("clearcoatWeight",e),this.useCleanCoat()}get clearcoatWeight(){return this.getDefaultColorShader().uniforms.clearcoatWeight.value}set clearcoatColor(e){this.getDefaultColorShader().setUniformColor("clearcoatColor",e),this.useCleanCoat()}get clearcoatColor(){return this.getDefaultColorShader().uniforms.clearcoatColor.color}}class Qr extends yt{constructor(){super();let e=new zu;this.shader=e}clone(){let e=new Qr,t=e.shader.getDefaultColorShader(),r=this.shader.getDefaultColorShader();return t.defineValue={...r.defineValue},t.setUniform("shadowBias",r.getUniform("shadowBias")),t.setUniform("baseColor",r.getUniform("baseColor")),t.setUniform("specularColor",r.getUniform("specularColor")),t.setUniform("emissiveColor",r.getUniform("emissiveColor")),t.setUniform("materialF0",r.getUniform("materialF0")),t.setUniform("envIntensity",r.getUniform("envIntensity")),t.setUniform("normalScale",r.getUniform("normalScale")),t.setUniform("roughness",r.getUniform("roughness")),t.setUniform("metallic",r.getUniform("metallic")),t.setUniform("ao",r.getUniform("ao")),t.setUniform("roughness_min",r.getUniform("roughness_min")),t.setUniform("roughness_max",r.getUniform("roughness_max")),t.setUniform("metallic_min",r.getUniform("metallic_min")),t.setUniform("metallic_max",r.getUniform("metallic_max")),t.setUniform("emissiveIntensity",r.getUniform("emissiveIntensity")),t.setUniform("alphaCutoff",r.getUniform("alphaCutoff")),t.setUniform("ior",r.getUniform("ior")),t.setUniform("clearcoatFactor",r.getUniform("clearcoatFactor")),t.setUniform("clearcoatRoughnessFactor",r.getUniform("clearcoatRoughnessFactor")),t.setUniform("clearcoatColor",r.getUniform("clearcoatColor")),t.setUniform("clearcoatWeight",r.getUniform("clearcoatWeight")),t.setUniform("clearcoatIor",r.getUniform("clearcoatIor")),t.setTexture("baseMap",r.getTexture("baseMap")),t.setTexture("normalMap",r.getTexture("normalMap")),t.setTexture("emissiveMap",r.getTexture("emissiveMap")),t.setTexture("aoMap",r.getTexture("aoMap")),t.setTexture("maskMap",r.getTexture("maskMap")),t.setTexture("empty",r.getTexture("empty")),t.setUniform("baseMapOffsetSize",r.getUniform("baseMapOffsetSize")),t.setUniform("normalMapOffsetSize",r.getUniform("normalMapOffsetSize")),t.setUniform("emissiveMapOffsetSize",r.getUniform("emissiveMapOffsetSize")),t.setUniform("roughnessMapOffsetSize",r.getUniform("roughnessMapOffsetSize")),t.setUniform("metallicMapOffsetSize",r.getUniform("metallicMapOffsetSize")),t.setUniform("aoMapOffsetSize",r.getUniform("aoMapOffsetSize")),e}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set maskMap(e){this.shader.setTexture("maskMap",e)}get maskMap(){return this.shader.getTexture("maskMap")}set normalMap(e){this.shader.setTexture("normalMap",e)}get normalMap(){return this.shader.getTexture("normalMap")}set emissiveMap(e){this.shader.setTexture("emissiveMap",e)}get emissiveMap(){return this.shader.getTexture("emissiveMap")}set aoMap(e){this.shader.setTexture("aoMap",e)}get aoMap(){return this.shader.getTexture("aoMap")}set clearCoatRoughnessMap(e){this.shader.setTexture("clearCoatRoughnessMap",e),this.shader.setDefine("USE_CLEARCOAT",!0),this.shader.setDefine("USE_CLEARCOAT_ROUGHNESS",!0)}get clearCoatRoughnessMap(){return this.shader.getTexture("clearCoatRoughnessMap")}set clearcoatColor(e){this.shader.setUniformColor("clearcoatColor",e),this.shader.setDefine("USE_CLEARCOAT",!0)}get clearcoatColor(){return this.shader.getUniformColor("clearcoatColor")}set clearcoatWeight(e){this.shader.setUniformFloat("clearcoatWeight",e),this.shader.setDefine("USE_CLEARCOAT",!0)}get clearcoatWeight(){return this.shader.getUniformFloat("clearcoatWeight")}set clearcoatFactor(e){this.shader.setUniformFloat("clearcoatFactor",e),this.shader.setDefine("USE_CLEARCOAT",!0)}get clearcoatFactor(){return this.shader.getUniformFloat("clearcoatFactor")}set clearcoatRoughnessFactor(e){this.shader.setUniformFloat("clearcoatRoughnessFactor",e),this.shader.setDefine("USE_CLEARCOAT",!0)}get clearcoatRoughnessFactor(){return this.shader.getUniformFloat("clearcoatRoughnessFactor")}set ior(e){this.shader.setUniformFloat("clearcoatIor",e)}get ior(){return this.shader.getUniformFloat("clearcoatIor")}set alphaCutoff(e){this.shader.setUniform("alphaCutoff",e)}get alphaCutoff(){return this.shader.getUniform("alphaCutoff")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}get roughness(){return this.shader.getUniformFloat("roughness")}set roughness(e){this.shader.setUniformFloat("roughness",e)}get metallic(){return this.shader.getUniformFloat("metallic")}set metallic(e){this.shader.setUniformFloat("metallic",e)}get emissiveColor(){return this.shader.getUniformColor("emissiveColor")}set emissiveColor(e){this.shader.setUniformColor("emissiveColor",e)}get emissiveIntensity(){return this.shader.getUniformFloat("emissiveIntensity")}set emissiveIntensity(e){this.shader.setUniformFloat("emissiveIntensity",e)}get ao(){return this.shader.getUniform("ao")}set ao(e){this.shader.setUniform("ao",e)}}class Gu extends st{static format=Ge.TEXT;textData="";source_vertices;source_normals;source_tangents;source_textureCoords;matLibs;geometrys;activeGeo;facesMaterialsIndex;mtl;mtlUrl;async parseString(e){return this.source_vertices=[],this.source_normals=[],this.source_tangents=[],this.source_textureCoords=[],this.matLibs={},this.geometrys={},this.textData=e,await Promise.all([this.parserOBJ(),this.loadMTL()]),this.parser_mesh(),"null"}applyVector2(e,t,r){t[e]&&t[e].length>0?(r.push(t[e][0]),r.push(t[e][1])):(r.push(0),r.push(0))}applyVector3(e,t,r){r.push(t[e][0]),r.push(t[e][1]),r.push(t[e][2])}applyVector4(e,t,r){r.push(t[e][0]),r.push(t[e][1]),r.push(t[e][2]),r.push(t[e][3])}async loadMTL(){let t=await new gt().loadTxt(this.baseUrl+this.mtlUrl),r=t.data,i,a=r.split(`\r
|
|
7069
|
+
`);for(let l=0;l<a.length;l++){let h=a[l];var o=h.indexOf("#");o!=-1&&(h=h.substring(0,o)),h=h.trim();var n=h.split(/\s+/);n[0]==="newmtl"?(i={name:n[1]},this.matLibs[n[1]]=i):n[0].indexOf("map_")!=-1?(i[n[0]]=n[1],i.textures||(i.textures=[n[n.length-1]]),i.textures.push(n[n.length-1])):n.length==2?i[n[0]]=Number(n[1]):n.length==3?i[n[0]]=[Number(n[1]),Number(n[2])]:n.length==4&&(i[n[0]]=[Number(n[1]),Number(n[2]),Number(n[3])])}for(const l in this.matLibs){const h=this.matLibs[l];if(h.textures&&h.textures.length>0)for(let u=0;u<h.textures.length;u++){const c=Ft.normalizePath(this.baseUrl+h.textures[u]);await m.res.loadTexture(c)}}return t=null,!0}async load_textures(){}parserLine(e){var t=e.indexOf("#");if(t!=-1){if(e.indexOf("# object")!=-1){var r=e.split(/\s+/);let f=r[1],g=r[2];this.activeGeo={type:f,name:g[1],source_mat:"",source_faces:[]},this.geometrys[g]=this.activeGeo}e=e.substring(0,t)}e=e.trim();var r=e.split(/\s+/);if(r[0]==="v"){var i=[Number(r[1]),Number(r[2]),Number(r[3]),r[4]?1:Number(r[4])];this.source_vertices.push(i)}else if(r[0]==="vt"){var a=[Number(r[1]),Number(r[2]),r[3]?1:Number(r[3])];this.source_textureCoords.push(a)}else if(r[0]==="vn"){var o=[Number(r[1]),Number(r[2]),Number(r[3])];this.source_normals.push(o)}else if(r[0]==="f"){for(var n={indices:[],texture:[],normal:[]},l=1;l<r.length;++l){var h=r[l].indexOf("//"),u=r[l].split(/\W+/);h>0?(n.indices.push(u[0]),n.normal.push(u[1])):u.length===1?n.indices.push(u[0]):u.length===2?(n.indices.push(u[0]),n.texture.push(u[1])):u.length===3&&(n.indices.push(u[0]),n.texture.push(u[1]),n.normal.push(u[2]))}this.activeGeo.source_faces.push(n)}else r[0]==="usemtl"?this.activeGeo.source_mat=r[1]:r[0]==="mtllib"&&(this.mtlUrl=r[1])}async parserOBJ(){let e=this.textData.split(`\r
|
|
7070
|
+
`);for(let t=0;t<e.length;t++){const r=e[t];this.parserLine(r)}return this.textData="",!0}async parser_mesh(){let e=new q;for(const t in this.geometrys){const r=this.geometrys[t];r.vertex_arr=[],r.normal_arr=[],r.uv_arr=[],r.indeice_arr=[];let i=0;for(let u=0;u<r.source_faces.length;u++){const c=r.source_faces[u];let f=parseInt(c.indices[0])-1,g=parseInt(c.indices[1])-1,p=parseInt(c.indices[2])-1,A=parseInt(c.normal[0])-1,U=parseInt(c.normal[1])-1,x=parseInt(c.normal[2])-1,B=parseInt(c.texture[0])-1,S=parseInt(c.texture[1])-1,C=parseInt(c.texture[2])-1;if(this.applyVector3(f,this.source_vertices,r.vertex_arr),this.applyVector3(A,this.source_normals,r.normal_arr),this.applyVector2(B,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,this.applyVector3(g,this.source_vertices,r.vertex_arr),this.applyVector3(U,this.source_normals,r.normal_arr),this.applyVector2(S,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,this.applyVector3(p,this.source_vertices,r.vertex_arr),this.applyVector3(x,this.source_normals,r.normal_arr),this.applyVector2(C,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,c.indices.length>3){let _=parseInt(c.indices[3])-1,y=parseInt(c.normal[3])-1,b=parseInt(c.texture[3])-1;this.applyVector3(f,this.source_vertices,r.vertex_arr),this.applyVector3(A,this.source_normals,r.normal_arr),this.applyVector2(B,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,this.applyVector3(p,this.source_vertices,r.vertex_arr),this.applyVector3(x,this.source_normals,r.normal_arr),this.applyVector2(C,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++,this.applyVector3(_,this.source_vertices,r.vertex_arr),this.applyVector3(y,this.source_normals,r.normal_arr),this.applyVector2(b,this.source_textureCoords,r.uv_arr),r.indeice_arr[i]=i++}}let a=new Ne;a.setIndices(new Uint32Array(r.indeice_arr)),a.setAttribute(V.position,new Float32Array(r.vertex_arr)),a.setAttribute(V.normal,new Float32Array(r.normal_arr)),a.setAttribute(V.uv,new Float32Array(r.uv_arr)),a.setAttribute(V.TEXCOORD_1,new Float32Array(r.uv_arr)),a.addSubGeometry({indexStart:0,indexCount:r.indeice_arr.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let o=new Qr,n=this.matLibs[r.source_mat];o.baseMap=m.res.getTexture(Ft.normalizePath(this.baseUrl+n.map_Kd));let l=new q,h=l.addComponent(j);h.geometry=a,h.material=o,e.addChild(l)}this.data=e}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}let Wu=`
|
|
7071
7071
|
struct ImageSize {
|
|
7072
7072
|
srcWidth: i32,
|
|
7073
7073
|
srcHeight: i32,
|
|
@@ -7202,7 +7202,7 @@ $1\r
|
|
|
7202
7202
|
|
|
7203
7203
|
return textureLoad(inputTex, coordOffset + coordIndex, 0);
|
|
7204
7204
|
}
|
|
7205
|
-
`;static configBuffer=null;static blurSettingBuffer=null;static pipeline;static createFace(e,t,r,i){const a=R.device;this.pipeline==null&&(this.pipeline=a.createComputePipeline({layout:"auto",compute:{module:a.createShaderModule({code:Ps.createCube}),entryPoint:"main"}}));const o=this.pipeline,n=16;this.configBuffer||=a.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(this.configBuffer,0,new Uint32Array([e,0,0,0])),this.blurSettingBuffer||=a.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(this.blurSettingBuffer,0,new Float32Array([0,0,0,0]));let l=[{binding:0,resource:{buffer:this.configBuffer,size:16}},{binding:1,resource:r.getGPUView()},{binding:2,resource:i.getGPUView()}];const h=a.createBindGroup({layout:o.getBindGroupLayout(0),entries:l}),u=F.beginCommandEncoder(),c=u.beginComputePass();c.setPipeline(o),c.setBindGroup(0,h),c.dispatchWorkgroups(t/8,t/8),c.end(),F.endCommandEncoder(u)}}class Jo extends ps{_images;_url;constructor(){super(),this.useMipmap=!0}generateImages(e){let t=R.device;this.width=this.height=32,"width"in e[0]&&(this.width=this.height=e[0].width);let r=Math.min(this.width,this.height);for(this.mipmapCount=1;r>16;)r/=2,this.mipmapCount++;this.textureBindingLayout.viewDimension="cube",this.samplerBindingLayout.type="filtering",this.createTextureDescriptor(this.width,this.height,this.mipmapCount,this.format),this.textureDescriptor.size={width:this.width,height:this.height,depthOrArrayLayers:6},this.textureDescriptor.dimension="2d",this.gpuTexture=this.getGPUTexture();let i=[],a=i,o=this.width,n=this.height;if(e[0]instanceof $e){for(let l=0;l<6;l++){let h=e[l];i[l]=h.getGPUTexture()}this.uploadMipmapGPUTexture(0,this.width,this.width,i)}else{this.uploadBaseImages(this.width,e);for(let l=0;l<6;l++){let h=new Mr(!1);h.format=this.format,h.source=e[l],i[l]=h.getGPUTexture()}}for(let l=1;l<this.mipmapCount;l++){a=i,i=[];let h={width:o,height:n,gpuTexture:null};o=o/2,n=n/2;for(let u=0;u<6;u++)h.gpuTexture=a[u],i[u]=Zu.blurImageFromTexture(h,o,n,!1);this.uploadMipmapGPUTexture(l,o,n,i)}this.gpuSampler=t.createSampler(this)}uploadBaseImages(e,t){let r=R.device;const i=F.beginCommandEncoder();for(let a=0;a<6;a++)r.queue.copyExternalImageToTexture({source:t[a]},{texture:this.gpuTexture,mipLevel:0,origin:{x:0,y:0,z:a}},{width:e,height:e,depthOrArrayLayers:1});F.endCommandEncoder(i)}uploadMipmapGPUTexture(e,t,r,i){const a=F.beginCommandEncoder();for(let o=0;o<6;o++)a.copyTextureToTexture({texture:i[o],mipLevel:0,origin:{x:0,y:0,z:0}},{texture:this.gpuTexture,mipLevel:e,origin:{x:0,y:0,z:o}},{width:t,height:r,depthOrArrayLayers:1});F.endCommandEncoder(a)}get images(){return this._images}set images(e){if(this._images=e,this._images[0]instanceof HTMLImageElement){let t=function(o,n){n.decode().then(async()=>{r[o]=await createImageBitmap(n),i--,i==0&&a.generateImages(r)})},r=[],i=6,a=this;for(let o=0;o<6;o++)t(o,this._images[o])}else(this._images instanceof HTMLCanvasElement||this._images instanceof ImageBitmap)&&this.generateImages(this._images)}async load(e){this._url=e;let t=6,r=[];this.format=X.rgba8unorm;let i=this;async function a(o,n){const l=document.createElement("img");if(l.src=n,l.setAttribute("crossOrigin",""),await l.decode(),r[o]=await createImageBitmap(l),t--,t==0)return i.generateImages(r),!0}for(let o=0;o<6;o++)await a(o,e[o]);return!0}async loadStd(e){this._url=e,this.format=X.rgba8unorm;const t=document.createElement("img");t.src=e,t.setAttribute("crossOrigin",""),await t.decode();let r=new Mr(!1);r.name=
|
|
7205
|
+
`;static configBuffer=null;static blurSettingBuffer=null;static pipeline;static createFace(e,t,r,i){const a=R.device;this.pipeline==null&&(this.pipeline=a.createComputePipeline({layout:"auto",compute:{module:a.createShaderModule({code:Ps.createCube}),entryPoint:"main"}}));const o=this.pipeline,n=16;this.configBuffer||=a.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(this.configBuffer,0,new Uint32Array([e,0,0,0])),this.blurSettingBuffer||=a.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(this.blurSettingBuffer,0,new Float32Array([0,0,0,0]));let l=[{binding:0,resource:{buffer:this.configBuffer,size:16}},{binding:1,resource:r.getGPUView()},{binding:2,resource:i.getGPUView()}];const h=a.createBindGroup({layout:o.getBindGroupLayout(0),entries:l}),u=F.beginCommandEncoder(),c=u.beginComputePass();c.setPipeline(o),c.setBindGroup(0,h),c.dispatchWorkgroups(t/8,t/8),c.end(),F.endCommandEncoder(u)}}class Jo extends ps{_images;_url;constructor(){super(),this.useMipmap=!0}generateImages(e){let t=R.device;this.width=this.height=32,"width"in e[0]&&(this.width=this.height=e[0].width);let r=Math.min(this.width,this.height);for(this.mipmapCount=1;r>16;)r/=2,this.mipmapCount++;this.textureBindingLayout.viewDimension="cube",this.samplerBindingLayout.type="filtering",this.createTextureDescriptor(this.width,this.height,this.mipmapCount,this.format),this.textureDescriptor.size={width:this.width,height:this.height,depthOrArrayLayers:6},this.textureDescriptor.dimension="2d",this.gpuTexture=this.getGPUTexture();let i=[],a=i,o=this.width,n=this.height;if(e[0]instanceof $e){for(let l=0;l<6;l++){let h=e[l];i[l]=h.getGPUTexture()}this.uploadMipmapGPUTexture(0,this.width,this.width,i)}else{this.uploadBaseImages(this.width,e);for(let l=0;l<6;l++){let h=new Mr(!1);h.format=this.format,h.source=e[l],i[l]=h.getGPUTexture()}}for(let l=1;l<this.mipmapCount;l++){a=i,i=[];let h={width:o,height:n,gpuTexture:null};o=o/2,n=n/2;for(let u=0;u<6;u++)h.gpuTexture=a[u],i[u]=Zu.blurImageFromTexture(h,o,n,!1);this.uploadMipmapGPUTexture(l,o,n,i)}this.gpuSampler=t.createSampler(this)}uploadBaseImages(e,t){let r=R.device;const i=F.beginCommandEncoder();for(let a=0;a<6;a++)r.queue.copyExternalImageToTexture({source:t[a]},{texture:this.gpuTexture,mipLevel:0,origin:{x:0,y:0,z:a}},{width:e,height:e,depthOrArrayLayers:1});F.endCommandEncoder(i)}uploadMipmapGPUTexture(e,t,r,i){const a=F.beginCommandEncoder();for(let o=0;o<6;o++)a.copyTextureToTexture({texture:i[o],mipLevel:0,origin:{x:0,y:0,z:0}},{texture:this.gpuTexture,mipLevel:e,origin:{x:0,y:0,z:o}},{width:t,height:r,depthOrArrayLayers:1});F.endCommandEncoder(a)}get images(){return this._images}set images(e){if(this._images=e,this._images[0]instanceof HTMLImageElement){let t=function(o,n){n.decode().then(async()=>{r[o]=await createImageBitmap(n),i--,i==0&&a.generateImages(r)})},r=[],i=6,a=this;for(let o=0;o<6;o++)t(o,this._images[o])}else(this._images instanceof HTMLCanvasElement||this._images instanceof ImageBitmap)&&this.generateImages(this._images)}async load(e){this._url=e;let t=6,r=[];this.format=X.rgba8unorm;let i=this;async function a(o,n){const l=document.createElement("img");if(l.src=n,l.setAttribute("crossOrigin",""),await l.decode(),r[o]=await createImageBitmap(l),t--,t==0)return i.generateImages(r),!0}for(let o=0;o<6;o++)await a(o,e[o]);return!0}async loadStd(e){this._url=e,this.format=X.rgba8unorm;const t=document.createElement("img");t.src=e,t.setAttribute("crossOrigin",""),await t.decode();let r=new Mr(!1);r.name=Ft.getURLName(e),r.format="rgba8unorm",r.source=await createImageBitmap(t);let i=Math.round(Math.log2(r.width/4));i=Math.pow(2,i),this.width=this.height=i;let a=[];for(let o=0;o<6;o++){let n=new Ae(i,i,this.format,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING);n.name="face "+o,a.push(n),Ps.createFace(o,this.width,r,n)}return this.generateImages(a),!0}}var Yu=(s=>(s[s.Left=0]="Left",s[s.Right=1]="Right",s[s.Bottom=2]="Bottom",s[s.Top=3]="Top",s[s.Back=4]="Back",s[s.Front=5]="Front",s))(Yu||{});class Zo{static getRotationToFace(e){let t=Z.identity().clone(),r=new d,i=new I().identity(),a=new d;switch(e){case 3:r.set(0,-1,0),a.set(0,0,-1);break;case 2:r.set(0,1,0),a.set(0,0,1);break;case 1:r.set(1,0,0),a.set(0,1,0);break;case 0:r.set(-1,0,0),a.set(0,1,0);break;case 4:r.set(0,0,-1),a.set(0,1,0);break;case 5:return Z.identity()}return i.lookAt(new d,r,a),t.setFromRotationMatrix(i),t}}let Xu=`
|
|
7206
7206
|
struct ImageSize {
|
|
7207
7207
|
srcWidth: i32,
|
|
7208
7208
|
srcHeight: i32,
|
|
@@ -7465,7 +7465,7 @@ $1\r
|
|
|
7465
7465
|
var oc:vec4<f32> = multiSample(worldDirection, blurSetting.x);
|
|
7466
7466
|
textureStore(outputBuffer0, coord, i32(GlobalInvocationID.z), oc);
|
|
7467
7467
|
}
|
|
7468
|
-
`;class qu{static configBuffer=null;static quaternionBuffer=null;static blurSettingBuffer=null;static pipeline;static importantSample(e,t,r,i){const a=R.device;this.pipeline==null&&(this.pipeline=a.createComputePipeline({layout:"auto",compute:{module:a.createShaderModule({code:Ku}),entryPoint:"main"}}));const o=this.pipeline,n=16;this.configBuffer||=a.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(this.configBuffer,0,new Uint32Array([e.width,e.height,t,t]));const l=24;if(!this.quaternionBuffer){this.quaternionBuffer=a.createBuffer({size:l*4*6,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});let U=new Float32Array(24);for(let x=0;x<6;x++){let B=Zo.getRotationToFace(x);U[x*4+0]=B.x,U[x*4+1]=B.y,U[x*4+2]=B.z,U[x*4+3]=B.w}a.queue.writeBuffer(this.quaternionBuffer,0,U)}this.blurSettingBuffer||=a.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(this.blurSettingBuffer,0,new Float32Array([r,0,0,0]));const h=e.erpTexture;let u=[{binding:0,resource:{buffer:this.configBuffer,size:16}},{binding:1,resource:{buffer:this.quaternionBuffer,size:l*4}},{binding:2,resource:h.gpuSampler},{binding:3,resource:h.getGPUView()}],c=[{binding:0,resource:{buffer:this.blurSettingBuffer,size:16}},{binding:1,resource:i}];const f=a.createBindGroup({layout:o.getBindGroupLayout(0),entries:u}),g=a.createBindGroup({layout:o.getBindGroupLayout(1),entries:c}),p=F.beginCommandEncoder(),A=p.beginComputePass();A.setPipeline(o),A.setBindGroup(0,f),A.setBindGroup(1,g),A.dispatchWorkgroups(t/8,t/8,6),A.end(),F.endCommandEncoder(p)}}class jo{faceTextureRef;_texture;constructor(e){this._texture=e,this.faceTextureRef={}}uploadTexture(e,t){let r=this.getGpuSource(e);return Dt.makeTextureCube(t,this._texture.width,r.v),this}uploadErpTexture(e){let t=this.getGpuSource(0);return Dt.makeTextureCube(e,this._texture.width,t.v),this.generateMipmap(e),this}getGpuSource(e){let t=this.faceTextureRef[e];return t||(t={t:this._texture.getGPUTexture(),v:this._texture.getGPUTexture().createView({format:this._texture.format,dimension:"2d-array",baseMipLevel:e,mipLevelCount:1,arrayLayerCount:6})},this.faceTextureRef[e]=t),t}generateMipmap(e){let t=1;for(;t<this._texture.mipmapCount;)this.generateMipmapAtLevel(t,e),t++}generateMipmapAtLevel(e,t,r=3){let i=this._texture.width/Math.pow(2,e),a={width:i,height:i,erpTexture:t},o=(e+1)/this._texture.mipmapCount;o=Math.pow(o,r);let n=this.getGpuSource(e);qu.importantSample(a,i,o,n.v)}}class ms extends ps{_url;_faceData;constructor(){super(),this.useMipmap=!0,this.format=X.rgba16float,this.isHDRTexture=!0,this._faceData=new jo(this)}createFromHDRData(e,t){let r=new Ae(t.width,t.height,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),i=new Float32Array(t.array);return Dt.convertRGBE2RGBA(r,i),this.createFromTexture(e,r),this}createFromTexture(e,t){this.width=this.height=e,this.textureBindingLayout.viewDimension="cube";let r=this.width;for(this.mipmapCount=1;r>16;)r/=2,this.mipmapCount++;return this.createTextureDescriptor(e,e,this.mipmapCount,this.format),this.textureDescriptor.size={width:e,height:e,depthOrArrayLayers:6},this.textureDescriptor.dimension="2d",this.gpuSampler=R.device.createSampler(this),this._faceData.uploadErpTexture(t),this}async load(e,t){return this._url=e,(await new gt().load(e,Ho,t)).getCubeTexture()}}function $u(s){return new TextDecoder().decode(s)}class As{buffer;binOffset;binLength;header;constructor(e,t,r,i){this.buffer=e,this.binOffset=t+r,this.binLength=i;let a=null;if(r!==0){const o=new Uint8Array(e,t,r);a=JSON.parse($u(o))}else a={};this.header=a}getKeys(){return Object.keys(this.header)}getData(e,t,r=null,i=null){const a=this.header;if(!(e in a))return null;const o=a[e];if(o instanceof Object){if(Array.isArray(o))return o;{const{buffer:n,binOffset:l,binLength:h}=this,u=o.byteOffset||0,c=o.type||i,f=o.componentType||r;if("type"in o&&i&&o.type!==i)throw new Error("FeatureTable: Specified type does not match expected type.");let g;switch(c){case"SCALAR":g=1;break;case"VEC2":g=2;break;case"VEC3":g=3;break;case"VEC4":g=4;break;default:throw new Error(`FeatureTable : Feature type not provided for "${e}".`)}let p;const A=l+u,U=t*g;switch(f){case"BYTE":p=new Int8Array(n,A,U);break;case"UNSIGNED_BYTE":p=new Uint8Array(n,A,U);break;case"SHORT":p=new Int16Array(n,A,U);break;case"UNSIGNED_SHORT":p=new Uint16Array(n,A,U);break;case"INT":p=new Int32Array(n,A,U);break;case"UNSIGNED_INT":p=new Uint32Array(n,A,U);break;case"FLOAT":p=new Float32Array(n,A,U);break;case"DOUBLE":p=new Float64Array(n,A,U);break;default:throw new Error(`FeatureTable : Feature component type not provided for "${e}".`)}if(A+U*p.BYTES_PER_ELEMENT>l+h)throw new Error("FeatureTable: Feature data read outside binary body length.");return p}}else return o}}class Ko extends As{batchSize;constructor(e,t,r,i,a){super(e,r,i,a),this.batchSize=t}getData(e,t=null,r=null){return super.getData(e,this.batchSize,t,r)}}function qo(s){let e;if(s instanceof DataView?e=s:e=new DataView(s),String.fromCharCode(e.getUint8(0))==="{")return null;let t="";for(let r=0;r<4;r++)t+=String.fromCharCode(e.getUint8(r));return t}class ec{async parse(e){const t=new DataView(e),r=qo(t);console.assert(r==="b3dm");const i=t.getUint32(4,!0);console.assert(i===1);const a=t.getUint32(8,!0);console.assert(a===e.byteLength);const o=t.getUint32(12,!0),n=t.getUint32(16,!0),l=t.getUint32(20,!0),h=t.getUint32(24,!0),u=28,c=new As(e,u,o,n),f=u+o+n,g=new Ko(e,c.getData("BATCH_LENGTH"),f,l,h),p=f+l+h,A=new Uint8Array(e,p,a-p);return{version:i,featureTable:c,batchTable:g,glbBytes:A}}}class kr extends ec{adjustmentTransform;gltfBuffer;static tempMatrix;constructor(){super(),this.adjustmentTransform=new I().identity(),kr.tempMatrix||=new I().identity()}async parse(e){const t=await super.parse(e);this.gltfBuffer=t.glbBytes.slice().buffer;let i=await new en().parseBinary(this.gltfBuffer),{batchTable:a,featureTable:o}=t;const n=o.getData("RTC_CENTER");n&&(i.x+=n[0],i.y+=n[1],i.z+=n[2]);let l=i.getComponent(Tt);l.updateWorldMatrix();let h=kr.tempMatrix;h.compose(l.localPosition,l.localRotQuat,l.localScale),h.multiply(this.adjustmentTransform);let u=h.decompose(ir.QUATERNION);return l.localRotQuat.copyFrom(u[1]),l.localRotQuat=l.localRotQuat,l.localPosition.copyFrom(u[0]),l.localPosition=l.localPosition,l.localScale.copyFrom(u[2]),l.localScale=l.localScale,l.updateWorldMatrix(),i.batchTable=a,i.featureTable=o,i}static decodeText(e){if(typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let r=0,i=e.length;r<i;r++)t+=String.fromCharCode(e[r]);try{return decodeURIComponent(escape(t))}catch{return t}}}class tc extends st{static format=Ge.JSON;async parseBuffer(e){let t=new kr;t.adjustmentTransform=this.userData,this.data=await t.parse(e)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}const rc="glTF",Ba=12,ic={JSON:1313821514,BIN:5130562},$o={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:"KHR_materials_pbrSpecularGlossiness",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression"};class ac{name;content;body;header;constructor(e){this.name=$o.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,Ba);if(this.header={magic:kr.decodeText(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==rc)throw new Error("GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("GLTFLoader: Legacy binary file detected.");const r=this.header.length-Ba,i=new DataView(e,Ba);let a=0;for(;a<r;){const o=i.getUint32(a,!0);a+=4;const n=i.getUint32(a,!0);if(a+=4,n===ic.JSON){const l=new Uint8Array(e,Ba+a,o);this.content=kr.decodeText(l)}else if(n===ic.BIN){const l=Ba+a;this.body=e.slice(l,l+o)}a+=o}if(this.content===null)throw new Error("GLTFLoader: JSON content not found.")}}class en{_binary;async parseBinary(e){this._binary=e;const t=kr.decodeText(new Uint8Array(this._binary,0,4)),r={};let i,a;if(t===rc){try{a=r[$o.KHR_BINARY_GLTF]=new ac(this._binary)}catch{return}i=r[$o.KHR_BINARY_GLTF].content}else i=kr.decodeText(new Uint8Array(this._binary));const o=JSON.parse(i);return await this.parseGLB(o,a.body)}async parseGLB(e,t){return await new Wo().parseJsonAndBuffer(e,t)}}class sc{async parse(e){const t=new DataView(e),r=qo(t);console.assert(r==="i3dm");const i=t.getUint32(4,!0);console.assert(i===1);const a=t.getUint32(8,!0);console.assert(a===e.byteLength);const o=t.getUint32(12,!0),n=t.getUint32(16,!0),l=t.getUint32(20,!0),h=t.getUint32(24,!0);t.getUint32(28,!0);const u=32,c=new As(e,u,o,n),f=u+o+n,g=new Ko(e,c.getData("INSTANCES_LENGTH"),f,l,h),p=f+l+h,A=new Uint8Array(e,p,a-p);return{version:i,featureTable:c,batchTable:g,glbBytes:A}}}class oc extends q{_geometry;_material;_instanceList;constructor(e,t,r){super(),this._geometry=e,this._material=t,this._instanceList=[];for(let i=0;i<r;i++){let a,o=new q;a=o.addComponent(j),a.geometry=this._geometry,a.material=this._material,this.addChild(o),this._instanceList.push(o)}}setMatrixAt(e,t){let r=this._instanceList[e],i=t.decompose(ir.QUATERNION),a=r.transform;return a.localRotQuat.copyFrom(i[1]),a.localRotQuat=a.localRotQuat,a.localPosition.copyFrom(i[0]),a.localPosition=a.localPosition,a.localScale.copyFrom(i[2]),a.localScale=a.localScale,this}}class fr extends sc{static tempFwd;static tempUp;static tempRight;static tempPos;static tempQuat;static tempSca;static tempMat;adjustmentTransform;_gltfBuffer;constructor(){super(),fr.tempFwd||=new d,fr.tempUp||=new d,fr.tempRight||=new d,fr.tempPos||=new d,fr.tempQuat||=new Z,fr.tempSca||=new d,fr.tempMat||=new I,this.adjustmentTransform=new I().identity()}async parse(e){const t=await super.parse(e);this._gltfBuffer=t.glbBytes.slice().buffer;let i=await new en().parseBinary(this._gltfBuffer),{batchTable:a,featureTable:o}=t;const n=this.adjustmentTransform,l=o.getData("INSTANCES_LENGTH"),h=o.getData("POSITION",l,"FLOAT","VEC3"),u=o.getData("NORMAL_UP",l,"FLOAT","VEC3"),c=o.getData("NORMAL_RIGHT",l,"FLOAT","VEC3"),f=o.getData("SCALE_NON_UNIFORM",l,"FLOAT","VEC3"),g=o.getData("SCALE",l,"FLOAT","SCALAR"),p=new Map,A=[];i.traverse(B=>{let S;if(S=B?B.getComponent(j):null,S){const{geometry:C,material:_}=S,y=new oc(C,_,l);y.localPosition=y.localPosition.copy(B.localPosition),y.localRotation=y.localRotation.copy(B.localRotation),y.localScale=y.localScale.copy(B.localScale),A.push(y),p.set(B,y)}});const U=new d;for(let B=0;B<l;B++)U.x+=h[B*3+0]/l,U.y+=h[B*3+1]/l,U.z+=h[B*3+2]/l;p.forEach((B,S)=>{const C=S.parent?S.parentObject:null;C&&(C.removeChild(S),C.addChild(B),B.transform.updateWorldMatrix(),B.transform.worldMatrix.transformVector4(U,B.localPosition))});const x=fr;for(let B=0;B<l;B++){x.tempMat.identity(),x.tempPos.set(h[B*3+0]-U.x,h[B*3+1]-U.y,h[B*3+2]-U.z),u?(x.tempUp.set(u[B*3+0],u[B*3+1],u[B*3+2]),x.tempRight.set(c[B*3+0],c[B*3+1],c[B*3+2]),x.tempRight.crossProduct(x.tempUp,x.tempFwd).normalize(),x.tempMat.makeBasis(x.tempRight,x.tempUp,x.tempFwd),x.tempQuat.setFromRotationMatrix(x.tempMat)):x.tempQuat.set(0,0,0,1),g?x.tempSca.setScalar(g[B]):f?x.tempSca.set(f[B*3+0],f[B*3+1],f[B*3+2]):x.tempSca.set(1,1,1),x.tempMat.compose(x.tempPos,x.tempQuat,x.tempSca),x.tempMat.multiplyMatrices(x.tempMat,n);for(let S=0,C=A.length;S<C;S++)A[S].setMatrixAt(B,x.tempMat)}return i.batchTable=a,i.featureTable=o,i}}class nc extends st{static format=Ge.BIN;async parseBuffer(e){let t=new fr;t.adjustmentTransform=this.userData,this.data=await t.parse(e)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}class Us extends ps{_faceData;_url;get ldrImageUrl(){return this._url}constructor(){super(),this.useMipmap=!0,this.format=X.rgba16float,this._faceData=new jo(this)}async load(e,t){this._url=e;let r=new Mr(!1);return await r.load(e,t),this.createFromLDRTexture(r),this}createFromLDRTexture(e){let t=Math.log2(e.width/4);return t=Math.pow(2,Math.round(t)),this.createFromTexture(t,e),this}createFromTexture(e,t){this.width=this.height=e,this.textureBindingLayout.viewDimension="cube";let r=this.width;for(this.mipmapCount=1;r>16;)r/=2,this.mipmapCount++;return this.createTextureDescriptor(e,e,this.mipmapCount,this.format),this.textureDescriptor.size={width:e,height:e,depthOrArrayLayers:6},this.textureDescriptor.dimension="2d",this.gpuSampler=R.device.createSampler(this),this._faceData.uploadErpTexture(t),this}}let lc=`
|
|
7468
|
+
`;class qu{static configBuffer=null;static quaternionBuffer=null;static blurSettingBuffer=null;static pipeline;static importantSample(e,t,r,i){const a=R.device;this.pipeline==null&&(this.pipeline=a.createComputePipeline({layout:"auto",compute:{module:a.createShaderModule({code:Ku}),entryPoint:"main"}}));const o=this.pipeline,n=16;this.configBuffer||=a.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(this.configBuffer,0,new Uint32Array([e.width,e.height,t,t]));const l=24;if(!this.quaternionBuffer){this.quaternionBuffer=a.createBuffer({size:l*4*6,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});let U=new Float32Array(24);for(let x=0;x<6;x++){let B=Zo.getRotationToFace(x);U[x*4+0]=B.x,U[x*4+1]=B.y,U[x*4+2]=B.z,U[x*4+3]=B.w}a.queue.writeBuffer(this.quaternionBuffer,0,U)}this.blurSettingBuffer||=a.createBuffer({size:n,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(this.blurSettingBuffer,0,new Float32Array([r,0,0,0]));const h=e.erpTexture;let u=[{binding:0,resource:{buffer:this.configBuffer,size:16}},{binding:1,resource:{buffer:this.quaternionBuffer,size:l*4}},{binding:2,resource:h.gpuSampler},{binding:3,resource:h.getGPUView()}],c=[{binding:0,resource:{buffer:this.blurSettingBuffer,size:16}},{binding:1,resource:i}];const f=a.createBindGroup({layout:o.getBindGroupLayout(0),entries:u}),g=a.createBindGroup({layout:o.getBindGroupLayout(1),entries:c}),p=F.beginCommandEncoder(),A=p.beginComputePass();A.setPipeline(o),A.setBindGroup(0,f),A.setBindGroup(1,g),A.dispatchWorkgroups(t/8,t/8,6),A.end(),F.endCommandEncoder(p)}}class jo{faceTextureRef;_texture;constructor(e){this._texture=e,this.faceTextureRef={}}uploadTexture(e,t){let r=this.getGpuSource(e);return Dt.makeTextureCube(t,this._texture.width,r.v),this}uploadErpTexture(e){let t=this.getGpuSource(0);return Dt.makeTextureCube(e,this._texture.width,t.v),this.generateMipmap(e),this}getGpuSource(e){let t=this.faceTextureRef[e];return t||(t={t:this._texture.getGPUTexture(),v:this._texture.getGPUTexture().createView({format:this._texture.format,dimension:"2d-array",baseMipLevel:e,mipLevelCount:1,arrayLayerCount:6})},this.faceTextureRef[e]=t),t}generateMipmap(e){let t=1;for(;t<this._texture.mipmapCount;)this.generateMipmapAtLevel(t,e),t++}generateMipmapAtLevel(e,t,r=3){let i=this._texture.width/Math.pow(2,e),a={width:i,height:i,erpTexture:t},o=(e+1)/this._texture.mipmapCount;o=Math.pow(o,r);let n=this.getGpuSource(e);qu.importantSample(a,i,o,n.v)}}class ms extends ps{_url;_faceData;constructor(){super(),this.useMipmap=!0,this.format=X.rgba16float,this.isHDRTexture=!0,this._faceData=new jo(this)}createFromHDRData(e,t){let r=new Ae(t.width,t.height,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),i=new Float32Array(t.array);return Dt.convertRGBE2RGBA(r,i),this.createFromTexture(e,r),this}createFromTexture(e,t){this.width=this.height=e,this.textureBindingLayout.viewDimension="cube";let r=this.width;for(this.mipmapCount=1;r>16;)r/=2,this.mipmapCount++;return this.createTextureDescriptor(e,e,this.mipmapCount,this.format),this.textureDescriptor.size={width:e,height:e,depthOrArrayLayers:6},this.textureDescriptor.dimension="2d",this.gpuSampler=R.device.createSampler(this),this._faceData.uploadErpTexture(t),this}async load(e,t){return this._url=e,(await new gt().load(e,Ho,t)).getCubeTexture()}}function $u(s){return new TextDecoder().decode(s)}class As{buffer;binOffset;binLength;header;constructor(e,t,r,i){this.buffer=e,this.binOffset=t+r,this.binLength=i;let a=null;if(r!==0){const o=new Uint8Array(e,t,r);a=JSON.parse($u(o))}else a={};this.header=a}getKeys(){return Object.keys(this.header)}getData(e,t,r=null,i=null){const a=this.header;if(!(e in a))return null;const o=a[e];if(o instanceof Object){if(Array.isArray(o))return o;{const{buffer:n,binOffset:l,binLength:h}=this,u=o.byteOffset||0,c=o.type||i,f=o.componentType||r;if("type"in o&&i&&o.type!==i)throw new Error("FeatureTable: Specified type does not match expected type.");let g;switch(c){case"SCALAR":g=1;break;case"VEC2":g=2;break;case"VEC3":g=3;break;case"VEC4":g=4;break;default:throw new Error(`FeatureTable : Feature type not provided for "${e}".`)}let p;const A=l+u,U=t*g;switch(f){case"BYTE":p=new Int8Array(n,A,U);break;case"UNSIGNED_BYTE":p=new Uint8Array(n,A,U);break;case"SHORT":p=new Int16Array(n,A,U);break;case"UNSIGNED_SHORT":p=new Uint16Array(n,A,U);break;case"INT":p=new Int32Array(n,A,U);break;case"UNSIGNED_INT":p=new Uint32Array(n,A,U);break;case"FLOAT":p=new Float32Array(n,A,U);break;case"DOUBLE":p=new Float64Array(n,A,U);break;default:throw new Error(`FeatureTable : Feature component type not provided for "${e}".`)}if(A+U*p.BYTES_PER_ELEMENT>l+h)throw new Error("FeatureTable: Feature data read outside binary body length.");return p}}else return o}}class Ko extends As{batchSize;constructor(e,t,r,i,a){super(e,r,i,a),this.batchSize=t}getData(e,t=null,r=null){return super.getData(e,this.batchSize,t,r)}}function qo(s){let e;if(s instanceof DataView?e=s:e=new DataView(s),String.fromCharCode(e.getUint8(0))==="{")return null;let t="";for(let r=0;r<4;r++)t+=String.fromCharCode(e.getUint8(r));return t}class ec{async parse(e){const t=new DataView(e),r=qo(t);console.assert(r==="b3dm");const i=t.getUint32(4,!0);console.assert(i===1);const a=t.getUint32(8,!0);console.assert(a===e.byteLength);const o=t.getUint32(12,!0),n=t.getUint32(16,!0),l=t.getUint32(20,!0),h=t.getUint32(24,!0),u=28,c=new As(e,u,o,n),f=u+o+n,g=new Ko(e,c.getData("BATCH_LENGTH"),f,l,h),p=f+l+h,A=new Uint8Array(e,p,a-p);return{version:i,featureTable:c,batchTable:g,glbBytes:A}}}class kr extends ec{adjustmentTransform;gltfBuffer;static tempMatrix;constructor(){super(),this.adjustmentTransform=new I().identity(),kr.tempMatrix||=new I().identity()}async parse(e){const t=await super.parse(e);this.gltfBuffer=t.glbBytes.slice().buffer;let i=await new en().parseBinary(this.gltfBuffer),{batchTable:a,featureTable:o}=t;const n=o.getData("RTC_CENTER");n&&(i.x+=n[0],i.y+=n[1],i.z+=n[2]);let l=i.getComponent(Tt);l.updateWorldMatrix();let h=kr.tempMatrix;h.compose(l.localPosition,l.localRotQuat,l.localScale),h.multiply(this.adjustmentTransform);let u=h.decompose(ir.QUATERNION);return l.localRotQuat.copyFrom(u[1]),l.localRotQuat=l.localRotQuat,l.localPosition.copyFrom(u[0]),l.localPosition=l.localPosition,l.localScale.copyFrom(u[2]),l.localScale=l.localScale,l.updateWorldMatrix(),i.batchTable=a,i.featureTable=o,i}static decodeText(e){if(typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let r=0,i=e.length;r<i;r++)t+=String.fromCharCode(e[r]);try{return decodeURIComponent(escape(t))}catch{return t}}}class tc extends st{static format=Ge.JSON;async parseBuffer(e){let t=new kr;t.adjustmentTransform=this.userData,this.data=await t.parse(e)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}const rc="glTF",Ba=12,ic={JSON:1313821514,BIN:5130562},$o={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:"KHR_materials_pbrSpecularGlossiness",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression"};class ac{name;content;body;header;constructor(e){this.name=$o.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,Ba);if(this.header={magic:kr.decodeText(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==rc)throw new Error("GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("GLTFLoader: Legacy binary file detected.");const r=this.header.length-Ba,i=new DataView(e,Ba);let a=0;for(;a<r;){const o=i.getUint32(a,!0);a+=4;const n=i.getUint32(a,!0);if(a+=4,n===ic.JSON){const l=new Uint8Array(e,Ba+a,o);this.content=kr.decodeText(l)}else if(n===ic.BIN){const l=Ba+a;this.body=e.slice(l,l+o)}a+=o}if(this.content===null)throw new Error("GLTFLoader: JSON content not found.")}}class en{_binary;async parseBinary(e){this._binary=e;const t=kr.decodeText(new Uint8Array(this._binary,0,4)),r={};let i,a;if(t===rc){try{a=r[$o.KHR_BINARY_GLTF]=new ac(this._binary)}catch{return}i=r[$o.KHR_BINARY_GLTF].content}else i=kr.decodeText(new Uint8Array(this._binary));const o=JSON.parse(i);return await this.parseGLB(o,a.body)}async parseGLB(e,t){return await new Wo().parseJsonAndBuffer(e,t)}}class sc{async parse(e){const t=new DataView(e),r=qo(t);console.assert(r==="i3dm");const i=t.getUint32(4,!0);console.assert(i===1);const a=t.getUint32(8,!0);console.assert(a===e.byteLength);const o=t.getUint32(12,!0),n=t.getUint32(16,!0),l=t.getUint32(20,!0),h=t.getUint32(24,!0);t.getUint32(28,!0);const u=32,c=new As(e,u,o,n),f=u+o+n,g=new Ko(e,c.getData("INSTANCES_LENGTH"),f,l,h),p=f+l+h,A=new Uint8Array(e,p,a-p);return{version:i,featureTable:c,batchTable:g,glbBytes:A}}}class oc extends q{_geometry;_material;_instanceList;constructor(e,t,r){super(),this._geometry=e,this._material=t,this._instanceList=[];for(let i=0;i<r;i++){let a,o=new q;a=o.addComponent(j),a.geometry=this._geometry,a.material=this._material,this.addChild(o),this._instanceList.push(o)}}setMatrixAt(e,t){let r=this._instanceList[e],i=t.decompose(ir.QUATERNION),a=r.transform;return a.localRotQuat.copyFrom(i[1]),a.localRotQuat=a.localRotQuat,a.localPosition.copyFrom(i[0]),a.localPosition=a.localPosition,a.localScale.copyFrom(i[2]),a.localScale=a.localScale,this}}class cr extends sc{static tempFwd;static tempUp;static tempRight;static tempPos;static tempQuat;static tempSca;static tempMat;adjustmentTransform;_gltfBuffer;constructor(){super(),cr.tempFwd||=new d,cr.tempUp||=new d,cr.tempRight||=new d,cr.tempPos||=new d,cr.tempQuat||=new Z,cr.tempSca||=new d,cr.tempMat||=new I,this.adjustmentTransform=new I().identity()}async parse(e){const t=await super.parse(e);this._gltfBuffer=t.glbBytes.slice().buffer;let i=await new en().parseBinary(this._gltfBuffer),{batchTable:a,featureTable:o}=t;const n=this.adjustmentTransform,l=o.getData("INSTANCES_LENGTH"),h=o.getData("POSITION",l,"FLOAT","VEC3"),u=o.getData("NORMAL_UP",l,"FLOAT","VEC3"),c=o.getData("NORMAL_RIGHT",l,"FLOAT","VEC3"),f=o.getData("SCALE_NON_UNIFORM",l,"FLOAT","VEC3"),g=o.getData("SCALE",l,"FLOAT","SCALAR"),p=new Map,A=[];i.traverse(B=>{let S;if(S=B?B.getComponent(j):null,S){const{geometry:C,material:_}=S,y=new oc(C,_,l);y.localPosition=y.localPosition.copy(B.localPosition),y.localRotation=y.localRotation.copy(B.localRotation),y.localScale=y.localScale.copy(B.localScale),A.push(y),p.set(B,y)}});const U=new d;for(let B=0;B<l;B++)U.x+=h[B*3+0]/l,U.y+=h[B*3+1]/l,U.z+=h[B*3+2]/l;p.forEach((B,S)=>{const C=S.parent?S.parentObject:null;C&&(C.removeChild(S),C.addChild(B),B.transform.updateWorldMatrix(),B.transform.worldMatrix.transformVector4(U,B.localPosition))});const x=cr;for(let B=0;B<l;B++){x.tempMat.identity(),x.tempPos.set(h[B*3+0]-U.x,h[B*3+1]-U.y,h[B*3+2]-U.z),u?(x.tempUp.set(u[B*3+0],u[B*3+1],u[B*3+2]),x.tempRight.set(c[B*3+0],c[B*3+1],c[B*3+2]),x.tempRight.crossProduct(x.tempUp,x.tempFwd).normalize(),x.tempMat.makeBasis(x.tempRight,x.tempUp,x.tempFwd),x.tempQuat.setFromRotationMatrix(x.tempMat)):x.tempQuat.set(0,0,0,1),g?x.tempSca.setScalar(g[B]):f?x.tempSca.set(f[B*3+0],f[B*3+1],f[B*3+2]):x.tempSca.set(1,1,1),x.tempMat.compose(x.tempPos,x.tempQuat,x.tempSca),x.tempMat.multiplyMatrices(x.tempMat,n);for(let S=0,C=A.length;S<C;S++)A[S].setMatrixAt(B,x.tempMat)}return i.batchTable=a,i.featureTable=o,i}}class nc extends st{static format=Ge.BIN;async parseBuffer(e){let t=new cr;t.adjustmentTransform=this.userData,this.data=await t.parse(e)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}class Us extends ps{_faceData;_url;get ldrImageUrl(){return this._url}constructor(){super(),this.useMipmap=!0,this.format=X.rgba16float,this._faceData=new jo(this)}async load(e,t){this._url=e;let r=new Mr(!1);return await r.load(e,t),this.createFromLDRTexture(r),this}createFromLDRTexture(e){let t=Math.log2(e.width/4);return t=Math.pow(2,Math.round(t)),this.createFromTexture(t,e),this}createFromTexture(e,t){this.width=this.height=e,this.textureBindingLayout.viewDimension="cube";let r=this.width;for(this.mipmapCount=1;r>16;)r/=2,this.mipmapCount++;return this.createTextureDescriptor(e,e,this.mipmapCount,this.format),this.textureDescriptor.size={width:e,height:e,depthOrArrayLayers:6},this.textureDescriptor.dimension="2d",this.gpuSampler=R.device.createSampler(this),this._faceData.uploadErpTexture(t),this}}let lc=`
|
|
7469
7469
|
var<private>PI: f32 = 3.141592653589793;
|
|
7470
7470
|
|
|
7471
7471
|
fn hammersley(i : u32, N : u32) -> vec2<f32>{
|
|
@@ -7557,7 +7557,7 @@ $1\r
|
|
|
7557
7557
|
`;class hc{compute;constructor(){this.compute=new ue(lc)}generateBRDFLUTTexture(){let e=new Ae(256,256,X.rgba8unorm,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING);this.compute.setStorageTexture("brdflutTexture",e),this.compute.workerSizeX=256/8,this.compute.workerSizeY=256/8;let t=F.beginCommandEncoder();return F.computeCommand(t,[this.compute]),F.endCommandEncoder(t),e}}class Ki{id;guiTexture;uvRec=new $(0,0,1,1);uvBorder=new $(0,0,0,0);offsetSize=new $(0,0,4,4);borderSize=new $(0,0,0,0);trimSize=new K;isSliced=!1;height=4;width=4;xadvance=0;xoffset=0;yoffset=0;constructor(e){this.guiTexture=e||m.res.defaultGUITexture}}class fi{static _maxUid=-1;_staticId=-1;dynamicId=-1;texture;width=1;height=1;get staticId(){return this._staticId}constructor(e){e||=m.res.whiteTexture,e.addressModeU="clamp-to-edge",e.addressModeV="clamp-to-edge",this.texture=e,fi._maxUid++,this._staticId=fi._maxUid,this.init()}init(){this.dynamicId=-1,this.width=this.texture.width,this.height=this.texture.height}}class xp{fntCache={};fntData={};addFontData(e,t,r){this.fntData[`${e}${t}`]=r}getFontData(e,t){return this.fntData[`${e}${t}`]}addFnt(e,t,r,i){let a=`${e}${t}`;this.fntCache[a]||(this.fntCache[a]={}),this.fntCache[a][r]=i}getFnt(e,t,r){let i=`${e}${t}`,a=this.fntCache[i];return a?a[r]:this.fntCache[" "]}}let qi=new xp;class uc{face="";size=0;bold=!1;italic=!1;stretchH=0;spacing="";outline=0;lineHeight=0;base=0;scaleW=0;scaleH=0;pages=0;packed=0;alphaChnl=0;redChnl=0;greenChnl=0;blueChnl=0;count=0;fontPage=[];fontChar={};constructor(){}}class cc{id=0;file=""}class fc{id=-1;x=0;y=0;width=0;height=0;xoffset=0;yoffset=0;xadvance=0;page=0;chnl=0}class Lr extends st{static format=Ge.TEXT;static parseSprite(e,t){for(const r in t.fontChar)if(Object.prototype.hasOwnProperty.call(t.fontChar,r)){const i=t.fontChar[r];let a=new Ki;a.id=i.id.toString(),a.offsetSize.set(0,0,i.width,i.height),a.trimSize.set(i.width,i.height),a.width=i.width,a.height=i.height,a.xadvance=i.xadvance,a.xoffset=i.xoffset,a.yoffset=i.yoffset,a.guiTexture=e[i.page],a.uvRec.set(i.x/t.scaleW,(t.scaleH-(i.y+i.height))/t.scaleH,i.width/t.scaleW,i.height/t.scaleH),qi.addFnt(t.face,t.size,a.id,a)}}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}async parseString(e){let t=this.getNewLine(e),r=e,i=new uc;r.trim().split(t).forEach((a,o)=>{if(o<2)Lr.readLineProperty(a,i);else if(o<i.pages+2){let n=new cc;Lr.readLineProperty(a,n),i.fontPage.push(n)}else if(o<i.pages+3)Lr.readLineProperty(a,i);else if(i.count>0){let n=new fc;Lr.readLineProperty(a,n),i.fontChar[n.id]=n,i.count--}}),r="",this.data=i,await this.loadFontTextures()}getNewLine(e){return e.indexOf(`\r
|
|
7558
7558
|
`)!=-1?`\r
|
|
7559
7559
|
`:e.indexOf("\r")!=-1?"\r":`
|
|
7560
|
-
`}async loadFontTextures(){let e=[],t=this.data;for(const r of t.fontPage){let i=this.baseUrl+r.file;await m.res.loadTexture(i,null,!0);let a=m.res.getTexture(i),o=new fi(a);e.push(o)}Lr.parseSprite(e,t),t.fontChar[" "]||Lr.insertSpaceChar(t,e[0])}static insertSpaceChar(e,t){let r=new Ki,i=e.size*.5,a=e.lineHeight*.5;r.id=" ",r.offsetSize.set(0,0,e.size,e.size),r.trimSize.set(i,a),r.width=i,r.height=a,r.xadvance=0,r.xoffset=0,r.yoffset=0,r.guiTexture=t,r.uvRec.set(0,0,1e-6,1e-6),qi.addFnt(e.face,e.size,r.id,r)}static readLineProperty(e,t){e.trim().split(" ").forEach((r,i)=>{let a=r.split("=");if(a.length>1){let o=a[0],n=a[1];Object.prototype.hasOwnProperty.call(t,o)&&(n.indexOf('"')==-1?t[o]=parseFloat(a[1]):t[o]=n.replace('"',"").replace('"',""))}})}}function Bp(s,e){let t=new Ki;return t.id=s,t.offsetSize.set(0,0,e.width,e.height),t.trimSize.set(e.width,e.height),t.width=e.width,t.height=e.height,t.xadvance=0,t.xoffset=0,t.yoffset=0,t.guiTexture=new fi(e),t.uvRec.set(0,0,1,1),e.isVideoTexture||(e.flipY=!0),t}function dc(s,e,t){let r=new Ki;r.guiTexture=s,r.id=e,r.uvRec.copyFrom(t.textureRect),r.trimSize.x=t.textureRect.z,r.trimSize.y=t.textureRect.w,r.offsetSize.x=t.textureRectOffset.x,r.offsetSize.y=t.textureRectOffset.y,r.offsetSize.z=t.size.x,r.offsetSize.w=t.size.y,r.width=t.size.x,r.height=t.size.y;let i=1/s.width,a=1/s.height;r.uvRec.set(r.uvRec.x*i,r.uvRec.y*a,r.uvRec.z*i,r.uvRec.w*a);let o=.1;return t.border.x<=o&&t.border.y<=o&&t.border.z<=o&&t.border.x<=o?r.isSliced=!1:(r.borderSize.copyFrom(t.border),r.uvBorder.copyFrom(t.border),r.uvBorder.x-=t.textureRectOffset.x,r.uvBorder.y-=t.textureRectOffset.y,r.uvBorder.z=t.border.z-(t.size.x-t.textureRect.z-t.textureRectOffset.x),r.uvBorder.w=t.border.w-(t.size.y-t.textureRect.w-t.textureRectOffset.y),r.uvBorder.x/=t.textureRect.z,r.uvBorder.z/=t.textureRect.z,r.uvBorder.y/=t.textureRect.w,r.uvBorder.w/=t.textureRect.w,r.isSliced=!0),r}class gc{_spriteMap=new Map;_spriteList=[];textureSize=new K;name;constructor(e){this.textureSize.set(e.x,e.y)}setTexture(e,t,r){let i=dc(e,t,r);return this._spriteMap.set(i.id,i),this._spriteList.push(i),i}getSprite(e){return this._spriteMap.get(e)}get spriteList(){return this._spriteList}}class pc extends st{static format=Ge.TEXT;_json;_texture;async parseString(e){this._json=JSON.parse(e);let t=this.userData.replace(".json",".png");this._texture=await m.res.loadTexture(t,null,!0),this.data={json:this._json,texture:this._texture},this.parseAtlas()}verification(){if(this.data)return!0;throw new Error("verify failed.")}parseAtlas(){let e=new gc(this._json.size),t=new fi(this._texture),r=this._json.atlas;for(const i in r)e.setTexture(t,i,r[i]);m.res.addAtlas(this.baseUrl,e),this.data=e}}var kt=Uint8Array,$i=Uint16Array,vp=Int32Array,mc=new kt([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ac=new kt([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Cp=new kt([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Uc=function(s,e){for(var t=new $i(31),r=0;r<31;++r)t[r]=e+=1<<s[r-1];for(var i=new vp(t[30]),r=1;r<30;++r)for(var a=t[r];a<t[r+1];++a)i[a]=a-t[r]<<5|r;return{b:t,r:i}},xc=Uc(mc,2),Bc=xc.b,Sp=xc.r;Bc[28]=258,Sp[258]=28;for(var _p=Uc(Ac,0),Fp=_p.b,tn=new $i(32768),De=0;De<32768;++De){var ri=(De&43690)>>1|(De&21845)<<1;ri=(ri&52428)>>2|(ri&13107)<<2,ri=(ri&61680)>>4|(ri&3855)<<4,tn[De]=((ri&65280)>>8|(ri&255)<<8)>>1}for(var va=(function(s,e,t){for(var r=s.length,i=0,a=new $i(e);i<r;++i)s[i]&&++a[s[i]-1];var o=new $i(e);for(i=1;i<e;++i)o[i]=o[i-1]+a[i-1]<<1;var n;if(t){n=new $i(1<<e);var l=15-e;for(i=0;i<r;++i)if(s[i])for(var h=i<<4|s[i],u=e-s[i],c=o[s[i]-1]++<<u,f=c|(1<<u)-1;c<=f;++c)n[tn[c]>>l]=h}else for(n=new $i(r),i=0;i<r;++i)s[i]&&(n[i]=tn[o[s[i]-1]++]>>15-s[i]);return n}),Ca=new kt(288),De=0;De<144;++De)Ca[De]=8;for(var De=144;De<256;++De)Ca[De]=9;for(var De=256;De<280;++De)Ca[De]=7;for(var De=280;De<288;++De)Ca[De]=8;for(var vc=new kt(32),De=0;De<32;++De)vc[De]=5;var yp=va(Ca,9,1),bp=va(vc,5,1),rn=function(s){for(var e=s[0],t=1;t<s.length;++t)s[t]>e&&(e=s[t]);return e},sr=function(s,e,t){var r=e/8|0;return(s[r]|s[r+1]<<8)>>(e&7)&t},an=function(s,e){var t=e/8|0;return(s[t]|s[t+1]<<8|s[t+2]<<16)>>(e&7)},Qp=function(s){return(s+7)/8|0},sn=function(s,e,t){return(e==null||e<0)&&(e=0),(t==null||t>s.length)&&(t=s.length),new kt(s.subarray(e,t))},Rp=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Ht=function(s,e,t){var r=new Error(e||Rp[s]);if(r.code=s,Error.captureStackTrace&&Error.captureStackTrace(r,Ht),!t)throw r;return r},Ip=function(s,e,t,r){var i=s.length,a=r?r.length:0;if(!i||e.f&&!e.l)return t||new kt(0);var o=!t,n=o||e.i!=2,l=e.i;o&&(t=new kt(i*3));var h=function(Qt){var Rt=t.length;if(Qt>Rt){var Nt=new kt(Math.max(Rt*2,Qt));Nt.set(t),t=Nt}},u=e.f||0,c=e.p||0,f=e.b||0,g=e.l,p=e.d,A=e.m,U=e.n,x=i*8;do{if(!g){u=sr(s,c,1);var B=sr(s,c+1,3);if(c+=3,B)if(B==1)g=yp,p=bp,A=9,U=5;else if(B==2){var y=sr(s,c,31)+257,b=sr(s,c+10,15)+4,w=y+sr(s,c+5,31)+1;c+=14;for(var Q=new kt(w),E=new kt(19),M=0;M<b;++M)E[Cp[M]]=sr(s,c+M*3,7);c+=b*3;for(var z=rn(E),Y=(1<<z)-1,ee=va(E,z,1),M=0;M<w;){var oe=ee[sr(s,c,Y)];c+=oe&15;var S=oe>>4;if(S<16)Q[M++]=S;else{var te=0,ge=0;for(S==16?(ge=3+sr(s,c,3),c+=2,te=Q[M-1]):S==17?(ge=3+sr(s,c,7),c+=3):S==18&&(ge=11+sr(s,c,127),c+=7);ge--;)Q[M++]=te}}var Ce=Q.subarray(0,y),J=Q.subarray(y);A=rn(Ce),U=rn(J),g=va(Ce,A,1),p=va(J,U,1)}else Ht(1);else{var S=Qp(c)+4,C=s[S-4]|s[S-3]<<8,_=S+C;if(_>i){l&&Ht(0);break}n&&h(f+C),t.set(s.subarray(S,_),f),e.b=f+=C,e.p=c=_*8,e.f=u;continue}if(c>x){l&&Ht(0);break}}n&&h(f+131072);for(var ce=(1<<A)-1,he=(1<<U)-1,Ue=c;;Ue=c){var te=g[an(s,c)&ce],xe=te>>4;if(c+=te&15,c>x){l&&Ht(0);break}if(te||Ht(2),xe<256)t[f++]=xe;else if(xe==256){Ue=c,g=null;break}else{var Ve=xe-254;if(xe>264){var M=xe-257,Ie=mc[M];Ve=sr(s,c,(1<<Ie)-1)+Bc[M],c+=Ie}var Fe=p[an(s,c)&he],Me=Fe>>4;Fe||Ht(3),c+=Fe&15;var J=Fp[Me];if(Me>3){var Ie=Ac[Me];J+=an(s,c)&(1<<Ie)-1,c+=Ie}if(c>x){l&&Ht(0);break}n&&h(f+131072);var nt=f+Ve;if(f<J){var mr=a-J,Mt=Math.min(J,nt);for(mr+f<0&&Ht(3);f<Mt;++f)t[f]=r[mr+f]}for(;f<nt;++f)t[f]=t[f-J]}}e.l=g,e.p=Ue,e.b=f,e.f=u,g&&(u=1,e.m=A,e.d=p,e.n=U)}while(!u);return f!=t.length&&o?sn(t,0,f):t.subarray(0,f)},Ep=new kt(0),yr=function(s,e){return s[e]|s[e+1]<<8},or=function(s,e){return(s[e]|s[e+1]<<8|s[e+2]<<16|s[e+3]<<24)>>>0},on=function(s,e){return or(s,e)+or(s,e+4)*4294967296};function wp(s,e){return Ip(s,{i:2},e&&e.out,e&&e.dictionary)}var nn=typeof TextDecoder<"u"&&new TextDecoder,Tp=0;try{nn.decode(Ep,{stream:!0}),Tp=1}catch{}var Dp=function(s){for(var e="",t=0;;){var r=s[t++],i=(r>127)+(r>223)+(r>239);if(t+i>s.length)return{s:e,r:sn(s,t-1)};i?i==3?(r=((r&15)<<18|(s[t++]&63)<<12|(s[t++]&63)<<6|s[t++]&63)-65536,e+=String.fromCharCode(55296|r>>10,56320|r&1023)):i&1?e+=String.fromCharCode((r&31)<<6|s[t++]&63):e+=String.fromCharCode((r&15)<<12|(s[t++]&63)<<6|s[t++]&63):e+=String.fromCharCode(r)}};function Cc(s,e){if(e){for(var t="",r=0;r<s.length;r+=16384)t+=String.fromCharCode.apply(null,s.subarray(r,r+16384));return t}else{if(nn)return nn.decode(s);var i=Dp(s),a=i.s,t=i.r;return t.length&&Ht(8),a}}var Mp=function(s,e){return e+30+yr(s,e+26)+yr(s,e+28)},Np=function(s,e,t){var r=yr(s,e+28),i=Cc(s.subarray(e+46,e+46+r),!(yr(s,e+8)&2048)),a=e+46+r,o=or(s,e+20),n=t&&o==4294967295?Vp(s,a):[o,or(s,e+24),or(s,e+42)],l=n[0],h=n[1],u=n[2];return[yr(s,e+10),l,h,i,a+yr(s,e+30)+yr(s,e+32),u]},Vp=function(s,e){for(;yr(s,e)!=1;e+=4+yr(s,e+2));return[on(s,e+12),on(s,e+4),on(s,e+20)]};function Pp(s,e){for(var t={},r=s.length-22;or(s,r)!=101010256;--r)(!r||s.length-r>65558)&&Ht(13);var i=yr(s,r+8);if(!i)return{};var a=or(s,r+16),o=a==4294967295||i==65535;if(o){var n=or(s,r-12);o=or(s,n)==101075792,o&&(i=or(s,n+32),a=or(s,n+48))}for(var l=0;l<i;++l){var h=Np(s,a,o),u=h[0],c=h[1],f=h[2],g=h[3],p=h[4],A=h[5],U=Mp(s,A);a=p,u?u==8?t[g]=wp(s.subarray(U,U+c),{out:new kt(f)}):Ht(14,"unknown compression type "+u):t[g]=sn(s,U,U+c)}return t}class Ft extends yt{constructor(){super(),this.shader=new Ea,this.baseMap=m.res.whiteTexture}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set envMap(e){}set shadowMap(e){}}class Ri extends Ne{shape_vertices=[];shape_indices=[];radius;widthSegments;heightSegments;phiStart;phiLength;thetaStart;thetaLength;constructor(e,t,r,i,a,o,n){super(),this.radius=e,this.widthSegments=t,this.heightSegments=r,this.phiStart=i,this.phiLength=a,this.thetaStart=o,this.thetaLength=n,this.buildGeometry()}buildGeometry(){var e,t,r=0;let i=this.heightSegments,a=this.widthSegments,o=this.radius;var n=(i+1)*(a+1);let l=new Float32Array(n*3),h=new Float32Array(n*3),u=new Float32Array(n*2),c=new Uint16Array(a*i*2*3),f=0,g=0,p=0;for(t=0;t<=i;++t){var A=Math.PI*t/i,U=o*Math.cos(A),x=o*Math.sin(A);for(e=0;e<=a;++e){var B=2*Math.PI*e/a,S=x*Math.cos(B),C=x*Math.sin(B),_=1/Math.sqrt(S*S+U*U+C*C);if(l[f++]=S,l[f++]=U,l[f++]=C,h[g++]=S*_,h[g++]=U*_,h[g++]=C*_,u[p++]=e/a,u[p++]=t/i,e>0&&t>0){var y=(a+1)*t+e,b=(a+1)*t+e-1,w=(a+1)*(t-1)+e-1,Q=(a+1)*(t-1)+e;t==i?(c[r++]=y,c[r++]=w,c[r++]=Q):t==1?(c[r++]=y,c[r++]=b,c[r++]=w):(c[r++]=y,c[r++]=b,c[r++]=w,c[r++]=y,c[r++]=w,c[r++]=Q)}}}this.setIndices(c),this.setAttribute(V.position,l),this.setAttribute(V.normal,h),this.setAttribute(V.uv,u),this.setAttribute(V.TEXCOORD_1,u),this.addSubGeometry({indexStart:0,indexCount:c.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0}),this.bounds=new Re(d.ZERO,new d(this.radius*2,this.radius*2,this.radius*2))}}class $a extends q{static register3DRepresentation=null;positionIndex=-1;positionValid=!1;marker;constructor(e){super(),this.parsePlacemark(e),this.setup3DRepresentation()}parsePlacemark(e){if(!e.slamPositionInfo){console.warn("WayPoint3D: slamPositionInfo is not found");return}const t=e.slamPositionInfo.slamPosition.split(",").map(Number);this.localPosition=new d(t[0],t[1],t[2]),this.positionIndex=Number(e.slamPositionInfo.slamPositionIndex),this.positionValid=e.slamPositionInfo.slamPositionValid==="1"}setup3DRepresentation(){if(this.marker&&(this.removeChild(this.marker),this.marker=null),$a.register3DRepresentation)this.marker=$a.register3DRepresentation(this),this.marker&&this.addChild(this.marker);else{this.marker=new q;const e=this.marker.addComponent(j);e.geometry=new Ri(.1,32,16),e.material=new ur,e.material.baseColor=this.positionValid?new P(0,1,0,1):new P(1,0,0,1),this.addChild(this.marker),this.marker.name="WayPoint3DMarker"}}}class es extends q{static register3DRepresentation=null;line;constructor(e){super(),this.parseWayLineFile(e),this.setup3DRepresentation()}parseWayLineFile(e){for(const t of e.Folder.Placemark){const r=new $a(t);this.addChild(r)}this.entityChildren=this.entityChildren.sort((t,r)=>t.positionIndex-r.positionIndex)}setup3DRepresentation(){this.line&&(this.removeChild(this.line),this.line=null),es.register3DRepresentation?(this.line=es.register3DRepresentation(this),this.line&&this.addChild(this.line)):(this.line=this.createMultiLine(this.entityChildren.map(e=>e.localPosition),new P(1,1,1,1)),this.addChild(this.line),this.line.name="WayLines3DLine")}createMultiLine(e,t){if(e.length<2)return null;const r=new Ne,i=new Float32Array(e.length*3);for(let h=0;h<e.length;h++)i[h*3]=e[h].x,i[h*3+1]=e[h].y,i[h*3+2]=e[h].z;const a=new Uint16Array((e.length-1)*2);for(let h=0;h<e.length-1;h++)a[h*2]=h,a[h*2+1]=h+1;r.setIndices(a),r.setAttribute(V.position,i),r.addSubGeometry({indexStart:0,indexCount:a.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});const o=new q,n=o.addComponent(j),l=new Ft;return l.topology="line-list",l.baseColor=t,l.blendMode=ae.ADD,l.castReflection=!1,n.geometry=r,n.material=l,o}}class Sc extends st{static format=Ge.BIN;parseBuffer(e){try{const t={template:null,waylines:null},r=Pp(new Uint8Array(e));for(const a in r){const o=r[a],l=new DOMParser().parseFromString(Cc(o),"application/xml"),h={};this.parseNode(l,h);const u=a.replace("wpmz/","").split(".")[0];Object.assign(t,{[u]:h["#document"].kml.Document})}const i=new es(t.waylines);this.data=i}catch(t){this.parserError(`KMZ parsing failed: ${t}`,-1)}}parseNode(e,t){const r=["Placemark","actionGroup","action"],i=e.nodeName.replace("wpml:","");if(!e.childNodes.length)t[i]=void 0;else{let a=null,o=!1;for(let n=0;n<e.childNodes.length;++n){const l=e.childNodes[n];if(l.nodeType==Node.TEXT_NODE){const h=l.nodeValue?.trim();h&&h.length>0&&(a=h)}else l.nodeType==Node.ELEMENT_NODE&&(o=!0)}if(a&&!o)t[i]=a;else if(o){r.includes(i)?t[i]?.length?t[i].push({}):t[i]=[{}]:t[i]={};for(let n=0;n<e.childNodes.length;++n){const l=e.childNodes[n];l.nodeType==Node.ELEMENT_NODE&&this.parseNode(l,Array.isArray(t[i])?t[i].at(-1):t[i])}}else t[i]=void 0}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class _c{_texturePool;_materialPool;_prefabPool;_gltfPool;_geometryPool;_atlasList;_obj;constructor(){this._texturePool=new Map,this._materialPool=new Map,this._prefabPool=new Map,this._geometryPool=new Map,this._gltfPool=new Map,this._atlasList=new Map,this._obj=new Map}getGltf(e){return this._gltfPool.get(e)}addObj(e,t){this._obj.set(e,t)}getObj(e){return this._obj.get(e)}addTexture(e,t){this._texturePool.set(e,t)}getTexture(e){return this._texturePool.get(e)}addGeometry(e,t){this._geometryPool.set(e,t)}getGeometry(e){return this._geometryPool.get(e)}addMat(e,t){return this._materialPool.set(e,t)}getMat(e){return this._materialPool.get(e)}addPrefab(e,t){this._prefabPool.set(e,t)}getPrefab(e){return this._prefabPool.get(e).instantiate()}addAtlas(e,t){t.name=e,this._atlasList.set(e,t)}getAtlas(e){return this._atlasList.get(e)}getGUISprite(e){for(let t of this._atlasList.values()){let r=t.getSprite(e);if(r)return r}return null}async load(e,t,r){return(await new gt().load(e,t,r)).data}async loadGltf(e,t){if(this._prefabPool.has(e))return this._prefabPool.get(e);let r,i=e.substring(e.lastIndexOf(".")).toLowerCase(),a=new gt;i==".gltf"?r=await a.load(e,At,t):r=await a.load(e,Wo,t);let o=r.data;return this._prefabPool.set(e,o),this._gltfPool.set(e,r.gltf),o}async loadObj(e,t){if(this._prefabPool.has(e))return this._prefabPool.get(e);let r,i=e.substring(e.lastIndexOf(".")).toLowerCase(),a=new gt;i==".obj"&&(r=await a.load(e,Gu,t));let o=r.data;return this._prefabPool.set(e,o),o}async loadB3DM(e,t,r){if(this._prefabPool.has(e))return this._prefabPool.get(e);let o=(await new gt().load(e,tc,t,r)).data;return this._prefabPool.set(e,o),o}async loadI3DM(e,t,r){if(this._prefabPool.has(e))return this._prefabPool.get(e);let o=(await new gt().load(e,nc,t,r)).data;return this._prefabPool.set(e,o),o}async loadTexture(e,t,r){if(this._texturePool.has(e))return this._texturePool.get(e);let i=new Mr;return i.flipY=r,await i.load(e,t),this._texturePool.set(e,i),i}async loadTextureCount(e,t,r,i){return new Promise(async(a,o)=>{let n=0,l=[];t==0&&a(l);for(let h=0;h<t;h++){const u=e.shift();this.loadTexture(u,r,i).then(c=>{l.push(c),n++,n==t&&a(l)})}})}async loadBitmapTextures(e,t=5,r,i){let a=[],o=Math.floor(e.length/t)+1,n=Math.floor(e.length%t);for(let l=0;l<o;l++){let h=await this.loadTextureCount(e,l==o-1?n:t,r,i);a.push(...h)}return a}async loadHDRTexture(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new Yo;return r=await r.load(e,t),this._texturePool.set(e,r),r}async loadHDRTextureCube(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new ms;return r=await r.load(e,t),this._texturePool.set(e,r),r}async loadLDRTextureCube(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new Us;return r=await r.load(e,t),this._texturePool.set(e,r),r}async loadTextureCubeMaps(e){let t=e[0];if(this._texturePool.has(t))return this._texturePool.get(t);let r=new Jo;return await r.load(e),this._texturePool.set(e[0],r),r}async loadTextureCubeStd(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new Jo;return await r.loadStd(e),r}async loadJSON(e,t){return await new gt().loadJson(e,t).then(async r=>r).catch(r=>{console.log(r)})}async loadFont(e,t,r){let a=await new gt().load(e,Lr,t,r),o=a.data;return qi.addFontData(o.face,o.size,o),a.data}async loadAtlas(e,t){return(await new gt().load(e,pc,t,e)).data}async loadKMZ(e,t){return(await new gt().load(e,Sc,t)).data}normalTexture;maskTexture;whiteTexture;blackTexture;redTexture;blueTexture;greenTexture;yellowTexture;grayTexture;defaultSky;defaultGUITexture;defaultGUISprite;defaultMaterial;createTexture(e,t,r,i,a,o,n){let l=32,h=32,u=new Uint8Array(l*h*4);this.fillColor(u,e,t,r,i,a,o);let c=new Bo;return c.name=n,c.create(16,16,u,!0),n&&this.addTexture(n,c),c}fillColor(e,t,r,i,a,o,n){for(let l=0;l<t;l++)for(let h=0;h<r;h++){let u=h*t+l;e[u*4+0]=i,e[u*4+1]=a,e[u*4+2]=o,e[u*4+3]=n}}initDefault(){this.normalTexture=this.createTexture(32,32,255*.5,255*.5,255,255,"default-normalTexture"),this.maskTexture=this.createTexture(32,32,255,255*.5,255,255,"default-maskTexture"),this.whiteTexture=this.createTexture(32,32,255,255,255,255,"default-whiteTexture"),this.blackTexture=this.createTexture(32,32,0,0,0,255,"default-blackTexture"),this.redTexture=this.createTexture(32,32,255,0,0,255,"default-redTexture"),this.blueTexture=this.createTexture(32,32,0,0,255,255,"default-blueTexture"),this.greenTexture=this.createTexture(32,32,0,255,0,255,"default-greenTexture"),this.yellowTexture=this.createTexture(32,32,0,255,255,255,"default-yellowTexture"),this.grayTexture=this.createTexture(32,32,128,128,128,255,"default-grayTexture");let t=new hc().generateBRDFLUTTexture(),r=t.name="BRDFLUT";this.addTexture(r,t),this.defaultSky=new ms,this.defaultSky.createFromTexture(128,this.blackTexture),me.getInstance().attached(this.defaultSky,this),me.getInstance().attached(t,this),me.getInstance().attached(this.normalTexture,this),me.getInstance().attached(this.maskTexture,this),me.getInstance().attached(this.whiteTexture,this),me.getInstance().attached(this.blackTexture,this),me.getInstance().attached(this.redTexture,this),me.getInstance().attached(this.blueTexture,this),me.getInstance().attached(this.greenTexture,this),me.getInstance().attached(this.yellowTexture,this),me.getInstance().attached(this.grayTexture,this),this.defaultGUITexture=new fi(this.whiteTexture),this.defaultGUISprite=new Ki(this.defaultGUITexture),this.defaultGUISprite.trimSize.set(4,4),this.defaultMaterial=new ur}}class Fc extends Pe{_postList;init(e){this._postList=new Map}start(){}stop(){}onEnable(){this.activePost()}onDisable(){this.unActivePost()}activePost(){let e=this.transform.view3D,t=m.getRenderJob(e);this._postList.forEach(r=>{t.addPost(r)})}unActivePost(){let e=this.transform.view3D,t=m.getRenderJob(e);this._postList.forEach(r=>{t.removePost(r)})}addPost(e){if(this._postList.has(e))return;let t=new e;return this._postList.set(e,t),this._enable&&this.activePost(),t}removePost(e){if(!this._postList.has(e))return;let t=this._postList.get(e);this._postList.delete(e);let r=this.transform.view3D;m.getRenderJob(r).removePost(t)}getPost(e){return this._postList.has(e)?this._postList.get(e):null}}const kp="1.0.8";class m{static res;static inputSystem;static views;static _frameRateValue=0;static _frameRate=360;static _time=0;static _beforeRender;static _renderLoop;static _lateRender;static _requestAnimationFrameID=0;static get frameRate(){return this._frameRate}static set frameRate(e){this._frameRate=e,this._frameRateValue=1e3/e,e>=360&&(this._frameRateValue=0)}static get size(){return R.presentationSize}static get aspect(){return R.aspect}static get width(){return R.windowWidth}static get height(){return R.windowHeight}static setting={doublePrecision:!1,occlusionQuery:{enable:!0,debug:!1},pick:{enable:!0,mode:"bound",detail:"mesh"},render:{debug:!1,renderPassState:4,renderState_left:5,renderState_right:5,renderState_split:.5,quadScale:1,hdrExposure:1.5,debugQuad:-1,maxPointLight:1e3,maxDirectLight:4,maxSportLight:1e3,drawOpMin:0,drawOpMax:Number.MAX_SAFE_INTEGER,drawTrMin:0,drawTrMax:Number.MAX_SAFE_INTEGER,zPrePass:!1,useLogDepth:!1,useCompressGBuffer:!1,gi:!1,postProcessing:{bloom:{downSampleStep:3,downSampleBlurSize:9,downSampleBlurSigma:1,upSampleBlurSize:9,upSampleBlurSigma:1,luminanceThreshole:1,bloomIntensity:1,hdr:1},globalFog:{debug:!1,enable:!1,fogType:0,fogHeightScale:.1,start:400,end:10,density:.02,ins:.5,skyFactor:.5,skyRoughness:.4,overrideSkyFactor:.8,fogColor:new P(96/255,117/255,133/255,1),falloff:.7,rayLength:200,scatteringExponent:2.7,dirHeightLine:10},godRay:{blendColor:!0,rayMarchCount:16,scatteringExponent:5,intensity:.5},ssao:{enable:!1,radius:.15,bias:-.1,aoPower:2,debug:!0},outline:{enable:!1,strength:1,groupCount:4,outlinePixel:2,fadeOutlinePixel:4,textureScale:1,useAddMode:!1,debug:!0},taa:{enable:!1,jitterSeedCount:8,blendFactor:.1,sharpFactor:.6,sharpPreBlurFactor:.5,temporalJitterScale:.13,debug:!0},gtao:{enable:!1,darkFactor:1,maxDistance:5,maxPixel:50,rayMarchSegment:6,multiBounce:!1,usePosFloat32:!0,blendColor:!0,debug:!0},ssr:{enable:!1,pixelRatio:1,fadeEdgeRatio:.2,rayMarchRatio:.5,fadeDistanceMin:600,fadeDistanceMax:2e3,roughnessThreshold:.5,powDotRN:.2,mixThreshold:.1,debug:!0},fxaa:{enable:!1},depthOfView:{enable:!1,iterationCount:3,pixelOffset:1,near:150,far:300}}},shadow:{enable:!0,type:"HARD",pointShadowBias:5e-4,shadowSize:2048,pointShadowSize:1024,shadowSoft:.005,shadowBound:100,shadowBias:.05,needUpdate:!0,autoUpdate:!0,updateFrameRate:2,csmMargin:.1,csmScatteringExp:.7,csmAreaScale:.4,debug:!1},gi:{enable:!1,offsetX:0,offsetY:0,offsetZ:0,probeSpace:64,probeXCount:4,probeYCount:2,probeZCount:4,probeSize:32,probeSourceTextureSize:2048,octRTMaxSize:2048,octRTSideSize:16,maxDistance:64*1.73,normalBias:.25,depthSharpness:1,hysteresis:.98,lerpHysteresis:.01,irradianceChebyshevBias:.01,rayNumber:144,irradianceDistanceBias:32,indirectIntensity:1,ddgiGamma:2.2,bounceIntensity:.025,probeRoughness:1,realTimeGI:!1,debug:!1,autoRenderProbe:!1},sky:{type:"HDRSKY",sky:null,skyExposure:1,defaultFar:65536,defaultNear:1},light:{maxLight:4096},material:{materialChannelDebug:!1,materialDebug:!1},loader:{numConcurrent:20},reflectionSetting:{reflectionProbeMaxCount:8,reflectionProbeSize:256,width:256*6,height:8*256,enable:!0}};static renderJobs;static async init(e={}){console.log("Rings Version",kp),window.isSecureContext||console.warn("WebGPU is only supported in secure contexts (HTTPS or localhost)"),this.setting={...this.setting,...e.engineSetting},await pe.init(I.allocCount,this.setting.doublePrecision),await R.init(e.canvasConfig),this.setting.reflectionSetting.width=this.setting.reflectionSetting.reflectionProbeSize*6,this.setting.reflectionSetting.height=this.setting.reflectionSetting.reflectionProbeSize*this.setting.reflectionSetting.reflectionProbeMaxCount,se.getGBufferFrame(se.reflections_GBuffer,this.setting.reflectionSetting.width,this.setting.reflectionSetting.height,!1),O.init(),Dr.init(),ne.init(),Bt.init(),wt.init(),this.res=new _c,this.res.initDefault(),this._beforeRender=e.beforeRender,this._renderLoop=e.renderLoop,this._lateRender=e.lateRender,this.inputSystem=new Ln,this.inputSystem.initCanvas(R.canvas)}static startRenderJob(e){let t=new Bu(e);return this.renderJobs.set(e,t),this.setting.pick.mode=="pixel"&&e.scene.getOrAddComponent(Fc).addPost(Io),(this.setting.pick.mode=="pixel"||this.setting.pick.mode=="bound")&&(e.enablePick=!0),t}static startRenderView(e){this.renderJobs||=new Map,this.views=[e];let t=this.startRenderJob(e);return this.resume(),t}static startRenderViews(e){this.renderJobs||=new Map,this.views=e;for(let t=0;t<e.length;t++)this.startRenderJob(e[t]);this.resume()}static getRenderJob(e){return this.renderJobs.get(e)}static pause(){this._requestAnimationFrameID!==0&&(cancelAnimationFrame(this._requestAnimationFrameID),this._requestAnimationFrameID=0)}static resume(){this._requestAnimationFrameID===0&&(this._requestAnimationFrameID=requestAnimationFrame(e=>this.render(e)))}static async render(e){if(this._frameRateValue>0){let t=e-this._time;if(t<this._frameRateValue){let r=performance.now();await new Promise(i=>{setTimeout(()=>{e+=performance.now()-r,i(!0)},this._frameRateValue-t)})}this._time=e}await this.updateFrame(e),this._requestAnimationFrameID=0,this.resume()}static async updateFrame(e){be.delta=e-be.time,be.time=e,be.frame+=1,ci.tick(be.delta);let t=this.views,r=0;for(r=0;r<t.length;r++){const o=t[r];o.scene.waitUpdate();let[n,l]=R.presentationSize;o.camera.viewPort.setTo(0,0,n,l)}this._beforeRender&&await this._beforeRender();for(const o of Se.componentsBeforeUpdateList){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];u.enable&&c(n)}}let i=R.device.createCommandEncoder();for(const o of Se.componentsComputeList){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];u.enable&&c(n,i)}}R.device.queue.submit([i.finish()]);for(const o of Se.componentsUpdateList){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];u.enable&&c(n)}}for(const o of Se.graphicComponent){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];n&&u.enable&&c(n)}}this._renderLoop&&await this._renderLoop(),pe.updateAllContinueTransform(0,I.useCount,16),ne.modelMatrixBindGroup.writeBuffer(I.useCount*16),this.renderJobs.forEach((o,n)=>{o.renderState||o.start(),o.renderFrame()});for(const o of Se.componentsLateUpdateList){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];u.enable&&c(n)}}this._lateRender&&await this._lateRender()}}let xs=`
|
|
7560
|
+
`}async loadFontTextures(){let e=[],t=this.data;for(const r of t.fontPage){let i=this.baseUrl+r.file;await m.res.loadTexture(i,null,!0);let a=m.res.getTexture(i),o=new fi(a);e.push(o)}Lr.parseSprite(e,t),t.fontChar[" "]||Lr.insertSpaceChar(t,e[0])}static insertSpaceChar(e,t){let r=new Ki,i=e.size*.5,a=e.lineHeight*.5;r.id=" ",r.offsetSize.set(0,0,e.size,e.size),r.trimSize.set(i,a),r.width=i,r.height=a,r.xadvance=0,r.xoffset=0,r.yoffset=0,r.guiTexture=t,r.uvRec.set(0,0,1e-6,1e-6),qi.addFnt(e.face,e.size,r.id,r)}static readLineProperty(e,t){e.trim().split(" ").forEach((r,i)=>{let a=r.split("=");if(a.length>1){let o=a[0],n=a[1];Object.prototype.hasOwnProperty.call(t,o)&&(n.indexOf('"')==-1?t[o]=parseFloat(a[1]):t[o]=n.replace('"',"").replace('"',""))}})}}function Bp(s,e){let t=new Ki;return t.id=s,t.offsetSize.set(0,0,e.width,e.height),t.trimSize.set(e.width,e.height),t.width=e.width,t.height=e.height,t.xadvance=0,t.xoffset=0,t.yoffset=0,t.guiTexture=new fi(e),t.uvRec.set(0,0,1,1),e.isVideoTexture||(e.flipY=!0),t}function dc(s,e,t){let r=new Ki;r.guiTexture=s,r.id=e,r.uvRec.copyFrom(t.textureRect),r.trimSize.x=t.textureRect.z,r.trimSize.y=t.textureRect.w,r.offsetSize.x=t.textureRectOffset.x,r.offsetSize.y=t.textureRectOffset.y,r.offsetSize.z=t.size.x,r.offsetSize.w=t.size.y,r.width=t.size.x,r.height=t.size.y;let i=1/s.width,a=1/s.height;r.uvRec.set(r.uvRec.x*i,r.uvRec.y*a,r.uvRec.z*i,r.uvRec.w*a);let o=.1;return t.border.x<=o&&t.border.y<=o&&t.border.z<=o&&t.border.x<=o?r.isSliced=!1:(r.borderSize.copyFrom(t.border),r.uvBorder.copyFrom(t.border),r.uvBorder.x-=t.textureRectOffset.x,r.uvBorder.y-=t.textureRectOffset.y,r.uvBorder.z=t.border.z-(t.size.x-t.textureRect.z-t.textureRectOffset.x),r.uvBorder.w=t.border.w-(t.size.y-t.textureRect.w-t.textureRectOffset.y),r.uvBorder.x/=t.textureRect.z,r.uvBorder.z/=t.textureRect.z,r.uvBorder.y/=t.textureRect.w,r.uvBorder.w/=t.textureRect.w,r.isSliced=!0),r}class gc{_spriteMap=new Map;_spriteList=[];textureSize=new K;name;constructor(e){this.textureSize.set(e.x,e.y)}setTexture(e,t,r){let i=dc(e,t,r);return this._spriteMap.set(i.id,i),this._spriteList.push(i),i}getSprite(e){return this._spriteMap.get(e)}get spriteList(){return this._spriteList}}class pc extends st{static format=Ge.TEXT;_json;_texture;async parseString(e){this._json=JSON.parse(e);let t=this.userData.replace(".json",".png");this._texture=await m.res.loadTexture(t,null,!0),this.data={json:this._json,texture:this._texture},this.parseAtlas()}verification(){if(this.data)return!0;throw new Error("verify failed.")}parseAtlas(){let e=new gc(this._json.size),t=new fi(this._texture),r=this._json.atlas;for(const i in r)e.setTexture(t,i,r[i]);m.res.addAtlas(this.baseUrl,e),this.data=e}}var kt=Uint8Array,$i=Uint16Array,vp=Int32Array,mc=new kt([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ac=new kt([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Cp=new kt([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Uc=function(s,e){for(var t=new $i(31),r=0;r<31;++r)t[r]=e+=1<<s[r-1];for(var i=new vp(t[30]),r=1;r<30;++r)for(var a=t[r];a<t[r+1];++a)i[a]=a-t[r]<<5|r;return{b:t,r:i}},xc=Uc(mc,2),Bc=xc.b,Sp=xc.r;Bc[28]=258,Sp[258]=28;for(var _p=Uc(Ac,0),Fp=_p.b,tn=new $i(32768),De=0;De<32768;++De){var ri=(De&43690)>>1|(De&21845)<<1;ri=(ri&52428)>>2|(ri&13107)<<2,ri=(ri&61680)>>4|(ri&3855)<<4,tn[De]=((ri&65280)>>8|(ri&255)<<8)>>1}for(var va=(function(s,e,t){for(var r=s.length,i=0,a=new $i(e);i<r;++i)s[i]&&++a[s[i]-1];var o=new $i(e);for(i=1;i<e;++i)o[i]=o[i-1]+a[i-1]<<1;var n;if(t){n=new $i(1<<e);var l=15-e;for(i=0;i<r;++i)if(s[i])for(var h=i<<4|s[i],u=e-s[i],c=o[s[i]-1]++<<u,f=c|(1<<u)-1;c<=f;++c)n[tn[c]>>l]=h}else for(n=new $i(r),i=0;i<r;++i)s[i]&&(n[i]=tn[o[s[i]-1]++]>>15-s[i]);return n}),Ca=new kt(288),De=0;De<144;++De)Ca[De]=8;for(var De=144;De<256;++De)Ca[De]=9;for(var De=256;De<280;++De)Ca[De]=7;for(var De=280;De<288;++De)Ca[De]=8;for(var vc=new kt(32),De=0;De<32;++De)vc[De]=5;var yp=va(Ca,9,1),bp=va(vc,5,1),rn=function(s){for(var e=s[0],t=1;t<s.length;++t)s[t]>e&&(e=s[t]);return e},sr=function(s,e,t){var r=e/8|0;return(s[r]|s[r+1]<<8)>>(e&7)&t},an=function(s,e){var t=e/8|0;return(s[t]|s[t+1]<<8|s[t+2]<<16)>>(e&7)},Qp=function(s){return(s+7)/8|0},sn=function(s,e,t){return(e==null||e<0)&&(e=0),(t==null||t>s.length)&&(t=s.length),new kt(s.subarray(e,t))},Rp=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Ht=function(s,e,t){var r=new Error(e||Rp[s]);if(r.code=s,Error.captureStackTrace&&Error.captureStackTrace(r,Ht),!t)throw r;return r},Ip=function(s,e,t,r){var i=s.length,a=r?r.length:0;if(!i||e.f&&!e.l)return t||new kt(0);var o=!t,n=o||e.i!=2,l=e.i;o&&(t=new kt(i*3));var h=function(Qt){var Rt=t.length;if(Qt>Rt){var Nt=new kt(Math.max(Rt*2,Qt));Nt.set(t),t=Nt}},u=e.f||0,c=e.p||0,f=e.b||0,g=e.l,p=e.d,A=e.m,U=e.n,x=i*8;do{if(!g){u=sr(s,c,1);var B=sr(s,c+1,3);if(c+=3,B)if(B==1)g=yp,p=bp,A=9,U=5;else if(B==2){var y=sr(s,c,31)+257,b=sr(s,c+10,15)+4,w=y+sr(s,c+5,31)+1;c+=14;for(var Q=new kt(w),E=new kt(19),M=0;M<b;++M)E[Cp[M]]=sr(s,c+M*3,7);c+=b*3;for(var z=rn(E),Y=(1<<z)-1,ee=va(E,z,1),M=0;M<w;){var oe=ee[sr(s,c,Y)];c+=oe&15;var S=oe>>4;if(S<16)Q[M++]=S;else{var te=0,ge=0;for(S==16?(ge=3+sr(s,c,3),c+=2,te=Q[M-1]):S==17?(ge=3+sr(s,c,7),c+=3):S==18&&(ge=11+sr(s,c,127),c+=7);ge--;)Q[M++]=te}}var Ce=Q.subarray(0,y),J=Q.subarray(y);A=rn(Ce),U=rn(J),g=va(Ce,A,1),p=va(J,U,1)}else Ht(1);else{var S=Qp(c)+4,C=s[S-4]|s[S-3]<<8,_=S+C;if(_>i){l&&Ht(0);break}n&&h(f+C),t.set(s.subarray(S,_),f),e.b=f+=C,e.p=c=_*8,e.f=u;continue}if(c>x){l&&Ht(0);break}}n&&h(f+131072);for(var ce=(1<<A)-1,he=(1<<U)-1,Ue=c;;Ue=c){var te=g[an(s,c)&ce],xe=te>>4;if(c+=te&15,c>x){l&&Ht(0);break}if(te||Ht(2),xe<256)t[f++]=xe;else if(xe==256){Ue=c,g=null;break}else{var Ve=xe-254;if(xe>264){var M=xe-257,Ie=mc[M];Ve=sr(s,c,(1<<Ie)-1)+Bc[M],c+=Ie}var Fe=p[an(s,c)&he],Me=Fe>>4;Fe||Ht(3),c+=Fe&15;var J=Fp[Me];if(Me>3){var Ie=Ac[Me];J+=an(s,c)&(1<<Ie)-1,c+=Ie}if(c>x){l&&Ht(0);break}n&&h(f+131072);var nt=f+Ve;if(f<J){var pr=a-J,Mt=Math.min(J,nt);for(pr+f<0&&Ht(3);f<Mt;++f)t[f]=r[pr+f]}for(;f<nt;++f)t[f]=t[f-J]}}e.l=g,e.p=Ue,e.b=f,e.f=u,g&&(u=1,e.m=A,e.d=p,e.n=U)}while(!u);return f!=t.length&&o?sn(t,0,f):t.subarray(0,f)},Ep=new kt(0),Fr=function(s,e){return s[e]|s[e+1]<<8},or=function(s,e){return(s[e]|s[e+1]<<8|s[e+2]<<16|s[e+3]<<24)>>>0},on=function(s,e){return or(s,e)+or(s,e+4)*4294967296};function wp(s,e){return Ip(s,{i:2},e&&e.out,e&&e.dictionary)}var nn=typeof TextDecoder<"u"&&new TextDecoder,Tp=0;try{nn.decode(Ep,{stream:!0}),Tp=1}catch{}var Dp=function(s){for(var e="",t=0;;){var r=s[t++],i=(r>127)+(r>223)+(r>239);if(t+i>s.length)return{s:e,r:sn(s,t-1)};i?i==3?(r=((r&15)<<18|(s[t++]&63)<<12|(s[t++]&63)<<6|s[t++]&63)-65536,e+=String.fromCharCode(55296|r>>10,56320|r&1023)):i&1?e+=String.fromCharCode((r&31)<<6|s[t++]&63):e+=String.fromCharCode((r&15)<<12|(s[t++]&63)<<6|s[t++]&63):e+=String.fromCharCode(r)}};function Cc(s,e){if(e){for(var t="",r=0;r<s.length;r+=16384)t+=String.fromCharCode.apply(null,s.subarray(r,r+16384));return t}else{if(nn)return nn.decode(s);var i=Dp(s),a=i.s,t=i.r;return t.length&&Ht(8),a}}var Mp=function(s,e){return e+30+Fr(s,e+26)+Fr(s,e+28)},Np=function(s,e,t){var r=Fr(s,e+28),i=Cc(s.subarray(e+46,e+46+r),!(Fr(s,e+8)&2048)),a=e+46+r,o=or(s,e+20),n=t&&o==4294967295?Vp(s,a):[o,or(s,e+24),or(s,e+42)],l=n[0],h=n[1],u=n[2];return[Fr(s,e+10),l,h,i,a+Fr(s,e+30)+Fr(s,e+32),u]},Vp=function(s,e){for(;Fr(s,e)!=1;e+=4+Fr(s,e+2));return[on(s,e+12),on(s,e+4),on(s,e+20)]};function Pp(s,e){for(var t={},r=s.length-22;or(s,r)!=101010256;--r)(!r||s.length-r>65558)&&Ht(13);var i=Fr(s,r+8);if(!i)return{};var a=or(s,r+16),o=a==4294967295||i==65535;if(o){var n=or(s,r-12);o=or(s,n)==101075792,o&&(i=or(s,n+32),a=or(s,n+48))}for(var l=0;l<i;++l){var h=Np(s,a,o),u=h[0],c=h[1],f=h[2],g=h[3],p=h[4],A=h[5],U=Mp(s,A);a=p,u?u==8?t[g]=wp(s.subarray(U,U+c),{out:new kt(f)}):Ht(14,"unknown compression type "+u):t[g]=sn(s,U,U+c)}return t}class pt extends yt{constructor(){super(),this.shader=new Ea,this.baseMap=m.res.whiteTexture}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set envMap(e){}set shadowMap(e){}}class Ri extends Ne{shape_vertices=[];shape_indices=[];radius;widthSegments;heightSegments;phiStart;phiLength;thetaStart;thetaLength;constructor(e,t,r,i,a,o,n){super(),this.radius=e,this.widthSegments=t,this.heightSegments=r,this.phiStart=i,this.phiLength=a,this.thetaStart=o,this.thetaLength=n,this.buildGeometry()}buildGeometry(){var e,t,r=0;let i=this.heightSegments,a=this.widthSegments,o=this.radius;var n=(i+1)*(a+1);let l=new Float32Array(n*3),h=new Float32Array(n*3),u=new Float32Array(n*2),c=new Uint16Array(a*i*2*3),f=0,g=0,p=0;for(t=0;t<=i;++t){var A=Math.PI*t/i,U=o*Math.cos(A),x=o*Math.sin(A);for(e=0;e<=a;++e){var B=2*Math.PI*e/a,S=x*Math.cos(B),C=x*Math.sin(B),_=1/Math.sqrt(S*S+U*U+C*C);if(l[f++]=S,l[f++]=U,l[f++]=C,h[g++]=S*_,h[g++]=U*_,h[g++]=C*_,u[p++]=e/a,u[p++]=t/i,e>0&&t>0){var y=(a+1)*t+e,b=(a+1)*t+e-1,w=(a+1)*(t-1)+e-1,Q=(a+1)*(t-1)+e;t==i?(c[r++]=y,c[r++]=w,c[r++]=Q):t==1?(c[r++]=y,c[r++]=b,c[r++]=w):(c[r++]=y,c[r++]=b,c[r++]=w,c[r++]=y,c[r++]=w,c[r++]=Q)}}}this.setIndices(c),this.setAttribute(V.position,l),this.setAttribute(V.normal,h),this.setAttribute(V.uv,u),this.setAttribute(V.TEXCOORD_1,u),this.addSubGeometry({indexStart:0,indexCount:c.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0}),this.bounds=new Re(d.ZERO,new d(this.radius*2,this.radius*2,this.radius*2))}}class $a extends q{static register3DRepresentation=null;positionIndex=-1;positionValid=!1;marker;constructor(e){super(),this.parsePlacemark(e),this.setup3DRepresentation()}parsePlacemark(e){if(!e.slamPositionInfo){console.warn("WayPoint3D: slamPositionInfo is not found");return}const t=e.slamPositionInfo.slamPosition.split(",").map(Number);this.localPosition=new d(t[0],t[1],t[2]),this.positionIndex=Number(e.slamPositionInfo.slamPositionIndex),this.positionValid=e.slamPositionInfo.slamPositionValid==="1"}setup3DRepresentation(){if(this.marker&&(this.removeChild(this.marker),this.marker=null),$a.register3DRepresentation)this.marker=$a.register3DRepresentation(this),this.marker&&this.addChild(this.marker);else{this.marker=new q;const e=this.marker.addComponent(j);e.geometry=new Ri(.1,32,16),e.material=new pt,e.material.baseColor=this.positionValid?new P(0,1,0,1):new P(1,0,0,1),this.addChild(this.marker),this.marker.name="WayPoint3DMarker"}}}class es extends q{static register3DRepresentation=null;line;constructor(e){super(),this.parseWayLineFile(e),this.setup3DRepresentation()}parseWayLineFile(e){for(const t of e.Folder.Placemark){const r=new $a(t);this.addChild(r)}this.entityChildren=this.entityChildren.sort((t,r)=>t.positionIndex-r.positionIndex)}setup3DRepresentation(){this.line&&(this.removeChild(this.line),this.line=null),es.register3DRepresentation?(this.line=es.register3DRepresentation(this),this.line&&this.addChild(this.line)):(this.line=this.createMultiLine(this.entityChildren.map(e=>e.localPosition),new P(1,1,1,1)),this.addChild(this.line),this.line.name="WayLines3DLine")}createMultiLine(e,t){if(e.length<2)return null;const r=new Ne,i=new Float32Array(e.length*3);for(let h=0;h<e.length;h++)i[h*3]=e[h].x,i[h*3+1]=e[h].y,i[h*3+2]=e[h].z;const a=new Uint16Array((e.length-1)*2);for(let h=0;h<e.length-1;h++)a[h*2]=h,a[h*2+1]=h+1;r.setIndices(a),r.setAttribute(V.position,i),r.addSubGeometry({indexStart:0,indexCount:a.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});const o=new q,n=o.addComponent(j),l=new pt;return l.topology="line-list",l.baseColor=t,l.blendMode=ae.ADD,l.castReflection=!1,n.geometry=r,n.material=l,o}}class Sc extends st{static format=Ge.BIN;parseBuffer(e){try{const t={template:null,waylines:null},r=Pp(new Uint8Array(e));for(const a in r){const o=r[a],l=new DOMParser().parseFromString(Cc(o),"application/xml"),h={};this.parseNode(l,h);const u=a.replace("wpmz/","").split(".")[0];Object.assign(t,{[u]:h["#document"].kml.Document})}const i=new es(t.waylines);this.data=i}catch(t){this.parserError(`KMZ parsing failed: ${t}`,-1)}}parseNode(e,t){const r=["Placemark","actionGroup","action"],i=e.nodeName.replace("wpml:","");if(!e.childNodes.length)t[i]=void 0;else{let a=null,o=!1;for(let n=0;n<e.childNodes.length;++n){const l=e.childNodes[n];if(l.nodeType==Node.TEXT_NODE){const h=l.nodeValue?.trim();h&&h.length>0&&(a=h)}else l.nodeType==Node.ELEMENT_NODE&&(o=!0)}if(a&&!o)t[i]=a;else if(o){r.includes(i)?t[i]?.length?t[i].push({}):t[i]=[{}]:t[i]={};for(let n=0;n<e.childNodes.length;++n){const l=e.childNodes[n];l.nodeType==Node.ELEMENT_NODE&&this.parseNode(l,Array.isArray(t[i])?t[i].at(-1):t[i])}}else t[i]=void 0}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class _c{_texturePool;_materialPool;_prefabPool;_gltfPool;_geometryPool;_atlasList;_obj;constructor(){this._texturePool=new Map,this._materialPool=new Map,this._prefabPool=new Map,this._geometryPool=new Map,this._gltfPool=new Map,this._atlasList=new Map,this._obj=new Map}getGltf(e){return this._gltfPool.get(e)}addObj(e,t){this._obj.set(e,t)}getObj(e){return this._obj.get(e)}addTexture(e,t){this._texturePool.set(e,t)}getTexture(e){return this._texturePool.get(e)}addGeometry(e,t){this._geometryPool.set(e,t)}getGeometry(e){return this._geometryPool.get(e)}addMat(e,t){return this._materialPool.set(e,t)}getMat(e){return this._materialPool.get(e)}addPrefab(e,t){this._prefabPool.set(e,t)}getPrefab(e){return this._prefabPool.get(e).instantiate()}addAtlas(e,t){t.name=e,this._atlasList.set(e,t)}getAtlas(e){return this._atlasList.get(e)}getGUISprite(e){for(let t of this._atlasList.values()){let r=t.getSprite(e);if(r)return r}return null}async load(e,t,r){return(await new gt().load(e,t,r)).data}async loadGltf(e,t){if(this._prefabPool.has(e))return this._prefabPool.get(e);let r,i=e.substring(e.lastIndexOf(".")).toLowerCase(),a=new gt;i==".gltf"?r=await a.load(e,Ut,t):r=await a.load(e,Wo,t);let o=r.data;return this._prefabPool.set(e,o),this._gltfPool.set(e,r.gltf),o}async loadObj(e,t){if(this._prefabPool.has(e))return this._prefabPool.get(e);let r,i=e.substring(e.lastIndexOf(".")).toLowerCase(),a=new gt;i==".obj"&&(r=await a.load(e,Gu,t));let o=r.data;return this._prefabPool.set(e,o),o}async loadB3DM(e,t,r){if(this._prefabPool.has(e))return this._prefabPool.get(e);let o=(await new gt().load(e,tc,t,r)).data;return this._prefabPool.set(e,o),o}async loadI3DM(e,t,r){if(this._prefabPool.has(e))return this._prefabPool.get(e);let o=(await new gt().load(e,nc,t,r)).data;return this._prefabPool.set(e,o),o}async loadTexture(e,t,r){if(this._texturePool.has(e))return this._texturePool.get(e);let i=new Mr;return i.flipY=r,await i.load(e,t),this._texturePool.set(e,i),i}async loadTextureCount(e,t,r,i){return new Promise(async(a,o)=>{let n=0,l=[];t==0&&a(l);for(let h=0;h<t;h++){const u=e.shift();this.loadTexture(u,r,i).then(c=>{l.push(c),n++,n==t&&a(l)})}})}async loadBitmapTextures(e,t=5,r,i){let a=[],o=Math.floor(e.length/t)+1,n=Math.floor(e.length%t);for(let l=0;l<o;l++){let h=await this.loadTextureCount(e,l==o-1?n:t,r,i);a.push(...h)}return a}async loadHDRTexture(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new Yo;return r=await r.load(e,t),this._texturePool.set(e,r),r}async loadHDRTextureCube(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new ms;return r=await r.load(e,t),this._texturePool.set(e,r),r}async loadLDRTextureCube(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new Us;return r=await r.load(e,t),this._texturePool.set(e,r),r}async loadTextureCubeMaps(e){let t=e[0];if(this._texturePool.has(t))return this._texturePool.get(t);let r=new Jo;return await r.load(e),this._texturePool.set(e[0],r),r}async loadTextureCubeStd(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new Jo;return await r.loadStd(e),r}async loadJSON(e,t){return await new gt().loadJson(e,t).then(async r=>r).catch(r=>{console.log(r)})}async loadFont(e,t,r){let a=await new gt().load(e,Lr,t,r),o=a.data;return qi.addFontData(o.face,o.size,o),a.data}async loadAtlas(e,t){return(await new gt().load(e,pc,t,e)).data}async loadKMZ(e,t){return(await new gt().load(e,Sc,t)).data}normalTexture;maskTexture;whiteTexture;blackTexture;redTexture;blueTexture;greenTexture;yellowTexture;grayTexture;defaultSky;defaultGUITexture;defaultGUISprite;defaultMaterial;createTexture(e,t,r,i,a,o,n){let l=32,h=32,u=new Uint8Array(l*h*4);this.fillColor(u,e,t,r,i,a,o);let c=new Bo;return c.name=n,c.create(16,16,u,!0),n&&this.addTexture(n,c),c}fillColor(e,t,r,i,a,o,n){for(let l=0;l<t;l++)for(let h=0;h<r;h++){let u=h*t+l;e[u*4+0]=i,e[u*4+1]=a,e[u*4+2]=o,e[u*4+3]=n}}initDefault(){this.normalTexture=this.createTexture(32,32,255*.5,255*.5,255,255,"default-normalTexture"),this.maskTexture=this.createTexture(32,32,255,255*.5,255,255,"default-maskTexture"),this.whiteTexture=this.createTexture(32,32,255,255,255,255,"default-whiteTexture"),this.blackTexture=this.createTexture(32,32,0,0,0,255,"default-blackTexture"),this.redTexture=this.createTexture(32,32,255,0,0,255,"default-redTexture"),this.blueTexture=this.createTexture(32,32,0,0,255,255,"default-blueTexture"),this.greenTexture=this.createTexture(32,32,0,255,0,255,"default-greenTexture"),this.yellowTexture=this.createTexture(32,32,0,255,255,255,"default-yellowTexture"),this.grayTexture=this.createTexture(32,32,128,128,128,255,"default-grayTexture");let t=new hc().generateBRDFLUTTexture(),r=t.name="BRDFLUT";this.addTexture(r,t),this.defaultSky=new ms,this.defaultSky.createFromTexture(128,this.blackTexture),me.getInstance().attached(this.defaultSky,this),me.getInstance().attached(t,this),me.getInstance().attached(this.normalTexture,this),me.getInstance().attached(this.maskTexture,this),me.getInstance().attached(this.whiteTexture,this),me.getInstance().attached(this.blackTexture,this),me.getInstance().attached(this.redTexture,this),me.getInstance().attached(this.blueTexture,this),me.getInstance().attached(this.greenTexture,this),me.getInstance().attached(this.yellowTexture,this),me.getInstance().attached(this.grayTexture,this),this.defaultGUITexture=new fi(this.whiteTexture),this.defaultGUISprite=new Ki(this.defaultGUITexture),this.defaultGUISprite.trimSize.set(4,4),this.defaultMaterial=new Qr}}class Fc extends Pe{_postList;init(e){this._postList=new Map}start(){}stop(){}onEnable(){this.activePost()}onDisable(){this.unActivePost()}activePost(){let e=this.transform.view3D,t=m.getRenderJob(e);this._postList.forEach(r=>{t.addPost(r)})}unActivePost(){let e=this.transform.view3D,t=m.getRenderJob(e);this._postList.forEach(r=>{t.removePost(r)})}addPost(e){if(this._postList.has(e))return;let t=new e;return this._postList.set(e,t),this._enable&&this.activePost(),t}removePost(e){if(!this._postList.has(e))return;let t=this._postList.get(e);this._postList.delete(e);let r=this.transform.view3D;m.getRenderJob(r).removePost(t)}getPost(e){return this._postList.has(e)?this._postList.get(e):null}}const kp="1.0.10";class m{static res;static inputSystem;static views;static _frameRateValue=0;static _frameRate=360;static _time=0;static _beforeRender;static _renderLoop;static _lateRender;static _requestAnimationFrameID=0;static get frameRate(){return this._frameRate}static set frameRate(e){this._frameRate=e,this._frameRateValue=1e3/e,e>=360&&(this._frameRateValue=0)}static get size(){return R.presentationSize}static get aspect(){return R.aspect}static get width(){return R.windowWidth}static get height(){return R.windowHeight}static setting={doublePrecision:!1,occlusionQuery:{enable:!0,debug:!1},pick:{enable:!0,mode:"bound",detail:"mesh"},render:{debug:!1,renderPassState:4,renderState_left:5,renderState_right:5,renderState_split:.5,quadScale:1,hdrExposure:1.5,debugQuad:-1,maxPointLight:1e3,maxDirectLight:4,maxSportLight:1e3,drawOpMin:0,drawOpMax:Number.MAX_SAFE_INTEGER,drawTrMin:0,drawTrMax:Number.MAX_SAFE_INTEGER,zPrePass:!1,useLogDepth:!1,useCompressGBuffer:!1,gi:!1,postProcessing:{bloom:{downSampleStep:3,downSampleBlurSize:9,downSampleBlurSigma:1,upSampleBlurSize:9,upSampleBlurSigma:1,luminanceThreshole:1,bloomIntensity:1,hdr:1},globalFog:{debug:!1,enable:!1,fogType:0,fogHeightScale:.1,start:400,end:10,density:.02,ins:.5,skyFactor:.5,skyRoughness:.4,overrideSkyFactor:.8,fogColor:new P(96/255,117/255,133/255,1),falloff:.7,rayLength:200,scatteringExponent:2.7,dirHeightLine:10},godRay:{blendColor:!0,rayMarchCount:16,scatteringExponent:5,intensity:.5},ssao:{enable:!1,radius:.15,bias:-.1,aoPower:2,debug:!0},outline:{enable:!1,strength:1,groupCount:4,outlinePixel:2,fadeOutlinePixel:4,textureScale:1,useAddMode:!1,debug:!0},taa:{enable:!1,jitterSeedCount:8,blendFactor:.1,sharpFactor:.6,sharpPreBlurFactor:.5,temporalJitterScale:.13,debug:!0},gtao:{enable:!1,darkFactor:1,maxDistance:5,maxPixel:50,rayMarchSegment:6,multiBounce:!1,usePosFloat32:!0,blendColor:!0,debug:!0},ssr:{enable:!1,pixelRatio:1,fadeEdgeRatio:.2,rayMarchRatio:.5,fadeDistanceMin:600,fadeDistanceMax:2e3,roughnessThreshold:.5,powDotRN:.2,mixThreshold:.1,debug:!0},fxaa:{enable:!1},depthOfView:{enable:!1,iterationCount:3,pixelOffset:1,near:150,far:300}}},shadow:{enable:!0,type:"HARD",pointShadowBias:5e-4,shadowSize:2048,pointShadowSize:1024,shadowSoft:.005,shadowBound:100,shadowBias:.05,needUpdate:!0,autoUpdate:!0,updateFrameRate:2,csmMargin:.1,csmScatteringExp:.7,csmAreaScale:.4,debug:!1},gi:{enable:!1,offsetX:0,offsetY:0,offsetZ:0,probeSpace:64,probeXCount:4,probeYCount:2,probeZCount:4,probeSize:32,probeSourceTextureSize:2048,octRTMaxSize:2048,octRTSideSize:16,maxDistance:64*1.73,normalBias:.25,depthSharpness:1,hysteresis:.98,lerpHysteresis:.01,irradianceChebyshevBias:.01,rayNumber:144,irradianceDistanceBias:32,indirectIntensity:1,ddgiGamma:2.2,bounceIntensity:.025,probeRoughness:1,realTimeGI:!1,debug:!1,autoRenderProbe:!1},sky:{type:"HDRSKY",sky:null,skyExposure:1,defaultFar:65536,defaultNear:1},light:{maxLight:4096},material:{materialChannelDebug:!1,materialDebug:!1},loader:{numConcurrent:20},reflectionSetting:{reflectionProbeMaxCount:8,reflectionProbeSize:256,width:256*6,height:8*256,enable:!0}};static renderJobs;static async init(e={}){console.log("Rings Version",kp),window.isSecureContext||console.warn("WebGPU is only supported in secure contexts (HTTPS or localhost)"),this.setting={...this.setting,...e.engineSetting},await pe.init(I.allocCount,this.setting.doublePrecision),await R.init(e.canvasConfig),this.setting.reflectionSetting.width=this.setting.reflectionSetting.reflectionProbeSize*6,this.setting.reflectionSetting.height=this.setting.reflectionSetting.reflectionProbeSize*this.setting.reflectionSetting.reflectionProbeMaxCount,se.getGBufferFrame(se.reflections_GBuffer,this.setting.reflectionSetting.width,this.setting.reflectionSetting.height,!1),O.init(),Dr.init(),ne.init(),vt.init(),wt.init(),this.res=new _c,this.res.initDefault(),this._beforeRender=e.beforeRender,this._renderLoop=e.renderLoop,this._lateRender=e.lateRender,this.inputSystem=new Ln,this.inputSystem.initCanvas(R.canvas)}static startRenderJob(e){let t=new Bu(e);return this.renderJobs.set(e,t),this.setting.pick.mode=="pixel"&&e.scene.getOrAddComponent(Fc).addPost(Io),(this.setting.pick.mode=="pixel"||this.setting.pick.mode=="bound")&&(e.enablePick=!0),t}static startRenderView(e){this.renderJobs||=new Map,this.views=[e];let t=this.startRenderJob(e);return this.resume(),t}static startRenderViews(e){this.renderJobs||=new Map,this.views=e;for(let t=0;t<e.length;t++)this.startRenderJob(e[t]);this.resume()}static getRenderJob(e){return this.renderJobs.get(e)}static pause(){this._requestAnimationFrameID!==0&&(cancelAnimationFrame(this._requestAnimationFrameID),this._requestAnimationFrameID=0)}static resume(){this._requestAnimationFrameID===0&&(this._requestAnimationFrameID=requestAnimationFrame(e=>this.render(e)))}static async render(e){if(this._frameRateValue>0){let t=e-this._time;if(t<this._frameRateValue){let r=performance.now();await new Promise(i=>{setTimeout(()=>{e+=performance.now()-r,i(!0)},this._frameRateValue-t)})}this._time=e}await this.updateFrame(e),this._requestAnimationFrameID=0,this.resume()}static async updateFrame(e){be.delta=e-be.time,be.time=e,be.frame+=1,ci.tick(be.delta);let t=this.views,r=0;for(r=0;r<t.length;r++){const o=t[r];o.scene.waitUpdate();let[n,l]=R.presentationSize;o.camera.viewPort.setTo(0,0,n,l)}this._beforeRender&&await this._beforeRender();for(const o of Se.componentsBeforeUpdateList){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];u.enable&&c(n)}}let i=R.device.createCommandEncoder();for(const o of Se.componentsComputeList){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];u.enable&&c(n,i)}}R.device.queue.submit([i.finish()]);for(const o of Se.componentsUpdateList){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];u.enable&&c(n)}}for(const o of Se.graphicComponent){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];n&&u.enable&&c(n)}}this._renderLoop&&await this._renderLoop(),pe.updateAllContinueTransform(0,I.useCount,16),ne.modelMatrixBindGroup.writeBuffer(I.useCount*16),this.renderJobs.forEach((o,n)=>{o.renderState||o.start(),o.renderFrame()});for(const o of Se.componentsLateUpdateList){let n=o[0],l=o[1];for(const h of l){let u=h[0],c=h[1];u.enable&&c(n)}}this._lateRender&&await this._lateRender()}}let xs=`
|
|
7561
7561
|
struct BloomCfg{
|
|
7562
7562
|
downSampleStep: f32,
|
|
7563
7563
|
downSampleBlurSize: f32,
|
|
@@ -11205,7 +11205,7 @@ fn frag(){
|
|
|
11205
11205
|
var fragColor:vec4<f32> = vec4<f32>((sky.rgb), 1.0);
|
|
11206
11206
|
return fragColor;
|
|
11207
11207
|
}
|
|
11208
|
-
`}class sf{sunRadius=500;sunRadiance=11;mieG=.76;mieHeight=1200;eyePos=1500;sunX=.71;sunY=.56;sunBrightness=1;displaySun=!0;defaultTextureCubeSize=512;defaultTexture2DSize=1024;skyColor=new P(1,1,1,1)}class of extends Us{_internalTexture;_cubeSize;setting;constructor(e){return super(),this.setting=e,this._cubeSize=e.defaultTextureCubeSize,this._internalTexture=new $p(e.defaultTexture2DSize,e.defaultTexture2DSize*.5),this._internalTexture.update(this.setting),this.createFromTexture(this._cubeSize,this._internalTexture),this}get texture2D(){return this._internalTexture}apply(){return this._internalTexture.update(this.setting),this._faceData.uploadErpTexture(this._internalTexture),this}}class $p extends Ae{_computeShader;_uniformBuffer;constructor(e,t){super(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),this.initCompute(e,t)}initCompute(e,t){this._uniformBuffer=new ht(64),this._uniformBuffer.apply(),this._computeShader=new ue(af.cs),this._computeShader.setUniformBuffer("uniformBuffer",this._uniformBuffer),this._computeShader.setStorageTexture("outTexture",this),this._computeShader.workerSizeX=e/8,this._computeShader.workerSizeY=t/8}update(e){this._uniformBuffer.setFloat("width",this.width),this._uniformBuffer.setFloat("height",this.height),this._uniformBuffer.setFloat("sunU",e.sunX),this._uniformBuffer.setFloat("sunV",e.sunY),this._uniformBuffer.setFloat("eyePos",e.eyePos),this._uniformBuffer.setFloat("sunRadius",e.sunRadius),this._uniformBuffer.setFloat("sunRadiance",e.sunRadiance),this._uniformBuffer.setFloat("mieG",e.mieG),this._uniformBuffer.setFloat("mieHeight",e.mieHeight),this._uniformBuffer.setFloat("sunBrightness",e.sunBrightness),this._uniformBuffer.setFloat("displaySun",e.displaySun?1:0),this._uniformBuffer.setColor("skyColor",e.skyColor),this._uniformBuffer.apply();let t=F.beginCommandEncoder();return F.computeCommand(t,[this._computeShader]),F.endCommandEncoder(t),this}}var em=Object.getOwnPropertyDescriptor,tm=(s,e,t,r)=>{for(var i=r>1?void 0:r?em(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Sa=class extends pt{constructor(){super();let s=new Oe("sky_vs_frag_wgsl","sky_fs_frag_wgsl");this.addRenderPass(s),s.setUniformVector3("eyesPos",new d),s.setUniformFloat("exposure",1),s.setUniformFloat("roughness",0);let e=s.shaderState;e.frontFace="cw",e.cullMode=Jt.back,e.depthWriteEnabled=!1,e.depthCompare=rt.less}};Sa=tm([yi(Sa,"SkyShader")],Sa);class nf extends yt{constructor(){super(),this.shader=new Sa,this.shader.setUniformVector3("eyesPos",new d),this.shader.setUniformFloat("exposure",1),this.shader.setUniformFloat("roughness",0)}set baseMap(e){this.setTexture("baseMap",e);const t="IS_HDR_SKY";this._shader.getDefaultShaders()[0].defineValue[t]!=e?.isHDRTexture&&this._shader.setDefine(t,!!e?.isHDRTexture)}get baseMap(){return this._shader.getDefaultColorShader().getTexture("baseMap")}set envMap(e){}set shadowMap(e){}get exposure(){return m.setting.sky.skyExposure}set exposure(e){m.setting.sky.skyExposure=e}get roughness(){return this._shader.getDefaultColorShader().uniforms.roughness.value}set roughness(e){let t=this._shader.getDefaultColorShader();"roughness"in t.uniforms&&(t.uniforms.roughness.value=e)}}class lf extends ei{gid=0;needUpdate=!0;autoUpdate=!1;radius=500;init(){super.init(),this.addRendererMask(Be.Reflection),this.alwaysRender=!0,this.object3D.bound=new Re(d.ZERO.clone(),d.MAX),ss(this.transform.onPositionChange,()=>{this.needUpdate=!0})}onEnable(){G.instance.addRenderNode(this.transform.scene3D,this)}onDisable(){G.instance.removeRenderNode(this.transform.scene3D,this)}renderPass2(e,t,r,i,a,o=!1){super.renderPass2(e,t,r,i,a,o)}}class hf extends pt{constructor(){super();let e=new Oe("ReflectionShader_shader","ReflectionShader_shader");e.setShaderEntry("VertMain","FragMain"),this.addRenderPass(e);let t=e.shaderState;t.acceptShadow=!1,t.castShadow=!1,t.receiveEnv=!1,t.acceptGI=!1,t.useLight=!1,this.setDefine("USE_BRDF",!0),this.setDefine("USE_AO_R",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformFloat("alphaCutoff",0)}set _MainTex(e){this.setTexture("baseMap",e)}set _BumpMap(e){this.setTexture("normalMap",e)}set _MaskTex(e){this.setTexture("maskMap",e)}set _UVTransform(e){this.setUniformVector4("transformUV1",e)}set _Metallic(e){this.setUniformFloat("metallic",e)}set _Roughness(e){this.setUniformFloat("roughness",e)}set _MainColor(e){this.setUniformColor("baseColor",e)}set _AlphaCutoff(e){this.setUniformFloat("alphaCutoff",e)}set _DoubleSidedEnable(e){let t=this.getDefaultColorShader();t.shaderState.cullMode=e?Jt.none:t.shaderState.cullMode}set _SurfaceType(e){let t=this.getDefaultColorShader();e==0?t.blendMode=ae.NONE:t.blendMode=ae.ALPHA}set _AlphaCutoffEnable(e){e==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}}class uf extends yt{constructor(){super(),this.shader=new hf,this.baseMap=m.res.whiteTexture,this.setDefine("USE_CUSTOMUNIFORM",!0),this.reflectionIndex=0}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}set reflectionIndex(e){this.shader.setUniformFloat("reflectionIndex",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set envMap(e){}set shadowMap(e){}}class Ga{center=new d;extents;max;min;size;tmpVecA=new d;tmpVecB=new d;tmpVecC=new d;tmpVecD=new d;radius=0;diffBetweenPoints=new d;owner;forward=new d(0,0,1);worldCenter;worldSize;_center=new d;constructor(e,t){this.center=e||new d(0,0,0),this.radius=t===void 0?.5:t}updateBound(){throw new Error("Method not implemented.")}containsPoint(e){var t=this.tmpVecA.subtract(e,this.center).lengthSquared,r=this.radius;return t<r*r}intersectsRay(e,t){var r=this.tmpVecA.copyFrom(e.origin).subtract(this.center),i=r.dotProduct(this.tmpVecB.copyFrom(e.direction).normalize()),a=r.dotProduct(r)-this.radius*this.radius;if(a>0&&i>0)return null;var o=i*i-a;if(o<0)return!1;var n=Math.abs(-i-Math.sqrt(o));return t&&t.copyFrom(e.direction).scaleBy(n).add(e.origin),!0}intersectsBoundingSphere(e){this.tmpVecA.subtract(e.center,this.center);var t=e.radius+this.radius;return this.tmpVecA.lengthSquared<=t*t}calculateTransform(e){this.update(e)}inFrustum(e,t){return t.containsSphere(e)}clone(){return new Ga(this.center.clone(),this.radius)}update(e){this.owner=e,this._center.add(e.transform.worldMatrix.position,this.center),this.forward=e.transform.forward}merge(e){throw new Error("BoundingSphere merge is not ready!")}setFromCenterAndSize(e,t){this.center.copy(e),this.radius=t}}class cf extends lf{init(){super.init(),this.castShadow=!1,this.castGI=!1,this.addRendererMask(Be.Reflection),this.alwaysRender=!0,this.object3D.bound=new Ga(d.ZERO.clone(),this.radius)}debug(e,t=1){let r=new q,i=r.addComponent(j);i.addMask(Be.ReflectionDebug),i.geometry=new Ri(25,30,30);let a=m.setting.reflectionSetting,o=se.getGBufferFrame(se.reflections_GBuffer,a.width,a.height),n=new uf;n.reflectionIndex=e,n.baseMap=o.getCompressGBufferTexture(),i.material=n,this.object3D.addChild(r),r.scaleX=t,r.scaleY=t,r.scaleZ=t}onEnable(){super.onEnable()}onDisable(){super.onDisable()}renderPass2(e,t,r,i,a,o=!1){super.renderPass2(e,t,r,i,a,o)}}class Bs extends j{skyMaterial;init(){super.init(),this.castShadow=!1,this.castGI=!0,this.addRendererMask(Be.Sky),this.alwaysRender=!0,this.object3D.bound=new Re(d.ZERO.clone(),d.MAX),this.geometry=new Ri(m.setting.sky.defaultFar,20,20),this.skyMaterial||=new nf}onEnable(){this._readyPipeline?(this.castNeedPass(),!this._inRenderer&&this.transform.scene3D&&(G.instance.sky=this,this._inRenderer=!0)):this.initPipeline()}onDisable(){this._inRenderer&&this.transform.scene3D&&(this._inRenderer=!1,G.instance.sky=null),super.onDisable()}nodeUpdate(e,t,r,i){super.nodeUpdate(e,t,r,i)}renderPass2(e,t,r,i,a,o=!1){super.renderPass2(e,t,r,i,a,o)}set map(e){this.skyMaterial.baseMap=e,this.skyMaterial.name==null&&(this.skyMaterial.name="skyMaterial"),this.material=this.skyMaterial}get map(){return this.skyMaterial.baseMap}get exposure(){return this.skyMaterial.exposure}set exposure(e){this.skyMaterial&&(this.skyMaterial.exposure=e)}get roughness(){return this.skyMaterial.roughness}set roughness(e){this.skyMaterial&&(this.skyMaterial.roughness=e)}useSkyReflection(){let e=new q,t=e.addComponent(cf);t.autoUpdate=!1,e.x=0,e.y=300,e.z=0,this.object3D.addChild(e)}}class rm{rotateX;rotateY;sunX;sunY;constructor(){this.reset()}reset(){return this.rotateX=this.rotateY=this.sunX=this.sunY=Number.MAX_VALUE,this}isRotateChange(e,t){return Math.abs(this.rotateX-e)>=.001||Math.abs(this.rotateY-t)>=.001}isSkyChange(e,t){return Math.abs(this.sunX-e)>=.001||Math.abs(this.sunY-t)>=.001}save(e,t,r,i){return this.sunX=e,this.sunY=t,this.rotateX=r,this.rotateY=i,this}}class im extends Bs{_atmosphericScatteringSky;_onChange=!0;_relatedTransform;_historyData;get sunX(){return this._atmosphericScatteringSky.setting.sunX}set sunX(e){this._atmosphericScatteringSky.setting.sunX!=e&&(this._atmosphericScatteringSky.setting.sunX=e,this._onChange=!0)}get sunY(){return this._atmosphericScatteringSky.setting.sunY}set sunY(e){this._atmosphericScatteringSky.setting.sunY!=e&&(this._atmosphericScatteringSky.setting.sunY=e,this._onChange=!0)}get eyePos(){return this._atmosphericScatteringSky.setting.eyePos}set eyePos(e){this._atmosphericScatteringSky.setting.eyePos!=e&&(this._atmosphericScatteringSky.setting.eyePos=e,this._onChange=!0)}get sunRadius(){return this._atmosphericScatteringSky.setting.sunRadius}set sunRadius(e){this._atmosphericScatteringSky.setting.sunRadius!=e&&(this._atmosphericScatteringSky.setting.sunRadius=e,this._onChange=!0)}get sunRadiance(){return this._atmosphericScatteringSky.setting.sunRadiance}set sunRadiance(e){this._atmosphericScatteringSky.setting.sunRadiance!=e&&(this._atmosphericScatteringSky.setting.sunRadiance=e,this._onChange=!0)}get sunBrightness(){return this._atmosphericScatteringSky.setting.sunBrightness}set sunBrightness(e){this._atmosphericScatteringSky.setting.sunBrightness!=e&&(this._atmosphericScatteringSky.setting.sunBrightness=e,this._onChange=!0)}get displaySun(){return this._atmosphericScatteringSky.setting.displaySun}set displaySun(e){this._atmosphericScatteringSky.setting.displaySun!=e&&(this._atmosphericScatteringSky.setting.displaySun=e,this._onChange=!0)}init(){super.init(),this._historyData=new rm,this._atmosphericScatteringSky=new of(new sf);let e=this.transform.view3D,t=this.transform.scene3D;this.map=this._atmosphericScatteringSky,t.envMap=this._atmosphericScatteringSky,this.onUpdate(e)}start(e){let t=this.transform.scene3D;this.map=this._atmosphericScatteringSky,t.envMap=this._atmosphericScatteringSky,super.start()}get relativeTransform(){return this._relatedTransform}set relativeTransform(e){this._relatedTransform=e,this._historyData.reset()}onUpdate(e){this._relatedTransform&&(this._relatedTransform.rotationZ=0,this._historyData.isRotateChange(this._relatedTransform.rotationX,this._relatedTransform.rotationY)?(this.sunX=(this._relatedTransform.rotationY+90)/360,this.sunY=this._relatedTransform.rotationX/180+.5):this._historyData.isSkyChange(this.sunX,this.sunY)&&(this._relatedTransform.rotationY=this.sunX*360-90,this._relatedTransform.rotationX=(this.sunY-.5)*180),this._historyData.save(this.sunX,this.sunY,this._relatedTransform.rotationX,this._relatedTransform.rotationY)),this._onChange&&(this._onChange=!1,this._atmosphericScatteringSky.apply())}destroy(e){super.destroy(e),this._atmosphericScatteringSky.destroy(),this._atmosphericScatteringSky=null,this._onChange=null}}class Ii{static panelRatio=1;static quadMaxCountForWorld=256;static quadMaxCountForView=2048;static SortOrderStartWorld=7e3;static SortOrderStartView=8e3;static SortOrderCanvasSpan=1e4}var jt=(s=>(s[s.View=0]="View",s[s.World=2]="World",s))(jt||{}),ea=(s=>(s[s.Simple=0]="Simple",s[s.Sliced=1]="Sliced",s[s.Tiled=2]="Tiled",s[s.Filled=3]="Filled",s))(ea||{}),ii=(s=>(s[s.None=0]="None",s[s.BillboardY=9]="BillboardY",s[s.BillboardXYZ=10]="BillboardXYZ",s))(ii||{});class Wa extends Pe{type;camera;_cameraPosition;constructor(){super(),this._cameraPosition=new d}onUpdate(){this.enable&&this.transform.view3D.camera&&this.updateBillboardMatrix()}updateBillboardMatrix(){let e=this.transform.view3D.camera;this._cameraPosition.copyFrom(e.transform.back),this.type==ii.BillboardXYZ||this.type==ii.BillboardY&&(this._cameraPosition.y=0),this._cameraPosition.normalize(),this._cameraPosition.add(this.object3D.localPosition,this._cameraPosition),this.transform.lookAt(this.object3D.localPosition,this._cameraPosition,e.transform.up)}cloneTo(e){let t=e.addComponent(Wa);t.type=this.type}}var ta=(s=>(s[s.None=0]="None",s[s.Box=1]="Box",s[s.Capsule=2]="Capsule",s[s.Sphere=3]="Sphere",s[s.Mesh=4]="Mesh",s))(ta||{});class Ke{_center;_size;_halfSize;_shapeType=0;static v3_help_0;static helpMatrix;static helpRay;constructor(){Ke.v3_help_0||=new d,Ke.helpMatrix||=new I,Ke.helpRay||=new $t,this._center=new d,this._size=new d,this._halfSize=new d}get shapeType(){return this._shapeType}setFromCenterAndSize(e,t){return e&&this._center.copy(e),t&&this._size.copy(t),this}get center(){return this._center}set center(e){this._center.copy(e)}get size(){return this._size}set size(e){this._size.copy(e),this._halfSize.copy(e).multiplyScalar(.5)}get halfSize(){return this._halfSize}rayPick(e,t){return null}}class ra extends Ke{_pickRet;box;constructor(){super(),this._shapeType=ta.Box,this.box=new Re(new d,new d)}rayPick(e,t){this.box.setFromCenterAndSize(this.center,this.size);let i=Ke.helpMatrix;i.copyFrom(t).invert();let a=Ke.helpRay.copy(e);a.applyMatrix(i);let o=a.intersectBox(this.box,Ke.v3_help_0);return o?(this._pickRet||(this._pickRet={intersectPoint:new d,distance:0}),this._pickRet.intersectPoint=o,this._pickRet.distance=d.distance(a.origin,Ke.v3_help_0),this._pickRet):null}}class Kt extends Pe{_shape;constructor(){super(),this._shape=new ra}start(){m.setting.pick.mode=="pixel"&&this.transform.scene3D.view.pickFire.mouseEnableMap.set(this.transform.worldMatrix.index,this)}onEnable(e){Se.bindEnablePick(e,this,null)}onDisable(e){Se.unBindEnablePick(e,this)}get shape(){return this._shape}set shape(e){this._shape=e}rayPick(e){return this._enable?this._shape.rayPick(e,this.transform.worldMatrix):null}beforeDestroy(e){m.setting.pick.mode=="pixel"&&this.transform.scene3D.view.pickFire.mouseEnableMap.delete(this.transform.worldMatrix.index),super.beforeDestroy(e)}}class ff{loop=!0;speed=1;t=0;time=0;weight=0;currFrame=0;lastFrame=-1;nextFrame=0;clip;animation;_isEnd=!1;_currSkeletonPose;constructor(e){this.clip=e,this._currSkeletonPose=new ma(this.clip.skeleton)}reset(){this.time=0,this.weight=0,this._isEnd=!1}get name(){return this.clip.name}get currSkeletonPose(){return this._currSkeletonPose}update(e){this.time=(this.time+e*this.speed)%this.clip.totalTime;let t=this.time/this.clip.frameRate;if(this.currFrame=Math.trunc(t),this.t=t-this.currFrame,this.currFrame<0&&(this.currFrame=this.clip.numFrame+this.currFrame),this.time>=0?this.nextFrame=(this.currFrame+1)%this.clip.numFrame:(this.nextFrame=this.currFrame-1,this.nextFrame<0&&(this.nextFrame=this.clip.numFrame+this.nextFrame),this.t=1-this.t),this._isEnd)this.currFrame=this.nextFrame=this.speed<0?0:this.clip.numFrame-1;else if(this.currFrame!=this.lastFrame){let a=this.speed<0?0:this.clip.numFrame;this.currFrame==a&&(this.loop?(this.currFrame=0,this.nextFrame=1,this.time=this.t=0):(this.currFrame=this.nextFrame=this.speed<0?0:this.clip.numFrame-1,this._isEnd=!0));var r=this.clip.getEvents();if(r)for(let o of r){var i=Math.floor(o.time/this.clip.frameRate);if(i=Math.min(i,this.clip.numFrame),i=Math.max(i,0),i==this.currFrame){o.skeletonAnimation=this.animation,this.animation.eventDispatcher.dispatchEvent(o);break}}this.lastFrame=this.currFrame}this.clip.getLerpSkeletonPose(this.currFrame,this.nextFrame,this.t,this._currSkeletonPose)}}var am=Object.getOwnPropertyDescriptor,sm=(s,e,t,r)=>{for(var i=r>1?void 0:r?am(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let ai=class extends Pe{isPlaying=!0;timeScale=1;_skeleton;_clips=[];_clipStates=new Map;_mixSkeletonPose;_mixTempSkeletonPose;_currentClipState;_bindList=[];_jointMatrixIndexTableBuffer;_crossFadeState;constructor(){super()}start(){}set skeleton(s){this._skeleton=s,this._mixSkeletonPose=new ma(this._skeleton,!0),this._mixTempSkeletonPose=new ma(this._skeleton);const e=new Float32Array(this._mixSkeletonPose.jointMatrixIndexTable);this._jointMatrixIndexTableBuffer=new ve(this._skeleton.numJoint*4,0,e)}get skeleton(){return this._skeleton}get finalSkeletonPose(){return this._mixSkeletonPose}get jointMatrixIndexTableBuffer(){return this._jointMatrixIndexTableBuffer}getJointIndexTable(s){let e=new Array;for(let t=0;t<s.length;t++){const r=s[t];let i=this._skeleton.getJointByName(r);e[t]=i?i.index:-1}return e}addAnimationClip(s){if(!this._clipStates.has(s.name)){this._clips.push(s);let e=new ff(s);e.animation=this,this._clipStates.set(s.name,e),this._currentClipState||this.setCurrentClipState(e)}}getAnimationClip(s){var e=this.getAnimationClipState(s);return e?e.clip:null}getAnimationClips(){return this._clips}getAnimationClipState(s){return this._clipStates.has(s)?this._clipStates.get(s):null}getAnimationClipStates(){return this._clipStates}pause(){this.isPlaying=!1}resume(){this.isPlaying=!0}play(s,e=1,t=!1){if(this._currentClipState&&this._currentClipState.name==s)return t&&this._currentClipState.reset(),!1;let r=this.getAnimationClipState(s);return r?(r.speed=e,r.reset(),this._clipStates.forEach((i,a)=>{i.weight=0}),this.setCurrentClipState(r),!0):!1}crossFade(s,e){if(e<.01){this.play(s);return}if(this._currentClipState.name==s)return;let t=this.getAnimationClipState(s);t&&(t.reset(),this._crossFadeState?(this._crossFadeState.inClip&&(this._crossFadeState.inClip.weight=0),this._crossFadeState.outClip&&(this._crossFadeState.outClip.weight=0),this._crossFadeState.reset(t,this._currentClipState,e)):this._crossFadeState=new om(t,this._currentClipState,e),this._currentClipState=t)}setAnimIsLoop(s,e){this._clipStates.has(s)&&(this._clipStates.get(s).loop=e)}addJointBind(s,e){this._bindList.push({jointName:s,obj:e})}removeJointBind(s){for(let e=0;e<this._bindList.length;e++)if(this._bindList[e].obj==s){this._bindList.splice(e,1);break}}onUpdate(){if(!this.isPlaying)return;let s=be.delta*.001*this.timeScale;this._crossFadeState&&this._crossFadeState.update(s);var e=0,t=[];if(this._clipStates.forEach((i,a)=>{i.weight>0&&(i.update(s),e+=i.weight,t.push(i))}),t.length>0){this._mixSkeletonPose.copyFrom(t[0].currSkeletonPose);for(var r=1;r<t.length;++r){const i=t[r];this._mixTempSkeletonPose.lerp(this._mixSkeletonPose,i.currSkeletonPose,i.weight/e),this._mixSkeletonPose.copyFrom(this._mixTempSkeletonPose)}}}cloneTo(s){let e=s.addComponent(ai);e.skeleton=this.skeleton;for(var t=0;t<this._clips.length;++t)e.addAnimationClip(this._clips[t])}setCurrentClipState(s){this._currentClipState!=s&&(this._currentClipState=s,this._currentClipState.weight=1)}};ai=sm([Wt(ai,"SkeletonAnimationComponent")],ai);class om{inClip;outClip;currentTime;crossFadeTime;constructor(e,t,r){this.reset(e,t,r)}reset(e,t,r){this.inClip=e,this.outClip=t,this.currentTime=0,this.crossFadeTime=r}update(e){!this.inClip||!this.outClip||(this.currentTime+=e,this.inClip.weight=Math.min(Math.abs(this.currentTime%this.crossFadeTime)/this.crossFadeTime,1),this.outClip.weight=1-this.inClip.weight,Math.abs(this.currentTime)>=this.crossFadeTime&&(this.inClip.weight=1,this.outClip.weight=0,this.inClip=null,this.outClip=null))}}var nm=Object.getOwnPropertyDescriptor,lm=(s,e,t,r)=>{for(var i=r>1?void 0:r?nm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Nr=class extends Pe{timeScale=1;jointMatrixIndexTableBuffer;playBlendShapeLoop=!1;inverseBindMatrices;_avatar;_rendererList;propertyCache;_clips;_clipsState;_clipsMap;_currentSkeletonClip;_currentBlendAnimClip;_skeletonTime=0;_blendShapeTime=0;_skeletonSpeed=1;_blendShapeSpeed=1;_skeletonStart=!0;_blendShapeStart=!0;root;_avatarName;_bonePos=new d;_boneScale=new d;_boneRot=new Z;_crossFadeState;init(s){this.propertyCache=new Map,this._clipsMap=new Map,this._clips=[],this._clipsState=[],this._rendererList=this.object3D.getComponentsInChild(oi);let e=this.object3D.getComponentsInChild(j);for(let t of e){let r=t;r.blendShape=t.morphData,this._rendererList.push(r)}for(const t of this._rendererList)Gt.hasMask(t.rendererMask,Be.MorphTarget)&&t.selfCloneMaterials("MORPH_TARGET_UUID")}start(){}debug(){}playAnim(s,e=0,t=1){let r=this.getAnimationClipState(s);r?(this._currentSkeletonClip&&(this._currentSkeletonClip.weight=0),this._currentSkeletonClip=r,this._currentSkeletonClip.weight=1,this._skeletonTime=e,this._skeletonSpeed=t,this._skeletonStart=!0):console.warn(`not has anim ${s}`)}crossFade(s,e){let t=this.getAnimationClipState(s);if(!t){console.warn(`not has anim ${s}`);return}if(e<.01||!this._currentSkeletonClip){this.playAnim(s);return}if(this._currentSkeletonClip&&this._currentSkeletonClip.clip.clipName===s)return;let r=t,i=this._currentSkeletonClip;this._crossFadeState?(this._crossFadeState.inClip&&(this._crossFadeState.inClip.weight=0),this._crossFadeState.outClip&&(this._crossFadeState.outClip.weight=0),this._crossFadeState.reset(r,i,e)):this._crossFadeState=new hm(r,i,e),this._currentSkeletonClip=r}playBlendShape(s,e=0,t=1){this._clipsMap.has(s)?(this._currentBlendAnimClip=this._clipsMap.get(s),this._blendShapeTime=e,this._blendShapeSpeed=t,this._blendShapeStart=!0):console.warn(`not has blendShape ${s}`)}set avatar(s){this._avatarName=s,this.inverseBindMatrices=[],this._avatar=m.res.getObj(s);let e=this.buildSkeletonPose();const t=new Float32Array(e);this.jointMatrixIndexTableBuffer=new ve(this._avatar.count,0,t)}get numJoint(){return this._avatar.count}getJointIndexTable(s){let e=new Array;for(let t=0;t<s.length;t++){let r=this._avatar.boneMap.get(s[t]);e[t]=r?r.boneID:-1}return e}skeltonPoseObject3D={};skeltonTPoseObject3D={};buildSkeletonPose(){let s=[];for(const e of this._avatar.boneData){let t=new q;I.getEuler(d.HELP_6,e.q,!0,"ZYX"),t.localPosition=e.t.clone(),t.localRotation=d.HELP_6.clone(),t.localScale=d.ONE,e.s.clone(),this.skeltonPoseObject3D[e.boneName]=t,this.skeltonTPoseObject3D[e.bonePath]=t.clone(),e.parentBoneName&&e.parentBoneName!=""?this.skeltonPoseObject3D[e.parentBoneName].addChild(t):(this.object3D.transform.scene3D&&this.object3D.transform.scene3D.addChild(t),this.root=t),s.push(t.transform.worldMatrix.index);let r=new I;r.copyFrom(t.transform.worldMatrix),r.invert(),this.inverseBindMatrices.push(r.rawData)}return s}set clips(s){this._clips=s;for(const e of s)this._clipsMap.set(e.clipName,e);this._clipsState=[];for(const e of s)this._clipsState.push(new df(e));this._currentSkeletonClip||this.playAnim(s[0].clipName)}get clips(){return this._clips}get clipsState(){return this._clipsState}cloneTo(s){let e=s.addComponent(Nr);e.avatar=this._avatarName,e.clips=this._clips}updateTime(){const s=be.delta*.001;this._skeletonStart&&(this._skeletonTime+=s*this._skeletonSpeed*this.timeScale,this._currentSkeletonClip&&this._currentSkeletonClip.clip.loopTime&&(this._skeletonTime=this._skeletonTime%this._currentSkeletonClip.clip.stopTime)),this._blendShapeStart&&(this._blendShapeTime+=s*this._blendShapeSpeed,this._currentBlendAnimClip&&(this._currentBlendAnimClip.loopTime&&this.playBlendShapeLoop?this._blendShapeTime=this._blendShapeTime%this._currentBlendAnimClip.stopTime:this._blendShapeTime=Math.min(this._blendShapeTime,this._currentBlendAnimClip.stopTime)-1e-4)),this._crossFadeState&&this._crossFadeState.update(s)}onUpdate(s){this.updateTime();let e=[];for(let t of this._clipsState)t.weight>0&&e.push(t);e.length>0?this.updateSkeletonAnimMix(e):this.updateSkeletonAnim(),this.updateMorphAnim()}updateSkeletonAnim(){if(this._currentSkeletonClip){let s=this._avatar.boneData,e=0,t=s.length;for(e=0;e<t;e++){const r=s[e];let i=this.skeltonPoseObject3D[r.boneName];if(this._currentSkeletonClip.clip.useSkeletonPos){let o=this.getPosition(r.bonePath,this._skeletonTime);i.transform.localPosition=o}let a=this.getRotation(r.bonePath,this._skeletonTime);if(i.transform.localRotQuat=a,this._currentSkeletonClip.clip.useSkeletonScale){let o=this.getScale(r.bonePath,this._skeletonTime);i.transform.localScale=o}}}}updateMorphAnim(){if(this._currentBlendAnimClip&&this._currentBlendAnimClip.floatCurves&&this._currentBlendAnimClip.floatCurves.size>0&&this._rendererList)for(const s of this._currentBlendAnimClip.floatCurves){let e=s[0],r=s[1].propertys,a=this._currentBlendAnimClip.floatCurves.get(e).getValue(this._blendShapeTime)/100;this.updateBlendShape(r,e,a)}}updateBlendShape(s,e,t){for(const r of this._rendererList)if(r.blendShape){let i=this.propertyCache.get(r);if(i&&e in i)i[e](t);else{i=r;for(const a of s){if(!i[a]){i=null;break}i=i[a]}if(!i||i==r)continue;this.propertyCache.get(r)||this.propertyCache.set(r,{}),this.propertyCache.get(r)[e]=i,i(t)}}}updateSkeletonAnimMix(s){let e=0;for(let t of s)e+=t.weight;if(s.length>0){let t=this._avatar.boneData,r=t.length;for(let i=0;i<r;i++){const a=t[i];let o=this.skeltonPoseObject3D[a.boneName];if(s[0].clip.useSkeletonPos){this._bonePos.copyFrom(this.getPosition(a.bonePath,this._skeletonTime,s[0].clip));for(let n=1;n<s.length;n++){const l=s[n];if(l.clip.useSkeletonPos){let h=this.getPosition(a.bonePath,this._skeletonTime,l.clip);d.HELP_0.lerp(this._bonePos,h,l.weight/e),this._bonePos.copyFrom(d.HELP_0)}}o.transform.localPosition=this._bonePos}this._boneRot.copyFrom(this.getRotation(a.bonePath,this._skeletonTime,s[0].clip));for(let n=1;n<s.length;n++){const l=s[n];let h=this.getRotation(a.bonePath,this._skeletonTime,l.clip);Z.HELP_2.slerp(this._boneRot,h,l.weight/e),this._boneRot.copyFrom(Z.HELP_2)}if(o.transform.localRotQuat=this._boneRot,s[0].clip.useSkeletonScale){this._boneScale.copyFrom(this.getScale(a.bonePath,this._skeletonTime,s[0].clip));for(let n=1;n<s.length;n++){const l=s[n];if(l.clip.useSkeletonScale){let h=this.getScale(a.bonePath,this._skeletonTime,l.clip);d.HELP_0.lerp(this._boneScale,h,l.weight/e),this._boneScale.copyFrom(d.HELP_0)}}o.transform.localScale=this._boneScale}}}}getPosition(s,e,t=this._currentSkeletonClip.clip){return t.positionCurves.has(s)?t.positionCurves.get(s).getValue(e):this.skeltonTPoseObject3D[s].localPosition}getRotation(s,e,t=this._currentSkeletonClip.clip){if(t.rotationCurves.has(s)){let r=t.rotationCurves.get(s).getValue(e);return Z.HELP_0.set(r.x,r.y,r.z,r.w),Z.HELP_0}return this.skeltonTPoseObject3D[s].localQuaternion}getScale(s,e,t=this._currentSkeletonClip.clip){return t.scaleCurves.has(s)?t.scaleCurves.get(s).getValue(e):this.skeltonTPoseObject3D[s].localScale}getAnimationClipState(s){for(let e of this._clipsState)if(e.clip.clipName===s)return e;return null}cloneMorphRenderers(){let s={};for(const e of this._rendererList)for(const t in e.geometry.morphTargetDictionary){let r=s[t]||[];r.push(e),s[t]=r}return s}};Nr=lm([Wt(Nr,"AnimatorComponent")],Nr);class df{clip;weight=0;get totalTime(){return this.clip.stopTime-this.clip.startTime}constructor(e){this.clip=e}}class hm{inClip;outClip;currentTime;crossFadeTime;constructor(e,t,r){this.reset(e,t,r)}reset(e,t,r){this.inClip=e,this.outClip=t,this.currentTime=0,this.crossFadeTime=r}update(e){!this.inClip||!this.outClip||(this.currentTime+=e,this.inClip.weight=Math.min(Math.abs(this.currentTime%this.crossFadeTime)/this.crossFadeTime,1),this.outClip.weight=1-this.inClip.weight,Math.abs(this.currentTime)>=this.crossFadeTime&&(this.inClip.weight=1,this.outClip.weight=0,this.inClip=null,this.outClip=null))}}class fn{index;time;timeEnd;coeff=[]}var si=(s=>(s[s.PingPong=0]="PingPong",s[s.Repeat=1]="Repeat",s[s.Clamp=2]="Clamp",s))(si||{});class vs{serializedVersion="2";time;value;inSlope=0;outSlope=0;tangentMode=0;weightedMode=0;inWeight;outWeight;constructor(e=0,t=0){this.time=e,this.value=t}unSerialized(e){this.serializedVersion=e.serializedVersion,this.time=e.time,this.value=e.value,this.tangentMode=e.tangentMode,this.inSlope=e.inSlope=="Infinity"?NaN:e.inSlope,this.outSlope=e.outSlope=="Infinity"?NaN:e.outSlope}unSerialized2(e){this.serializedVersion=e.serializedVersion,this.time=e.time,this.value=e.value,this.tangentMode=e.tangentMode,this.inSlope=e.inTangent=="Infinity"?NaN:e.inTangent,this.outSlope=e.outTangent=="Infinity"?NaN:e.outTangent}}class _a{_totalTime=1;_cache=new fn;_cacheOut={lhsIndex:0,rhsIndex:0};_InvalidateCache=!1;curve=[];serializedVersion;preWarpMode;postWarpMode;rotationOrder;get cacheOut(){return this._cacheOut}constructor(e,t=si.Repeat,r=si.Repeat){if(e)for(let i=0;i<e.length;i++){const a=e[i];this.addKeyFrame(a)}this.preWarpMode=t,this.postWarpMode=r}get totalTime(){return this._totalTime}get first(){return this.curve[0]}get last(){return this.curve[this.curve.length-1]}addKeyFrame(e){this.curve.indexOf(e)==-1&&this.curve.push(e),this.calcTotalTime()}removeKeyFrame(e){let t=this.curve.indexOf(e);t!=-1&&this.curve.splice(t,1),this.calcTotalTime()}calculateCacheData(e,t,r,i=0){let a=this.curve,o=a[t],n=a[r];e.index=t,e.time=o.time+i,e.timeEnd=n.time+i,e.index=t;let l,h,u,c,f,g,p;l=n.time-o.time,l=Math.max(l,1e-4),u=n.value-o.value,h=1/(l*l),c=o.outSlope,f=n.inSlope,g=c*l,p=f*l,e.coeff[0]=(g+p-u-u)*h/l,e.coeff[1]=(u+u+u-g-g-p)*h,e.coeff[2]=c,e.coeff[3]=o.value,this.setupStepped(e.coeff,o,n)}getValue(e){return e=this.wrapTime(e),this.findCurve(e,this._cacheOut),this.calculateCacheData(this._cache,this._cacheOut.lhsIndex,this._cacheOut.rhsIndex,0),this.evaluateCache(this._cache,e)}getCurveFramesExtent(e){return e=this.wrapTime(e),this.findCurve(e,this._cacheOut),{lhsIndex:this._cacheOut.lhsIndex,rhsIndex:this._cacheOut.rhsIndex,time:e}}getKeyCount(){return this.curve.length}getKey(e){return this.curve[e]}unSerialized(e){this.preWarpMode=e.m_PreInfinity,this.postWarpMode=e.m_PostInfinity,this.rotationOrder=e.m_RotationOrder;let t=e.m_Curve.length;for(let r=0;r<t;r++)this.curve[r]=new vs,this.curve[r].unSerialized(e.m_Curve[r.toString()]);return this.calcTotalTime(),this}unSerialized2(e){this.preWarpMode=e.preWrapMode,this.postWarpMode=e.postWrapMode;let t=e.keyFrames||e.keys,r=t.length;for(let i=0;i<r;i++)this.curve[i]=new vs,this.curve[i].unSerialized2(t[i.toString()]);return this.calcTotalTime(),this}wrapTime(e){let t=this.curve,r=t[0].time,i=t[t.length-1].time;return e<r?this.preWarpMode==si.Clamp?e=r:this.preWarpMode==si.PingPong?e=ao(e,r,i):e=so(e,r,i):e>i&&(this.postWarpMode==si.Clamp?e=i:this.postWarpMode==si.PingPong?e=ao(e,r,i):e=so(e,r,i)),e}evaluateCache(e,t){let r=t-e.time;return r*(r*(r*e.coeff[0]+e.coeff[1])+e.coeff[2])+e.coeff[3]}findCurve(e,t){let r=this.curve;for(let i=1;i<r.length;i++){let a=r[i-1],o=r[i];a.time<=e&&o.time>e&&(t.lhsIndex=i-1,t.rhsIndex=i)}}setupStepped(e,t,r){(isNaN(t.outSlope)||isNaN(r.inSlope))&&(e[0]=0,e[1]=0,e[2]=0,e[3]=t.value)}invalidateCache(){this._InvalidateCache=!0}calcTotalTime(){let e=0;for(let t of this.curve)t?e=Math.max(e,t.time):console.error(t);this._totalTime=e}static scaleCurveValue(e,t){if(!e._InvalidateCache)for(let r=0;r<e.curve.length;r++){let i=e.curve[r];i.value*=t,i.inSlope*=t,i.outSlope*=t}e.invalidateCache()}}class gf extends _a{attribute="";propertyList;path;constructor(){super()}unSerialized(e){let{attribute:t,path:r}=e;return this.attribute=t,this.path=r,this.propertyList=t.split("."),super.unSerialized(e.curve),this}}class pf{curve={}}var ia=(s=>(s[s.Default=0]="Default",s[s.Clamp=1]="Clamp",s[s.Once=1]="Once",s[s.Loop=2]="Loop",s[s.PingPong=4]="PingPong",s[s.ClampForever=8]="ClampForever",s))(ia||{});class um{name;objAnimClip;totalTime=0;time=0;_stopTime=0;_loopTime;_wrapMode;_sampleRate;get wrapMode(){return this._wrapMode||(this._wrapMode=0),this._wrapMode}set wrapMode(e){this._wrapMode=e}parse(e){this.objAnimClip={};let t=e.AnimationClip,{m_Name:r,m_AnimationClipSettings:i,m_WrapMode:a,m_SampleRate:o}=t;this.name=r,this._wrapMode=a,this._sampleRate=o,this._loopTime=i.m_LoopTime;for(const n in t.m_EditorCurves)if(Object.prototype.hasOwnProperty.call(t.m_EditorCurves,n)){const l=t.m_EditorCurves[n];let h=l.attribute,u=new gf;u.unSerialized(l),this.totalTime=Math.max(this.totalTime,u.totalTime);let c=this.objAnimClip[l.path];c||(c=new pf,this.objAnimClip[l.path]=c),c.curve[h]=u}}}class mf{transform;quaternion;materialColor}class Fa{static Property={"m_LocalPosition.x":"localPosition.x","m_LocalPosition.y":"localPosition.y","m_LocalPosition.z":"localPosition.z","m_LocalRotation.x":"localQuaternion.x","m_LocalRotation.y":"localQuaternion.y","m_LocalRotation.z":"localQuaternion.z","m_LocalRotation.w":"localQuaternion.w","localEulerAnglesRaw.x":"localRotation.x","localEulerAnglesRaw.y":"localRotation.y","localEulerAnglesRaw.z":"localRotation.z","m_LocalEulerAngles.x":"localRotation.x","m_LocalEulerAngles.y":"localRotation.y","m_LocalEulerAngles.z":"localRotation.z","m_LocalScale.x":"localScale.x","m_LocalScale.y":"localScale.y","m_LocalScale.z":"localScale.z","m_Color.r":"materialColor.r","m_Color.g":"materialColor.g","m_Color.b":"materialColor.b","m_Color.a":"materialColor.a","material._Color.r":"materialColor.r","material._Color.g":"materialColor.g","material._Color.b":"materialColor.b","material._Color.a":"materialColor.a","material._UnlitColor.r":"materialColor.r","material._UnlitColor.g":"materialColor.g","material._UnlitColor.b":"materialColor.b","material._UnlitColor.a":"materialColor.a","field of view":"camera3D.fov",m_IsActive:"active",m_Sprite:"sprite",m_FlipX:"flipX",m_FlipY:"flipY"};static Scale={"m_LocalPosition.x":1,"m_LocalPosition.y":1,"m_LocalPosition.z":-1,"localEulerAnglesRaw.x":-1,"localEulerAnglesRaw.y":1,"localEulerAnglesRaw.z":1,"m_LocalEulerAngles.x":-1,"m_LocalEulerAngles.y":1,"m_LocalEulerAngles.z":1,"m_LocalRotation.x":1,"m_LocalRotation.y":1,"m_LocalRotation.z":-1,"m_LocalRotation.w":-1,"field of view":1,m_IsActive:1,m_Sprite:1};static updatePropertyTag(e,t){e.quaternion||=this.tag_quaternion[t],e.transform||=this.tag_transform[t],e.materialColor||=this.tag_materialColor[t]}static tag_quaternion={"m_LocalRotation.x":!0,"m_LocalRotation.y":!0,"m_LocalRotation.z":!0,"m_LocalRotation.w":!0};static tag_materialColor={"material._Color.r":!0,"material._Color.g":!0,"material._Color.b":!0,"material._Color.a":!0,"material._UnlitColor.r":!0,"material._UnlitColor.g":!0,"material._UnlitColor.b":!0,"material._UnlitColor.a":!0};static tag_transform={"m_LocalPosition.x":!0,"m_LocalPosition.y":!0,"m_LocalPosition.z":!0,"m_LocalRotation.x":!0,"m_LocalRotation.y":!0,"m_LocalRotation.z":!0,"m_LocalRotation.w":!0,"localEulerAnglesRaw.x":!0,"localEulerAnglesRaw.y":!0,"localEulerAnglesRaw.z":!0,"m_LocalEulerAngles.x":!0,"m_LocalEulerAngles.y":!0,"m_LocalEulerAngles.z":!0,"m_LocalScale.x":!0,"m_LocalScale.y":!0,"m_LocalScale.z":!0}}class ki{static Complete=0;static Seek=1;_rootObject3D;_animation;_propertyCache;_currentClip;_frame=0;_time=0;_isPlaying=!0;speed=1;_propertyTagDic;constructor(e){this._rootObject3D=e.object3D,this._animation=e,this._propertyTagDic=new Map,this.reset()}reset(){this._propertyCache={},this._propertyTagDic.clear()}get time(){return this._time}get currentClip(){return this._currentClip}play(e,t=!0){this._isPlaying=!0,t&&(this._time=0),e!=this._currentClip&&e&&this.parseAnimClip(e),this._currentClip=e,this.validProperty()}parseAnimClip(e){this.reset();for(const t in e.objAnimClip){let r=e.objAnimClip[t],i=this._rootObject3D,a={};if(t==""?i=this._rootObject3D:i=this._rootObject3D.getObjectByName(t),!i)continue;let o=new mf;this._propertyTagDic.set(i,o);let n=r.curve;for(const l in n){Fa.updatePropertyTag(o,l);let h=this._propertyCache[t]||={},u=Fa.Property[l].split("."),c=u[0];if(u.length>1){let f=a[c];f||(f=a[c]=i[c]),h[l]={value:f,property:u[1]}}else h[l]={value:i,property:u[0]}}}return this}stop(){return this._isPlaying=!1,this}toggle(){return this._isPlaying=!this._isPlaying,this}get isPlaying(){return this._isPlaying}update(e,t){if(e=e*.001,t=t*.001,!this._currentClip||this._frame==e||!this._isPlaying)return;this._frame=e;let r=this._time;this._time=this.calcTime(r+t*this.speed),this.validProperty(),this._currentClip.wrapMode!=ia.Loop&&this._currentClip.wrapMode!=ia.Default&&(this.speed>0?this._time>=this._currentClip.totalTime:this._time<=0)&&(this._isPlaying=!1,this._animation.statusCall(ki.Complete,r,this._time)),this._animation.statusCall(ki.Seek,r,this._time)}seek(e){return this._time=this.calcTime(e),this._rootObject3D&&this.validProperty(),this}calcTime(e){return this._currentClip.wrapMode==ia.Loop||this._currentClip.wrapMode==ia.Default?e=uo(e,this._currentClip.totalTime):e=ie(e,0,this._currentClip.totalTime),e}validProperty(){for(const e in this._currentClip.objAnimClip){let r=this._currentClip.objAnimClip[e].curve;for(const i in r){const a=r[i];let o=this._propertyCache[e][i],n=a.getValue(this._time);i in Fa.Scale&&(n*=Fa.Scale[i]),o.value[o.property]=n}}this._propertyTagDic.forEach((e,t)=>{this.applyProperty(e,t)})}applyProperty(e,t){e.quaternion&&I.getEuler(t.transform.localRotation,t.transform.localRotQuat,!0,"ZYX"),e.transform&&(t.transform.localPosition=t.transform.localPosition,t.transform.localRotation=t.transform.localRotation,t.transform.localScale=t.transform.localScale);let r=t;e.materialColor&&r.notifyMaterialColorChange(0,"baseColor")}}class cm{clipName;data;time}class ya extends qe{static SEEK="SEEK";static COMPLETE="COMPLETE";animation;frame;constructor(e,t){super(t),this.animation=e}}class yn extends Pe{_animator;_clips=[];defaultClip;autoPlay;_seekEvent;_completeEvent;_keyFrameList;constructor(){super(),this._seekEvent=new ya(this,ya.SEEK),this._completeEvent=new ya(this,ya.COMPLETE),this._keyFrameList={}}registerEventKeyFrame(e){let t=this._keyFrameList[e.clipName];t==null&&(this._keyFrameList[e.clipName]=t=[]),t.push(e)}init(){this._animator=new ki(this)}onUpdate(){this.enable&&this._animator.update(be.time,be.delta)}appendClip(e){this._clips.push(e),this.play(e.name)}statusCall(e,t,r){if(e==ki.Complete)this.eventDispatcher.dispatchEvent(this._completeEvent);else if(e==ki.Seek&&t!=r){let i=this._keyFrameList[this.currentClip.name];if(i)for(let a of i)a.time>t&&a.time<=r&&(this._seekEvent.data=this._seekEvent.frame=a,this.eventDispatcher.dispatchEvent(this._seekEvent))}}set speed(e){this._animator.speed=e}get speed(){return this._animator.speed}stop(){this._animator.stop()}toggle(){this._animator.toggle()}getClip(e){let t;for(let r of this._clips)if(r.name==e){t=r;break}return t}get currentClip(){return this._animator.currentClip}get time(){return this._animator.time}seek(e){this._animator.seek(e)}play(e,t=!0){let r=this.getClip(e);return r?(this._animator.play(r,t),r):null}start(){this.autoPlay&&this.play(this.defaultClip)}copyComponent(e){this.autoPlay=e.autoPlay,this.defaultClip=e.defaultClip;let t=e._clips;for(let r=0,i=t.length;r<i;r++)this.appendClip(t[r]);return this}cloneTo(e){e.addComponent(yn).copyComponent(this)}}var fm=Object.getOwnPropertyDescriptor,dm=(s,e,t,r)=>{for(var i=r>1?void 0:r?fm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let oi=class extends j{skinJointsName;mInverseBindMatrixData;mInverseBindMatrixBuffer;mSkeletonAnimation;mJointIndexTableBuffer;constructor(){super(),this.addRendererMask(Be.SkinnedMesh)}get geometry(){return this._geometry}set geometry(s){this.skinJointsName=s.skinNames;let e=[];for(let t=0;t<s.bindPose.length;t++)e.push(new Float32Array(s.bindPose[t].rawData.slice(0,16)));this.skinInverseBindMatrices=e,super.geometry=s}start(){if(super.start(),this.skeletonAnimation=this.object3D.getComponent(Nr),!this.skeletonAnimation){let s=this.object3D.parentObject.parentObject.getComponentsInChild(Nr);s.length>0&&(this.skeletonAnimation=s[0]);let e=this.object3D;for(;!this.skeletonAnimation&&e;)this.skeletonAnimation=e.getComponentFromParent(Nr),e.parent&&(e=e.parent.object3D)}}get blendShape(){return this.morphData}onEnable(){super.onEnable()}get skeletonAnimation(){return this.mSkeletonAnimation}set skeletonAnimation(s){if(this.mSkeletonAnimation=s,!!s&&!this.mJointIndexTableBuffer){let e=this.mSkeletonAnimation.getJointIndexTable(this.skinJointsName);this.mJointIndexTableBuffer=new ve(e.length,0,new Float32Array(e)),this.mJointIndexTableBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.COMPUTE}}get skinInverseBindMatrices(){return this.mInverseBindMatrixData}set skinInverseBindMatrices(s){this.mInverseBindMatrixData=s;var e=new Float32Array(s.length*16);for(let t=0;t<s.length;t++){let r=t*16,i=s[t];e.set(i,r)}this.mInverseBindMatrixBuffer=new ve(e.byteLength,0,e),this.mInverseBindMatrixBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.COMPUTE}get inverseBindMatrixBuffer(){return this.mInverseBindMatrixBuffer}get jointIndexTableBuffer(){return this.mJointIndexTableBuffer.buffer}cloneTo(s){let e=s.addComponent(oi),t=[];for(const r of this.materials)t.push(r.clone());e.materials=t,e.geometry=this.geometry,e.castShadow=this.castShadow,e.castGI=this.castGI,e.receiveShadow=this.receiveShadow,e.rendererMask=this.rendererMask,e.skinJointsName=this.skinJointsName,e.skinInverseBindMatrices=this.skinInverseBindMatrices,e.mJointIndexTableBuffer=this.mJointIndexTableBuffer}nodeUpdate(s,e,t,r){for(let i=0;i<this.materials.length;i++){let o=this.materials[i].getPass(e);if(o)for(let n=0;n<o.length;n++){const l=o[n];!l.pipeline&&this.mSkeletonAnimation&&(l.setStorageBuffer("jointsMatrixIndexTable",this.mSkeletonAnimation.jointMatrixIndexTableBuffer),l.setStorageBuffer("jointsInverseMatrix",this.mInverseBindMatrixBuffer),l.setStorageBuffer("jointsIndexMapingTable",this.mJointIndexTableBuffer))}}super.nodeUpdate(s,e,t,r)}};oi=dm([Wt(oi,"SkinnedMeshRenderer2")],oi);class gm extends Pe{_targetRenderers={};_vec3=new d;_matrix4=new I;_quaternion=new Z;init(e){let t=this.fetchMorphRenderers(this.object3D,oi),r=this.fetchMorphRenderers(this.object3D,j);t.push(...r);for(const i of t){Gt.hasMask(i.rendererMask,Be.MorphTarget)&&i.selfCloneMaterials("MORPH_TARGET_UUID");for(const o in i.geometry.morphTargetDictionary){let n=this._targetRenderers[o]||[];n.push(i),this._targetRenderers[o]=n}}}getMorphRenderersByKey(e){return this._targetRenderers[e]}cloneMorphRenderers(){let e={};for(let t in this._targetRenderers)e[t]=this._targetRenderers[t];return e}applyBlendShape(e,t,r=1){if(!e){console.warn("blendShape is null");return}this._vec3.setFromArray(e.transform.transform[3]),this._vec3.multiplyScalar(r),this.object3D.transform.localPosition=this._vec3,this._vec3.setFromArray(e.transform.transform[2]),this._matrix4.copyColFrom(2,this._vec3),this._vec3.setFromArray(e.transform.transform[1]),this._matrix4.copyColFrom(1,this._vec3),this._vec3.setFromArray(e.transform.transform[0]),this._matrix4.copyColFrom(0,this._vec3),this._matrix4.transpose(),this._quaternion.fromMatrix(this._matrix4),this.object3D.localQuaternion=this._quaternion;for(let i in t){let a=this._targetRenderers[i],o=t[i],n=e.texture[o];this.applyMorphTargetInfluence(i,n,a)}}applyMorphTargetInfluence(e,t,r){for(let i of r)i.setMorphInfluence(e,t)}fetchMorphRenderers(e,t){let r=e.getComponentsInChild(t),i=[];for(let a of r)a.hasMask(Be.MorphTarget)&&i.push(a);return i}}class pm{texture;transform}var Af=(s=>(s.mouthRollLower="mouthRollLower",s.browOuterUp_L="browOuterUpLeft",s.mouthSmile_L="mouthSmileLeft",s.jawRight="jawRight",s.eyeLookOut_L="eyeLookOutLeft",s.mouthFunnel="mouthFunnel",s.mouthUpperUp_R="mouthUpperUpRight",s.browDown_L="browDownLeft",s.jawLeft="jawLeft",s.mouthLowerDown_L="mouthLowerDownLeft",s.noseSneer_R="noseSneerRight",s.jawForward="jawForward",s.mouthLowerDown_R="mouthLowerDownRight",s.browInnerUp="browInnerUp",s.mouthRollUpper="mouthRollUpper",s.mouthStretch_R="mouthStretchRight",s.mouthPucker="mouthPucker",s.eyeBlink_L="eyeBlinkLeft",s.mouthUpperUp_L="mouthUpperUpLeft",s.mouthShrugUpper="mouthShrugUpper",s.eyeLookIn_R="eyeLookInRight",s.noseSneer_L="noseSneerLeft",s.mouthFrown_L="mouthFrownLeft",s.cheekSquint_L="cheekSquintLeft",s.eyeLookDown_L="eyeLookDownLeft",s.mouthDimple_L="mouthDimpleLeft",s.mouthFrown_R="mouthFrownRight",s.eyeLookIn_L="eyeLookInLeft",s.eyeLookOut_R="eyeLookOutRight",s.mouthLeft="mouthLeft",s.mouthStretch_L="mouthStretchLeft",s.mouthPress_L="mouthPressLeft",s.mouthDimple_R="mouthDimpleRight",s.eyeWide_R="eyeWideRight",s.browDown_R="browDownRight",s.eyeLookUp_R="eyeLookUpRight",s.eyeBlink_R="eyeBlinkRight",s.cheekSquint_R="cheekSquintRight",s.mouthRight="mouthDimpleRight",s.eyeLookDown_R="eyeLookDownRight",s.eyeLookUp_L="eyeLookUpLeft",s.eyeSquint_L="eyeSquintLeft",s.jawOpen="jawOpen",s.browOuterUp_R="browOuterUpRight",s.mouthClose="mouthClose",s.mouthShrugLower="mouthShrugLower",s.eyeWide_L="eyeWideLeft",s.tongueOut="tongueOut",s.eyeSquint_R="eyeSquintRight",s.cheekPuff="cheekPuff",s.mouthPress_R="mouthPressRight",s.mouthSmile_R="mouthSmileRight",s))(Af||{});class mm{joints;constructor(e=[]){this.joints=e}get numJoint(){return this.joints.length}addJoint(e){e.index=this.joints.push(e)-1}getJointName(e){return this.joints[e].name}getJointParentIndex(e){let t=this.joints[e];return t.parent?t.parent.index:-1}getJointByName(e){for(let t of this.joints)if(t.name==e)return t;return null}}class Am{_computePipeline;_computeBindGroup;constructor(e,t){let r=R.device;this._computePipeline=r.createComputePipeline({layout:"auto",compute:{module:r.createShaderModule({code:e}),entryPoint:"CsMain"}}),this._computeBindGroup=r.createBindGroup({layout:this._computePipeline.getBindGroupLayout(0),entries:t})}compute(e,t,r,i){let a=e.beginComputePass();return a.setPipeline(this._computePipeline),a.setBindGroup(0,this._computeBindGroup),a.dispatchWorkgroups(t,r,i),a.end(),this}}class Um extends Xr{numJoint;numState;time;weight;argumentsData;_isDirty=!1;_argumentsBuffer;_argumentsBufferEntries;constructor(){super(),this.allocationMemorySet([{name:"numJoint",data:[0]},{name:"numState",data:[0]},{name:"retain1",data:[0]},{name:"retain2",data:[0]},{name:"time",data:[0,0]},{name:"weight",data:[0,0]}]),this.generateGPUBuffer()}getGPUBuffer(){return this._argumentsBuffer}getGPUBindGroupEntry(){return this._argumentsBufferEntries}updateGPUBuffer(){return this._isDirty&&(this._isDirty=!1,R.device.queue.writeBuffer(this._argumentsBuffer,0,this.shareDataBuffer)),this}allocationMemorySet(e){this.argumentsData={};let t=0;for(let r=0;r<e.length;r++){const i=e[r];t+=i.data.length}this.allocation(t*4);for(let r=0;r<e.length;r++){const i=e[r],a=i.name;this.argumentsData[a]=this.allocation_node(i.data.length*4)}}generateGPUBuffer(){let e=R.device;this._argumentsBuffer=e.createBuffer({size:this.shareDataBuffer.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!1}),this._argumentsBufferEntries={binding:0,resource:{buffer:this._argumentsBuffer,offset:0,size:this.shareDataBuffer.byteLength}}}}class xm extends Xr{numJoint;numFrame;retain0;retain1;argumentsData;_isDirty=!1;_argumentsBuffer;_argumentsBufferEntries;constructor(){super(),this.allocationMemorySet([{name:"numJoint",data:[0]},{name:"numFrame",data:[0]},{name:"retain0",data:[0]},{name:"retain1",data:[0]}]),this.generateGPUBuffer()}getGPUBuffer(){return this._argumentsBuffer}getGPUBindGroupEntry(){return this._argumentsBufferEntries}updateGPUBuffer(){this._isDirty&&(this._isDirty=!1,R.device.queue.writeBuffer(this._argumentsBuffer,0,this.shareDataBuffer))}allocationMemorySet(e){this.argumentsData={};let t=0;for(let i=0;i<e.length;i++){const a=e[i];t+=a.data.length}this.allocation(t*4);let r=this;for(let i=0;i<e.length;i++){const a=e[i],o=a.name;this.argumentsData[o]=this.allocation_node(a.data.length*4),r[o]=this.argumentsData[o]}}generateGPUBuffer(){let e=R.device;this._argumentsBuffer=e.createBuffer({size:this.shareDataBuffer.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!1}),this._argumentsBufferEntries={binding:0,resource:{buffer:this._argumentsBuffer,offset:0,size:this.shareDataBuffer.byteLength}}}}class Bm{_autoUpdate=!0;_target;_lookAtObject;_origin=new d(0,0,0);_speed=300;constructor(e=null,t=null){this._target=e,this._lookAtObject=t}get target(){return this._target}set target(e){this._target!=e&&(this._target=e)}get lookAtObject(){return this._lookAtObject}set lookAtObject(e){this._lookAtObject!=e&&(this._lookAtObject=e)}get speed(){return this._speed}set speed(e){this._speed=e}update(){}}class vm extends Pe{focus;distance=5;_camera;constructor(){super()}start(){if(this._camera=this.object3D.getOrAddComponent(Zi),!this._camera){console.error("FirstPersonCameraController need camera");return}if(!this.focus){console.error("FirstPersonCameraController need target");return}m.inputSystem.addEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.addEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.mouseDown,this)}mouseDown(e){m.inputSystem.addEventListener(k.POINTER_MOVE,this.mouseMove,this)}mouseUp(e){m.inputSystem.removeEventListener(k.POINTER_MOVE,this.mouseMove,this)}mouseMove(e){let t=this.transform.localRotation;t.y+=e.movementX*.01,t.x+=e.movementY*.01,this.transform.localRotation=t}mouseWheel(e){this.distance+=m.inputSystem.wheelDelta*.1}onUpdate(){let e=new d;this._camera.transform.forward.scaleToRef(this.distance,e);var t=this.focus.transform.worldPosition;this._camera.transform.localPosition=t}destroy(e){m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.mouseDown,this),super.destroy(e)}}var ke=(s=>(s[s.Key_BackSpace=8]="Key_BackSpace",s[s.Key_Tab=9]="Key_Tab",s[s.Key_Clear=12]="Key_Clear",s[s.Key_Enter=13]="Key_Enter",s[s.Key_Shift_L=16]="Key_Shift_L",s[s.Key_Control_L=17]="Key_Control_L",s[s.Key_Alt_L=18]="Key_Alt_L",s[s.Key_Pause=19]="Key_Pause",s[s.Key_CapsLock=20]="Key_CapsLock",s[s.Key_Escape=21]="Key_Escape",s[s.Key_Esc=27]="Key_Esc",s[s.Key_Space=32]="Key_Space",s[s.Key_Prior=33]="Key_Prior",s[s.Key_Next=34]="Key_Next",s[s.Key_End=35]="Key_End",s[s.Key_Home=36]="Key_Home",s[s.Key_Left=37]="Key_Left",s[s.Key_Up=38]="Key_Up",s[s.Key_Right=39]="Key_Right",s[s.Key_Down=40]="Key_Down",s[s.Key_Select=41]="Key_Select",s[s.Key_Print=42]="Key_Print",s[s.Key_Execute=43]="Key_Execute",s[s.Key_Insert=45]="Key_Insert",s[s.Key_Delete=46]="Key_Delete",s[s.Key_Help=47]="Key_Help",s[s.Key_0=48]="Key_0",s[s.Key_1=49]="Key_1",s[s.Key_2=50]="Key_2",s[s.Key_3=51]="Key_3",s[s.Key_4=52]="Key_4",s[s.Key_5=53]="Key_5",s[s.Key_6=54]="Key_6",s[s.Key_7=55]="Key_7",s[s.Key_8=56]="Key_8",s[s.Key_9=57]="Key_9",s[s.Key_A=65]="Key_A",s[s.Key_B=66]="Key_B",s[s.Key_C=67]="Key_C",s[s.Key_D=68]="Key_D",s[s.Key_E=69]="Key_E",s[s.Key_F=70]="Key_F",s[s.Key_G=71]="Key_G",s[s.Key_H=72]="Key_H",s[s.Key_I=73]="Key_I",s[s.Key_J=74]="Key_J",s[s.Key_K=75]="Key_K",s[s.Key_L=76]="Key_L",s[s.Key_M=77]="Key_M",s[s.Key_N=78]="Key_N",s[s.Key_O=79]="Key_O",s[s.Key_P=80]="Key_P",s[s.Key_Q=81]="Key_Q",s[s.Key_R=82]="Key_R",s[s.Key_S=83]="Key_S",s[s.Key_T=84]="Key_T",s[s.Key_U=85]="Key_U",s[s.Key_V=86]="Key_V",s[s.Key_W=87]="Key_W",s[s.Key_X=88]="Key_X",s[s.Key_Y=89]="Key_Y",s[s.Key_Z=90]="Key_Z",s[s.Key_KP_0=96]="Key_KP_0",s[s.Key_KP_1=97]="Key_KP_1",s[s.Key_KP_2=98]="Key_KP_2",s[s.Key_KP_3=99]="Key_KP_3",s[s.Key_KP_4=100]="Key_KP_4",s[s.Key_KP_5=101]="Key_KP_5",s[s.Key_KP_6=102]="Key_KP_6",s[s.Key_KP_7=103]="Key_KP_7",s[s.Key_KP_8=104]="Key_KP_8",s[s.Key_KP_9=105]="Key_KP_9",s[s.Key_Multiply=106]="Key_Multiply",s[s.Key_Add=107]="Key_Add",s[s.Key_Separator=108]="Key_Separator",s[s.Key_Subtract=109]="Key_Subtract",s[s.Key_Decimal=110]="Key_Decimal",s[s.Key_Divide=111]="Key_Divide",s[s.Key_F1=112]="Key_F1",s[s.Key_F2=113]="Key_F2",s[s.Key_F3=114]="Key_F3",s[s.Key_F4=115]="Key_F4",s[s.Key_F5=116]="Key_F5",s[s.Key_F6=117]="Key_F6",s[s.Key_F7=118]="Key_F7",s[s.Key_F8=119]="Key_F8",s[s.Key_F9=120]="Key_F9",s[s.Key_F10=121]="Key_F10",s[s.Key_F11=122]="Key_F11",s[s.Key_F12=123]="Key_F12",s[s.Key_F13=124]="Key_F13",s[s.Key_F14=125]="Key_F14",s[s.Key_F15=126]="Key_F15",s[s.Key_F16=127]="Key_F16",s[s.Key_F17=128]="Key_F17",s[s.Key_F18=129]="Key_F18",s[s.Key_F19=130]="Key_F19",s[s.Key_F20=131]="Key_F20",s[s.Key_F21=132]="Key_F21",s[s.Key_F22=133]="Key_F22",s[s.Key_F23=134]="Key_F23",s[s.Key_F24=135]="Key_F24",s[s.Key_Num_Lock=136]="Key_Num_Lock",s[s.Key_Scroll_Lock=137]="Key_Scroll_Lock",s))(ke||{});class Cm extends Pe{moveSpeed=2;targetPos=new d(0,0,10);lookAtPos=new d(0,0,0);config={shiftMoveScale:20};_moveScale=1;_dir;_mouseFactory=25;_factory=1.5;_mouseDown=!1;_lastPos;_keyState;constructor(){super(),this._lastPos=new d,this._keyState={front:!1,back:!1,left:!1,right:!1,q:!1,e:!1},this.setCamera(new d(0,0,100),new d(0,0,0))}setCamera(e,t){this.targetPos.copyFrom(e),this.lookAtPos.copyFrom(t),this.Reset()}start(){m.inputSystem.addEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.addEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.mouseDown,this),m.inputSystem.addEventListener(Sr.KEY_UP,this.keyUp,this),m.inputSystem.addEventListener(Sr.KEY_DOWN,this.keyDown,this),this.transform.lookAt(this.targetPos,this.lookAtPos)}mouseWheel(e){}keyUp(e){switch(e.keyCode){case ke.Key_W:this._keyState.front=!1;break;case ke.Key_S:this._keyState.back=!1;break;case ke.Key_A:this._keyState.left=!1;break;case ke.Key_D:this._keyState.right=!1;break;case ke.Key_Shift_L:this._moveScale=1;break;case ke.Key_Q:this._keyState.q=!1;break;case ke.Key_E:this._keyState.e=!1;break;case ke.Key_F:this.transform.lookAt(this.targetPos,this.lookAtPos);break}}keyDown(e){switch(e.keyCode){case ke.Key_W:this._keyState.front=!0;break;case ke.Key_S:this._keyState.back=!0;break;case ke.Key_A:this._keyState.left=!0;break;case ke.Key_D:this._keyState.right=!0;break;case ke.Key_Q:this._keyState.q=!0;break;case ke.Key_E:this._keyState.e=!0;break;case ke.Key_Shift_L:this._moveScale=this.config.shiftMoveScale}}Reset(){this._lastPos.x=m.inputSystem.mouseLastX,this._lastPos.y=m.inputSystem.mouseLastY}mouseDown(e){this.Reset(),this._mouseDown=!0}mouseUp(e){this.Reset(),this._mouseDown=!1}get factory(){return this._factory}set factory(e){this._factory=e}get mouseFactory(){return this._mouseFactory}set mouseFactory(e){this._mouseFactory=e}internal(e,t,r){return(t-e)*r}onUpdate(){let e=this.transform,t=ie(be.delta,0,.016);if(this._mouseDown&&(e.rotationY-=this.internal(e.rotationY+(m.inputSystem.mouseLastX-this._lastPos.x)*.25,e.rotationY,t*this._mouseFactory),e.rotationX-=this.internal(e.rotationX+(m.inputSystem.mouseLastY-this._lastPos.y)*.25,e.rotationX,t*this._mouseFactory),this.Reset()),this._keyState.front){let r=e.forward;e.x-=this.internal(e.x+r.x*this.moveSpeed*this._moveScale,e.x,t*this._factory),e.y-=this.internal(e.y+r.y*this.moveSpeed*this._moveScale,e.y,t*this._factory),e.z-=this.internal(e.z+r.z*this.moveSpeed*this._moveScale,e.z,t*this._factory)}if(this._keyState.back){let r=e.forward;e.x+=this.internal(e.x+r.x*this.moveSpeed*this._moveScale,e.x,t*this._factory),e.y+=this.internal(e.y+r.y*this.moveSpeed*this._moveScale,e.y,t*this._factory),e.z+=this.internal(e.z+r.z*this.moveSpeed*this._moveScale,e.z,t*this._factory)}if(this._keyState.left){let r=e.left;e.x+=this.internal(e.x+r.x*this.moveSpeed*this._moveScale,e.x,t*this._factory),e.y+=this.internal(e.y+r.y*this.moveSpeed*this._moveScale,e.y,t*this._factory),e.z+=this.internal(e.z+r.z*this.moveSpeed*this._moveScale,e.z,t*this._factory)}if(this._keyState.right){let r=e.left;e.x-=this.internal(e.x+r.x*this.moveSpeed*this._moveScale,e.x,t*this._factory),e.y-=this.internal(e.y+r.y*this.moveSpeed*this._moveScale,e.y,t*this._factory),e.z-=this.internal(e.z+r.z*this.moveSpeed*this._moveScale,e.z,t*this._factory)}this._keyState.q&&(e.y=bi(e.y,e.y-this.moveSpeed*this._moveScale,t*this._factory)),this._keyState.e&&(e.y=bi(e.y,e.y+this.moveSpeed*this._moveScale,t*this._factory))}destroy(e){m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.mouseDown,this),m.inputSystem.removeEventListener(Sr.KEY_UP,this.keyUp,this),m.inputSystem.removeEventListener(Sr.KEY_DOWN,this.keyDown,this),super.destroy(e)}}class ba{static add(e,t,r){return r||(r=new d),r.x=e.x+t.x,r.y=e.y+t.y,r.z=e.z+t.z,r}static sub(e,t,r){return r||(r=new d),r.x=e.x-t.x,r.y=e.y-t.y,r.z=e.z-t.z,r}static mul(e,t,r){return r||(r=new d),r.x=e.x*t.x,r.y=e.y*t.y,r.z=e.z*t.z,r}static mulScale(e,t,r){return r||(r=new d),r.x=e.x*t,r.y=e.y*t,r.z=e.z*t,r}static div(e,t,r){return r||(r=new d),r.x=e.x/t.x,r.y=e.y/t.y,r.z=e.z/t.z,r}static normalize(e){return e.clone().normalize()}static dot(e,t){let r=d.HELP_0;return r.copyFrom(e),r.dotProduct(t)}static calculateVectorAngle_xz(e,t){return Math.acos((e.x*t.x+e.y*t.y)/Math.sqrt((e.x*e.x+e.y*e.y)*(t.x*t.x+t.y*t.y)))}static distance(e,t){return d.distance(e,t)}static getRandomXYZ(e=-100,t=100){return new d(Math.random()*(t-e)+e,Math.random()*(t-e)+e,Math.random()*(t-e)+e)}static getRandomV3(e=-100,t=100,r,i){return new d(Math.random()*t+e,Math.random()*i+r,Math.random()*t+e)}static sphere(e){let t=e*Math.random(),r=new d(Math.random()*1-.5,Math.random()*1-.5,Math.random()*1-.5);return r.normalize(),r.scaleBy(t),r}static sphereXYZ(e,t,r=1,i=1,a=1){let o=e+(t-e)*Math.random(),n=new d(Math.random()*r-r*.5,Math.random()*i-i*.5,Math.random()*a-a*.5);return n.normalize(),n.scaleBy(o),n}}class Sm extends Pe{camera;minDistance=.1;maxDistance=500;rollSmooth=15;dragSmooth=20;wheelSmooth=10;wheelStep=.002;mouseRightFactor=.25;mouseLeftFactor=20;smooth=!0;_wheelStep=.002;_distance=0;distance=10;_roll=0;roll=0;_pitch=0;pitch=0;_currentPos;_targetPos;_flowTarget;_flowOffset;_mouseLeftDown=!1;_mouseRightDown=!1;_bottomClamp=89.99;_topClamp=-89.99;get bottomClamp(){return this._bottomClamp}set bottomClamp(e){this._bottomClamp=e>89.99?89.99:e}get topClamp(){return this._topClamp}set topClamp(e){this._topClamp=e<-89.99?-89.99:e}_tempDir=new d;_tempPos=new d;constructor(){super(),this._currentPos=new q,this._targetPos=new q}start(){this.camera=this.object3D.getOrAddComponent(Zi),m.inputSystem.addEventListener(k.POINTER_DOWN,this.onMouseDown,this),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onMouseMove,this,null,10),m.inputSystem.addEventListener(k.POINTER_UP,this.onMouseUp,this,null,10),m.inputSystem.addEventListener(k.POINTER_WHEEL,this.onMouseWheel,this)}flowTarget(e,t=d.ZERO){this._flowTarget=e,this._flowOffset||=new d,this._flowOffset.copyFrom(t)}getFlowTarget(){return this._flowTarget}setCamera(e,t,r,i){this.roll=e,this.pitch=t,this.distance=r,this.maxDistance<r*1.5&&(this.maxDistance=r*1.5),i&&this._targetPos.transform.localPosition.copy(i)}focusByBounds(e){let t=So.genMeshBounds(e);this.focusBound(t)}focusBound(e){this.target=e.center}set target(e){this._targetPos.transform.localPosition.copy(e)}get target(){return this._targetPos.transform.localPosition}onMouseWheel(e){this.enable&&(this._wheelStep=this.wheelStep*ba.distance(this._currentPos.transform.worldPosition,this.camera.transform.worldPosition)/10,this.distance-=m.inputSystem.wheelDelta*this._wheelStep,this.distance=ie(this.distance,this.minDistance,this.maxDistance))}onMouseDown(e){if(this.enable)switch(e.mouseCode){case 0:this._mouseLeftDown=!0;break;case 1:break;case 2:this._mouseRightDown=!0;break}}onMouseUp(e){this._mouseLeftDown=!1,this._mouseRightDown=!1}onMouseMove(e){this.enable&&(this._mouseRightDown&&(d.HELP_1.x=-1*e.movementX*Math.cos(this._roll*Math.PI/180)-e.movementY*Math.sin(this._roll*Math.PI/180),d.HELP_1.z=-1*e.movementY*Math.cos(this._roll*Math.PI/180)+e.movementX*Math.sin(this._roll*Math.PI/180),this._targetPos.x+=d.HELP_1.x*this.mouseRightFactor,this._targetPos.z+=d.HELP_1.z*this.mouseRightFactor),this._mouseLeftDown&&(this.roll-=e.movementX*be.delta*.001*this.mouseLeftFactor,this.pitch-=e.movementY*be.delta*.001*this.mouseLeftFactor,this.pitch=ie(this.pitch,this._topClamp,this._bottomClamp)))}onBeforeUpdate(e){if(!this.enable)return;this._flowTarget&&(d.HELP_0.copyFrom(this._flowTarget.transform.worldPosition),d.HELP_0.add(this._flowOffset,d.HELP_0),this.target=d.HELP_0);let t=ie(be.delta,0,.016);this.smooth?(this._currentPos.x+=(this._targetPos.x-this._currentPos.x)*t*this.dragSmooth,this._currentPos.y+=(this._targetPos.y-this._currentPos.y)*t*this.dragSmooth,this._currentPos.z+=(this._targetPos.z-this._currentPos.z)*t*this.dragSmooth,this._distance+=(this.distance-this._distance)*t*this.wheelSmooth,this._roll+=(this.roll-this._roll)*t*this.rollSmooth,this._pitch+=(this.pitch-this._pitch)*t*this.rollSmooth):(this._currentPos.x=this._targetPos.x,this._currentPos.y=this._targetPos.y,this._currentPos.z=this._targetPos.z,this._distance=this.distance,this._roll=this.roll,this._pitch=this.pitch),this._tempDir.set(0,0,1);let r=Z.HELP_0;r.fromEulerAngles(this._pitch,this._roll,0),this._tempDir.applyQuaternion(r),this._tempPos=ba.mulScale(this._tempDir,this._distance,this._tempPos),this._tempPos.add(this._currentPos.transform.localPosition,this._tempPos),this.camera.lookAt(this._tempPos,this._currentPos.transform.localPosition,d.UP)}destroy(e){m.inputSystem.removeEventListener(k.POINTER_DOWN,this.onMouseDown,this),m.inputSystem.removeEventListener(k.POINTER_MOVE,this.onMouseMove,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.onMouseUp,this),m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.onMouseWheel,this),super.destroy(e),this.camera=null,this._flowTarget=null}}class _m extends Pe{_camera;autoRotate=!1;autoRotateSpeed=.1;rotateFactor=.5;zoomFactor=.1;panFactor=.25;_smooth=5;_minDistance=1;_maxDistance=1e5;_maxPolarAngle=90;_minPolarAngle=-90;_target=new d(0,0,0);_cTarget=new d(0,0,0);_position=new d(0,0,0);_cPosition=new d(0,0,0);_spherical=new Fm;_isMouseDown=!1;_lastMouseX=-1;_lastMouseY=-1;_isPanning=!1;constructor(){super()}get target(){return this._target}set target(e){this._target=e}get smooth(){return this._smooth}set smooth(e){this._smooth=Math.max(e,1)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance=ie(e,2e-6,this._maxDistance)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance=ie(e,this._minDistance,1/0)}get minPolarAngle(){return this._minPolarAngle}set minPolarAngle(e){this._minPolarAngle=ie(e,-90,this._maxPolarAngle)}get maxPolarAngle(){return this._maxPolarAngle}set maxPolarAngle(e){this._maxPolarAngle=ie(e,this._minPolarAngle,90)}get spherical(){return this._spherical}start(){this._camera=this.object3D.getComponent(Zi),this._position=this.object3D.transform.localPosition.clone(),this._cPosition=this._position.clone(),this._target=this._camera.lookTarget.clone(),this._cTarget=this._target.clone(),this._spherical.setCoords(this._position.x-this._target.x,this._position.y-this._target.y,this._position.z-this._target.z),this._camera.lookAt(this._cPosition,this._cTarget,d.UP),this.addEventListener()}onEnable(){this.addEventListener()}onDisable(){this.removeEventListener()}onUpdate(){let e=this._isPanning?1:this.smooth,t=!1;this._cPosition.equals(this.object3D.transform.localPosition)||(this._position.copyFrom(this.object3D.transform.localPosition),e=1,t=!0),this._cTarget.equals(this._target)||(this._cTarget.copyFrom(this._target),e=1,t=!0),t?this._spherical.setCoords(this._position.x-this._target.x,this._position.y-this._target.y,this._position.z-this._target.z):!this._isMouseDown&&this.autoRotate&&(this._spherical.theta-=this.autoRotateSpeed*Math.PI/180,this.updateCamera());let r=(this._position.x-this._cPosition.x)/e,i=(this._position.y-this._cPosition.y)/e,a=(this._position.z-this._cPosition.z)/e;this._cPosition.x=Math.abs(r)>1e-10?this._cPosition.x+r:this._position.x,this._cPosition.y=Math.abs(i)>1e-10?this._cPosition.y+i:this._position.y,this._cPosition.z=Math.abs(a)>1e-10?this._cPosition.z+a:this._position.z,this._camera.lookAt(this._cPosition,this._cTarget,d.UP)}onWheel(e){e.deltaY=ie(e.deltaY,-this._spherical.radius,this._spherical.radius),this._spherical.radius+=e.deltaY*this.zoomFactor,this._spherical.radius=ie(this._spherical.radius,this.minDistance,this.maxDistance),this.updateCamera()}onPointerDown(e){this._isMouseDown=!0,this._lastMouseX=e.mouseX,this._lastMouseY=e.mouseY,e.mouseCode===2&&(this._isPanning=!0)}onPointerMove(e){if(!this._isMouseDown||!this.enable)return;let t=e.mouseX,r=e.mouseY;if(e.mouseCode===0&&this._lastMouseX>0&&this._lastMouseY>0){const i=-(t-this._lastMouseX)*this.rotateFactor,a=(r-this._lastMouseY)*this.rotateFactor;this._spherical.theta+=i*Math.PI/180,this._spherical.phi-=a*Math.PI/180,this._spherical.phi=ie(this._spherical.phi,this.minPolarAngle,this.maxPolarAngle),this.updateCamera()}else e.mouseCode===2&&(ba.mulScale(this.object3D.transform.up,e.movementY*this.panFactor*this._camera.aspect,d.HELP_1),e.ctrlKey||e.metaKey?this._target.y+=d.HELP_1.y:(this._target.x+=d.HELP_1.x,this._target.z+=d.HELP_1.z),ba.mulScale(this.object3D.transform.right,-e.movementX*this.panFactor,d.HELP_1),this._target.x-=d.HELP_1.x,this._target.z-=d.HELP_1.z,this._cTarget.copyFrom(this._target),this.updateCamera());this._lastMouseX=t,this._lastMouseY=r}onPointerUp(e){this._isMouseDown=!1,e.mouseCode===2&&(this._isPanning=!1)}updateCamera(){this._spherical.makeSafe();let e=this._spherical.getCoords();this._position.set(e.x+this._target.x,e.y+this._target.y,e.z+this._target.z)}addEventListener(){m.inputSystem.addEventListener(k.POINTER_WHEEL,this.onWheel,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.onPointerDown,this),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onPointerMove,this),m.inputSystem.addEventListener(k.POINTER_UP,this.onPointerUp,this)}removeEventListener(){m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.onWheel,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.onPointerDown,this),m.inputSystem.removeEventListener(k.POINTER_MOVE,this.onPointerMove,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.onPointerUp,this)}}const Uf=Math.PI/180/100;class Fm{radius;phi;theta;coords;constructor(e=1,t=0,r=0){return this.radius=e,this.phi=t,this.theta=r,this.coords=new d,this}set(e,t,r){return this.radius=e,this.phi=t,this.theta=r,this}makeSafe(){return this.phi=Math.max(Uf,Math.min(Math.PI-Uf,this.phi)),this}setFromVector3(e){return this.setCoords(e.x,e.y,e.z)}setCoords(e,t,r){return this.radius=Math.sqrt(e*e+t*t+r*r),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(e,r),this.phi=Math.acos(ie(t/this.radius,-1,1))),this}getCoords(){const e=Math.sin(this.phi)*this.radius;return this.coords.x=e*Math.sin(this.theta),this.coords.y=Math.cos(this.phi)*this.radius,this.coords.z=e*Math.cos(this.theta),this.coords}}class ym extends Pe{focus;_rotation=new d(45,0,0);distance=5;_camera;constructor(){super()}start(){if(this._camera=this.object3D.getOrAddComponent(Zi),!this._camera){console.error("ThirdPersonCameraController need camera");return}if(!this.focus){console.error("ThirdPersonCameraController need target");return}m.inputSystem.addEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.addEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.mouseDown,this)}mouseDown(e){m.inputSystem.addEventListener(k.POINTER_MOVE,this.mouseMove,this)}mouseUp(e){m.inputSystem.removeEventListener(k.POINTER_MOVE,this.mouseMove,this)}mouseMove(e){this._rotation.y+=e.movementX*.01,this._rotation.x+=e.movementY*.01}mouseWheel(e){this.distance+=m.inputSystem.wheelDelta*.1}onUpdate(){let e=new d;this._camera.transform.forward.scaleToRef(this.distance,e);var t=this.focus.transform.worldPosition;this._camera.transform.localPosition=t.subtract(e)}destroy(e){m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.mouseDown,this),super.destroy(e)}}var Le=(s=>(s[s.NORMAL=0]="NORMAL",s[s.DOWN=1]="DOWN",s[s.OVER=2]="OVER",s[s.DISABLE=3]="DISABLE",s))(Le||{});let bm=Math.PI,xf=bm*2;class Ti{a;b;c;d;tx;ty;constructor(e=1,t=0,r=0,i=1,a=0,o=0){this.a=e,this.b=t,this.c=r,this.d=i,this.tx=a,this.ty=o}clone(){return new Ti(this.a,this.b,this.c,this.d,this.tx,this.ty)}concat(e){let t=this.a,r=this.c,i=this.tx;this.a=t*e.a+this.b*e.c,this.b=t*e.b+this.b*e.d,this.c=r*e.a+this.d*e.c,this.d=r*e.b+this.d*e.d,this.tx=i*e.a+this.ty*e.c+e.tx,this.ty=i*e.b+this.ty*e.d+e.ty}copyFrom(e){return this.a=e.a,this.b=e.b,this.c=e.c,this.d=e.d,this.tx=e.tx,this.ty=e.ty,this}identity(){return this.a=this.d=1,this.b=this.c=this.tx=this.ty=0,this}invert(){this._invertInto(this)}rotate(e){if(e=+e,e!==0){e=e*it;let t=Math.cos(e),r=Math.sin(e),i=this.a,a=this.b,o=this.c,n=this.d,l=this.tx,h=this.ty;this.a=i*t-a*r,this.b=i*r+a*t,this.c=o*t-n*r,this.d=o*r+n*t,this.tx=l*t-h*r,this.ty=l*r+h*t}}scale(e,t){e!==1&&(this.a*=e,this.c*=e,this.tx*=e),t!==1&&(this.b*=t,this.d*=t,this.ty*=t)}setTo(e,t,r,i,a,o){return this.a=e,this.b=t,this.c=r,this.d=i,this.tx=a,this.ty=o,this}transformPoint(e,t,r){let i=this.a*e+this.c*t+this.tx,a=this.b*e+this.d*t+this.ty;return r?(r.setTo(i,a,0,1),r):new d(i,a,0,1)}setTranslate(e,t){this.tx=e,this.ty=t}translate(e,t){this.tx+=e,this.ty+=t}mul(e){let t=this,r=e,i=t.a,a=t.b,o=t.c,n=t.d,l=t.tx,h=t.ty,u=r.a,c=r.b,f=r.c,g=r.d,p=r.tx,A=r.ty;c!==0||f!==0?(this.a=i*u+a*f,this.b=i*c+a*g,this.c=o*u+n*f,this.d=o*c+n*g,this.tx=u*l+f*h+p,this.ty=c*l+g*h+A):(this.a=i*u,this.b=a*g,this.c=o*u,this.d=n*g,this.tx=u*l+p,this.ty=g*h+A)}equals(e){return this.a==e.a&&this.b==e.b&&this.c==e.c&&this.d==e.d&&this.tx==e.tx&&this.ty==e.ty}prepend(e,t,r,i,a,o){let n=this.tx;if(e!=1||t!=0||r!=0||i!=1){let l=this.a,h=this.c;this.a=l*e+this.b*r,this.b=l*t+this.b*i,this.c=h*e+this.d*r,this.d=h*t+this.d*i}return this.tx=n*e+this.ty*r+a,this.ty=n*t+this.ty*i+o,this}append(e){let t=this.a,r=this.b,i=this.c,a=this.d;return(e.a!=1||e.b!=0||e.c!=0||e.d!=1)&&(this.a=e.a*t+e.b*i,this.b=e.a*r+e.b*a,this.c=e.c*t+e.d*i,this.d=e.c*r+e.d*a),this.tx=e.tx*t+e.ty*i+this.tx,this.ty=e.tx*r+e.ty*a+this.ty,this}deltaTransformPoint(e){let t=this,r=t.a*e.x+t.c*e.y,i=t.b*e.x+t.d*e.y;return new d(r,i)}toString(){return"(a="+this.a+", b="+this.b+", c="+this.c+", d="+this.d+", tx="+this.tx+", ty="+this.ty+")"}createBox(e,t,r=0,i=0,a=0){let o=this;if(r!==0){r=r*it;let n=Math.cos(r),l=Math.sin(r);o.a=n*e,o.b=l*t,o.c=-l*e,o.d=n*t}else o.a=e,o.b=0,o.c=0,o.d=t;o.tx=i,o.ty=a}createGradientBox(e,t,r=0,i=0,a=0){this.createBox(e/1638.4,t/1638.4,r,i+e/2,a+t/2)}_invertInto(e){let t=this.a,r=this.b,i=this.c,a=this.d,o=this.tx,n=this.ty;if(r==0&&i==0){e.b=e.c=0,t==0||a==0?e.a=e.d=e.tx=e.ty=0:(t=e.a=1/t,a=e.d=1/a,e.tx=-t*o,e.ty=-a*n);return}let l=t*a-r*i;if(l==0){e.identity();return}l=1/l;let h=e.a=a*l;r=e.b=-r*l,i=e.c=-i*l,a=e.d=t*l,e.tx=-(h*o+i*n),e.ty=-(r*o+a*n)}getScaleX(){let e=this;if(e.a==1&&e.b==0)return 1;let t=Math.sqrt(e.a*e.a+e.b*e.b);return this.getDeterminant()<0?-t:t}getScaleY(){let e=this;if(e.c==0&&e.d==1)return 1;let t=Math.sqrt(e.c*e.c+e.d*e.d);return this.getDeterminant()<0?-t:t}getSkewX(){return Math.atan2(this.d,this.c)-Math.PI/2}getSkewY(){return Math.atan2(this.b,this.a)}updateScaleAndRotation(e,t,r,i){if((r==0||r==xf)&&(i==0||i==xf)){this.a=e,this.b=this.c=0,this.d=t;return}r=r*it,i=i*it;let a=Math.cos(r),o=Math.sin(r);r==i?(this.a=a*e,this.b=o*e):(this.a=Math.cos(i)*e,this.b=Math.sin(i)*e),this.c=-o*t,this.d=a*t}preMultiplyInto(e,t){let r=e.a*this.a,i=0,a=0,o=e.d*this.d,n=e.tx*this.a+this.tx,l=e.ty*this.d+this.ty;(e.b!==0||e.c!==0||this.b!==0||this.c!==0)&&(r+=e.b*this.c,o+=e.c*this.b,i+=e.a*this.b+e.b*this.d,a+=e.c*this.a+e.d*this.c,n+=e.ty*this.c,l+=e.tx*this.b),t.a=r,t.b=i,t.c=a,t.d=o,t.tx=n,t.ty=l}$transformBounds(e){let t=this.a,r=this.b,i=this.c,a=this.d,o=this.tx,n=this.ty,l=e.x,h=e.y,u=l+e.width,c=h+e.height,f=t*l+i*h+o,g=r*l+a*h+n,p=t*u+i*h+o,A=r*u+a*h+n,U=t*u+i*c+o,x=r*u+a*c+n,B=t*l+i*c+o,S=r*l+a*c+n,C=0;f>p&&(C=f,f=p,p=C),U>B&&(C=U,U=B,B=C),e.x=Math.floor(f<U?f:U),e.width=Math.ceil((p>B?p:B)-e.x),g>A&&(C=g,g=A,A=C),x>S&&(C=x,x=S,S=C),e.y=Math.floor(g<x?g:x),e.height=Math.ceil((A>S?A:S)-e.y)}getDeterminant(){return this.a*this.d-this.b*this.c}}class Ja extends Pe{isGUICanvas=!0;index=0;addChild(e){return this.object3D.addChild(e),this}removeChild(e){return this.object3D.removeChild(e),this}cloneTo(e){e.getOrAddComponent(Ja).copyComponent(this)}copyComponent(e){return e.index=e.index,this}}var Je=(s=>(s[s.NONE=0]="NONE",s[s.POSITION=1]="POSITION",s[s.SPRITE=2]="SPRITE",s[s.COLOR=4]="COLOR",s[s.MAX=7]="MAX",s))(Je||{});class dn{array;buffer;constructor(e){this.buffer=new ve(e,0),this.array=new Float32Array(this.buffer.memory.shareDataBuffer)}}class Bf extends Ne{_attributeUV;_attributeVIndex;_faceIndexes;_uvSize=2;_vIndexSize=1;_posAttribute;_spriteAttribute;_colorAttribute;_onPositionChange=!0;_onSpriteChange=!0;_onColorChange=!0;maxQuadCount;constructor(e){super(),this.maxQuadCount=e}updateSubGeometry(e,t,r){let i=this.subGeometries[e];if(i){let a=i.lodLevels[0];a.indexStart=t,a.indexCount=r,a.index=e}else i=this.addSubGeometry({indexStart:t,indexCount:r,vertexStart:0,vertexCount:0,firstStart:0,index:e,topology:0});return i}resetSubGeometries(){for(let e of this.subGeometries){let t=e.lodLevels[0];t.indexStart=0,t.indexCount=0,t.index=0}}updateBounds(e,t){let r=Number.MAX_VALUE*.1;return e=new d(-r,-r,-r),t=new d(r,r,r),this.bounds.setFromMinMax(e,t),this}getPositionBuffer(){return this._onPositionChange&&(this._posAttribute.buffer.apply(),this._onPositionChange=!1),this._posAttribute.buffer}getSpriteBuffer(){return this._onSpriteChange&&(this._spriteAttribute.buffer.apply(),this._onSpriteChange=!1),this._spriteAttribute.buffer}getColorBuffer(){return this._onColorChange&&(this._colorAttribute.buffer.apply(),this._onColorChange=!1),this._colorAttribute.buffer}create(){this.createBuffer(),this.updateBounds();let e=this.maxQuadCount,t=[],r=[];for(let a=0;a<e;a++)t.push(...aa.attUV);for(let a=0,o=this.maxQuadCount*aa.vertexCount;a<o;a++)r[a]=a;this._attributeUV=new Float32Array(aa.vertexCount*e*this._uvSize),this._attributeVIndex=new Float32Array(aa.vertexCount*e*this._vIndexSize),this._attributeUV.set(t,0),this._attributeVIndex.set(r,0);let i=[];for(let a=0;a<e;a++)for(let o=0;o<aa.indecies.length;o++){const n=aa.indecies[o]+a*4;i.push(n)}return this._faceIndexes=new Uint32Array(e*6),this._faceIndexes.set(i,0),this.setIndices(this._faceIndexes),this.setAttribute(V.uv,this._attributeUV),this.setAttribute(V.vIndex,this._attributeVIndex),this.updateSubGeometry(0,0,this._faceIndexes.length),this}createBuffer(){let e=this.maxQuadCount;this._posAttribute=new dn(e*4),this._spriteAttribute=new dn(e*12),this._colorAttribute=new dn(e*4)}fillQuad(e,t){e.dirtyAttributes&Je.POSITION&&this.fillQuadPosition(e,t),e.dirtyAttributes&Je.COLOR&&this.fillQuadColor(e,t),e.dirtyAttributes&Je.SPRITE&&this.fillQuadSprite(e,t)}fillQuadPosition(e,t){vf.setXYZW(this._posAttribute.array,e.z,e.left,e.bottom,e.right,e.top),this._onPositionChange=!0}fillQuadColor(e,t){let r=e.color,i=this._colorAttribute.array;vf.setXYZW(i,e.z,r.r,r.g,r.b,r.a),this._onColorChange=!0}fillQuadSprite(e,t){let r=e.sprite,i=0,a=0;r.isSliced&&e.imageType==ea.Sliced&&(i=r.trimSize.x,i=(t.width-(r.offsetSize.z-r.trimSize.x))/i,a=r.trimSize.y,a=(t.height-(r.offsetSize.w-r.trimSize.y))/a);let o=r.guiTexture.dynamicId,n=r.uvRec,l=r.uvBorder,h=this._spriteAttribute.array,u=12*e.z;h[u+0]=n.x,h[u+1]=n.y,h[u+2]=n.z,h[u+3]=n.w,h[u+4]=l.x,h[u+5]=l.y,h[u+6]=l.z,h[u+7]=l.w,h[u+8]=i,h[u+9]=a,h[u+10]=o,h[u+11]=e.visible?1:0,this._onSpriteChange=!0}}class Qm{static set(e,t,r,i,...a){let o=t*i+r;for(let n=0,l=a.length;n<l;n++)e[o+n]=a[n]}}class vf extends Qm{static setXYZW(e,t,r,i,a,o){this.set(e,t,0,4,r,i,a,o)}static setXYZ(e,t,r,i,a){this.set(e,t,0,4,r,i,a)}static setZ(e,t,r){this.set(e,t,3,4,r)}}class aa{static vertexCount=4;static attUV=[0,0,1,0,1,1,0,1];static indecies=[0,1,2,0,2,3]}class Cf{_textureMap=new Map;_textureList=[];build(e,t,r){let i=t._geometry;i.resetSubGeometries();let a=-1,o=0,n=0,l=0,h=0,u=this._textureList,c=this._textureMap;function f(){l>0&&(t.updateDrawCallSegment(h,n,l),t._uiRenderer.materials[h].setTextures(u),c.clear(),u.length=0,h++,n+=l,l=0,o=0)}c.clear(),u.length=0;let g=[],p=t.quadMaxCount-1;for(let A of e){let U=A.needUpdateQuads;g.length=0;const x=this.collectQuads(A.object3D,g);for(let B of x){let S=B.sprite.guiTexture;if(c.has(S.staticId)||(o==7&&f(),c.set(S.staticId,S),S.dynamicId=o,u[o]=S.texture,o+=1),B.z=++a,l+=6,B.cacheTextureId!=S.dynamicId&&(B.dirtyAttributes=Je.MAX,B.cacheTextureId=S.dynamicId),(U||r)&&(B.dirtyAttributes=Je.MAX),B.dirtyAttributes&Je.POSITION&&B.applyTransform(A),B.dirtyAttributes&&B.writeToGeometry(i,A),a==p)return f(),!0}}return f(),!1}collectQuads(e,t){t||=[];let r=e.components.values();for(let i of r){let a=i;if(a.isUIShadow||!a.mainQuads)continue;let o=a.getShadowRender();o&&this.push(o.mainQuads,t),this.push(a.mainQuads,t)}return t}push(e,t){e&&e.length>0&&t.push(...e)}}class gn{static bindTextureArray(){let e="";for(let t=0;t<7;t++)e+=`
|
|
11208
|
+
`}class sf{sunRadius=500;sunRadiance=11;mieG=.76;mieHeight=1200;eyePos=1500;sunX=.71;sunY=.56;sunBrightness=1;displaySun=!0;defaultTextureCubeSize=512;defaultTexture2DSize=1024;skyColor=new P(1,1,1,1)}class of extends Us{_internalTexture;_cubeSize;setting;constructor(e){return super(),this.setting=e,this._cubeSize=e.defaultTextureCubeSize,this._internalTexture=new $p(e.defaultTexture2DSize,e.defaultTexture2DSize*.5),this._internalTexture.update(this.setting),this.createFromTexture(this._cubeSize,this._internalTexture),this}get texture2D(){return this._internalTexture}apply(){return this._internalTexture.update(this.setting),this._faceData.uploadErpTexture(this._internalTexture),this}}class $p extends Ae{_computeShader;_uniformBuffer;constructor(e,t){super(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),this.initCompute(e,t)}initCompute(e,t){this._uniformBuffer=new ht(64),this._uniformBuffer.apply(),this._computeShader=new ue(af.cs),this._computeShader.setUniformBuffer("uniformBuffer",this._uniformBuffer),this._computeShader.setStorageTexture("outTexture",this),this._computeShader.workerSizeX=e/8,this._computeShader.workerSizeY=t/8}update(e){this._uniformBuffer.setFloat("width",this.width),this._uniformBuffer.setFloat("height",this.height),this._uniformBuffer.setFloat("sunU",e.sunX),this._uniformBuffer.setFloat("sunV",e.sunY),this._uniformBuffer.setFloat("eyePos",e.eyePos),this._uniformBuffer.setFloat("sunRadius",e.sunRadius),this._uniformBuffer.setFloat("sunRadiance",e.sunRadiance),this._uniformBuffer.setFloat("mieG",e.mieG),this._uniformBuffer.setFloat("mieHeight",e.mieHeight),this._uniformBuffer.setFloat("sunBrightness",e.sunBrightness),this._uniformBuffer.setFloat("displaySun",e.displaySun?1:0),this._uniformBuffer.setColor("skyColor",e.skyColor),this._uniformBuffer.apply();let t=F.beginCommandEncoder();return F.computeCommand(t,[this._computeShader]),F.endCommandEncoder(t),this}}var em=Object.getOwnPropertyDescriptor,tm=(s,e,t,r)=>{for(var i=r>1?void 0:r?em(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Sa=class extends mt{constructor(){super();let s=new Oe("sky_vs_frag_wgsl","sky_fs_frag_wgsl");this.addRenderPass(s),s.setUniformVector3("eyesPos",new d),s.setUniformFloat("exposure",1),s.setUniformFloat("roughness",0);let e=s.shaderState;e.frontFace="cw",e.cullMode=Jt.back,e.depthWriteEnabled=!1,e.depthCompare=rt.less}};Sa=tm([yi(Sa,"SkyShader")],Sa);class nf extends yt{constructor(){super(),this.shader=new Sa,this.shader.setUniformVector3("eyesPos",new d),this.shader.setUniformFloat("exposure",1),this.shader.setUniformFloat("roughness",0)}set baseMap(e){this.setTexture("baseMap",e);const t="IS_HDR_SKY";this._shader.getDefaultShaders()[0].defineValue[t]!=e?.isHDRTexture&&this._shader.setDefine(t,!!e?.isHDRTexture)}get baseMap(){return this._shader.getDefaultColorShader().getTexture("baseMap")}set envMap(e){}set shadowMap(e){}get exposure(){return m.setting.sky.skyExposure}set exposure(e){m.setting.sky.skyExposure=e}get roughness(){return this._shader.getDefaultColorShader().uniforms.roughness.value}set roughness(e){let t=this._shader.getDefaultColorShader();"roughness"in t.uniforms&&(t.uniforms.roughness.value=e)}}class lf extends ei{gid=0;needUpdate=!0;autoUpdate=!1;radius=500;init(){super.init(),this.addRendererMask(Be.Reflection),this.alwaysRender=!0,this.object3D.bound=new Re(d.ZERO.clone(),d.MAX),ss(this.transform.onPositionChange,()=>{this.needUpdate=!0})}onEnable(){G.instance.addRenderNode(this.transform.scene3D,this)}onDisable(){G.instance.removeRenderNode(this.transform.scene3D,this)}renderPass2(e,t,r,i,a,o=!1){super.renderPass2(e,t,r,i,a,o)}}class hf extends mt{constructor(){super();let e=new Oe("ReflectionShader_shader","ReflectionShader_shader");e.setShaderEntry("VertMain","FragMain"),this.addRenderPass(e);let t=e.shaderState;t.acceptShadow=!1,t.castShadow=!1,t.receiveEnv=!1,t.acceptGI=!1,t.useLight=!1,this.setDefine("USE_BRDF",!0),this.setDefine("USE_AO_R",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformFloat("alphaCutoff",0)}set _MainTex(e){this.setTexture("baseMap",e)}set _BumpMap(e){this.setTexture("normalMap",e)}set _MaskTex(e){this.setTexture("maskMap",e)}set _UVTransform(e){this.setUniformVector4("transformUV1",e)}set _Metallic(e){this.setUniformFloat("metallic",e)}set _Roughness(e){this.setUniformFloat("roughness",e)}set _MainColor(e){this.setUniformColor("baseColor",e)}set _AlphaCutoff(e){this.setUniformFloat("alphaCutoff",e)}set _DoubleSidedEnable(e){let t=this.getDefaultColorShader();t.shaderState.cullMode=e?Jt.none:t.shaderState.cullMode}set _SurfaceType(e){let t=this.getDefaultColorShader();e==0?t.blendMode=ae.NONE:t.blendMode=ae.ALPHA}set _AlphaCutoffEnable(e){e==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}}class uf extends yt{constructor(){super(),this.shader=new hf,this.baseMap=m.res.whiteTexture,this.setDefine("USE_CUSTOMUNIFORM",!0),this.reflectionIndex=0}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}set reflectionIndex(e){this.shader.setUniformFloat("reflectionIndex",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set envMap(e){}set shadowMap(e){}}class Ga{center=new d;extents;max;min;size;tmpVecA=new d;tmpVecB=new d;tmpVecC=new d;tmpVecD=new d;radius=0;diffBetweenPoints=new d;owner;forward=new d(0,0,1);worldCenter;worldSize;_center=new d;constructor(e,t){this.center=e||new d(0,0,0),this.radius=t===void 0?.5:t}updateBound(){throw new Error("Method not implemented.")}containsPoint(e){var t=this.tmpVecA.subtract(e,this.center).lengthSquared,r=this.radius;return t<r*r}intersectsRay(e,t){var r=this.tmpVecA.copyFrom(e.origin).subtract(this.center),i=r.dotProduct(this.tmpVecB.copyFrom(e.direction).normalize()),a=r.dotProduct(r)-this.radius*this.radius;if(a>0&&i>0)return null;var o=i*i-a;if(o<0)return!1;var n=Math.abs(-i-Math.sqrt(o));return t&&t.copyFrom(e.direction).scaleBy(n).add(e.origin),!0}intersectsBoundingSphere(e){this.tmpVecA.subtract(e.center,this.center);var t=e.radius+this.radius;return this.tmpVecA.lengthSquared<=t*t}calculateTransform(e){this.update(e)}inFrustum(e,t){return t.containsSphere(e)}clone(){return new Ga(this.center.clone(),this.radius)}update(e){this.owner=e,this._center.add(e.transform.worldMatrix.position,this.center),this.forward=e.transform.forward}merge(e){throw new Error("BoundingSphere merge is not ready!")}setFromCenterAndSize(e,t){this.center.copy(e),this.radius=t}}class cf extends lf{init(){super.init(),this.castShadow=!1,this.castGI=!1,this.addRendererMask(Be.Reflection),this.alwaysRender=!0,this.object3D.bound=new Ga(d.ZERO.clone(),this.radius)}debug(e,t=1){let r=new q,i=r.addComponent(j);i.addMask(Be.ReflectionDebug),i.geometry=new Ri(25,30,30);let a=m.setting.reflectionSetting,o=se.getGBufferFrame(se.reflections_GBuffer,a.width,a.height),n=new uf;n.reflectionIndex=e,n.baseMap=o.getCompressGBufferTexture(),i.material=n,this.object3D.addChild(r),r.scaleX=t,r.scaleY=t,r.scaleZ=t}onEnable(){super.onEnable()}onDisable(){super.onDisable()}renderPass2(e,t,r,i,a,o=!1){super.renderPass2(e,t,r,i,a,o)}}class Bs extends j{skyMaterial;init(){super.init(),this.castShadow=!1,this.castGI=!0,this.addRendererMask(Be.Sky),this.alwaysRender=!0,this.object3D.bound=new Re(d.ZERO.clone(),d.MAX),this.geometry=new Ri(m.setting.sky.defaultFar,20,20),this.skyMaterial||=new nf}onEnable(){this._readyPipeline?(this.castNeedPass(),!this._inRenderer&&this.transform.scene3D&&(G.instance.sky=this,this._inRenderer=!0)):this.initPipeline()}onDisable(){this._inRenderer&&this.transform.scene3D&&(this._inRenderer=!1,G.instance.sky=null),super.onDisable()}nodeUpdate(e,t,r,i){super.nodeUpdate(e,t,r,i)}renderPass2(e,t,r,i,a,o=!1){super.renderPass2(e,t,r,i,a,o)}set map(e){this.skyMaterial.baseMap=e,this.skyMaterial.name==null&&(this.skyMaterial.name="skyMaterial"),this.material=this.skyMaterial}get map(){return this.skyMaterial.baseMap}get exposure(){return this.skyMaterial.exposure}set exposure(e){this.skyMaterial&&(this.skyMaterial.exposure=e)}get roughness(){return this.skyMaterial.roughness}set roughness(e){this.skyMaterial&&(this.skyMaterial.roughness=e)}useSkyReflection(){let e=new q,t=e.addComponent(cf);t.autoUpdate=!1,e.x=0,e.y=300,e.z=0,this.object3D.addChild(e)}}class rm{rotateX;rotateY;sunX;sunY;constructor(){this.reset()}reset(){return this.rotateX=this.rotateY=this.sunX=this.sunY=Number.MAX_VALUE,this}isRotateChange(e,t){return Math.abs(this.rotateX-e)>=.001||Math.abs(this.rotateY-t)>=.001}isSkyChange(e,t){return Math.abs(this.sunX-e)>=.001||Math.abs(this.sunY-t)>=.001}save(e,t,r,i){return this.sunX=e,this.sunY=t,this.rotateX=r,this.rotateY=i,this}}class im extends Bs{_atmosphericScatteringSky;_onChange=!0;_relatedTransform;_historyData;get sunX(){return this._atmosphericScatteringSky.setting.sunX}set sunX(e){this._atmosphericScatteringSky.setting.sunX!=e&&(this._atmosphericScatteringSky.setting.sunX=e,this._onChange=!0)}get sunY(){return this._atmosphericScatteringSky.setting.sunY}set sunY(e){this._atmosphericScatteringSky.setting.sunY!=e&&(this._atmosphericScatteringSky.setting.sunY=e,this._onChange=!0)}get eyePos(){return this._atmosphericScatteringSky.setting.eyePos}set eyePos(e){this._atmosphericScatteringSky.setting.eyePos!=e&&(this._atmosphericScatteringSky.setting.eyePos=e,this._onChange=!0)}get sunRadius(){return this._atmosphericScatteringSky.setting.sunRadius}set sunRadius(e){this._atmosphericScatteringSky.setting.sunRadius!=e&&(this._atmosphericScatteringSky.setting.sunRadius=e,this._onChange=!0)}get sunRadiance(){return this._atmosphericScatteringSky.setting.sunRadiance}set sunRadiance(e){this._atmosphericScatteringSky.setting.sunRadiance!=e&&(this._atmosphericScatteringSky.setting.sunRadiance=e,this._onChange=!0)}get sunBrightness(){return this._atmosphericScatteringSky.setting.sunBrightness}set sunBrightness(e){this._atmosphericScatteringSky.setting.sunBrightness!=e&&(this._atmosphericScatteringSky.setting.sunBrightness=e,this._onChange=!0)}get displaySun(){return this._atmosphericScatteringSky.setting.displaySun}set displaySun(e){this._atmosphericScatteringSky.setting.displaySun!=e&&(this._atmosphericScatteringSky.setting.displaySun=e,this._onChange=!0)}init(){super.init(),this._historyData=new rm,this._atmosphericScatteringSky=new of(new sf);let e=this.transform.view3D,t=this.transform.scene3D;this.map=this._atmosphericScatteringSky,t.envMap=this._atmosphericScatteringSky,this.onUpdate(e)}start(e){let t=this.transform.scene3D;this.map=this._atmosphericScatteringSky,t.envMap=this._atmosphericScatteringSky,super.start()}get relativeTransform(){return this._relatedTransform}set relativeTransform(e){this._relatedTransform=e,this._historyData.reset()}onUpdate(e){this._relatedTransform&&(this._relatedTransform.rotationZ=0,this._historyData.isRotateChange(this._relatedTransform.rotationX,this._relatedTransform.rotationY)?(this.sunX=(this._relatedTransform.rotationY+90)/360,this.sunY=this._relatedTransform.rotationX/180+.5):this._historyData.isSkyChange(this.sunX,this.sunY)&&(this._relatedTransform.rotationY=this.sunX*360-90,this._relatedTransform.rotationX=(this.sunY-.5)*180),this._historyData.save(this.sunX,this.sunY,this._relatedTransform.rotationX,this._relatedTransform.rotationY)),this._onChange&&(this._onChange=!1,this._atmosphericScatteringSky.apply())}destroy(e){super.destroy(e),this._atmosphericScatteringSky.destroy(),this._atmosphericScatteringSky=null,this._onChange=null}}class Ii{static panelRatio=1;static quadMaxCountForWorld=256;static quadMaxCountForView=2048;static SortOrderStartWorld=7e3;static SortOrderStartView=8e3;static SortOrderCanvasSpan=1e4}var jt=(s=>(s[s.View=0]="View",s[s.World=2]="World",s))(jt||{}),ea=(s=>(s[s.Simple=0]="Simple",s[s.Sliced=1]="Sliced",s[s.Tiled=2]="Tiled",s[s.Filled=3]="Filled",s))(ea||{}),ii=(s=>(s[s.None=0]="None",s[s.BillboardY=9]="BillboardY",s[s.BillboardXYZ=10]="BillboardXYZ",s))(ii||{});class Wa extends Pe{type;camera;_cameraPosition;constructor(){super(),this._cameraPosition=new d}onUpdate(){this.enable&&this.transform.view3D.camera&&this.updateBillboardMatrix()}updateBillboardMatrix(){let e=this.transform.view3D.camera;this._cameraPosition.copyFrom(e.transform.back),this.type==ii.BillboardXYZ||this.type==ii.BillboardY&&(this._cameraPosition.y=0),this._cameraPosition.normalize(),this._cameraPosition.add(this.object3D.localPosition,this._cameraPosition),this.transform.lookAt(this.object3D.localPosition,this._cameraPosition,e.transform.up)}cloneTo(e){let t=e.addComponent(Wa);t.type=this.type}}var ta=(s=>(s[s.None=0]="None",s[s.Box=1]="Box",s[s.Capsule=2]="Capsule",s[s.Sphere=3]="Sphere",s[s.Mesh=4]="Mesh",s))(ta||{});class Ke{_center;_size;_halfSize;_shapeType=0;static v3_help_0;static helpMatrix;static helpRay;constructor(){Ke.v3_help_0||=new d,Ke.helpMatrix||=new I,Ke.helpRay||=new $t,this._center=new d,this._size=new d,this._halfSize=new d}get shapeType(){return this._shapeType}setFromCenterAndSize(e,t){return e&&this._center.copy(e),t&&this._size.copy(t),this}get center(){return this._center}set center(e){this._center.copy(e)}get size(){return this._size}set size(e){this._size.copy(e),this._halfSize.copy(e).multiplyScalar(.5)}get halfSize(){return this._halfSize}rayPick(e,t){return null}}class ra extends Ke{_pickRet;box;constructor(){super(),this._shapeType=ta.Box,this.box=new Re(new d,new d)}rayPick(e,t){this.box.setFromCenterAndSize(this.center,this.size);let i=Ke.helpMatrix;i.copyFrom(t).invert();let a=Ke.helpRay.copy(e);a.applyMatrix(i);let o=a.intersectBox(this.box,Ke.v3_help_0);return o?(this._pickRet||(this._pickRet={intersectPoint:new d,distance:0}),this._pickRet.intersectPoint=o,this._pickRet.distance=d.distance(a.origin,Ke.v3_help_0),this._pickRet):null}}class Kt extends Pe{_shape;constructor(){super(),this._shape=new ra}start(){m.setting.pick.mode=="pixel"&&this.transform.scene3D.view.pickFire.mouseEnableMap.set(this.transform.worldMatrix.index,this)}onEnable(e){Se.bindEnablePick(e,this,null)}onDisable(e){Se.unBindEnablePick(e,this)}get shape(){return this._shape}set shape(e){this._shape=e}rayPick(e){return this._enable?this._shape.rayPick(e,this.transform.worldMatrix):null}beforeDestroy(e){m.setting.pick.mode=="pixel"&&this.transform.scene3D.view.pickFire.mouseEnableMap.delete(this.transform.worldMatrix.index),super.beforeDestroy(e)}}class ff{loop=!0;speed=1;t=0;time=0;weight=0;currFrame=0;lastFrame=-1;nextFrame=0;clip;animation;_isEnd=!1;_currSkeletonPose;constructor(e){this.clip=e,this._currSkeletonPose=new ma(this.clip.skeleton)}reset(){this.time=0,this.weight=0,this._isEnd=!1}get name(){return this.clip.name}get currSkeletonPose(){return this._currSkeletonPose}update(e){this.time=(this.time+e*this.speed)%this.clip.totalTime;let t=this.time/this.clip.frameRate;if(this.currFrame=Math.trunc(t),this.t=t-this.currFrame,this.currFrame<0&&(this.currFrame=this.clip.numFrame+this.currFrame),this.time>=0?this.nextFrame=(this.currFrame+1)%this.clip.numFrame:(this.nextFrame=this.currFrame-1,this.nextFrame<0&&(this.nextFrame=this.clip.numFrame+this.nextFrame),this.t=1-this.t),this._isEnd)this.currFrame=this.nextFrame=this.speed<0?0:this.clip.numFrame-1;else if(this.currFrame!=this.lastFrame){let a=this.speed<0?0:this.clip.numFrame;this.currFrame==a&&(this.loop?(this.currFrame=0,this.nextFrame=1,this.time=this.t=0):(this.currFrame=this.nextFrame=this.speed<0?0:this.clip.numFrame-1,this._isEnd=!0));var r=this.clip.getEvents();if(r)for(let o of r){var i=Math.floor(o.time/this.clip.frameRate);if(i=Math.min(i,this.clip.numFrame),i=Math.max(i,0),i==this.currFrame){o.skeletonAnimation=this.animation,this.animation.eventDispatcher.dispatchEvent(o);break}}this.lastFrame=this.currFrame}this.clip.getLerpSkeletonPose(this.currFrame,this.nextFrame,this.t,this._currSkeletonPose)}}var am=Object.getOwnPropertyDescriptor,sm=(s,e,t,r)=>{for(var i=r>1?void 0:r?am(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let ai=class extends Pe{isPlaying=!0;timeScale=1;_skeleton;_clips=[];_clipStates=new Map;_mixSkeletonPose;_mixTempSkeletonPose;_currentClipState;_bindList=[];_jointMatrixIndexTableBuffer;_crossFadeState;constructor(){super()}start(){}set skeleton(s){this._skeleton=s,this._mixSkeletonPose=new ma(this._skeleton,!0),this._mixTempSkeletonPose=new ma(this._skeleton);const e=new Float32Array(this._mixSkeletonPose.jointMatrixIndexTable);this._jointMatrixIndexTableBuffer=new ve(this._skeleton.numJoint*4,0,e)}get skeleton(){return this._skeleton}get finalSkeletonPose(){return this._mixSkeletonPose}get jointMatrixIndexTableBuffer(){return this._jointMatrixIndexTableBuffer}getJointIndexTable(s){let e=new Array;for(let t=0;t<s.length;t++){const r=s[t];let i=this._skeleton.getJointByName(r);e[t]=i?i.index:-1}return e}addAnimationClip(s){if(!this._clipStates.has(s.name)){this._clips.push(s);let e=new ff(s);e.animation=this,this._clipStates.set(s.name,e),this._currentClipState||this.setCurrentClipState(e)}}getAnimationClip(s){var e=this.getAnimationClipState(s);return e?e.clip:null}getAnimationClips(){return this._clips}getAnimationClipState(s){return this._clipStates.has(s)?this._clipStates.get(s):null}getAnimationClipStates(){return this._clipStates}pause(){this.isPlaying=!1}resume(){this.isPlaying=!0}play(s,e=1,t=!1){if(this._currentClipState&&this._currentClipState.name==s)return t&&this._currentClipState.reset(),!1;let r=this.getAnimationClipState(s);return r?(r.speed=e,r.reset(),this._clipStates.forEach((i,a)=>{i.weight=0}),this.setCurrentClipState(r),!0):!1}crossFade(s,e){if(e<.01){this.play(s);return}if(this._currentClipState.name==s)return;let t=this.getAnimationClipState(s);t&&(t.reset(),this._crossFadeState?(this._crossFadeState.inClip&&(this._crossFadeState.inClip.weight=0),this._crossFadeState.outClip&&(this._crossFadeState.outClip.weight=0),this._crossFadeState.reset(t,this._currentClipState,e)):this._crossFadeState=new om(t,this._currentClipState,e),this._currentClipState=t)}setAnimIsLoop(s,e){this._clipStates.has(s)&&(this._clipStates.get(s).loop=e)}addJointBind(s,e){this._bindList.push({jointName:s,obj:e})}removeJointBind(s){for(let e=0;e<this._bindList.length;e++)if(this._bindList[e].obj==s){this._bindList.splice(e,1);break}}onUpdate(){if(!this.isPlaying)return;let s=be.delta*.001*this.timeScale;this._crossFadeState&&this._crossFadeState.update(s);var e=0,t=[];if(this._clipStates.forEach((i,a)=>{i.weight>0&&(i.update(s),e+=i.weight,t.push(i))}),t.length>0){this._mixSkeletonPose.copyFrom(t[0].currSkeletonPose);for(var r=1;r<t.length;++r){const i=t[r];this._mixTempSkeletonPose.lerp(this._mixSkeletonPose,i.currSkeletonPose,i.weight/e),this._mixSkeletonPose.copyFrom(this._mixTempSkeletonPose)}}}cloneTo(s){let e=s.addComponent(ai);e.skeleton=this.skeleton;for(var t=0;t<this._clips.length;++t)e.addAnimationClip(this._clips[t])}setCurrentClipState(s){this._currentClipState!=s&&(this._currentClipState=s,this._currentClipState.weight=1)}};ai=sm([Wt(ai,"SkeletonAnimationComponent")],ai);class om{inClip;outClip;currentTime;crossFadeTime;constructor(e,t,r){this.reset(e,t,r)}reset(e,t,r){this.inClip=e,this.outClip=t,this.currentTime=0,this.crossFadeTime=r}update(e){!this.inClip||!this.outClip||(this.currentTime+=e,this.inClip.weight=Math.min(Math.abs(this.currentTime%this.crossFadeTime)/this.crossFadeTime,1),this.outClip.weight=1-this.inClip.weight,Math.abs(this.currentTime)>=this.crossFadeTime&&(this.inClip.weight=1,this.outClip.weight=0,this.inClip=null,this.outClip=null))}}var nm=Object.getOwnPropertyDescriptor,lm=(s,e,t,r)=>{for(var i=r>1?void 0:r?nm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Nr=class extends Pe{timeScale=1;jointMatrixIndexTableBuffer;playBlendShapeLoop=!1;inverseBindMatrices;_avatar;_rendererList;propertyCache;_clips;_clipsState;_clipsMap;_currentSkeletonClip;_currentBlendAnimClip;_skeletonTime=0;_blendShapeTime=0;_skeletonSpeed=1;_blendShapeSpeed=1;_skeletonStart=!0;_blendShapeStart=!0;root;_avatarName;_bonePos=new d;_boneScale=new d;_boneRot=new Z;_crossFadeState;init(s){this.propertyCache=new Map,this._clipsMap=new Map,this._clips=[],this._clipsState=[],this._rendererList=this.object3D.getComponentsInChild(oi);let e=this.object3D.getComponentsInChild(j);for(let t of e){let r=t;r.blendShape=t.morphData,this._rendererList.push(r)}for(const t of this._rendererList)Gt.hasMask(t.rendererMask,Be.MorphTarget)&&t.selfCloneMaterials("MORPH_TARGET_UUID")}start(){}debug(){}playAnim(s,e=0,t=1){let r=this.getAnimationClipState(s);r?(this._currentSkeletonClip&&(this._currentSkeletonClip.weight=0),this._currentSkeletonClip=r,this._currentSkeletonClip.weight=1,this._skeletonTime=e,this._skeletonSpeed=t,this._skeletonStart=!0):console.warn(`not has anim ${s}`)}crossFade(s,e){let t=this.getAnimationClipState(s);if(!t){console.warn(`not has anim ${s}`);return}if(e<.01||!this._currentSkeletonClip){this.playAnim(s);return}if(this._currentSkeletonClip&&this._currentSkeletonClip.clip.clipName===s)return;let r=t,i=this._currentSkeletonClip;this._crossFadeState?(this._crossFadeState.inClip&&(this._crossFadeState.inClip.weight=0),this._crossFadeState.outClip&&(this._crossFadeState.outClip.weight=0),this._crossFadeState.reset(r,i,e)):this._crossFadeState=new hm(r,i,e),this._currentSkeletonClip=r}playBlendShape(s,e=0,t=1){this._clipsMap.has(s)?(this._currentBlendAnimClip=this._clipsMap.get(s),this._blendShapeTime=e,this._blendShapeSpeed=t,this._blendShapeStart=!0):console.warn(`not has blendShape ${s}`)}set avatar(s){this._avatarName=s,this.inverseBindMatrices=[],this._avatar=m.res.getObj(s);let e=this.buildSkeletonPose();const t=new Float32Array(e);this.jointMatrixIndexTableBuffer=new ve(this._avatar.count,0,t)}get numJoint(){return this._avatar.count}getJointIndexTable(s){let e=new Array;for(let t=0;t<s.length;t++){let r=this._avatar.boneMap.get(s[t]);e[t]=r?r.boneID:-1}return e}skeltonPoseObject3D={};skeltonTPoseObject3D={};buildSkeletonPose(){let s=[];for(const e of this._avatar.boneData){let t=new q;I.getEuler(d.HELP_6,e.q,!0,"ZYX"),t.localPosition=e.t.clone(),t.localRotation=d.HELP_6.clone(),t.localScale=d.ONE,e.s.clone(),this.skeltonPoseObject3D[e.boneName]=t,this.skeltonTPoseObject3D[e.bonePath]=t.clone(),e.parentBoneName&&e.parentBoneName!=""?this.skeltonPoseObject3D[e.parentBoneName].addChild(t):(this.object3D.transform.scene3D&&this.object3D.transform.scene3D.addChild(t),this.root=t),s.push(t.transform.worldMatrix.index);let r=new I;r.copyFrom(t.transform.worldMatrix),r.invert(),this.inverseBindMatrices.push(r.rawData)}return s}set clips(s){this._clips=s;for(const e of s)this._clipsMap.set(e.clipName,e);this._clipsState=[];for(const e of s)this._clipsState.push(new df(e));this._currentSkeletonClip||this.playAnim(s[0].clipName)}get clips(){return this._clips}get clipsState(){return this._clipsState}cloneTo(s){let e=s.addComponent(Nr);e.avatar=this._avatarName,e.clips=this._clips}updateTime(){const s=be.delta*.001;this._skeletonStart&&(this._skeletonTime+=s*this._skeletonSpeed*this.timeScale,this._currentSkeletonClip&&this._currentSkeletonClip.clip.loopTime&&(this._skeletonTime=this._skeletonTime%this._currentSkeletonClip.clip.stopTime)),this._blendShapeStart&&(this._blendShapeTime+=s*this._blendShapeSpeed,this._currentBlendAnimClip&&(this._currentBlendAnimClip.loopTime&&this.playBlendShapeLoop?this._blendShapeTime=this._blendShapeTime%this._currentBlendAnimClip.stopTime:this._blendShapeTime=Math.min(this._blendShapeTime,this._currentBlendAnimClip.stopTime)-1e-4)),this._crossFadeState&&this._crossFadeState.update(s)}onUpdate(s){this.updateTime();let e=[];for(let t of this._clipsState)t.weight>0&&e.push(t);e.length>0?this.updateSkeletonAnimMix(e):this.updateSkeletonAnim(),this.updateMorphAnim()}updateSkeletonAnim(){if(this._currentSkeletonClip){let s=this._avatar.boneData,e=0,t=s.length;for(e=0;e<t;e++){const r=s[e];let i=this.skeltonPoseObject3D[r.boneName];if(this._currentSkeletonClip.clip.useSkeletonPos){let o=this.getPosition(r.bonePath,this._skeletonTime);i.transform.localPosition=o}let a=this.getRotation(r.bonePath,this._skeletonTime);if(i.transform.localRotQuat=a,this._currentSkeletonClip.clip.useSkeletonScale){let o=this.getScale(r.bonePath,this._skeletonTime);i.transform.localScale=o}}}}updateMorphAnim(){if(this._currentBlendAnimClip&&this._currentBlendAnimClip.floatCurves&&this._currentBlendAnimClip.floatCurves.size>0&&this._rendererList)for(const s of this._currentBlendAnimClip.floatCurves){let e=s[0],r=s[1].propertys,a=this._currentBlendAnimClip.floatCurves.get(e).getValue(this._blendShapeTime)/100;this.updateBlendShape(r,e,a)}}updateBlendShape(s,e,t){for(const r of this._rendererList)if(r.blendShape){let i=this.propertyCache.get(r);if(i&&e in i)i[e](t);else{i=r;for(const a of s){if(!i[a]){i=null;break}i=i[a]}if(!i||i==r)continue;this.propertyCache.get(r)||this.propertyCache.set(r,{}),this.propertyCache.get(r)[e]=i,i(t)}}}updateSkeletonAnimMix(s){let e=0;for(let t of s)e+=t.weight;if(s.length>0){let t=this._avatar.boneData,r=t.length;for(let i=0;i<r;i++){const a=t[i];let o=this.skeltonPoseObject3D[a.boneName];if(s[0].clip.useSkeletonPos){this._bonePos.copyFrom(this.getPosition(a.bonePath,this._skeletonTime,s[0].clip));for(let n=1;n<s.length;n++){const l=s[n];if(l.clip.useSkeletonPos){let h=this.getPosition(a.bonePath,this._skeletonTime,l.clip);d.HELP_0.lerp(this._bonePos,h,l.weight/e),this._bonePos.copyFrom(d.HELP_0)}}o.transform.localPosition=this._bonePos}this._boneRot.copyFrom(this.getRotation(a.bonePath,this._skeletonTime,s[0].clip));for(let n=1;n<s.length;n++){const l=s[n];let h=this.getRotation(a.bonePath,this._skeletonTime,l.clip);Z.HELP_2.slerp(this._boneRot,h,l.weight/e),this._boneRot.copyFrom(Z.HELP_2)}if(o.transform.localRotQuat=this._boneRot,s[0].clip.useSkeletonScale){this._boneScale.copyFrom(this.getScale(a.bonePath,this._skeletonTime,s[0].clip));for(let n=1;n<s.length;n++){const l=s[n];if(l.clip.useSkeletonScale){let h=this.getScale(a.bonePath,this._skeletonTime,l.clip);d.HELP_0.lerp(this._boneScale,h,l.weight/e),this._boneScale.copyFrom(d.HELP_0)}}o.transform.localScale=this._boneScale}}}}getPosition(s,e,t=this._currentSkeletonClip.clip){return t.positionCurves.has(s)?t.positionCurves.get(s).getValue(e):this.skeltonTPoseObject3D[s].localPosition}getRotation(s,e,t=this._currentSkeletonClip.clip){if(t.rotationCurves.has(s)){let r=t.rotationCurves.get(s).getValue(e);return Z.HELP_0.set(r.x,r.y,r.z,r.w),Z.HELP_0}return this.skeltonTPoseObject3D[s].localQuaternion}getScale(s,e,t=this._currentSkeletonClip.clip){return t.scaleCurves.has(s)?t.scaleCurves.get(s).getValue(e):this.skeltonTPoseObject3D[s].localScale}getAnimationClipState(s){for(let e of this._clipsState)if(e.clip.clipName===s)return e;return null}cloneMorphRenderers(){let s={};for(const e of this._rendererList)for(const t in e.geometry.morphTargetDictionary){let r=s[t]||[];r.push(e),s[t]=r}return s}};Nr=lm([Wt(Nr,"AnimatorComponent")],Nr);class df{clip;weight=0;get totalTime(){return this.clip.stopTime-this.clip.startTime}constructor(e){this.clip=e}}class hm{inClip;outClip;currentTime;crossFadeTime;constructor(e,t,r){this.reset(e,t,r)}reset(e,t,r){this.inClip=e,this.outClip=t,this.currentTime=0,this.crossFadeTime=r}update(e){!this.inClip||!this.outClip||(this.currentTime+=e,this.inClip.weight=Math.min(Math.abs(this.currentTime%this.crossFadeTime)/this.crossFadeTime,1),this.outClip.weight=1-this.inClip.weight,Math.abs(this.currentTime)>=this.crossFadeTime&&(this.inClip.weight=1,this.outClip.weight=0,this.inClip=null,this.outClip=null))}}class fn{index;time;timeEnd;coeff=[]}var si=(s=>(s[s.PingPong=0]="PingPong",s[s.Repeat=1]="Repeat",s[s.Clamp=2]="Clamp",s))(si||{});class vs{serializedVersion="2";time;value;inSlope=0;outSlope=0;tangentMode=0;weightedMode=0;inWeight;outWeight;constructor(e=0,t=0){this.time=e,this.value=t}unSerialized(e){this.serializedVersion=e.serializedVersion,this.time=e.time,this.value=e.value,this.tangentMode=e.tangentMode,this.inSlope=e.inSlope=="Infinity"?NaN:e.inSlope,this.outSlope=e.outSlope=="Infinity"?NaN:e.outSlope}unSerialized2(e){this.serializedVersion=e.serializedVersion,this.time=e.time,this.value=e.value,this.tangentMode=e.tangentMode,this.inSlope=e.inTangent=="Infinity"?NaN:e.inTangent,this.outSlope=e.outTangent=="Infinity"?NaN:e.outTangent}}class _a{_totalTime=1;_cache=new fn;_cacheOut={lhsIndex:0,rhsIndex:0};_InvalidateCache=!1;curve=[];serializedVersion;preWarpMode;postWarpMode;rotationOrder;get cacheOut(){return this._cacheOut}constructor(e,t=si.Repeat,r=si.Repeat){if(e)for(let i=0;i<e.length;i++){const a=e[i];this.addKeyFrame(a)}this.preWarpMode=t,this.postWarpMode=r}get totalTime(){return this._totalTime}get first(){return this.curve[0]}get last(){return this.curve[this.curve.length-1]}addKeyFrame(e){this.curve.indexOf(e)==-1&&this.curve.push(e),this.calcTotalTime()}removeKeyFrame(e){let t=this.curve.indexOf(e);t!=-1&&this.curve.splice(t,1),this.calcTotalTime()}calculateCacheData(e,t,r,i=0){let a=this.curve,o=a[t],n=a[r];e.index=t,e.time=o.time+i,e.timeEnd=n.time+i,e.index=t;let l,h,u,c,f,g,p;l=n.time-o.time,l=Math.max(l,1e-4),u=n.value-o.value,h=1/(l*l),c=o.outSlope,f=n.inSlope,g=c*l,p=f*l,e.coeff[0]=(g+p-u-u)*h/l,e.coeff[1]=(u+u+u-g-g-p)*h,e.coeff[2]=c,e.coeff[3]=o.value,this.setupStepped(e.coeff,o,n)}getValue(e){return e=this.wrapTime(e),this.findCurve(e,this._cacheOut),this.calculateCacheData(this._cache,this._cacheOut.lhsIndex,this._cacheOut.rhsIndex,0),this.evaluateCache(this._cache,e)}getCurveFramesExtent(e){return e=this.wrapTime(e),this.findCurve(e,this._cacheOut),{lhsIndex:this._cacheOut.lhsIndex,rhsIndex:this._cacheOut.rhsIndex,time:e}}getKeyCount(){return this.curve.length}getKey(e){return this.curve[e]}unSerialized(e){this.preWarpMode=e.m_PreInfinity,this.postWarpMode=e.m_PostInfinity,this.rotationOrder=e.m_RotationOrder;let t=e.m_Curve.length;for(let r=0;r<t;r++)this.curve[r]=new vs,this.curve[r].unSerialized(e.m_Curve[r.toString()]);return this.calcTotalTime(),this}unSerialized2(e){this.preWarpMode=e.preWrapMode,this.postWarpMode=e.postWrapMode;let t=e.keyFrames||e.keys,r=t.length;for(let i=0;i<r;i++)this.curve[i]=new vs,this.curve[i].unSerialized2(t[i.toString()]);return this.calcTotalTime(),this}wrapTime(e){let t=this.curve,r=t[0].time,i=t[t.length-1].time;return e<r?this.preWarpMode==si.Clamp?e=r:this.preWarpMode==si.PingPong?e=ao(e,r,i):e=so(e,r,i):e>i&&(this.postWarpMode==si.Clamp?e=i:this.postWarpMode==si.PingPong?e=ao(e,r,i):e=so(e,r,i)),e}evaluateCache(e,t){let r=t-e.time;return r*(r*(r*e.coeff[0]+e.coeff[1])+e.coeff[2])+e.coeff[3]}findCurve(e,t){let r=this.curve;for(let i=1;i<r.length;i++){let a=r[i-1],o=r[i];a.time<=e&&o.time>e&&(t.lhsIndex=i-1,t.rhsIndex=i)}}setupStepped(e,t,r){(isNaN(t.outSlope)||isNaN(r.inSlope))&&(e[0]=0,e[1]=0,e[2]=0,e[3]=t.value)}invalidateCache(){this._InvalidateCache=!0}calcTotalTime(){let e=0;for(let t of this.curve)t?e=Math.max(e,t.time):console.error(t);this._totalTime=e}static scaleCurveValue(e,t){if(!e._InvalidateCache)for(let r=0;r<e.curve.length;r++){let i=e.curve[r];i.value*=t,i.inSlope*=t,i.outSlope*=t}e.invalidateCache()}}class gf extends _a{attribute="";propertyList;path;constructor(){super()}unSerialized(e){let{attribute:t,path:r}=e;return this.attribute=t,this.path=r,this.propertyList=t.split("."),super.unSerialized(e.curve),this}}class pf{curve={}}var ia=(s=>(s[s.Default=0]="Default",s[s.Clamp=1]="Clamp",s[s.Once=1]="Once",s[s.Loop=2]="Loop",s[s.PingPong=4]="PingPong",s[s.ClampForever=8]="ClampForever",s))(ia||{});class um{name;objAnimClip;totalTime=0;time=0;_stopTime=0;_loopTime;_wrapMode;_sampleRate;get wrapMode(){return this._wrapMode||(this._wrapMode=0),this._wrapMode}set wrapMode(e){this._wrapMode=e}parse(e){this.objAnimClip={};let t=e.AnimationClip,{m_Name:r,m_AnimationClipSettings:i,m_WrapMode:a,m_SampleRate:o}=t;this.name=r,this._wrapMode=a,this._sampleRate=o,this._loopTime=i.m_LoopTime;for(const n in t.m_EditorCurves)if(Object.prototype.hasOwnProperty.call(t.m_EditorCurves,n)){const l=t.m_EditorCurves[n];let h=l.attribute,u=new gf;u.unSerialized(l),this.totalTime=Math.max(this.totalTime,u.totalTime);let c=this.objAnimClip[l.path];c||(c=new pf,this.objAnimClip[l.path]=c),c.curve[h]=u}}}class mf{transform;quaternion;materialColor}class Fa{static Property={"m_LocalPosition.x":"localPosition.x","m_LocalPosition.y":"localPosition.y","m_LocalPosition.z":"localPosition.z","m_LocalRotation.x":"localQuaternion.x","m_LocalRotation.y":"localQuaternion.y","m_LocalRotation.z":"localQuaternion.z","m_LocalRotation.w":"localQuaternion.w","localEulerAnglesRaw.x":"localRotation.x","localEulerAnglesRaw.y":"localRotation.y","localEulerAnglesRaw.z":"localRotation.z","m_LocalEulerAngles.x":"localRotation.x","m_LocalEulerAngles.y":"localRotation.y","m_LocalEulerAngles.z":"localRotation.z","m_LocalScale.x":"localScale.x","m_LocalScale.y":"localScale.y","m_LocalScale.z":"localScale.z","m_Color.r":"materialColor.r","m_Color.g":"materialColor.g","m_Color.b":"materialColor.b","m_Color.a":"materialColor.a","material._Color.r":"materialColor.r","material._Color.g":"materialColor.g","material._Color.b":"materialColor.b","material._Color.a":"materialColor.a","material._UnlitColor.r":"materialColor.r","material._UnlitColor.g":"materialColor.g","material._UnlitColor.b":"materialColor.b","material._UnlitColor.a":"materialColor.a","field of view":"camera3D.fov",m_IsActive:"active",m_Sprite:"sprite",m_FlipX:"flipX",m_FlipY:"flipY"};static Scale={"m_LocalPosition.x":1,"m_LocalPosition.y":1,"m_LocalPosition.z":-1,"localEulerAnglesRaw.x":-1,"localEulerAnglesRaw.y":1,"localEulerAnglesRaw.z":1,"m_LocalEulerAngles.x":-1,"m_LocalEulerAngles.y":1,"m_LocalEulerAngles.z":1,"m_LocalRotation.x":1,"m_LocalRotation.y":1,"m_LocalRotation.z":-1,"m_LocalRotation.w":-1,"field of view":1,m_IsActive:1,m_Sprite:1};static updatePropertyTag(e,t){e.quaternion||=this.tag_quaternion[t],e.transform||=this.tag_transform[t],e.materialColor||=this.tag_materialColor[t]}static tag_quaternion={"m_LocalRotation.x":!0,"m_LocalRotation.y":!0,"m_LocalRotation.z":!0,"m_LocalRotation.w":!0};static tag_materialColor={"material._Color.r":!0,"material._Color.g":!0,"material._Color.b":!0,"material._Color.a":!0,"material._UnlitColor.r":!0,"material._UnlitColor.g":!0,"material._UnlitColor.b":!0,"material._UnlitColor.a":!0};static tag_transform={"m_LocalPosition.x":!0,"m_LocalPosition.y":!0,"m_LocalPosition.z":!0,"m_LocalRotation.x":!0,"m_LocalRotation.y":!0,"m_LocalRotation.z":!0,"m_LocalRotation.w":!0,"localEulerAnglesRaw.x":!0,"localEulerAnglesRaw.y":!0,"localEulerAnglesRaw.z":!0,"m_LocalEulerAngles.x":!0,"m_LocalEulerAngles.y":!0,"m_LocalEulerAngles.z":!0,"m_LocalScale.x":!0,"m_LocalScale.y":!0,"m_LocalScale.z":!0}}class ki{static Complete=0;static Seek=1;_rootObject3D;_animation;_propertyCache;_currentClip;_frame=0;_time=0;_isPlaying=!0;speed=1;_propertyTagDic;constructor(e){this._rootObject3D=e.object3D,this._animation=e,this._propertyTagDic=new Map,this.reset()}reset(){this._propertyCache={},this._propertyTagDic.clear()}get time(){return this._time}get currentClip(){return this._currentClip}play(e,t=!0){this._isPlaying=!0,t&&(this._time=0),e!=this._currentClip&&e&&this.parseAnimClip(e),this._currentClip=e,this.validProperty()}parseAnimClip(e){this.reset();for(const t in e.objAnimClip){let r=e.objAnimClip[t],i=this._rootObject3D,a={};if(t==""?i=this._rootObject3D:i=this._rootObject3D.getObjectByName(t),!i)continue;let o=new mf;this._propertyTagDic.set(i,o);let n=r.curve;for(const l in n){Fa.updatePropertyTag(o,l);let h=this._propertyCache[t]||={},u=Fa.Property[l].split("."),c=u[0];if(u.length>1){let f=a[c];f||(f=a[c]=i[c]),h[l]={value:f,property:u[1]}}else h[l]={value:i,property:u[0]}}}return this}stop(){return this._isPlaying=!1,this}toggle(){return this._isPlaying=!this._isPlaying,this}get isPlaying(){return this._isPlaying}update(e,t){if(e=e*.001,t=t*.001,!this._currentClip||this._frame==e||!this._isPlaying)return;this._frame=e;let r=this._time;this._time=this.calcTime(r+t*this.speed),this.validProperty(),this._currentClip.wrapMode!=ia.Loop&&this._currentClip.wrapMode!=ia.Default&&(this.speed>0?this._time>=this._currentClip.totalTime:this._time<=0)&&(this._isPlaying=!1,this._animation.statusCall(ki.Complete,r,this._time)),this._animation.statusCall(ki.Seek,r,this._time)}seek(e){return this._time=this.calcTime(e),this._rootObject3D&&this.validProperty(),this}calcTime(e){return this._currentClip.wrapMode==ia.Loop||this._currentClip.wrapMode==ia.Default?e=uo(e,this._currentClip.totalTime):e=ie(e,0,this._currentClip.totalTime),e}validProperty(){for(const e in this._currentClip.objAnimClip){let r=this._currentClip.objAnimClip[e].curve;for(const i in r){const a=r[i];let o=this._propertyCache[e][i],n=a.getValue(this._time);i in Fa.Scale&&(n*=Fa.Scale[i]),o.value[o.property]=n}}this._propertyTagDic.forEach((e,t)=>{this.applyProperty(e,t)})}applyProperty(e,t){e.quaternion&&I.getEuler(t.transform.localRotation,t.transform.localRotQuat,!0,"ZYX"),e.transform&&(t.transform.localPosition=t.transform.localPosition,t.transform.localRotation=t.transform.localRotation,t.transform.localScale=t.transform.localScale);let r=t;e.materialColor&&r.notifyMaterialColorChange(0,"baseColor")}}class cm{clipName;data;time}class ya extends qe{static SEEK="SEEK";static COMPLETE="COMPLETE";animation;frame;constructor(e,t){super(t),this.animation=e}}class yn extends Pe{_animator;_clips=[];defaultClip;autoPlay;_seekEvent;_completeEvent;_keyFrameList;constructor(){super(),this._seekEvent=new ya(this,ya.SEEK),this._completeEvent=new ya(this,ya.COMPLETE),this._keyFrameList={}}registerEventKeyFrame(e){let t=this._keyFrameList[e.clipName];t==null&&(this._keyFrameList[e.clipName]=t=[]),t.push(e)}init(){this._animator=new ki(this)}onUpdate(){this.enable&&this._animator.update(be.time,be.delta)}appendClip(e){this._clips.push(e),this.play(e.name)}statusCall(e,t,r){if(e==ki.Complete)this.eventDispatcher.dispatchEvent(this._completeEvent);else if(e==ki.Seek&&t!=r){let i=this._keyFrameList[this.currentClip.name];if(i)for(let a of i)a.time>t&&a.time<=r&&(this._seekEvent.data=this._seekEvent.frame=a,this.eventDispatcher.dispatchEvent(this._seekEvent))}}set speed(e){this._animator.speed=e}get speed(){return this._animator.speed}stop(){this._animator.stop()}toggle(){this._animator.toggle()}getClip(e){let t;for(let r of this._clips)if(r.name==e){t=r;break}return t}get currentClip(){return this._animator.currentClip}get time(){return this._animator.time}seek(e){this._animator.seek(e)}play(e,t=!0){let r=this.getClip(e);return r?(this._animator.play(r,t),r):null}start(){this.autoPlay&&this.play(this.defaultClip)}copyComponent(e){this.autoPlay=e.autoPlay,this.defaultClip=e.defaultClip;let t=e._clips;for(let r=0,i=t.length;r<i;r++)this.appendClip(t[r]);return this}cloneTo(e){e.addComponent(yn).copyComponent(this)}}var fm=Object.getOwnPropertyDescriptor,dm=(s,e,t,r)=>{for(var i=r>1?void 0:r?fm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let oi=class extends j{skinJointsName;mInverseBindMatrixData;mInverseBindMatrixBuffer;mSkeletonAnimation;mJointIndexTableBuffer;constructor(){super(),this.addRendererMask(Be.SkinnedMesh)}get geometry(){return this._geometry}set geometry(s){this.skinJointsName=s.skinNames;let e=[];for(let t=0;t<s.bindPose.length;t++)e.push(new Float32Array(s.bindPose[t].rawData.slice(0,16)));this.skinInverseBindMatrices=e,super.geometry=s}start(){if(super.start(),this.skeletonAnimation=this.object3D.getComponent(Nr),!this.skeletonAnimation){let s=this.object3D.parentObject.parentObject.getComponentsInChild(Nr);s.length>0&&(this.skeletonAnimation=s[0]);let e=this.object3D;for(;!this.skeletonAnimation&&e;)this.skeletonAnimation=e.getComponentFromParent(Nr),e.parent&&(e=e.parent.object3D)}}get blendShape(){return this.morphData}onEnable(){super.onEnable()}get skeletonAnimation(){return this.mSkeletonAnimation}set skeletonAnimation(s){if(this.mSkeletonAnimation=s,!!s&&!this.mJointIndexTableBuffer){let e=this.mSkeletonAnimation.getJointIndexTable(this.skinJointsName);this.mJointIndexTableBuffer=new ve(e.length,0,new Float32Array(e)),this.mJointIndexTableBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.COMPUTE}}get skinInverseBindMatrices(){return this.mInverseBindMatrixData}set skinInverseBindMatrices(s){this.mInverseBindMatrixData=s;var e=new Float32Array(s.length*16);for(let t=0;t<s.length;t++){let r=t*16,i=s[t];e.set(i,r)}this.mInverseBindMatrixBuffer=new ve(e.byteLength,0,e),this.mInverseBindMatrixBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.COMPUTE}get inverseBindMatrixBuffer(){return this.mInverseBindMatrixBuffer}get jointIndexTableBuffer(){return this.mJointIndexTableBuffer.buffer}cloneTo(s){let e=s.addComponent(oi),t=[];for(const r of this.materials)t.push(r.clone());e.materials=t,e.geometry=this.geometry,e.castShadow=this.castShadow,e.castGI=this.castGI,e.receiveShadow=this.receiveShadow,e.rendererMask=this.rendererMask,e.skinJointsName=this.skinJointsName,e.skinInverseBindMatrices=this.skinInverseBindMatrices,e.mJointIndexTableBuffer=this.mJointIndexTableBuffer}nodeUpdate(s,e,t,r){for(let i=0;i<this.materials.length;i++){let o=this.materials[i].getPass(e);if(o)for(let n=0;n<o.length;n++){const l=o[n];!l.pipeline&&this.mSkeletonAnimation&&(l.setStorageBuffer("jointsMatrixIndexTable",this.mSkeletonAnimation.jointMatrixIndexTableBuffer),l.setStorageBuffer("jointsInverseMatrix",this.mInverseBindMatrixBuffer),l.setStorageBuffer("jointsIndexMapingTable",this.mJointIndexTableBuffer))}}super.nodeUpdate(s,e,t,r)}};oi=dm([Wt(oi,"SkinnedMeshRenderer2")],oi);class gm extends Pe{_targetRenderers={};_vec3=new d;_matrix4=new I;_quaternion=new Z;init(e){let t=this.fetchMorphRenderers(this.object3D,oi),r=this.fetchMorphRenderers(this.object3D,j);t.push(...r);for(const i of t){Gt.hasMask(i.rendererMask,Be.MorphTarget)&&i.selfCloneMaterials("MORPH_TARGET_UUID");for(const o in i.geometry.morphTargetDictionary){let n=this._targetRenderers[o]||[];n.push(i),this._targetRenderers[o]=n}}}getMorphRenderersByKey(e){return this._targetRenderers[e]}cloneMorphRenderers(){let e={};for(let t in this._targetRenderers)e[t]=this._targetRenderers[t];return e}applyBlendShape(e,t,r=1){if(!e){console.warn("blendShape is null");return}this._vec3.setFromArray(e.transform.transform[3]),this._vec3.multiplyScalar(r),this.object3D.transform.localPosition=this._vec3,this._vec3.setFromArray(e.transform.transform[2]),this._matrix4.copyColFrom(2,this._vec3),this._vec3.setFromArray(e.transform.transform[1]),this._matrix4.copyColFrom(1,this._vec3),this._vec3.setFromArray(e.transform.transform[0]),this._matrix4.copyColFrom(0,this._vec3),this._matrix4.transpose(),this._quaternion.fromMatrix(this._matrix4),this.object3D.localQuaternion=this._quaternion;for(let i in t){let a=this._targetRenderers[i],o=t[i],n=e.texture[o];this.applyMorphTargetInfluence(i,n,a)}}applyMorphTargetInfluence(e,t,r){for(let i of r)i.setMorphInfluence(e,t)}fetchMorphRenderers(e,t){let r=e.getComponentsInChild(t),i=[];for(let a of r)a.hasMask(Be.MorphTarget)&&i.push(a);return i}}class pm{texture;transform}var Af=(s=>(s.mouthRollLower="mouthRollLower",s.browOuterUp_L="browOuterUpLeft",s.mouthSmile_L="mouthSmileLeft",s.jawRight="jawRight",s.eyeLookOut_L="eyeLookOutLeft",s.mouthFunnel="mouthFunnel",s.mouthUpperUp_R="mouthUpperUpRight",s.browDown_L="browDownLeft",s.jawLeft="jawLeft",s.mouthLowerDown_L="mouthLowerDownLeft",s.noseSneer_R="noseSneerRight",s.jawForward="jawForward",s.mouthLowerDown_R="mouthLowerDownRight",s.browInnerUp="browInnerUp",s.mouthRollUpper="mouthRollUpper",s.mouthStretch_R="mouthStretchRight",s.mouthPucker="mouthPucker",s.eyeBlink_L="eyeBlinkLeft",s.mouthUpperUp_L="mouthUpperUpLeft",s.mouthShrugUpper="mouthShrugUpper",s.eyeLookIn_R="eyeLookInRight",s.noseSneer_L="noseSneerLeft",s.mouthFrown_L="mouthFrownLeft",s.cheekSquint_L="cheekSquintLeft",s.eyeLookDown_L="eyeLookDownLeft",s.mouthDimple_L="mouthDimpleLeft",s.mouthFrown_R="mouthFrownRight",s.eyeLookIn_L="eyeLookInLeft",s.eyeLookOut_R="eyeLookOutRight",s.mouthLeft="mouthLeft",s.mouthStretch_L="mouthStretchLeft",s.mouthPress_L="mouthPressLeft",s.mouthDimple_R="mouthDimpleRight",s.eyeWide_R="eyeWideRight",s.browDown_R="browDownRight",s.eyeLookUp_R="eyeLookUpRight",s.eyeBlink_R="eyeBlinkRight",s.cheekSquint_R="cheekSquintRight",s.mouthRight="mouthDimpleRight",s.eyeLookDown_R="eyeLookDownRight",s.eyeLookUp_L="eyeLookUpLeft",s.eyeSquint_L="eyeSquintLeft",s.jawOpen="jawOpen",s.browOuterUp_R="browOuterUpRight",s.mouthClose="mouthClose",s.mouthShrugLower="mouthShrugLower",s.eyeWide_L="eyeWideLeft",s.tongueOut="tongueOut",s.eyeSquint_R="eyeSquintRight",s.cheekPuff="cheekPuff",s.mouthPress_R="mouthPressRight",s.mouthSmile_R="mouthSmileRight",s))(Af||{});class mm{joints;constructor(e=[]){this.joints=e}get numJoint(){return this.joints.length}addJoint(e){e.index=this.joints.push(e)-1}getJointName(e){return this.joints[e].name}getJointParentIndex(e){let t=this.joints[e];return t.parent?t.parent.index:-1}getJointByName(e){for(let t of this.joints)if(t.name==e)return t;return null}}class Am{_computePipeline;_computeBindGroup;constructor(e,t){let r=R.device;this._computePipeline=r.createComputePipeline({layout:"auto",compute:{module:r.createShaderModule({code:e}),entryPoint:"CsMain"}}),this._computeBindGroup=r.createBindGroup({layout:this._computePipeline.getBindGroupLayout(0),entries:t})}compute(e,t,r,i){let a=e.beginComputePass();return a.setPipeline(this._computePipeline),a.setBindGroup(0,this._computeBindGroup),a.dispatchWorkgroups(t,r,i),a.end(),this}}class Um extends Xr{numJoint;numState;time;weight;argumentsData;_isDirty=!1;_argumentsBuffer;_argumentsBufferEntries;constructor(){super(),this.allocationMemorySet([{name:"numJoint",data:[0]},{name:"numState",data:[0]},{name:"retain1",data:[0]},{name:"retain2",data:[0]},{name:"time",data:[0,0]},{name:"weight",data:[0,0]}]),this.generateGPUBuffer()}getGPUBuffer(){return this._argumentsBuffer}getGPUBindGroupEntry(){return this._argumentsBufferEntries}updateGPUBuffer(){return this._isDirty&&(this._isDirty=!1,R.device.queue.writeBuffer(this._argumentsBuffer,0,this.shareDataBuffer)),this}allocationMemorySet(e){this.argumentsData={};let t=0;for(let r=0;r<e.length;r++){const i=e[r];t+=i.data.length}this.allocation(t*4);for(let r=0;r<e.length;r++){const i=e[r],a=i.name;this.argumentsData[a]=this.allocation_node(i.data.length*4)}}generateGPUBuffer(){let e=R.device;this._argumentsBuffer=e.createBuffer({size:this.shareDataBuffer.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!1}),this._argumentsBufferEntries={binding:0,resource:{buffer:this._argumentsBuffer,offset:0,size:this.shareDataBuffer.byteLength}}}}class xm extends Xr{numJoint;numFrame;retain0;retain1;argumentsData;_isDirty=!1;_argumentsBuffer;_argumentsBufferEntries;constructor(){super(),this.allocationMemorySet([{name:"numJoint",data:[0]},{name:"numFrame",data:[0]},{name:"retain0",data:[0]},{name:"retain1",data:[0]}]),this.generateGPUBuffer()}getGPUBuffer(){return this._argumentsBuffer}getGPUBindGroupEntry(){return this._argumentsBufferEntries}updateGPUBuffer(){this._isDirty&&(this._isDirty=!1,R.device.queue.writeBuffer(this._argumentsBuffer,0,this.shareDataBuffer))}allocationMemorySet(e){this.argumentsData={};let t=0;for(let i=0;i<e.length;i++){const a=e[i];t+=a.data.length}this.allocation(t*4);let r=this;for(let i=0;i<e.length;i++){const a=e[i],o=a.name;this.argumentsData[o]=this.allocation_node(a.data.length*4),r[o]=this.argumentsData[o]}}generateGPUBuffer(){let e=R.device;this._argumentsBuffer=e.createBuffer({size:this.shareDataBuffer.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!1}),this._argumentsBufferEntries={binding:0,resource:{buffer:this._argumentsBuffer,offset:0,size:this.shareDataBuffer.byteLength}}}}class Bm{_autoUpdate=!0;_target;_lookAtObject;_origin=new d(0,0,0);_speed=300;constructor(e=null,t=null){this._target=e,this._lookAtObject=t}get target(){return this._target}set target(e){this._target!=e&&(this._target=e)}get lookAtObject(){return this._lookAtObject}set lookAtObject(e){this._lookAtObject!=e&&(this._lookAtObject=e)}get speed(){return this._speed}set speed(e){this._speed=e}update(){}}class vm extends Pe{focus;distance=5;_camera;constructor(){super()}start(){if(this._camera=this.object3D.getOrAddComponent(Zi),!this._camera){console.error("FirstPersonCameraController need camera");return}if(!this.focus){console.error("FirstPersonCameraController need target");return}m.inputSystem.addEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.addEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.mouseDown,this)}mouseDown(e){m.inputSystem.addEventListener(k.POINTER_MOVE,this.mouseMove,this)}mouseUp(e){m.inputSystem.removeEventListener(k.POINTER_MOVE,this.mouseMove,this)}mouseMove(e){let t=this.transform.localRotation;t.y+=e.movementX*.01,t.x+=e.movementY*.01,this.transform.localRotation=t}mouseWheel(e){this.distance+=m.inputSystem.wheelDelta*.1}onUpdate(){let e=new d;this._camera.transform.forward.scaleToRef(this.distance,e);var t=this.focus.transform.worldPosition;this._camera.transform.localPosition=t}destroy(e){m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.mouseDown,this),super.destroy(e)}}var ke=(s=>(s[s.Key_BackSpace=8]="Key_BackSpace",s[s.Key_Tab=9]="Key_Tab",s[s.Key_Clear=12]="Key_Clear",s[s.Key_Enter=13]="Key_Enter",s[s.Key_Shift_L=16]="Key_Shift_L",s[s.Key_Control_L=17]="Key_Control_L",s[s.Key_Alt_L=18]="Key_Alt_L",s[s.Key_Pause=19]="Key_Pause",s[s.Key_CapsLock=20]="Key_CapsLock",s[s.Key_Escape=21]="Key_Escape",s[s.Key_Esc=27]="Key_Esc",s[s.Key_Space=32]="Key_Space",s[s.Key_Prior=33]="Key_Prior",s[s.Key_Next=34]="Key_Next",s[s.Key_End=35]="Key_End",s[s.Key_Home=36]="Key_Home",s[s.Key_Left=37]="Key_Left",s[s.Key_Up=38]="Key_Up",s[s.Key_Right=39]="Key_Right",s[s.Key_Down=40]="Key_Down",s[s.Key_Select=41]="Key_Select",s[s.Key_Print=42]="Key_Print",s[s.Key_Execute=43]="Key_Execute",s[s.Key_Insert=45]="Key_Insert",s[s.Key_Delete=46]="Key_Delete",s[s.Key_Help=47]="Key_Help",s[s.Key_0=48]="Key_0",s[s.Key_1=49]="Key_1",s[s.Key_2=50]="Key_2",s[s.Key_3=51]="Key_3",s[s.Key_4=52]="Key_4",s[s.Key_5=53]="Key_5",s[s.Key_6=54]="Key_6",s[s.Key_7=55]="Key_7",s[s.Key_8=56]="Key_8",s[s.Key_9=57]="Key_9",s[s.Key_A=65]="Key_A",s[s.Key_B=66]="Key_B",s[s.Key_C=67]="Key_C",s[s.Key_D=68]="Key_D",s[s.Key_E=69]="Key_E",s[s.Key_F=70]="Key_F",s[s.Key_G=71]="Key_G",s[s.Key_H=72]="Key_H",s[s.Key_I=73]="Key_I",s[s.Key_J=74]="Key_J",s[s.Key_K=75]="Key_K",s[s.Key_L=76]="Key_L",s[s.Key_M=77]="Key_M",s[s.Key_N=78]="Key_N",s[s.Key_O=79]="Key_O",s[s.Key_P=80]="Key_P",s[s.Key_Q=81]="Key_Q",s[s.Key_R=82]="Key_R",s[s.Key_S=83]="Key_S",s[s.Key_T=84]="Key_T",s[s.Key_U=85]="Key_U",s[s.Key_V=86]="Key_V",s[s.Key_W=87]="Key_W",s[s.Key_X=88]="Key_X",s[s.Key_Y=89]="Key_Y",s[s.Key_Z=90]="Key_Z",s[s.Key_KP_0=96]="Key_KP_0",s[s.Key_KP_1=97]="Key_KP_1",s[s.Key_KP_2=98]="Key_KP_2",s[s.Key_KP_3=99]="Key_KP_3",s[s.Key_KP_4=100]="Key_KP_4",s[s.Key_KP_5=101]="Key_KP_5",s[s.Key_KP_6=102]="Key_KP_6",s[s.Key_KP_7=103]="Key_KP_7",s[s.Key_KP_8=104]="Key_KP_8",s[s.Key_KP_9=105]="Key_KP_9",s[s.Key_Multiply=106]="Key_Multiply",s[s.Key_Add=107]="Key_Add",s[s.Key_Separator=108]="Key_Separator",s[s.Key_Subtract=109]="Key_Subtract",s[s.Key_Decimal=110]="Key_Decimal",s[s.Key_Divide=111]="Key_Divide",s[s.Key_F1=112]="Key_F1",s[s.Key_F2=113]="Key_F2",s[s.Key_F3=114]="Key_F3",s[s.Key_F4=115]="Key_F4",s[s.Key_F5=116]="Key_F5",s[s.Key_F6=117]="Key_F6",s[s.Key_F7=118]="Key_F7",s[s.Key_F8=119]="Key_F8",s[s.Key_F9=120]="Key_F9",s[s.Key_F10=121]="Key_F10",s[s.Key_F11=122]="Key_F11",s[s.Key_F12=123]="Key_F12",s[s.Key_F13=124]="Key_F13",s[s.Key_F14=125]="Key_F14",s[s.Key_F15=126]="Key_F15",s[s.Key_F16=127]="Key_F16",s[s.Key_F17=128]="Key_F17",s[s.Key_F18=129]="Key_F18",s[s.Key_F19=130]="Key_F19",s[s.Key_F20=131]="Key_F20",s[s.Key_F21=132]="Key_F21",s[s.Key_F22=133]="Key_F22",s[s.Key_F23=134]="Key_F23",s[s.Key_F24=135]="Key_F24",s[s.Key_Num_Lock=136]="Key_Num_Lock",s[s.Key_Scroll_Lock=137]="Key_Scroll_Lock",s))(ke||{});class Cm extends Pe{moveSpeed=2;targetPos=new d(0,0,10);lookAtPos=new d(0,0,0);config={shiftMoveScale:20};_moveScale=1;_dir;_mouseFactory=25;_factory=1.5;_mouseDown=!1;_lastPos;_keyState;constructor(){super(),this._lastPos=new d,this._keyState={front:!1,back:!1,left:!1,right:!1,q:!1,e:!1},this.setCamera(new d(0,0,100),new d(0,0,0))}setCamera(e,t){this.targetPos.copyFrom(e),this.lookAtPos.copyFrom(t),this.Reset()}start(){m.inputSystem.addEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.addEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.mouseDown,this),m.inputSystem.addEventListener(Cr.KEY_UP,this.keyUp,this),m.inputSystem.addEventListener(Cr.KEY_DOWN,this.keyDown,this),this.transform.lookAt(this.targetPos,this.lookAtPos)}mouseWheel(e){}keyUp(e){switch(e.keyCode){case ke.Key_W:this._keyState.front=!1;break;case ke.Key_S:this._keyState.back=!1;break;case ke.Key_A:this._keyState.left=!1;break;case ke.Key_D:this._keyState.right=!1;break;case ke.Key_Shift_L:this._moveScale=1;break;case ke.Key_Q:this._keyState.q=!1;break;case ke.Key_E:this._keyState.e=!1;break;case ke.Key_F:this.transform.lookAt(this.targetPos,this.lookAtPos);break}}keyDown(e){switch(e.keyCode){case ke.Key_W:this._keyState.front=!0;break;case ke.Key_S:this._keyState.back=!0;break;case ke.Key_A:this._keyState.left=!0;break;case ke.Key_D:this._keyState.right=!0;break;case ke.Key_Q:this._keyState.q=!0;break;case ke.Key_E:this._keyState.e=!0;break;case ke.Key_Shift_L:this._moveScale=this.config.shiftMoveScale}}Reset(){this._lastPos.x=m.inputSystem.mouseLastX,this._lastPos.y=m.inputSystem.mouseLastY}mouseDown(e){this.Reset(),this._mouseDown=!0}mouseUp(e){this.Reset(),this._mouseDown=!1}get factory(){return this._factory}set factory(e){this._factory=e}get mouseFactory(){return this._mouseFactory}set mouseFactory(e){this._mouseFactory=e}internal(e,t,r){return(t-e)*r}onUpdate(){let e=this.transform,t=ie(be.delta,0,.016);if(this._mouseDown&&(e.rotationY-=this.internal(e.rotationY+(m.inputSystem.mouseLastX-this._lastPos.x)*.25,e.rotationY,t*this._mouseFactory),e.rotationX-=this.internal(e.rotationX+(m.inputSystem.mouseLastY-this._lastPos.y)*.25,e.rotationX,t*this._mouseFactory),this.Reset()),this._keyState.front){let r=e.forward;e.x-=this.internal(e.x+r.x*this.moveSpeed*this._moveScale,e.x,t*this._factory),e.y-=this.internal(e.y+r.y*this.moveSpeed*this._moveScale,e.y,t*this._factory),e.z-=this.internal(e.z+r.z*this.moveSpeed*this._moveScale,e.z,t*this._factory)}if(this._keyState.back){let r=e.forward;e.x+=this.internal(e.x+r.x*this.moveSpeed*this._moveScale,e.x,t*this._factory),e.y+=this.internal(e.y+r.y*this.moveSpeed*this._moveScale,e.y,t*this._factory),e.z+=this.internal(e.z+r.z*this.moveSpeed*this._moveScale,e.z,t*this._factory)}if(this._keyState.left){let r=e.left;e.x+=this.internal(e.x+r.x*this.moveSpeed*this._moveScale,e.x,t*this._factory),e.y+=this.internal(e.y+r.y*this.moveSpeed*this._moveScale,e.y,t*this._factory),e.z+=this.internal(e.z+r.z*this.moveSpeed*this._moveScale,e.z,t*this._factory)}if(this._keyState.right){let r=e.left;e.x-=this.internal(e.x+r.x*this.moveSpeed*this._moveScale,e.x,t*this._factory),e.y-=this.internal(e.y+r.y*this.moveSpeed*this._moveScale,e.y,t*this._factory),e.z-=this.internal(e.z+r.z*this.moveSpeed*this._moveScale,e.z,t*this._factory)}this._keyState.q&&(e.y=bi(e.y,e.y-this.moveSpeed*this._moveScale,t*this._factory)),this._keyState.e&&(e.y=bi(e.y,e.y+this.moveSpeed*this._moveScale,t*this._factory))}destroy(e){m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.mouseDown,this),m.inputSystem.removeEventListener(Cr.KEY_UP,this.keyUp,this),m.inputSystem.removeEventListener(Cr.KEY_DOWN,this.keyDown,this),super.destroy(e)}}class ba{static add(e,t,r){return r||(r=new d),r.x=e.x+t.x,r.y=e.y+t.y,r.z=e.z+t.z,r}static sub(e,t,r){return r||(r=new d),r.x=e.x-t.x,r.y=e.y-t.y,r.z=e.z-t.z,r}static mul(e,t,r){return r||(r=new d),r.x=e.x*t.x,r.y=e.y*t.y,r.z=e.z*t.z,r}static mulScale(e,t,r){return r||(r=new d),r.x=e.x*t,r.y=e.y*t,r.z=e.z*t,r}static div(e,t,r){return r||(r=new d),r.x=e.x/t.x,r.y=e.y/t.y,r.z=e.z/t.z,r}static normalize(e){return e.clone().normalize()}static dot(e,t){let r=d.HELP_0;return r.copyFrom(e),r.dotProduct(t)}static calculateVectorAngle_xz(e,t){return Math.acos((e.x*t.x+e.y*t.y)/Math.sqrt((e.x*e.x+e.y*e.y)*(t.x*t.x+t.y*t.y)))}static distance(e,t){return d.distance(e,t)}static getRandomXYZ(e=-100,t=100){return new d(Math.random()*(t-e)+e,Math.random()*(t-e)+e,Math.random()*(t-e)+e)}static getRandomV3(e=-100,t=100,r,i){return new d(Math.random()*t+e,Math.random()*i+r,Math.random()*t+e)}static sphere(e){let t=e*Math.random(),r=new d(Math.random()*1-.5,Math.random()*1-.5,Math.random()*1-.5);return r.normalize(),r.scaleBy(t),r}static sphereXYZ(e,t,r=1,i=1,a=1){let o=e+(t-e)*Math.random(),n=new d(Math.random()*r-r*.5,Math.random()*i-i*.5,Math.random()*a-a*.5);return n.normalize(),n.scaleBy(o),n}}class Sm extends Pe{camera;minDistance=.1;maxDistance=500;rollSmooth=15;dragSmooth=20;wheelSmooth=10;wheelStep=.002;mouseRightFactor=.25;mouseLeftFactor=20;smooth=!0;_wheelStep=.002;_distance=0;distance=10;_roll=0;roll=0;_pitch=0;pitch=0;_currentPos;_targetPos;_flowTarget;_flowOffset;_mouseLeftDown=!1;_mouseRightDown=!1;_bottomClamp=89.99;_topClamp=-89.99;get bottomClamp(){return this._bottomClamp}set bottomClamp(e){this._bottomClamp=e>89.99?89.99:e}get topClamp(){return this._topClamp}set topClamp(e){this._topClamp=e<-89.99?-89.99:e}_tempDir=new d;_tempPos=new d;constructor(){super(),this._currentPos=new q,this._targetPos=new q}start(){this.camera=this.object3D.getOrAddComponent(Zi),m.inputSystem.addEventListener(k.POINTER_DOWN,this.onMouseDown,this),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onMouseMove,this,null,10),m.inputSystem.addEventListener(k.POINTER_UP,this.onMouseUp,this,null,10),m.inputSystem.addEventListener(k.POINTER_WHEEL,this.onMouseWheel,this)}flowTarget(e,t=d.ZERO){this._flowTarget=e,this._flowOffset||=new d,this._flowOffset.copyFrom(t)}getFlowTarget(){return this._flowTarget}setCamera(e,t,r,i){this.roll=e,this.pitch=t,this.distance=r,this.maxDistance<r*1.5&&(this.maxDistance=r*1.5),i&&this._targetPos.transform.localPosition.copy(i)}focusByBounds(e){let t=So.genMeshBounds(e);this.focusBound(t)}focusBound(e){this.target=e.center}set target(e){this._targetPos.transform.localPosition.copy(e)}get target(){return this._targetPos.transform.localPosition}onMouseWheel(e){this.enable&&(this._wheelStep=this.wheelStep*ba.distance(this._currentPos.transform.worldPosition,this.camera.transform.worldPosition)/10,this.distance-=m.inputSystem.wheelDelta*this._wheelStep,this.distance=ie(this.distance,this.minDistance,this.maxDistance))}onMouseDown(e){if(this.enable)switch(e.mouseCode){case 0:this._mouseLeftDown=!0;break;case 1:break;case 2:this._mouseRightDown=!0;break}}onMouseUp(e){this._mouseLeftDown=!1,this._mouseRightDown=!1}onMouseMove(e){this.enable&&(this._mouseRightDown&&(d.HELP_1.x=-1*e.movementX*Math.cos(this._roll*Math.PI/180)-e.movementY*Math.sin(this._roll*Math.PI/180),d.HELP_1.z=-1*e.movementY*Math.cos(this._roll*Math.PI/180)+e.movementX*Math.sin(this._roll*Math.PI/180),this._targetPos.x+=d.HELP_1.x*this.mouseRightFactor,this._targetPos.z+=d.HELP_1.z*this.mouseRightFactor),this._mouseLeftDown&&(this.roll-=e.movementX*be.delta*.001*this.mouseLeftFactor,this.pitch-=e.movementY*be.delta*.001*this.mouseLeftFactor,this.pitch=ie(this.pitch,this._topClamp,this._bottomClamp)))}onBeforeUpdate(e){if(!this.enable)return;this._flowTarget&&(d.HELP_0.copyFrom(this._flowTarget.transform.worldPosition),d.HELP_0.add(this._flowOffset,d.HELP_0),this.target=d.HELP_0);let t=ie(be.delta,0,.016);this.smooth?(this._currentPos.x+=(this._targetPos.x-this._currentPos.x)*t*this.dragSmooth,this._currentPos.y+=(this._targetPos.y-this._currentPos.y)*t*this.dragSmooth,this._currentPos.z+=(this._targetPos.z-this._currentPos.z)*t*this.dragSmooth,this._distance+=(this.distance-this._distance)*t*this.wheelSmooth,this._roll+=(this.roll-this._roll)*t*this.rollSmooth,this._pitch+=(this.pitch-this._pitch)*t*this.rollSmooth):(this._currentPos.x=this._targetPos.x,this._currentPos.y=this._targetPos.y,this._currentPos.z=this._targetPos.z,this._distance=this.distance,this._roll=this.roll,this._pitch=this.pitch),this._tempDir.set(0,0,1);let r=Z.HELP_0;r.fromEulerAngles(this._pitch,this._roll,0),this._tempDir.applyQuaternion(r),this._tempPos=ba.mulScale(this._tempDir,this._distance,this._tempPos),this._tempPos.add(this._currentPos.transform.localPosition,this._tempPos),this.camera.lookAt(this._tempPos,this._currentPos.transform.localPosition,d.UP)}destroy(e){m.inputSystem.removeEventListener(k.POINTER_DOWN,this.onMouseDown,this),m.inputSystem.removeEventListener(k.POINTER_MOVE,this.onMouseMove,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.onMouseUp,this),m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.onMouseWheel,this),super.destroy(e),this.camera=null,this._flowTarget=null}}class _m extends Pe{_camera;autoRotate=!1;autoRotateSpeed=.1;rotateFactor=.5;zoomFactor=.1;panFactor=.25;_smooth=5;_minDistance=1;_maxDistance=1e5;_maxPolarAngle=90;_minPolarAngle=-90;_target=new d(0,0,0);_cTarget=new d(0,0,0);_position=new d(0,0,0);_cPosition=new d(0,0,0);_spherical=new Fm;_isMouseDown=!1;_lastMouseX=-1;_lastMouseY=-1;_isPanning=!1;constructor(){super()}get target(){return this._target}set target(e){this._target=e}get smooth(){return this._smooth}set smooth(e){this._smooth=Math.max(e,1)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance=ie(e,2e-6,this._maxDistance)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance=ie(e,this._minDistance,1/0)}get minPolarAngle(){return this._minPolarAngle}set minPolarAngle(e){this._minPolarAngle=ie(e,-90,this._maxPolarAngle)}get maxPolarAngle(){return this._maxPolarAngle}set maxPolarAngle(e){this._maxPolarAngle=ie(e,this._minPolarAngle,90)}get spherical(){return this._spherical}start(){this._camera=this.object3D.getComponent(Zi),this._position=this.object3D.transform.localPosition.clone(),this._cPosition=this._position.clone(),this._target=this._camera.lookTarget.clone(),this._cTarget=this._target.clone(),this._spherical.setCoords(this._position.x-this._target.x,this._position.y-this._target.y,this._position.z-this._target.z),this._camera.lookAt(this._cPosition,this._cTarget,d.UP),this.addEventListener()}onEnable(){this.addEventListener()}onDisable(){this.removeEventListener()}onUpdate(){let e=this._isPanning?1:this.smooth,t=!1;this._cPosition.equals(this.object3D.transform.localPosition)||(this._position.copyFrom(this.object3D.transform.localPosition),e=1,t=!0),this._cTarget.equals(this._target)||(this._cTarget.copyFrom(this._target),e=1,t=!0),t?this._spherical.setCoords(this._position.x-this._target.x,this._position.y-this._target.y,this._position.z-this._target.z):!this._isMouseDown&&this.autoRotate&&(this._spherical.theta-=this.autoRotateSpeed*Math.PI/180,this.updateCamera());let r=(this._position.x-this._cPosition.x)/e,i=(this._position.y-this._cPosition.y)/e,a=(this._position.z-this._cPosition.z)/e;this._cPosition.x=Math.abs(r)>1e-10?this._cPosition.x+r:this._position.x,this._cPosition.y=Math.abs(i)>1e-10?this._cPosition.y+i:this._position.y,this._cPosition.z=Math.abs(a)>1e-10?this._cPosition.z+a:this._position.z,this._camera.lookAt(this._cPosition,this._cTarget,d.UP)}onWheel(e){e.deltaY=ie(e.deltaY,-this._spherical.radius,this._spherical.radius),this._spherical.radius+=e.deltaY*this.zoomFactor,this._spherical.radius=ie(this._spherical.radius,this.minDistance,this.maxDistance),this.updateCamera()}onPointerDown(e){this._isMouseDown=!0,this._lastMouseX=e.mouseX,this._lastMouseY=e.mouseY,e.mouseCode===2&&(this._isPanning=!0)}onPointerMove(e){if(!this._isMouseDown||!this.enable)return;let t=e.mouseX,r=e.mouseY;if(e.mouseCode===0&&this._lastMouseX>0&&this._lastMouseY>0){const i=-(t-this._lastMouseX)*this.rotateFactor,a=(r-this._lastMouseY)*this.rotateFactor;this._spherical.theta+=i*Math.PI/180,this._spherical.phi-=a*Math.PI/180,this._spherical.phi=ie(this._spherical.phi,this.minPolarAngle,this.maxPolarAngle),this.updateCamera()}else e.mouseCode===2&&(ba.mulScale(this.object3D.transform.up,e.movementY*this.panFactor*this._camera.aspect,d.HELP_1),e.ctrlKey||e.metaKey?this._target.y+=d.HELP_1.y:(this._target.x+=d.HELP_1.x,this._target.z+=d.HELP_1.z),ba.mulScale(this.object3D.transform.right,-e.movementX*this.panFactor,d.HELP_1),this._target.x-=d.HELP_1.x,this._target.z-=d.HELP_1.z,this._cTarget.copyFrom(this._target),this.updateCamera());this._lastMouseX=t,this._lastMouseY=r}onPointerUp(e){this._isMouseDown=!1,e.mouseCode===2&&(this._isPanning=!1)}updateCamera(){this._spherical.makeSafe();let e=this._spherical.getCoords();this._position.set(e.x+this._target.x,e.y+this._target.y,e.z+this._target.z)}addEventListener(){m.inputSystem.addEventListener(k.POINTER_WHEEL,this.onWheel,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.onPointerDown,this),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onPointerMove,this),m.inputSystem.addEventListener(k.POINTER_UP,this.onPointerUp,this)}removeEventListener(){m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.onWheel,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.onPointerDown,this),m.inputSystem.removeEventListener(k.POINTER_MOVE,this.onPointerMove,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.onPointerUp,this)}}const Uf=Math.PI/180/100;class Fm{radius;phi;theta;coords;constructor(e=1,t=0,r=0){return this.radius=e,this.phi=t,this.theta=r,this.coords=new d,this}set(e,t,r){return this.radius=e,this.phi=t,this.theta=r,this}makeSafe(){return this.phi=Math.max(Uf,Math.min(Math.PI-Uf,this.phi)),this}setFromVector3(e){return this.setCoords(e.x,e.y,e.z)}setCoords(e,t,r){return this.radius=Math.sqrt(e*e+t*t+r*r),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(e,r),this.phi=Math.acos(ie(t/this.radius,-1,1))),this}getCoords(){const e=Math.sin(this.phi)*this.radius;return this.coords.x=e*Math.sin(this.theta),this.coords.y=Math.cos(this.phi)*this.radius,this.coords.z=e*Math.cos(this.theta),this.coords}}class ym extends Pe{focus;_rotation=new d(45,0,0);distance=5;_camera;constructor(){super()}start(){if(this._camera=this.object3D.getOrAddComponent(Zi),!this._camera){console.error("ThirdPersonCameraController need camera");return}if(!this.focus){console.error("ThirdPersonCameraController need target");return}m.inputSystem.addEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.addEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.mouseDown,this)}mouseDown(e){m.inputSystem.addEventListener(k.POINTER_MOVE,this.mouseMove,this)}mouseUp(e){m.inputSystem.removeEventListener(k.POINTER_MOVE,this.mouseMove,this)}mouseMove(e){this._rotation.y+=e.movementX*.01,this._rotation.x+=e.movementY*.01}mouseWheel(e){this.distance+=m.inputSystem.wheelDelta*.1}onUpdate(){let e=new d;this._camera.transform.forward.scaleToRef(this.distance,e);var t=this.focus.transform.worldPosition;this._camera.transform.localPosition=t.subtract(e)}destroy(e){m.inputSystem.removeEventListener(k.POINTER_WHEEL,this.mouseWheel,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.mouseUp,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.mouseDown,this),super.destroy(e)}}var Le=(s=>(s[s.NORMAL=0]="NORMAL",s[s.DOWN=1]="DOWN",s[s.OVER=2]="OVER",s[s.DISABLE=3]="DISABLE",s))(Le||{});let bm=Math.PI,xf=bm*2;class Ti{a;b;c;d;tx;ty;constructor(e=1,t=0,r=0,i=1,a=0,o=0){this.a=e,this.b=t,this.c=r,this.d=i,this.tx=a,this.ty=o}clone(){return new Ti(this.a,this.b,this.c,this.d,this.tx,this.ty)}concat(e){let t=this.a,r=this.c,i=this.tx;this.a=t*e.a+this.b*e.c,this.b=t*e.b+this.b*e.d,this.c=r*e.a+this.d*e.c,this.d=r*e.b+this.d*e.d,this.tx=i*e.a+this.ty*e.c+e.tx,this.ty=i*e.b+this.ty*e.d+e.ty}copyFrom(e){return this.a=e.a,this.b=e.b,this.c=e.c,this.d=e.d,this.tx=e.tx,this.ty=e.ty,this}identity(){return this.a=this.d=1,this.b=this.c=this.tx=this.ty=0,this}invert(){this._invertInto(this)}rotate(e){if(e=+e,e!==0){e=e*it;let t=Math.cos(e),r=Math.sin(e),i=this.a,a=this.b,o=this.c,n=this.d,l=this.tx,h=this.ty;this.a=i*t-a*r,this.b=i*r+a*t,this.c=o*t-n*r,this.d=o*r+n*t,this.tx=l*t-h*r,this.ty=l*r+h*t}}scale(e,t){e!==1&&(this.a*=e,this.c*=e,this.tx*=e),t!==1&&(this.b*=t,this.d*=t,this.ty*=t)}setTo(e,t,r,i,a,o){return this.a=e,this.b=t,this.c=r,this.d=i,this.tx=a,this.ty=o,this}transformPoint(e,t,r){let i=this.a*e+this.c*t+this.tx,a=this.b*e+this.d*t+this.ty;return r?(r.setTo(i,a,0,1),r):new d(i,a,0,1)}setTranslate(e,t){this.tx=e,this.ty=t}translate(e,t){this.tx+=e,this.ty+=t}mul(e){let t=this,r=e,i=t.a,a=t.b,o=t.c,n=t.d,l=t.tx,h=t.ty,u=r.a,c=r.b,f=r.c,g=r.d,p=r.tx,A=r.ty;c!==0||f!==0?(this.a=i*u+a*f,this.b=i*c+a*g,this.c=o*u+n*f,this.d=o*c+n*g,this.tx=u*l+f*h+p,this.ty=c*l+g*h+A):(this.a=i*u,this.b=a*g,this.c=o*u,this.d=n*g,this.tx=u*l+p,this.ty=g*h+A)}equals(e){return this.a==e.a&&this.b==e.b&&this.c==e.c&&this.d==e.d&&this.tx==e.tx&&this.ty==e.ty}prepend(e,t,r,i,a,o){let n=this.tx;if(e!=1||t!=0||r!=0||i!=1){let l=this.a,h=this.c;this.a=l*e+this.b*r,this.b=l*t+this.b*i,this.c=h*e+this.d*r,this.d=h*t+this.d*i}return this.tx=n*e+this.ty*r+a,this.ty=n*t+this.ty*i+o,this}append(e){let t=this.a,r=this.b,i=this.c,a=this.d;return(e.a!=1||e.b!=0||e.c!=0||e.d!=1)&&(this.a=e.a*t+e.b*i,this.b=e.a*r+e.b*a,this.c=e.c*t+e.d*i,this.d=e.c*r+e.d*a),this.tx=e.tx*t+e.ty*i+this.tx,this.ty=e.tx*r+e.ty*a+this.ty,this}deltaTransformPoint(e){let t=this,r=t.a*e.x+t.c*e.y,i=t.b*e.x+t.d*e.y;return new d(r,i)}toString(){return"(a="+this.a+", b="+this.b+", c="+this.c+", d="+this.d+", tx="+this.tx+", ty="+this.ty+")"}createBox(e,t,r=0,i=0,a=0){let o=this;if(r!==0){r=r*it;let n=Math.cos(r),l=Math.sin(r);o.a=n*e,o.b=l*t,o.c=-l*e,o.d=n*t}else o.a=e,o.b=0,o.c=0,o.d=t;o.tx=i,o.ty=a}createGradientBox(e,t,r=0,i=0,a=0){this.createBox(e/1638.4,t/1638.4,r,i+e/2,a+t/2)}_invertInto(e){let t=this.a,r=this.b,i=this.c,a=this.d,o=this.tx,n=this.ty;if(r==0&&i==0){e.b=e.c=0,t==0||a==0?e.a=e.d=e.tx=e.ty=0:(t=e.a=1/t,a=e.d=1/a,e.tx=-t*o,e.ty=-a*n);return}let l=t*a-r*i;if(l==0){e.identity();return}l=1/l;let h=e.a=a*l;r=e.b=-r*l,i=e.c=-i*l,a=e.d=t*l,e.tx=-(h*o+i*n),e.ty=-(r*o+a*n)}getScaleX(){let e=this;if(e.a==1&&e.b==0)return 1;let t=Math.sqrt(e.a*e.a+e.b*e.b);return this.getDeterminant()<0?-t:t}getScaleY(){let e=this;if(e.c==0&&e.d==1)return 1;let t=Math.sqrt(e.c*e.c+e.d*e.d);return this.getDeterminant()<0?-t:t}getSkewX(){return Math.atan2(this.d,this.c)-Math.PI/2}getSkewY(){return Math.atan2(this.b,this.a)}updateScaleAndRotation(e,t,r,i){if((r==0||r==xf)&&(i==0||i==xf)){this.a=e,this.b=this.c=0,this.d=t;return}r=r*it,i=i*it;let a=Math.cos(r),o=Math.sin(r);r==i?(this.a=a*e,this.b=o*e):(this.a=Math.cos(i)*e,this.b=Math.sin(i)*e),this.c=-o*t,this.d=a*t}preMultiplyInto(e,t){let r=e.a*this.a,i=0,a=0,o=e.d*this.d,n=e.tx*this.a+this.tx,l=e.ty*this.d+this.ty;(e.b!==0||e.c!==0||this.b!==0||this.c!==0)&&(r+=e.b*this.c,o+=e.c*this.b,i+=e.a*this.b+e.b*this.d,a+=e.c*this.a+e.d*this.c,n+=e.ty*this.c,l+=e.tx*this.b),t.a=r,t.b=i,t.c=a,t.d=o,t.tx=n,t.ty=l}$transformBounds(e){let t=this.a,r=this.b,i=this.c,a=this.d,o=this.tx,n=this.ty,l=e.x,h=e.y,u=l+e.width,c=h+e.height,f=t*l+i*h+o,g=r*l+a*h+n,p=t*u+i*h+o,A=r*u+a*h+n,U=t*u+i*c+o,x=r*u+a*c+n,B=t*l+i*c+o,S=r*l+a*c+n,C=0;f>p&&(C=f,f=p,p=C),U>B&&(C=U,U=B,B=C),e.x=Math.floor(f<U?f:U),e.width=Math.ceil((p>B?p:B)-e.x),g>A&&(C=g,g=A,A=C),x>S&&(C=x,x=S,S=C),e.y=Math.floor(g<x?g:x),e.height=Math.ceil((A>S?A:S)-e.y)}getDeterminant(){return this.a*this.d-this.b*this.c}}class Ja extends Pe{isGUICanvas=!0;index=0;addChild(e){return this.object3D.addChild(e),this}removeChild(e){return this.object3D.removeChild(e),this}cloneTo(e){e.getOrAddComponent(Ja).copyComponent(this)}copyComponent(e){return e.index=e.index,this}}var Je=(s=>(s[s.NONE=0]="NONE",s[s.POSITION=1]="POSITION",s[s.SPRITE=2]="SPRITE",s[s.COLOR=4]="COLOR",s[s.MAX=7]="MAX",s))(Je||{});class dn{array;buffer;constructor(e){this.buffer=new ve(e,0),this.array=new Float32Array(this.buffer.memory.shareDataBuffer)}}class Bf extends Ne{_attributeUV;_attributeVIndex;_faceIndexes;_uvSize=2;_vIndexSize=1;_posAttribute;_spriteAttribute;_colorAttribute;_onPositionChange=!0;_onSpriteChange=!0;_onColorChange=!0;maxQuadCount;constructor(e){super(),this.maxQuadCount=e}updateSubGeometry(e,t,r){let i=this.subGeometries[e];if(i){let a=i.lodLevels[0];a.indexStart=t,a.indexCount=r,a.index=e}else i=this.addSubGeometry({indexStart:t,indexCount:r,vertexStart:0,vertexCount:0,firstStart:0,index:e,topology:0});return i}resetSubGeometries(){for(let e of this.subGeometries){let t=e.lodLevels[0];t.indexStart=0,t.indexCount=0,t.index=0}}updateBounds(e,t){let r=Number.MAX_VALUE*.1;return e=new d(-r,-r,-r),t=new d(r,r,r),this.bounds.setFromMinMax(e,t),this}getPositionBuffer(){return this._onPositionChange&&(this._posAttribute.buffer.apply(),this._onPositionChange=!1),this._posAttribute.buffer}getSpriteBuffer(){return this._onSpriteChange&&(this._spriteAttribute.buffer.apply(),this._onSpriteChange=!1),this._spriteAttribute.buffer}getColorBuffer(){return this._onColorChange&&(this._colorAttribute.buffer.apply(),this._onColorChange=!1),this._colorAttribute.buffer}create(){this.createBuffer(),this.updateBounds();let e=this.maxQuadCount,t=[],r=[];for(let a=0;a<e;a++)t.push(...aa.attUV);for(let a=0,o=this.maxQuadCount*aa.vertexCount;a<o;a++)r[a]=a;this._attributeUV=new Float32Array(aa.vertexCount*e*this._uvSize),this._attributeVIndex=new Float32Array(aa.vertexCount*e*this._vIndexSize),this._attributeUV.set(t,0),this._attributeVIndex.set(r,0);let i=[];for(let a=0;a<e;a++)for(let o=0;o<aa.indecies.length;o++){const n=aa.indecies[o]+a*4;i.push(n)}return this._faceIndexes=new Uint32Array(e*6),this._faceIndexes.set(i,0),this.setIndices(this._faceIndexes),this.setAttribute(V.uv,this._attributeUV),this.setAttribute(V.vIndex,this._attributeVIndex),this.updateSubGeometry(0,0,this._faceIndexes.length),this}createBuffer(){let e=this.maxQuadCount;this._posAttribute=new dn(e*4),this._spriteAttribute=new dn(e*12),this._colorAttribute=new dn(e*4)}fillQuad(e,t){e.dirtyAttributes&Je.POSITION&&this.fillQuadPosition(e,t),e.dirtyAttributes&Je.COLOR&&this.fillQuadColor(e,t),e.dirtyAttributes&Je.SPRITE&&this.fillQuadSprite(e,t)}fillQuadPosition(e,t){vf.setXYZW(this._posAttribute.array,e.z,e.left,e.bottom,e.right,e.top),this._onPositionChange=!0}fillQuadColor(e,t){let r=e.color,i=this._colorAttribute.array;vf.setXYZW(i,e.z,r.r,r.g,r.b,r.a),this._onColorChange=!0}fillQuadSprite(e,t){let r=e.sprite,i=0,a=0;r.isSliced&&e.imageType==ea.Sliced&&(i=r.trimSize.x,i=(t.width-(r.offsetSize.z-r.trimSize.x))/i,a=r.trimSize.y,a=(t.height-(r.offsetSize.w-r.trimSize.y))/a);let o=r.guiTexture.dynamicId,n=r.uvRec,l=r.uvBorder,h=this._spriteAttribute.array,u=12*e.z;h[u+0]=n.x,h[u+1]=n.y,h[u+2]=n.z,h[u+3]=n.w,h[u+4]=l.x,h[u+5]=l.y,h[u+6]=l.z,h[u+7]=l.w,h[u+8]=i,h[u+9]=a,h[u+10]=o,h[u+11]=e.visible?1:0,this._onSpriteChange=!0}}class Qm{static set(e,t,r,i,...a){let o=t*i+r;for(let n=0,l=a.length;n<l;n++)e[o+n]=a[n]}}class vf extends Qm{static setXYZW(e,t,r,i,a,o){this.set(e,t,0,4,r,i,a,o)}static setXYZ(e,t,r,i,a){this.set(e,t,0,4,r,i,a)}static setZ(e,t,r){this.set(e,t,3,4,r)}}class aa{static vertexCount=4;static attUV=[0,0,1,0,1,1,0,1];static indecies=[0,1,2,0,2,3]}class Cf{_textureMap=new Map;_textureList=[];build(e,t,r){let i=t._geometry;i.resetSubGeometries();let a=-1,o=0,n=0,l=0,h=0,u=this._textureList,c=this._textureMap;function f(){l>0&&(t.updateDrawCallSegment(h,n,l),t._uiRenderer.materials[h].setTextures(u),c.clear(),u.length=0,h++,n+=l,l=0,o=0)}c.clear(),u.length=0;let g=[],p=t.quadMaxCount-1;for(let A of e){let U=A.needUpdateQuads;g.length=0;const x=this.collectQuads(A.object3D,g);for(let B of x){let S=B.sprite.guiTexture;if(c.has(S.staticId)||(o==7&&f(),c.set(S.staticId,S),S.dynamicId=o,u[o]=S.texture,o+=1),B.z=++a,l+=6,B.cacheTextureId!=S.dynamicId&&(B.dirtyAttributes=Je.MAX,B.cacheTextureId=S.dynamicId),(U||r)&&(B.dirtyAttributes=Je.MAX),B.dirtyAttributes&Je.POSITION&&B.applyTransform(A),B.dirtyAttributes&&B.writeToGeometry(i,A),a==p)return f(),!0}}return f(),!1}collectQuads(e,t){t||=[];let r=e.components.values();for(let i of r){let a=i;if(a.isUIShadow||!a.mainQuads)continue;let o=a.getShadowRender();o&&this.push(o.mainQuads,t),this.push(a.mainQuads,t)}return t}push(e,t){e&&e.length>0&&t.push(...e)}}class gn{static bindTextureArray(){let e="";for(let t=0;t<7;t++)e+=`
|
|
11209
11209
|
@group(1) @binding(auto)
|
|
11210
11210
|
var tex_${t}Sampler: sampler;
|
|
11211
11211
|
@group(1) @binding(auto)
|
|
@@ -11453,9 +11453,9 @@ fn frag(){
|
|
|
11453
11453
|
}
|
|
11454
11454
|
|
|
11455
11455
|
${this.fs}
|
|
11456
|
-
`}class pn extends yt{_scissorRect;_screenSize=new K(1024,768);_scissorEnable=!1;constructor(e){super(),O.register("GUI_shader_view",gn.GUI_shader_view),O.register("GUI_shader_world",gn.GUI_shader_world);let t=new pt;this.addColorPass(t,H.COLOR,e),this.addColorPass(t,H.UI,e),this.shader=t}addColorPass(e,t,r){let i=r==jt.View?"GUI_shader_view":"GUI_shader_world",a=new Oe(i,i);a.passType=t,a.setShaderEntry("VertMain","FragMain"),a.setUniformVector4("scissorRect",new $),a.setUniformVector2("screenSize",this._screenSize),a.setUniformFloat("scissorCornerRadius",0),a.setUniformFloat("scissorFadeOutSize",0),a.setUniformFloat("pixelRatio",1),a.setUniformVector3("v3",d.ZERO);let o=a.shaderState;o.depthWriteEnabled=!1,a.blendMode=ae.NORMAL,a.depthCompare=r==jt.View?rt.always:rt.less_equal,a.cullMode=Jt.back,e.addRenderPass(a)}setPanelRatio(e){this.shader.setUniformFloat("pixelRatio",e)}setScissorRect(e,t,r,i){this._scissorRect||=new $,this._scissorRect.set(e,t,r,i),this.shader.setUniformVector4("scissorRect",this._scissorRect)}setScissorEnable(e){this._scissorEnable!=e&&(this._scissorEnable=e,e?this.shader.setDefine("SCISSOR_ENABLE",!0):this.shader.deleteDefine("SCISSOR_ENABLE"),this.shader.noticeValueChange())}setScissorCorner(e,t){this.shader.setUniformFloat("scissorCornerRadius",e),this.shader.setUniformFloat("scissorFadeOutSize",t)}setScreenSize(e,t){return this._screenSize.set(e,t),this.shader.setUniformVector2("screenSize",this._screenSize),this}setTextures(e){for(let t=0;t<7;t++){let r=e[t]||m.res.whiteTexture;this.shader.setTexture(`tex_${t}`,r),this.setVideoTextureDefine(t,r.isVideoTexture)}}_videoTextureFlags={};setVideoTextureDefine(e,t){let r=!1;t!=this._videoTextureFlags[e]&&(t?this.shader.setDefine(`VideoTexture${e}`,!0):this.shader.deleteDefine(`VideoTexture${e}`),this._videoTextureFlags[e]=t,r=!0),r&&this.shader.noticeValueChange()}set envMap(e){}set shadowMap(e){}set baseMap(e){}set normalMap(e){}set emissiveMap(e){}set irradianceMap(e){}set irradianceDepthMap(e){}}class Sf extends j{_guiGeometry;init(e){super.init(),this.addRendererMask(Be.UI),this.removeRendererMask(Be.Default),this.castGI=!1,this.castShadow=!1,this.alwaysRender=!0,this._ignoreEnvMap=this._ignorePrefilterMap=!0}get geometry(){return super.geometry}set geometry(e){super.geometry=e,this._guiGeometry=e}nodeUpdate(e,t,r,i){for(let a=0;a<this.materials.length;a++){let n=this.materials[a].getPass(t),l=this._guiGeometry.getPositionBuffer(),h=this._guiGeometry.getSpriteBuffer(),u=this._guiGeometry.getColorBuffer();if(n)for(let c=0;c<n.length;c++){const f=n[c];f.pipeline||(f.setStorageBuffer("vPositionBuffer",l),f.setStorageBuffer("vSpriteBuffer",h),f.setStorageBuffer("vColorBuffer",u))}}super.nodeUpdate(e,t,r,i)}onUpdate(e){}}class _f{_use;_unUse;constructor(){this._use=[],this._unUse=[]}pushBack(e){let t=this._use.indexOf(e);t!=-1&&(this._use.splice(t,1),this._unUse.push(e))}getUseList(){return this._use}getOne(e,t){let r;return this._unUse.length>0?(r=this._unUse[0],this._unUse.splice(0,1),this._use.push(r),r):(r=new e(t),this._use.push(r),r)}hasFree(){return this._unUse.length>0}}let Qa;class Ir{x=0;y=0;z=0;width=1;height=1;_globalX=0;_globalY=0;_globalWidth=0;_globalHeight=0;_visible=!0;_offsetX=0;_offsetY=0;_sprite=m.res.defaultGUISprite;_color=new P(1,1,1,1);_imageType=ea.Simple;dirtyAttributes=Je.MAX;cacheTextureId=-1;static textPool;static get quadPool(){return this.textPool||=new _f,this.textPool}static recycleQuad(e){e.sprite=null,e.dirtyAttributes=Je.MAX,e.x=0,e.y=0,e.z=-1,e.cacheTextureId=-1,Ir.quadPool.pushBack(e)}static spawnQuad(){return Ir.quadPool.getOne(Ir)}get imageType(){return this._imageType}set imageType(e){this._imageType=e,this.setAttrChange(Je.SPRITE|Je.POSITION)}get color(){return this._color}set color(e){this._color.copyFrom(e),this.setAttrChange(Je.COLOR)}get visible(){return this._visible}set visible(e){e!=this._visible&&(this._visible=e,this.setAttrChange(Je.SPRITE))}get sprite(){return this._sprite}set sprite(e){this._sprite!=e&&(this._sprite=e,this.setAttrChange(Je.SPRITE|Je.POSITION))}get left(){return this._globalX-this._offsetX}get right(){return this.left+this._globalWidth}get top(){return this._globalY-this._offsetY}get bottom(){return this.top+this._globalHeight}setSize(e,t){this.width=e,this.height=t,this.setAttrChange(Je.POSITION)}setXY(e,t){this.x=e,this.y=t,this.setAttrChange(Je.POSITION)}setAttrChange(e){this.dirtyAttributes=this.dirtyAttributes|e}applyTransform(e){this.setAttrChange(Je.POSITION);let t=this._sprite,r=e.getWorldMatrix();(this.x!=0||this.y!=0)&&(r=this.getQuadMatrix(r));let i=r.getScaleX(),a=r.getScaleY(),o=t.isSliced&&this._imageType==ea.Sliced;if(this._offsetX=e.width*.5*i,this._offsetY=e.height*.5*a,o)this._globalWidth=i*(e.width-(t.offsetSize.z-t.trimSize.x)),this._globalHeight=a*(e.height-(t.offsetSize.w-t.trimSize.y)),this._globalX=r.tx+t.offsetSize.x*i,this._globalY=r.ty+t.offsetSize.y*a;else{let n=this.width/t.offsetSize.z,l=this.height/t.offsetSize.w;this._globalWidth=i*t.trimSize.x*n,this._globalHeight=a*t.trimSize.y*l,this._globalX=r.tx+t.offsetSize.x*n*i,this._globalY=r.ty+t.offsetSize.y*l*a}return this}getQuadMatrix(e){return Qa||=new Ti,Qa.identity(),Qa.setTranslate(this.x,this.y),Qa.mul(e),Qa}writeToGeometry(e,t){return e.fillQuad(this,t),this.dirtyAttributes=Je.NONE,this}}class mn extends Pe{_uiTransform;_visible=!0;destroy(){this._uiTransform.setNeedUpdateUIPanel(),super.destroy()}get uiTransform(){return this._uiTransform}get visible(){return this._visible}set visible(e){this._visible!=e&&(this._visible=e,this.onUIComponentVisible?.(this._visible))}init(e){super.init?.(e),this._uiTransform=this.object3D.getOrAddComponent(Gr),this._uiTransform.setNeedUpdateUIPanel()}copyComponent(e){return this.visible=e.visible,this}}class Ra extends mn{_mainQuads;_shadowRender;_shadowSource;isUIShadow;isShadowless;needUpdateShadow;init(e){super.init?.(e),this._mainQuads=[]}destroy(){this.detachQuads(),this._shadowRender?.setShadowSource(null),this._shadowSource?.setShadowRenderer(null),super.destroy(),this._shadowRender=null,this._shadowSource=null}start(){super.start?.(),this.isUIShadow?this.autoBindShadow(null,this):this.isShadowless||this.autoBindShadow(this,null),this.setShadowDirty()}setShadowDirty(){this._shadowRender&&(this._shadowRender.needUpdateShadow=!0)}get mainQuads(){return this._mainQuads}setShadowRenderer(e){this._shadowRender=e}setShadowSource(e){this._shadowSource=e}getShadowRender(){return this._shadowRender}autoBindShadow(e,t){let r=this.object3D.components.values();if(!e)for(let i of r){let a=i;if(!(a.isShadowless||a.isUIShadow)&&a.mainQuads){e=a;break}}if(!t)for(let i of r){let a=i;if(a.isUIShadow&&a.mainQuads){t=a;break}}return e&&t?(e.setShadowRenderer(t),t.setShadowSource(e),!0):!1}recycleQuad(e){if(e&&this._mainQuads){let t=this._mainQuads.indexOf(e);t>=0?(this._mainQuads.splice(t,1),Ir.recycleQuad(e)):e=null}return e}attachQuad(e){return this._mainQuads&&this._mainQuads.push(e),this}detachQuads(){if(this._mainQuads)for(;this._mainQuads.length>0;){let e=this._mainQuads.shift();this.recycleQuad(e)}return this}copyComponent(e){return super.copyComponent(e),this.isUIShadow=e.isUIShadow,this.isShadowless=e.isShadowless,this}}class Di extends Ra{init(e){super.init?.(e),this.attachQuad(Ir.spawnQuad()),this.sprite=m.res.defaultGUISprite}cloneTo(e){e.getOrAddComponent(Di).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.sprite=e.sprite,this.color=e.color,this.imageType=e.imageType,this}set sprite(e){e||=m.res.defaultGUISprite;for(let t of this._mainQuads)t.sprite=e,t.setSize(this._uiTransform.width,this._uiTransform.height);this.setShadowDirty()}onTransformResize(){this.applyTransformSize()}applyTransformSize(){for(let e of this._mainQuads)e.setSize(this._uiTransform.width,this._uiTransform.height);this.setShadowDirty()}get sprite(){return this._mainQuads[0].sprite}onUIComponentVisible(e){this.applyComponentVisible()}onUITransformVisible(e){this.applyComponentVisible()}applyComponentVisible(){let e=!this._visible||!this._uiTransform.globalVisible;for(let t of this._mainQuads)t.visible=!e;this.setShadowDirty()}get color(){return this._mainQuads[0].color}set color(e){for(let t of this._mainQuads)t.color=e;this.setShadowDirty()}get imageType(){return this._mainQuads[0].imageType}set imageType(e){for(let t of this._mainQuads)t.imageType=e;this.setShadowDirty()}}class Za extends Di{space=jt.World;needUpdateGeometry=!0;panelOrder=0;needSortOnCameraZ;_billboard;_rebuild;scissorEnable=!1;scissorCornerRadius=0;scissorFadeOutSize=0;_uiRenderer;_geometry;_maxCount=128;panelRatio=1;isUIPanel=!0;cloneTo(e){e.getOrAddComponent(Za).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.panelOrder=e.panelOrder,this.needSortOnCameraZ=e.needSortOnCameraZ,this.cullMode=e.cullMode,this.billboard=e.billboard,this.scissorEnable=e.scissorEnable,this.scissorCornerRadius=e.scissorCornerRadius,this.scissorFadeOutSize=e.scissorFadeOutSize,this}init(e){super.init(e),this._uiTransform.resize(R.canvas.width,R.canvas.height),this.create(this.space),this.visible=!1}updateDrawCallSegment(e,t,r){this._geometry.updateSubGeometry(e,t,r);let i=this._uiRenderer.material,a=this._uiRenderer.materials[e];if(!a){a=new pn(this.space);let o=this._uiRenderer.materials.slice();o.push(a),this._uiRenderer.materials=o,a.cullMode=i.cullMode,a.depthCompare=i.depthCompare}}create(e){this._maxCount=this.space==jt.World?Ii.quadMaxCountForWorld:Ii.quadMaxCountForView,this._uiRenderer=this.object3D.addComponent(Sf),this._geometry=this._uiRenderer.geometry=new Bf(this._maxCount).create(),this._uiRenderer.material=new pn(e),this._uiRenderer.renderOrder=Ii.SortOrderStartWorld,this._rebuild=new Cf,this.object3D.bound=new Re(new d,new d(1,1,1).multiplyScalar(Number.MAX_VALUE*.1))}get quadMaxCount(){return this._maxCount}get renderer(){return this._uiRenderer}set billboard(e){this.space==jt.View&&(e=ii.None,console.warn("Cannot enable billboard in view space")),e==ii.BillboardXYZ||e==ii.BillboardY?(this._billboard=this.object3D.getOrAddComponent(Wa),this._billboard.type=e):(this.object3D.removeComponent(Wa),this._billboard=null)}get billboard(){return this._billboard?this._billboard.type:ii.None}set cullMode(e){if(this.space==jt.World)for(let t of this._uiRenderer.materials)t.cullMode=e;else console.warn("Cannot change cullMode in view space")}get cullMode(){return this._uiRenderer.material.cullMode}onUpdate(e){super.onUpdate?.(e),this.rebuildGUIMesh(e)}_collectTransform=[];rebuildGUIMesh(e){let t=this,r=t._collectTransform;if(r.length=0,t.object3D.getComponents(Gr,r),r.length>0){t._rebuild.build(r,t,t.needUpdateGeometry);for(const n of r)n.needUpdateQuads=!1}let i=t.object3D.getComponentFromParent(Ja),a=i?i.index:0;t._uiRenderer.enable=r.length>0;let o=t.isViewPanel?Ii.SortOrderStartView:Ii.SortOrderStartWorld;if(t._uiRenderer.renderOrder=a*Ii.SortOrderCanvasSpan+o+t.panelOrder,t._uiRenderer.needSortOnCameraZ=t.needSortOnCameraZ,this.space==jt.View){let n=R.canvas.clientWidth,l=R.canvas.clientHeight,h=this._uiTransform.width,u=this._uiTransform.height;this.panelRatio=this.updateGUIPixelRatio(n,l,h,u)}else this.panelRatio=1;for(let n of t._uiRenderer.materials){let l=n;if(l.setPanelRatio(this.panelRatio),l.setScreenSize(R.canvas.clientWidth,R.canvas.clientHeight),l.setScissorEnable(t.scissorEnable),t.scissorEnable){let h=t.mainQuads[0];l.setScissorRect(h.left,h.bottom,h.right,h.top),l.setScissorCorner(t.scissorCornerRadius,t.scissorFadeOutSize)}}t.needUpdateGeometry=!1}updateGUIPixelRatio(e,t,r,i){let a=r/i,o=e/t,n=1;return a<o?n=t/i:n=e/r,n}}class ks extends Za{isViewPanel=!0;space=jt.View;constructor(){super()}cloneTo(e){e.getOrAddComponent(ks).copyComponent(this)}}class Ls extends Za{isWorldPanel=!0;space=jt.World;_depthTest=!0;constructor(){super()}cloneTo(e){e.getOrAddComponent(Ls).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.depthTest=e.depthTest,this}get depthTest(){return this._depthTest}set depthTest(e){if(this._depthTest!=e){this._depthTest=e;let t=this.depthTest?rt.less_equal:rt.always;for(let r of this._uiRenderer.materials)r.depthCompare=t}}}let Ff;class Gr extends Pe{useParentPivot=!1;parent;pivotX=.5;pivotY=.5;_width=100;_height=100;_localVisible=!0;_globalVisible=!0;_uiInteractiveList;get uiInteractiveList(){return this._uiInteractiveList}constructor(){super(),this._localMatrix=new Ti,this._worldMatrix=new Ti}init(e){super.init(e),this.transform.eventDispatcher.addEventListener(this.transform.eventLocalChange.type,this.onTransformChange,this),this.onParentChange(null,this.object3D.parent?.object3D)}onTransformChange(e){this.onChange=!0}addUIInteractive(e){return this._uiInteractiveList||=[],this._uiInteractiveList.push(e),this}removeUIInteractive(e){if(this._uiInteractiveList){let t=this._uiInteractiveList.indexOf(e);if(t>=0)return this._uiInteractiveList.slice(t,1),e}return null}get globalVisible(){return this._globalVisible}set visible(e){if(this._localVisible!=e){this._localVisible=e;let t=this.parent?this.parent._globalVisible:!0;this.onUITransformVisible(this._localVisible&&t)}}get visible(){return this._localVisible}onUITransformVisible(e){let t=this._localVisible&&e;t!=this._globalVisible&&(this._globalVisible=t,this.object3D.components.forEach((r,i)=>{let a=r;if(a.onUITransformVisible)if(a==this)for(let o of this.object3D.entityChildren){let n=o.getComponent(Gr);n&&n.onUITransformVisible(this._globalVisible)}else a.onUITransformVisible(this._globalVisible)}))}onParentChange(e,t){this.parent?.setNeedUpdateUIPanel(),this.parent=t?.getComponent(Gr),this.parent?.setNeedUpdateUIPanel()}get width(){return this._width}get height(){return this._height}resize(e,t){if(this._width!=e||this._height!=t){this._width=e,this._height=t,this.onChange=!0;for(let r of this.object3D.components.values())r.onTransformResize?.();return!0}return!1}get x(){return this.object3D.x}set x(e){e!=this.object3D.x&&(this.object3D.x=e,this.onChange=!0)}get y(){return this.object3D.y}set y(e){e!=this.object3D.y&&(this.object3D.y=e,this.onChange=!0)}setXY(e,t){let r=this.object3D.localPosition;r.set(e,t,r.z),this.object3D.localPosition=r,this.onChange=!0}get z(){return this.object3D.z}set z(e){e!=this.object3D.z&&(this.object3D.z=e,this.onChange=!0)}get scaleX(){return this.object3D.scaleX}set scaleX(e){this.onChange=!0,this.object3D.scaleX=e}get scaleY(){return this.object3D.scaleY}set scaleY(e){this.onChange=!0,this.object3D.scaleY=e}get scaleZ(){return this.object3D.scaleZ}set scaleZ(e){this.onChange=!0,this.object3D.scaleZ=e}_localMatrix;_worldMatrix;_onChange=!0;needUpdateQuads=!0;get onChange(){return this._onChange}_tempTransforms=[];set onChange(e){if(this._onChange!=e&&(this._onChange=e,e)){this._tempTransforms.length=0;let t=this.object3D.getComponents(Gr,this._tempTransforms,!0);for(let r of t)r._onChange=!0,r.needUpdateQuads=!0}}onEnable(){this.setNeedUpdateUIPanel(),this.onChange=!0}onDisable(){this.setNeedUpdateUIPanel(),this.onChange=!0}setNeedUpdateUIPanel(){let e;e=this.object3D.getComponentFromParent(Ls),e||(e=this.object3D.getComponentFromParent(ks)),e&&(e.needUpdateGeometry=!0)}cloneTo(e){let t=e.getOrAddComponent(Gr);t.visible=this.visible,t.x=this.x,t.y=this.y,t.z=this.z,t.resize(this.width,this.height),t.pivotX=this.pivotX,t.pivotY=this.pivotY,t.scaleX=this.scaleX,t.scaleY=this.scaleY}matrix(){let e=this._localMatrix,t=this.object3D.rotationZ;return this.parent?(e.updateScaleAndRotation(this.object3D.scaleX,this.object3D.scaleY,t,t),e.tx=this.object3D.x,e.ty=this.object3D.y):e.updateScaleAndRotation(1,1,0,0),(this.pivotX!=.5||this.pivotY!=.5)&&(Ff||=new Ti().identity(),e.mul(Ff.setTo(1,0,0,1,-(this.pivotX-.5)*this.width,-(this.pivotY-.5)*this.height))),e}getWorldMatrix(){let e=this,t=e._worldMatrix;return this._onChange&&(t.copyFrom(e.matrix()),e.parent&&t.mul(e.parent.getWorldMatrix()),e._onChange=!1),t}beforeDestroy(e){this.transform.eventDispatcher.addEventListener(this.transform.eventLocalChange.type,this.onTransformChange,this),super.beforeDestroy?.(e)}}class yf{_ray;_mouseCode;_clickEvent;_outEvent;_overEvent;_upEvent;_downEvent;_view;init(e){this._view=e,this._ray=new $t,this._clickEvent=new lt(lt.PICK_CLICK_GUI),this._outEvent=new lt(lt.PICK_OUT_GUI),this._overEvent=new lt(lt.PICK_OVER_GUI),this._upEvent=new lt(lt.PICK_UP_GUI),this._downEvent=new lt(lt.PICK_DOWN_GUI),m.inputSystem.addEventListener(k.POINTER_DOWN,this.onTouchDown,this,null,1),m.inputSystem.addEventListener(k.POINTER_UP,this.onTouchUp,this,null,1),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onTouchMove,this,null,1),m.inputSystem.addEventListener(k.POINTER_CLICK,this.onTouchClick,this,null,1)}_lastDownTarget;_lastOverTarget;onTouchClick(e){this._lastOverTarget&&e.stopImmediatePropagation()}onTouchMove(e){this._mouseCode=e.mouseCode,this.collectEntities();let t=this.pick(this._colliderOut);if(t){e.stopImmediatePropagation();let r=t.collider;r!=this._lastOverTarget&&(r.mouseStyle=Le.OVER,Object.assign(this._overEvent,e),this._overEvent.type=lt.PICK_OVER_GUI,this._overEvent.target=r.object3D,this._overEvent.data=t,r.object3D.dispatchEvent(this._overEvent),this._lastOverTarget&&(this._lastOverTarget.mouseStyle=Le.NORMAL,Object.assign(this._outEvent,e),this._outEvent.type=lt.PICK_OUT_GUI,this._outEvent.target=r.object3D,this._outEvent.data=t,this._lastOverTarget.object3D.dispatchEvent(this._outEvent))),this._lastOverTarget=r}else this._lastOverTarget&&(this._lastOverTarget.mouseStyle=Le.NORMAL,Object.assign(this._outEvent,e),this._outEvent.type=lt.PICK_OUT_GUI,this._outEvent.target=this._lastOverTarget.object3D,this._outEvent.data=t,this._lastOverTarget.object3D.dispatchEvent(this._outEvent),this._lastOverTarget=null)}_lastDownPosition=new K;_calcDistanceVec2=new K;_lastDownTime=0;_clickTimeSpan=200;_clickDistanceSpan=10;onTouchDown(e){this._lastDownTime=be.time,this._lastDownPosition.set(e.mouseX,e.mouseY),this._mouseCode=e.mouseCode,this.collectEntities();let t=this.pick(this._colliderOut);t&&e.stopImmediatePropagation();let r=t?t.collider:null;r&&(r.mouseStyle=Le.DOWN,Object.assign(this._downEvent,e),this._downEvent.type=lt.PICK_DOWN_GUI,this._downEvent.target=r.object3D,this._downEvent.data=t,r.object3D.dispatchEvent(this._downEvent)),this._lastDownTarget=r}onTouchUp(e){this._calcDistanceVec2.set(e.mouseX,e.mouseY),this._mouseCode=e.mouseCode,this.collectEntities();let t=this.pick(this._colliderOut);t&&e.stopImmediatePropagation();let r=t?t.collider:null;this._lastDownTarget&&this._lastDownTarget.enable&&(this._lastDownTarget.mouseStyle=Le.NORMAL),r&&r==this._lastDownTarget&&be.time-this._lastDownTime<=this._clickTimeSpan&&(this._calcDistanceVec2.set(e.mouseX,e.mouseY),this._calcDistanceVec2.distance(this._lastDownPosition)<=this._clickDistanceSpan&&(Object.assign(this._clickEvent,e),this._clickEvent.type=lt.PICK_CLICK_GUI,this._clickEvent.target=r.object3D,this._clickEvent.data=t,r.object3D.dispatchEvent(this._clickEvent))),this._lastDownTarget=null}_colliderOut=[];_transformList=[];_sortWorldPanelList=[];_iteractive2PanelDict=new Map;collectEntities(){return this._colliderOut.length=0,this._sortWorldPanelList.length=0,this._iteractive2PanelDict.clear(),this._view.canvasList.slice().reverse().forEach(t=>{if(t&&t.transform&&t.transform.parent){let r=t.object3D.getComponentsByProperty("isUIPanel",!0,!0);r.sort((i,a)=>{let o=i._uiRenderer.__renderOrder,n=a._uiRenderer.__renderOrder;return o>n?-1:1});for(let i of r){this._transformList.length=0,i.object3D.getComponents(Gr,this._transformList),this._transformList.reverse();for(const a of this._transformList){let o=a.uiInteractiveList;if(o&&o.length>0)for(let n of o)this._colliderOut.push(n),this._iteractive2PanelDict.set(n,i)}}}}),this._colliderOut}pick(e){this._ray=this._view.camera.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY);let t=new K(m.inputSystem.mouseX,m.inputSystem.mouseY),r=new K(R.canvas.clientWidth,R.canvas.clientHeight),i;for(const a of e)if(a.interactive&&a.enable&&a.interactiveVisible){let o=this._iteractive2PanelDict.get(a);if(i=a.rayPick(this._ray,o,t,r),i)return i.collider=a,i}return null}}var bf=(s=>(s[s.COLLINEAR=0]="COLLINEAR",s[s.LINES_INTERSECT=1]="LINES_INTERSECT",s[s.SEGMENTS_INTERSECT=2]="SEGMENTS_INTERSECT",s[s.A_BISECTS_B=3]="A_BISECTS_B",s[s.B_BISECTS_A=4]="B_BISECTS_A",s[s.PARALELL=5]="PARALELL",s))(bf||{}),Qf=(s=>(s[s.ON_LINE=0]="ON_LINE",s[s.LEFT_SIDE=1]="LEFT_SIDE",s[s.RIGHT_SIDE=2]="RIGHT_SIDE",s))(Qf||{});class ot{static cacluteLine0=new ot(null,null);static cacluteLine1=new ot(null,null);start;end;color=new P(1,1,1,1);_normal;_normalCalculated=!1;constructor(e,t){this.start=e,this.end=t}set(e,t){this.start=e,this.end=t}getCenter(){let e=d.HELP_0;return this.start.subtract(this.end,e),e.scaleBy(.5),e.add(this.end),e}inverse(){let e=this.start;this.start=this.end,this.end=e}equals(e){return this.start==e.start&&this.end==e.end||this.start==e.end&&this.end==e.start}toArray(){return[this.start.x,this.start.y,this.start.z,this.end.x,this.end.y,this.end.z]}static getLines(e){let t=[];for(let r=0;r<e.length;r++){let i=r,a=uo(r+1,e.length),o=e[i],n=e[a];t.push(new ot(o,n))}return t}intersection(e,t=null){var r=(e.end.z-e.start.z)*(this.end.x-this.start.x)-(e.end.x-e.start.x)*(this.end.z-this.start.z),i=(e.end.x-e.start.x)*(this.start.z-e.start.z)-(e.end.z-e.start.z)*(this.start.x-e.start.x),a=(e.start.x-this.start.x)*(this.end.z-this.start.z)-(e.start.z-this.start.z)*(this.end.x-this.start.x);if(r==0)return i==0&&a==0?0:5;i=i/r,a=a/r;var o=this.start.x+i*(this.end.x-this.start.x),n=this.start.z+i*(this.end.z-this.start.z);return t!=null&&(t.x=o,t.y=0,t.z=n),i>=0&&i<=1&&a>=0&&a<=1?2:a>=0&&a<=1?3:i>=0&&i<=1?4:1}getDirection(){var e=this.end.subtract(this.start),t=new d(e.x,e.y);return t.normalize()}copyFrom(e){this.start||(this.start=new d),this.end||(this.end=new d),this.start.copyFrom(e.start),this.end.copyFrom(e.end)}static IsEqual(e,t){return Math.abs(e-t)<1e-7}static squreDistanceSegmentToSegment(e,t,r){let i=e.start,a=e.end,o=t.start,n=t.end,l=i.x,h=i.y,u=i.z,c=a.x,f=a.y,g=a.z,p=o.x,A=o.y,U=o.z,x=n.x,B=n.y,S=n.z,C=c-l,_=f-h,y=g-u,b=x-p,w=B-A,Q=S-U,E=l-p,M=h-A,z=u-U,Y=C*C+_*_+y*y,ee=C*b+_*w+y*Q,oe=b*b+w*w+Q*Q,te=C*E+_*M+y*z,ge=b*E+w*M+Q*z,Ce=Y*oe-ee*ee,J=Ce,ce=Ce,he=0,Ue=0;this.IsEqual(Ce,0)?(he=0,J=1,Ue=ge,ce=oe):(he=ee*ge-oe*te,Ue=Y*ge-ee*te,he<0?(he=0,Ue=ge,ce=oe):he>J&&(he=J,Ue=ge+ee,ce=oe)),Ue<0?(Ue=0,-te<0?he=0:-te>Y?he=J:(he=-te,J=Y)):Ue>ce&&(Ue=ce,-te+ee<0?he=0:-te+ee>Y?he=J:(he=-te+ee,J=Y));let xe=0,Ve=0;this.IsEqual(he,0)?xe=0:xe=he/J,this.IsEqual(Ue,0)?Ve=0:Ve=Ue/ce;let Ie=E+xe*C-Ve*b,Fe=M+xe*_-Ve*w,Me=z+xe*y-Ve*Q;return Ie*Ie+Fe*Fe+Me*Me}isNear(e,t=0,r){let i=d.HELP_0,a=d.HELP_1;i.copyFrom(e.origin),a.copyFrom(e.direction),a.scaleBy(9999),a.add(i,a),ot.cacluteLine0.set(i,a),ot.cacluteLine1.copyFrom(this),r&&(r.perspectiveMultiplyPoint3(ot.cacluteLine1.start,ot.cacluteLine1.start),r.perspectiveMultiplyPoint3(ot.cacluteLine1.end,ot.cacluteLine1.end));let o=ot.squreDistanceSegmentToSegment(ot.cacluteLine0,ot.cacluteLine1,r);return o+1e-4<=t?(e.length=o,!0):(e.length=-999999,!1)}}class Ya{static ID=-1;v1;v2;v3;u1;u2;u3;n1;n2;n3;t0;t;u;v;min=new d;max=new d;id=0;constructor(e,t,r){this.id=Ya.ID+++200,e&&t&&r&&this.set(e,t,r)}set(e,t,r){this.v1=e,this.v2=t,this.v3=r;let i=this.min,a=this.max;return i.x=Math.min(this.v1.x,this.v2.x,this.v3.x),i.y=Math.min(this.v1.y,this.v2.y,this.v3.y),i.z=Math.min(this.v1.z,this.v2.z,this.v3.z),a.x=Math.max(this.v1.x,this.v2.x,this.v3.x),a.y=Math.max(this.v1.y,this.v2.y,this.v3.y),a.z=Math.max(this.v1.z,this.v2.z,this.v3.z),this}getNormal(){let e=this.v1,t=this.v2,r=this.v3,i=new d(t.x-e.x,t.y-e.y,t.z-e.z),o=new d(r.x-e.x,r.y-e.y,r.z-e.z).crossProduct(i);return o.normalize(),o}turnBack(){let e=this.v3;this.v3=this.v1,this.v1=e}getLines(){let e=this.v1,t=this.v2,r=this.v3;return[new ot(e,t),new ot(t,r),new ot(r,e)]}equals(e){let t=this.getLines(),r=e.getLines(),i=0;for(let a=0;a<t.length;a++)for(let o=0;o<r.length;o++)t[a].equals(r[o])&&i++;return i==3}getCenter(){let e=this.min,t=this.max,r=new d;return r.x=(e.x+t.x)*.5,r.y=(e.y+t.y)*.5,r.z=(e.z+t.z)*.5,r}intersects(e){var t=this.max,r=this.min,i=e.max,a=e.min;return r.x<=i.x&&t.x>=a.x&&r.y<=i.y&&t.y>=a.y&&r.z<=i.z&&t.z>=a.z}sign2D(e,t,r){return(e.x-r.x)*(t.z-r.z)-(t.x-r.x)*(e.z-r.z)}pointInTriangle2D(e){let t=this.v1,r=this.v2,i=this.v3,a,o,n,l,h;return a=this.sign2D(e,t,r),o=this.sign2D(e,r,i),n=this.sign2D(e,i,t),l=a<0||o<0||n<0,h=a>0||o>0||n>0,!(l&&h)}toArray(){return[this.v1.x,this.v1.y,this.v1.z,this.v2.x,this.v2.y,this.v2.z,this.v3.x,this.v3.y,this.v3.z]}}class Rf{static _pt0;static _pt1;static _pt2;static _pt3;static _hitPoint;static _worldMatrix;static _ray;static _triangle;static _isInit;static init(){this._pt0=new d,this._pt1=new d,this._pt2=new d,this._pt3=new d,this._ray=new $t,this._triangle=new Ya,this._hitPoint=new d,this._worldMatrix=new I}static rayPick(e,t,r,i,a,o,n){this._isInit||(this.init(),this._isInit=!0);let l=this._worldMatrix;if(i==jt.World){let h;this.calculateHotArea_World(o,this._pt0,this._pt1,this._pt2,this._pt3),l.copyFrom(n).invert();let u=this._ray;if(u.copy(e).applyMatrix(l),this._triangle.set(this._pt0,this._pt1,this._pt2),h=u.intersectTriangle(u.origin,u.direction,this._triangle),h||(this._triangle.set(this._pt1,this._pt2,this._pt3),h=u.intersectTriangle(u.origin,u.direction,this._triangle)),h)return{distance:0,intersectPoint:h}}else{this.calculateHotArea_View(o,a,this._pt0,this._pt1,this._pt2,this._pt3);let h=r.x,u=r.y,c=Math.min(this._pt0.x,this._pt1.x,this._pt2.x,this._pt3.x)+h*.5,f=Math.min(this._pt0.y,this._pt1.y,this._pt2.y,this._pt3.y)+u*.5,g=Math.max(this._pt0.x,this._pt1.x,this._pt2.x,this._pt3.x)+h*.5,p=Math.max(this._pt0.y,this._pt1.y,this._pt2.y,this._pt3.y)+u*.5;return t.x<=g&&t.x>=c&&t.y<=p&&t.y>=f?(this._hitPoint.set(t.x,t.y,0),{distance:0,intersectPoint:this._hitPoint}):null}return null}static calculateHotArea_View(e,t,r,i,a,o){let n=e.getWorldMatrix(),l=n.getScaleX(),h=n.getScaleY(),u=e.width*.5*l,c=e.height*.5*h;r.set(-u,-c,0),i.set(u,-c,0),a.set(-u,c,0),o.set(u,c,0);let f=n.tx;r.x+=f,i.x+=f,a.x+=f,o.x+=f,f=n.ty,r.y-=f,i.y-=f,a.y-=f,o.y-=f,r.multiplyScalar(t),i.multiplyScalar(t),a.multiplyScalar(t),o.multiplyScalar(t)}static calculateHotArea_World(e,t,r,i,a){let o=e.getWorldMatrix(),n=o.getScaleX(),l=o.getScaleY(),h=e.width*.5*n,u=e.height*.5*l;t.set(-h,u,0),r.set(h,u,0),i.set(-h,-u,0),a.set(h,-u,0);let c=o.tx;t.x+=c,r.x+=c,i.x+=c,a.x+=c,c=o.ty,t.y+=c,r.y+=c,i.y+=c,a.y+=c}}var If=(s=>(s[s.UpperLeft=0]="UpperLeft",s[s.UpperCenter=1]="UpperCenter",s[s.UpperRight=2]="UpperRight",s[s.MiddleLeft=3]="MiddleLeft",s[s.MiddleCenter=4]="MiddleCenter",s[s.MiddleRight=5]="MiddleRight",s[s.LowerLeft=6]="LowerLeft",s[s.LowerCenter=7]="LowerCenter",s[s.LowerRight=8]="LowerRight",s))(If||{}),Ef=(s=>(s[s.Upper=0]="Upper",s[s.Middle=1]="Middle",s[s.Lower=2]="Lower",s))(Ef||{}),wf=(s=>(s[s.Left=0]="Left",s[s.Center=1]="Center",s[s.Right=2]="Right",s))(wf||{});class Tf{charList=[];quadList=[];width=0;index=0}class Df{layout(e){let t=[],r=e.originSize,i=qi.getFontData(e.font,r),a=e.fontSize/r;return this.makeTextLine(e.uiTransform,e.alignment,t,e.font,i,e.text,a,r,e.lineSpacing),t}makeTextLine(e,t,r,i,a,o,n,l,h){let u=-1,c=0,f=l*n,g=f*.5,p=e.width/n,A=e.height/n,U=0,x=e.height,B=()=>{c=0,u++;let y=new Tf;return y.index=u,r.push(y),y},S=(y,b)=>{const w=y.charCodeAt(0).toString();let Q=qi.getFnt(i,l,w),E=null;return Q?(E=Ir.spawnQuad(),E.sprite=Q,E.x=(c+Q.xoffset)*n-U,E.y=(a.base-Q.height-Q.yoffset-a.base)*n+x,E.width=Q.offsetSize.width*n,E.height=Q.offsetSize.height*n,c+=Q.xadvance):y==`
|
|
11456
|
+
`}class pn extends yt{_scissorRect;_screenSize=new K(1024,768);_scissorEnable=!1;constructor(e){super(),O.register("GUI_shader_view",gn.GUI_shader_view),O.register("GUI_shader_world",gn.GUI_shader_world);let t=new mt;this.addColorPass(t,H.COLOR,e),this.addColorPass(t,H.UI,e),this.shader=t}addColorPass(e,t,r){let i=r==jt.View?"GUI_shader_view":"GUI_shader_world",a=new Oe(i,i);a.passType=t,a.setShaderEntry("VertMain","FragMain"),a.setUniformVector4("scissorRect",new $),a.setUniformVector2("screenSize",this._screenSize),a.setUniformFloat("scissorCornerRadius",0),a.setUniformFloat("scissorFadeOutSize",0),a.setUniformFloat("pixelRatio",1),a.setUniformVector3("v3",d.ZERO);let o=a.shaderState;o.depthWriteEnabled=!1,a.blendMode=ae.NORMAL,a.depthCompare=r==jt.View?rt.always:rt.less_equal,a.cullMode=Jt.back,e.addRenderPass(a)}setPanelRatio(e){this.shader.setUniformFloat("pixelRatio",e)}setScissorRect(e,t,r,i){this._scissorRect||=new $,this._scissorRect.set(e,t,r,i),this.shader.setUniformVector4("scissorRect",this._scissorRect)}setScissorEnable(e){this._scissorEnable!=e&&(this._scissorEnable=e,e?this.shader.setDefine("SCISSOR_ENABLE",!0):this.shader.deleteDefine("SCISSOR_ENABLE"),this.shader.noticeValueChange())}setScissorCorner(e,t){this.shader.setUniformFloat("scissorCornerRadius",e),this.shader.setUniformFloat("scissorFadeOutSize",t)}setScreenSize(e,t){return this._screenSize.set(e,t),this.shader.setUniformVector2("screenSize",this._screenSize),this}setTextures(e){for(let t=0;t<7;t++){let r=e[t]||m.res.whiteTexture;this.shader.setTexture(`tex_${t}`,r),this.setVideoTextureDefine(t,r.isVideoTexture)}}_videoTextureFlags={};setVideoTextureDefine(e,t){let r=!1;t!=this._videoTextureFlags[e]&&(t?this.shader.setDefine(`VideoTexture${e}`,!0):this.shader.deleteDefine(`VideoTexture${e}`),this._videoTextureFlags[e]=t,r=!0),r&&this.shader.noticeValueChange()}set envMap(e){}set shadowMap(e){}set baseMap(e){}set normalMap(e){}set emissiveMap(e){}set irradianceMap(e){}set irradianceDepthMap(e){}}class Sf extends j{_guiGeometry;init(e){super.init(),this.addRendererMask(Be.UI),this.removeRendererMask(Be.Default),this.castGI=!1,this.castShadow=!1,this.alwaysRender=!0,this._ignoreEnvMap=this._ignorePrefilterMap=!0}get geometry(){return super.geometry}set geometry(e){super.geometry=e,this._guiGeometry=e}nodeUpdate(e,t,r,i){for(let a=0;a<this.materials.length;a++){let n=this.materials[a].getPass(t),l=this._guiGeometry.getPositionBuffer(),h=this._guiGeometry.getSpriteBuffer(),u=this._guiGeometry.getColorBuffer();if(n)for(let c=0;c<n.length;c++){const f=n[c];f.pipeline||(f.setStorageBuffer("vPositionBuffer",l),f.setStorageBuffer("vSpriteBuffer",h),f.setStorageBuffer("vColorBuffer",u))}}super.nodeUpdate(e,t,r,i)}onUpdate(e){}}class _f{_use;_unUse;constructor(){this._use=[],this._unUse=[]}pushBack(e){let t=this._use.indexOf(e);t!=-1&&(this._use.splice(t,1),this._unUse.push(e))}getUseList(){return this._use}getOne(e,t){let r;return this._unUse.length>0?(r=this._unUse[0],this._unUse.splice(0,1),this._use.push(r),r):(r=new e(t),this._use.push(r),r)}hasFree(){return this._unUse.length>0}}let Qa;class Ir{x=0;y=0;z=0;width=1;height=1;_globalX=0;_globalY=0;_globalWidth=0;_globalHeight=0;_visible=!0;_offsetX=0;_offsetY=0;_sprite=m.res.defaultGUISprite;_color=new P(1,1,1,1);_imageType=ea.Simple;dirtyAttributes=Je.MAX;cacheTextureId=-1;static textPool;static get quadPool(){return this.textPool||=new _f,this.textPool}static recycleQuad(e){e.sprite=null,e.dirtyAttributes=Je.MAX,e.x=0,e.y=0,e.z=-1,e.cacheTextureId=-1,Ir.quadPool.pushBack(e)}static spawnQuad(){return Ir.quadPool.getOne(Ir)}get imageType(){return this._imageType}set imageType(e){this._imageType=e,this.setAttrChange(Je.SPRITE|Je.POSITION)}get color(){return this._color}set color(e){this._color.copyFrom(e),this.setAttrChange(Je.COLOR)}get visible(){return this._visible}set visible(e){e!=this._visible&&(this._visible=e,this.setAttrChange(Je.SPRITE))}get sprite(){return this._sprite}set sprite(e){this._sprite!=e&&(this._sprite=e,this.setAttrChange(Je.SPRITE|Je.POSITION))}get left(){return this._globalX-this._offsetX}get right(){return this.left+this._globalWidth}get top(){return this._globalY-this._offsetY}get bottom(){return this.top+this._globalHeight}setSize(e,t){this.width=e,this.height=t,this.setAttrChange(Je.POSITION)}setXY(e,t){this.x=e,this.y=t,this.setAttrChange(Je.POSITION)}setAttrChange(e){this.dirtyAttributes=this.dirtyAttributes|e}applyTransform(e){this.setAttrChange(Je.POSITION);let t=this._sprite,r=e.getWorldMatrix();(this.x!=0||this.y!=0)&&(r=this.getQuadMatrix(r));let i=r.getScaleX(),a=r.getScaleY(),o=t.isSliced&&this._imageType==ea.Sliced;if(this._offsetX=e.width*.5*i,this._offsetY=e.height*.5*a,o)this._globalWidth=i*(e.width-(t.offsetSize.z-t.trimSize.x)),this._globalHeight=a*(e.height-(t.offsetSize.w-t.trimSize.y)),this._globalX=r.tx+t.offsetSize.x*i,this._globalY=r.ty+t.offsetSize.y*a;else{let n=this.width/t.offsetSize.z,l=this.height/t.offsetSize.w;this._globalWidth=i*t.trimSize.x*n,this._globalHeight=a*t.trimSize.y*l,this._globalX=r.tx+t.offsetSize.x*n*i,this._globalY=r.ty+t.offsetSize.y*l*a}return this}getQuadMatrix(e){return Qa||=new Ti,Qa.identity(),Qa.setTranslate(this.x,this.y),Qa.mul(e),Qa}writeToGeometry(e,t){return e.fillQuad(this,t),this.dirtyAttributes=Je.NONE,this}}class mn extends Pe{_uiTransform;_visible=!0;destroy(){this._uiTransform.setNeedUpdateUIPanel(),super.destroy()}get uiTransform(){return this._uiTransform}get visible(){return this._visible}set visible(e){this._visible!=e&&(this._visible=e,this.onUIComponentVisible?.(this._visible))}init(e){super.init?.(e),this._uiTransform=this.object3D.getOrAddComponent(Gr),this._uiTransform.setNeedUpdateUIPanel()}copyComponent(e){return this.visible=e.visible,this}}class Ra extends mn{_mainQuads;_shadowRender;_shadowSource;isUIShadow;isShadowless;needUpdateShadow;init(e){super.init?.(e),this._mainQuads=[]}destroy(){this.detachQuads(),this._shadowRender?.setShadowSource(null),this._shadowSource?.setShadowRenderer(null),super.destroy(),this._shadowRender=null,this._shadowSource=null}start(){super.start?.(),this.isUIShadow?this.autoBindShadow(null,this):this.isShadowless||this.autoBindShadow(this,null),this.setShadowDirty()}setShadowDirty(){this._shadowRender&&(this._shadowRender.needUpdateShadow=!0)}get mainQuads(){return this._mainQuads}setShadowRenderer(e){this._shadowRender=e}setShadowSource(e){this._shadowSource=e}getShadowRender(){return this._shadowRender}autoBindShadow(e,t){let r=this.object3D.components.values();if(!e)for(let i of r){let a=i;if(!(a.isShadowless||a.isUIShadow)&&a.mainQuads){e=a;break}}if(!t)for(let i of r){let a=i;if(a.isUIShadow&&a.mainQuads){t=a;break}}return e&&t?(e.setShadowRenderer(t),t.setShadowSource(e),!0):!1}recycleQuad(e){if(e&&this._mainQuads){let t=this._mainQuads.indexOf(e);t>=0?(this._mainQuads.splice(t,1),Ir.recycleQuad(e)):e=null}return e}attachQuad(e){return this._mainQuads&&this._mainQuads.push(e),this}detachQuads(){if(this._mainQuads)for(;this._mainQuads.length>0;){let e=this._mainQuads.shift();this.recycleQuad(e)}return this}copyComponent(e){return super.copyComponent(e),this.isUIShadow=e.isUIShadow,this.isShadowless=e.isShadowless,this}}class Di extends Ra{init(e){super.init?.(e),this.attachQuad(Ir.spawnQuad()),this.sprite=m.res.defaultGUISprite}cloneTo(e){e.getOrAddComponent(Di).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.sprite=e.sprite,this.color=e.color,this.imageType=e.imageType,this}set sprite(e){e||=m.res.defaultGUISprite;for(let t of this._mainQuads)t.sprite=e,t.setSize(this._uiTransform.width,this._uiTransform.height);this.setShadowDirty()}onTransformResize(){this.applyTransformSize()}applyTransformSize(){for(let e of this._mainQuads)e.setSize(this._uiTransform.width,this._uiTransform.height);this.setShadowDirty()}get sprite(){return this._mainQuads[0].sprite}onUIComponentVisible(e){this.applyComponentVisible()}onUITransformVisible(e){this.applyComponentVisible()}applyComponentVisible(){let e=!this._visible||!this._uiTransform.globalVisible;for(let t of this._mainQuads)t.visible=!e;this.setShadowDirty()}get color(){return this._mainQuads[0].color}set color(e){for(let t of this._mainQuads)t.color=e;this.setShadowDirty()}get imageType(){return this._mainQuads[0].imageType}set imageType(e){for(let t of this._mainQuads)t.imageType=e;this.setShadowDirty()}}class Za extends Di{space=jt.World;needUpdateGeometry=!0;panelOrder=0;needSortOnCameraZ;_billboard;_rebuild;scissorEnable=!1;scissorCornerRadius=0;scissorFadeOutSize=0;_uiRenderer;_geometry;_maxCount=128;panelRatio=1;isUIPanel=!0;cloneTo(e){e.getOrAddComponent(Za).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.panelOrder=e.panelOrder,this.needSortOnCameraZ=e.needSortOnCameraZ,this.cullMode=e.cullMode,this.billboard=e.billboard,this.scissorEnable=e.scissorEnable,this.scissorCornerRadius=e.scissorCornerRadius,this.scissorFadeOutSize=e.scissorFadeOutSize,this}init(e){super.init(e),this._uiTransform.resize(R.canvas.width,R.canvas.height),this.create(this.space),this.visible=!1}updateDrawCallSegment(e,t,r){this._geometry.updateSubGeometry(e,t,r);let i=this._uiRenderer.material,a=this._uiRenderer.materials[e];if(!a){a=new pn(this.space);let o=this._uiRenderer.materials.slice();o.push(a),this._uiRenderer.materials=o,a.cullMode=i.cullMode,a.depthCompare=i.depthCompare}}create(e){this._maxCount=this.space==jt.World?Ii.quadMaxCountForWorld:Ii.quadMaxCountForView,this._uiRenderer=this.object3D.addComponent(Sf),this._geometry=this._uiRenderer.geometry=new Bf(this._maxCount).create(),this._uiRenderer.material=new pn(e),this._uiRenderer.renderOrder=Ii.SortOrderStartWorld,this._rebuild=new Cf,this.object3D.bound=new Re(new d,new d(1,1,1).multiplyScalar(Number.MAX_VALUE*.1))}get quadMaxCount(){return this._maxCount}get renderer(){return this._uiRenderer}set billboard(e){this.space==jt.View&&(e=ii.None,console.warn("Cannot enable billboard in view space")),e==ii.BillboardXYZ||e==ii.BillboardY?(this._billboard=this.object3D.getOrAddComponent(Wa),this._billboard.type=e):(this.object3D.removeComponent(Wa),this._billboard=null)}get billboard(){return this._billboard?this._billboard.type:ii.None}set cullMode(e){if(this.space==jt.World)for(let t of this._uiRenderer.materials)t.cullMode=e;else console.warn("Cannot change cullMode in view space")}get cullMode(){return this._uiRenderer.material.cullMode}onUpdate(e){super.onUpdate?.(e),this.rebuildGUIMesh(e)}_collectTransform=[];rebuildGUIMesh(e){let t=this,r=t._collectTransform;if(r.length=0,t.object3D.getComponents(Gr,r),r.length>0){t._rebuild.build(r,t,t.needUpdateGeometry);for(const n of r)n.needUpdateQuads=!1}let i=t.object3D.getComponentFromParent(Ja),a=i?i.index:0;t._uiRenderer.enable=r.length>0;let o=t.isViewPanel?Ii.SortOrderStartView:Ii.SortOrderStartWorld;if(t._uiRenderer.renderOrder=a*Ii.SortOrderCanvasSpan+o+t.panelOrder,t._uiRenderer.needSortOnCameraZ=t.needSortOnCameraZ,this.space==jt.View){let n=R.canvas.clientWidth,l=R.canvas.clientHeight,h=this._uiTransform.width,u=this._uiTransform.height;this.panelRatio=this.updateGUIPixelRatio(n,l,h,u)}else this.panelRatio=1;for(let n of t._uiRenderer.materials){let l=n;if(l.setPanelRatio(this.panelRatio),l.setScreenSize(R.canvas.clientWidth,R.canvas.clientHeight),l.setScissorEnable(t.scissorEnable),t.scissorEnable){let h=t.mainQuads[0];l.setScissorRect(h.left,h.bottom,h.right,h.top),l.setScissorCorner(t.scissorCornerRadius,t.scissorFadeOutSize)}}t.needUpdateGeometry=!1}updateGUIPixelRatio(e,t,r,i){let a=r/i,o=e/t,n=1;return a<o?n=t/i:n=e/r,n}}class ks extends Za{isViewPanel=!0;space=jt.View;constructor(){super()}cloneTo(e){e.getOrAddComponent(ks).copyComponent(this)}}class Ls extends Za{isWorldPanel=!0;space=jt.World;_depthTest=!0;constructor(){super()}cloneTo(e){e.getOrAddComponent(Ls).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.depthTest=e.depthTest,this}get depthTest(){return this._depthTest}set depthTest(e){if(this._depthTest!=e){this._depthTest=e;let t=this.depthTest?rt.less_equal:rt.always;for(let r of this._uiRenderer.materials)r.depthCompare=t}}}let Ff;class Gr extends Pe{useParentPivot=!1;parent;pivotX=.5;pivotY=.5;_width=100;_height=100;_localVisible=!0;_globalVisible=!0;_uiInteractiveList;get uiInteractiveList(){return this._uiInteractiveList}constructor(){super(),this._localMatrix=new Ti,this._worldMatrix=new Ti}init(e){super.init(e),this.transform.eventDispatcher.addEventListener(this.transform.eventLocalChange.type,this.onTransformChange,this),this.onParentChange(null,this.object3D.parent?.object3D)}onTransformChange(e){this.onChange=!0}addUIInteractive(e){return this._uiInteractiveList||=[],this._uiInteractiveList.push(e),this}removeUIInteractive(e){if(this._uiInteractiveList){let t=this._uiInteractiveList.indexOf(e);if(t>=0)return this._uiInteractiveList.slice(t,1),e}return null}get globalVisible(){return this._globalVisible}set visible(e){if(this._localVisible!=e){this._localVisible=e;let t=this.parent?this.parent._globalVisible:!0;this.onUITransformVisible(this._localVisible&&t)}}get visible(){return this._localVisible}onUITransformVisible(e){let t=this._localVisible&&e;t!=this._globalVisible&&(this._globalVisible=t,this.object3D.components.forEach((r,i)=>{let a=r;if(a.onUITransformVisible)if(a==this)for(let o of this.object3D.entityChildren){let n=o.getComponent(Gr);n&&n.onUITransformVisible(this._globalVisible)}else a.onUITransformVisible(this._globalVisible)}))}onParentChange(e,t){this.parent?.setNeedUpdateUIPanel(),this.parent=t?.getComponent(Gr),this.parent?.setNeedUpdateUIPanel()}get width(){return this._width}get height(){return this._height}resize(e,t){if(this._width!=e||this._height!=t){this._width=e,this._height=t,this.onChange=!0;for(let r of this.object3D.components.values())r.onTransformResize?.();return!0}return!1}get x(){return this.object3D.x}set x(e){e!=this.object3D.x&&(this.object3D.x=e,this.onChange=!0)}get y(){return this.object3D.y}set y(e){e!=this.object3D.y&&(this.object3D.y=e,this.onChange=!0)}setXY(e,t){let r=this.object3D.localPosition;r.set(e,t,r.z),this.object3D.localPosition=r,this.onChange=!0}get z(){return this.object3D.z}set z(e){e!=this.object3D.z&&(this.object3D.z=e,this.onChange=!0)}get scaleX(){return this.object3D.scaleX}set scaleX(e){this.onChange=!0,this.object3D.scaleX=e}get scaleY(){return this.object3D.scaleY}set scaleY(e){this.onChange=!0,this.object3D.scaleY=e}get scaleZ(){return this.object3D.scaleZ}set scaleZ(e){this.onChange=!0,this.object3D.scaleZ=e}_localMatrix;_worldMatrix;_onChange=!0;needUpdateQuads=!0;get onChange(){return this._onChange}_tempTransforms=[];set onChange(e){if(this._onChange!=e&&(this._onChange=e,e)){this._tempTransforms.length=0;let t=this.object3D.getComponents(Gr,this._tempTransforms,!0);for(let r of t)r._onChange=!0,r.needUpdateQuads=!0}}onEnable(){this.setNeedUpdateUIPanel(),this.onChange=!0}onDisable(){this.setNeedUpdateUIPanel(),this.onChange=!0}setNeedUpdateUIPanel(){let e;e=this.object3D.getComponentFromParent(Ls),e||(e=this.object3D.getComponentFromParent(ks)),e&&(e.needUpdateGeometry=!0)}cloneTo(e){let t=e.getOrAddComponent(Gr);t.visible=this.visible,t.x=this.x,t.y=this.y,t.z=this.z,t.resize(this.width,this.height),t.pivotX=this.pivotX,t.pivotY=this.pivotY,t.scaleX=this.scaleX,t.scaleY=this.scaleY}matrix(){let e=this._localMatrix,t=this.object3D.rotationZ;return this.parent?(e.updateScaleAndRotation(this.object3D.scaleX,this.object3D.scaleY,t,t),e.tx=this.object3D.x,e.ty=this.object3D.y):e.updateScaleAndRotation(1,1,0,0),(this.pivotX!=.5||this.pivotY!=.5)&&(Ff||=new Ti().identity(),e.mul(Ff.setTo(1,0,0,1,-(this.pivotX-.5)*this.width,-(this.pivotY-.5)*this.height))),e}getWorldMatrix(){let e=this,t=e._worldMatrix;return this._onChange&&(t.copyFrom(e.matrix()),e.parent&&t.mul(e.parent.getWorldMatrix()),e._onChange=!1),t}beforeDestroy(e){this.transform.eventDispatcher.addEventListener(this.transform.eventLocalChange.type,this.onTransformChange,this),super.beforeDestroy?.(e)}}class yf{_ray;_mouseCode;_clickEvent;_outEvent;_overEvent;_upEvent;_downEvent;_view;init(e){this._view=e,this._ray=new $t,this._clickEvent=new lt(lt.PICK_CLICK_GUI),this._outEvent=new lt(lt.PICK_OUT_GUI),this._overEvent=new lt(lt.PICK_OVER_GUI),this._upEvent=new lt(lt.PICK_UP_GUI),this._downEvent=new lt(lt.PICK_DOWN_GUI),m.inputSystem.addEventListener(k.POINTER_DOWN,this.onTouchDown,this,null,1),m.inputSystem.addEventListener(k.POINTER_UP,this.onTouchUp,this,null,1),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onTouchMove,this,null,1),m.inputSystem.addEventListener(k.POINTER_CLICK,this.onTouchClick,this,null,1)}_lastDownTarget;_lastOverTarget;onTouchClick(e){this._lastOverTarget&&e.stopImmediatePropagation()}onTouchMove(e){this._mouseCode=e.mouseCode,this.collectEntities();let t=this.pick(this._colliderOut);if(t){e.stopImmediatePropagation();let r=t.collider;r!=this._lastOverTarget&&(r.mouseStyle=Le.OVER,Object.assign(this._overEvent,e),this._overEvent.type=lt.PICK_OVER_GUI,this._overEvent.target=r.object3D,this._overEvent.data=t,r.object3D.dispatchEvent(this._overEvent),this._lastOverTarget&&(this._lastOverTarget.mouseStyle=Le.NORMAL,Object.assign(this._outEvent,e),this._outEvent.type=lt.PICK_OUT_GUI,this._outEvent.target=r.object3D,this._outEvent.data=t,this._lastOverTarget.object3D.dispatchEvent(this._outEvent))),this._lastOverTarget=r}else this._lastOverTarget&&(this._lastOverTarget.mouseStyle=Le.NORMAL,Object.assign(this._outEvent,e),this._outEvent.type=lt.PICK_OUT_GUI,this._outEvent.target=this._lastOverTarget.object3D,this._outEvent.data=t,this._lastOverTarget.object3D.dispatchEvent(this._outEvent),this._lastOverTarget=null)}_lastDownPosition=new K;_calcDistanceVec2=new K;_lastDownTime=0;_clickTimeSpan=200;_clickDistanceSpan=10;onTouchDown(e){this._lastDownTime=be.time,this._lastDownPosition.set(e.mouseX,e.mouseY),this._mouseCode=e.mouseCode,this.collectEntities();let t=this.pick(this._colliderOut);t&&e.stopImmediatePropagation();let r=t?t.collider:null;r&&(r.mouseStyle=Le.DOWN,Object.assign(this._downEvent,e),this._downEvent.type=lt.PICK_DOWN_GUI,this._downEvent.target=r.object3D,this._downEvent.data=t,r.object3D.dispatchEvent(this._downEvent)),this._lastDownTarget=r}onTouchUp(e){this._calcDistanceVec2.set(e.mouseX,e.mouseY),this._mouseCode=e.mouseCode,this.collectEntities();let t=this.pick(this._colliderOut);t&&e.stopImmediatePropagation();let r=t?t.collider:null;this._lastDownTarget&&this._lastDownTarget.enable&&(this._lastDownTarget.mouseStyle=Le.NORMAL),r&&r==this._lastDownTarget&&be.time-this._lastDownTime<=this._clickTimeSpan&&(this._calcDistanceVec2.set(e.mouseX,e.mouseY),this._calcDistanceVec2.distance(this._lastDownPosition)<=this._clickDistanceSpan&&(Object.assign(this._clickEvent,e),this._clickEvent.type=lt.PICK_CLICK_GUI,this._clickEvent.target=r.object3D,this._clickEvent.data=t,r.object3D.dispatchEvent(this._clickEvent))),this._lastDownTarget=null}_colliderOut=[];_transformList=[];_sortWorldPanelList=[];_iteractive2PanelDict=new Map;collectEntities(){return this._colliderOut.length=0,this._sortWorldPanelList.length=0,this._iteractive2PanelDict.clear(),this._view.canvasList.slice().reverse().forEach(t=>{if(t&&t.transform&&t.transform.parent){let r=t.object3D.getComponentsByProperty("isUIPanel",!0,!0);r.sort((i,a)=>{let o=i._uiRenderer.__renderOrder,n=a._uiRenderer.__renderOrder;return o>n?-1:1});for(let i of r){this._transformList.length=0,i.object3D.getComponents(Gr,this._transformList),this._transformList.reverse();for(const a of this._transformList){let o=a.uiInteractiveList;if(o&&o.length>0)for(let n of o)this._colliderOut.push(n),this._iteractive2PanelDict.set(n,i)}}}}),this._colliderOut}pick(e){this._ray=this._view.camera.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY);let t=new K(m.inputSystem.mouseX,m.inputSystem.mouseY),r=new K(R.canvas.clientWidth,R.canvas.clientHeight),i;for(const a of e)if(a.interactive&&a.enable&&a.interactiveVisible){let o=this._iteractive2PanelDict.get(a);if(i=a.rayPick(this._ray,o,t,r),i)return i.collider=a,i}return null}}var bf=(s=>(s[s.COLLINEAR=0]="COLLINEAR",s[s.LINES_INTERSECT=1]="LINES_INTERSECT",s[s.SEGMENTS_INTERSECT=2]="SEGMENTS_INTERSECT",s[s.A_BISECTS_B=3]="A_BISECTS_B",s[s.B_BISECTS_A=4]="B_BISECTS_A",s[s.PARALELL=5]="PARALELL",s))(bf||{}),Qf=(s=>(s[s.ON_LINE=0]="ON_LINE",s[s.LEFT_SIDE=1]="LEFT_SIDE",s[s.RIGHT_SIDE=2]="RIGHT_SIDE",s))(Qf||{});class ot{static cacluteLine0=new ot(null,null);static cacluteLine1=new ot(null,null);start;end;color=new P(1,1,1,1);_normal;_normalCalculated=!1;constructor(e,t){this.start=e,this.end=t}set(e,t){this.start=e,this.end=t}getCenter(){let e=d.HELP_0;return this.start.subtract(this.end,e),e.scaleBy(.5),e.add(this.end),e}inverse(){let e=this.start;this.start=this.end,this.end=e}equals(e){return this.start==e.start&&this.end==e.end||this.start==e.end&&this.end==e.start}toArray(){return[this.start.x,this.start.y,this.start.z,this.end.x,this.end.y,this.end.z]}static getLines(e){let t=[];for(let r=0;r<e.length;r++){let i=r,a=uo(r+1,e.length),o=e[i],n=e[a];t.push(new ot(o,n))}return t}intersection(e,t=null){var r=(e.end.z-e.start.z)*(this.end.x-this.start.x)-(e.end.x-e.start.x)*(this.end.z-this.start.z),i=(e.end.x-e.start.x)*(this.start.z-e.start.z)-(e.end.z-e.start.z)*(this.start.x-e.start.x),a=(e.start.x-this.start.x)*(this.end.z-this.start.z)-(e.start.z-this.start.z)*(this.end.x-this.start.x);if(r==0)return i==0&&a==0?0:5;i=i/r,a=a/r;var o=this.start.x+i*(this.end.x-this.start.x),n=this.start.z+i*(this.end.z-this.start.z);return t!=null&&(t.x=o,t.y=0,t.z=n),i>=0&&i<=1&&a>=0&&a<=1?2:a>=0&&a<=1?3:i>=0&&i<=1?4:1}getDirection(){var e=this.end.subtract(this.start),t=new d(e.x,e.y);return t.normalize()}copyFrom(e){this.start||(this.start=new d),this.end||(this.end=new d),this.start.copyFrom(e.start),this.end.copyFrom(e.end)}static IsEqual(e,t){return Math.abs(e-t)<1e-7}static squreDistanceSegmentToSegment(e,t,r){let i=e.start,a=e.end,o=t.start,n=t.end,l=i.x,h=i.y,u=i.z,c=a.x,f=a.y,g=a.z,p=o.x,A=o.y,U=o.z,x=n.x,B=n.y,S=n.z,C=c-l,_=f-h,y=g-u,b=x-p,w=B-A,Q=S-U,E=l-p,M=h-A,z=u-U,Y=C*C+_*_+y*y,ee=C*b+_*w+y*Q,oe=b*b+w*w+Q*Q,te=C*E+_*M+y*z,ge=b*E+w*M+Q*z,Ce=Y*oe-ee*ee,J=Ce,ce=Ce,he=0,Ue=0;this.IsEqual(Ce,0)?(he=0,J=1,Ue=ge,ce=oe):(he=ee*ge-oe*te,Ue=Y*ge-ee*te,he<0?(he=0,Ue=ge,ce=oe):he>J&&(he=J,Ue=ge+ee,ce=oe)),Ue<0?(Ue=0,-te<0?he=0:-te>Y?he=J:(he=-te,J=Y)):Ue>ce&&(Ue=ce,-te+ee<0?he=0:-te+ee>Y?he=J:(he=-te+ee,J=Y));let xe=0,Ve=0;this.IsEqual(he,0)?xe=0:xe=he/J,this.IsEqual(Ue,0)?Ve=0:Ve=Ue/ce;let Ie=E+xe*C-Ve*b,Fe=M+xe*_-Ve*w,Me=z+xe*y-Ve*Q;return Ie*Ie+Fe*Fe+Me*Me}isNear(e,t=0,r){let i=d.HELP_0,a=d.HELP_1;i.copyFrom(e.origin),a.copyFrom(e.direction),a.scaleBy(9999),a.add(i,a),ot.cacluteLine0.set(i,a),ot.cacluteLine1.copyFrom(this),r&&(r.perspectiveMultiplyPoint3(ot.cacluteLine1.start,ot.cacluteLine1.start),r.perspectiveMultiplyPoint3(ot.cacluteLine1.end,ot.cacluteLine1.end));let o=ot.squreDistanceSegmentToSegment(ot.cacluteLine0,ot.cacluteLine1,r);return o+1e-4<=t?(e.length=o,!0):(e.length=-999999,!1)}}class Ya{static ID=-1;v1;v2;v3;u1;u2;u3;n1;n2;n3;t0;t;u;v;min=new d;max=new d;id=0;constructor(e,t,r){this.id=Ya.ID+++200,e&&t&&r&&this.set(e,t,r)}set(e,t,r){this.v1=e,this.v2=t,this.v3=r;let i=this.min,a=this.max;return i.x=Math.min(this.v1.x,this.v2.x,this.v3.x),i.y=Math.min(this.v1.y,this.v2.y,this.v3.y),i.z=Math.min(this.v1.z,this.v2.z,this.v3.z),a.x=Math.max(this.v1.x,this.v2.x,this.v3.x),a.y=Math.max(this.v1.y,this.v2.y,this.v3.y),a.z=Math.max(this.v1.z,this.v2.z,this.v3.z),this}getNormal(){let e=this.v1,t=this.v2,r=this.v3,i=new d(t.x-e.x,t.y-e.y,t.z-e.z),o=new d(r.x-e.x,r.y-e.y,r.z-e.z).crossProduct(i);return o.normalize(),o}turnBack(){let e=this.v3;this.v3=this.v1,this.v1=e}getLines(){let e=this.v1,t=this.v2,r=this.v3;return[new ot(e,t),new ot(t,r),new ot(r,e)]}equals(e){let t=this.getLines(),r=e.getLines(),i=0;for(let a=0;a<t.length;a++)for(let o=0;o<r.length;o++)t[a].equals(r[o])&&i++;return i==3}getCenter(){let e=this.min,t=this.max,r=new d;return r.x=(e.x+t.x)*.5,r.y=(e.y+t.y)*.5,r.z=(e.z+t.z)*.5,r}intersects(e){var t=this.max,r=this.min,i=e.max,a=e.min;return r.x<=i.x&&t.x>=a.x&&r.y<=i.y&&t.y>=a.y&&r.z<=i.z&&t.z>=a.z}sign2D(e,t,r){return(e.x-r.x)*(t.z-r.z)-(t.x-r.x)*(e.z-r.z)}pointInTriangle2D(e){let t=this.v1,r=this.v2,i=this.v3,a,o,n,l,h;return a=this.sign2D(e,t,r),o=this.sign2D(e,r,i),n=this.sign2D(e,i,t),l=a<0||o<0||n<0,h=a>0||o>0||n>0,!(l&&h)}toArray(){return[this.v1.x,this.v1.y,this.v1.z,this.v2.x,this.v2.y,this.v2.z,this.v3.x,this.v3.y,this.v3.z]}}class Rf{static _pt0;static _pt1;static _pt2;static _pt3;static _hitPoint;static _worldMatrix;static _ray;static _triangle;static _isInit;static init(){this._pt0=new d,this._pt1=new d,this._pt2=new d,this._pt3=new d,this._ray=new $t,this._triangle=new Ya,this._hitPoint=new d,this._worldMatrix=new I}static rayPick(e,t,r,i,a,o,n){this._isInit||(this.init(),this._isInit=!0);let l=this._worldMatrix;if(i==jt.World){let h;this.calculateHotArea_World(o,this._pt0,this._pt1,this._pt2,this._pt3),l.copyFrom(n).invert();let u=this._ray;if(u.copy(e).applyMatrix(l),this._triangle.set(this._pt0,this._pt1,this._pt2),h=u.intersectTriangle(u.origin,u.direction,this._triangle),h||(this._triangle.set(this._pt1,this._pt2,this._pt3),h=u.intersectTriangle(u.origin,u.direction,this._triangle)),h)return{distance:0,intersectPoint:h}}else{this.calculateHotArea_View(o,a,this._pt0,this._pt1,this._pt2,this._pt3);let h=r.x,u=r.y,c=Math.min(this._pt0.x,this._pt1.x,this._pt2.x,this._pt3.x)+h*.5,f=Math.min(this._pt0.y,this._pt1.y,this._pt2.y,this._pt3.y)+u*.5,g=Math.max(this._pt0.x,this._pt1.x,this._pt2.x,this._pt3.x)+h*.5,p=Math.max(this._pt0.y,this._pt1.y,this._pt2.y,this._pt3.y)+u*.5;return t.x<=g&&t.x>=c&&t.y<=p&&t.y>=f?(this._hitPoint.set(t.x,t.y,0),{distance:0,intersectPoint:this._hitPoint}):null}return null}static calculateHotArea_View(e,t,r,i,a,o){let n=e.getWorldMatrix(),l=n.getScaleX(),h=n.getScaleY(),u=e.width*.5*l,c=e.height*.5*h;r.set(-u,-c,0),i.set(u,-c,0),a.set(-u,c,0),o.set(u,c,0);let f=n.tx;r.x+=f,i.x+=f,a.x+=f,o.x+=f,f=n.ty,r.y-=f,i.y-=f,a.y-=f,o.y-=f,r.multiplyScalar(t),i.multiplyScalar(t),a.multiplyScalar(t),o.multiplyScalar(t)}static calculateHotArea_World(e,t,r,i,a){let o=e.getWorldMatrix(),n=o.getScaleX(),l=o.getScaleY(),h=e.width*.5*n,u=e.height*.5*l;t.set(-h,u,0),r.set(h,u,0),i.set(-h,-u,0),a.set(h,-u,0);let c=o.tx;t.x+=c,r.x+=c,i.x+=c,a.x+=c,c=o.ty,t.y+=c,r.y+=c,i.y+=c,a.y+=c}}var If=(s=>(s[s.UpperLeft=0]="UpperLeft",s[s.UpperCenter=1]="UpperCenter",s[s.UpperRight=2]="UpperRight",s[s.MiddleLeft=3]="MiddleLeft",s[s.MiddleCenter=4]="MiddleCenter",s[s.MiddleRight=5]="MiddleRight",s[s.LowerLeft=6]="LowerLeft",s[s.LowerCenter=7]="LowerCenter",s[s.LowerRight=8]="LowerRight",s))(If||{}),Ef=(s=>(s[s.Upper=0]="Upper",s[s.Middle=1]="Middle",s[s.Lower=2]="Lower",s))(Ef||{}),wf=(s=>(s[s.Left=0]="Left",s[s.Center=1]="Center",s[s.Right=2]="Right",s))(wf||{});class Tf{charList=[];quadList=[];width=0;index=0}class Df{layout(e){let t=[],r=e.originSize,i=qi.getFontData(e.font,r),a=e.fontSize/r;return this.makeTextLine(e.uiTransform,e.alignment,t,e.font,i,e.text,a,r,e.lineSpacing),t}makeTextLine(e,t,r,i,a,o,n,l,h){let u=-1,c=0,f=l*n,g=f*.5,p=e.width/n,A=e.height/n,U=0,x=e.height,B=()=>{c=0,u++;let y=new Tf;return y.index=u,r.push(y),y},S=(y,b)=>{const w=y.charCodeAt(0).toString();let Q=qi.getFnt(i,l,w),E=null;return Q?(E=Ir.spawnQuad(),E.sprite=Q,E.x=(c+Q.xoffset)*n-U,E.y=(a.base-Q.height-Q.yoffset-a.base)*n+x,E.width=Q.offsetSize.width*n,E.height=Q.offsetSize.height*n,c+=Q.xadvance):y==`
|
|
11457
11457
|
`||(y==" "?c+=f:c+=g),b.width=c,b.quadList.push(E),b.charList.push(y),E},C=()=>{let y=this.getAlignment(t);switch(y.v){case 0:for(let b=0,w=r.length;b<w;b++){let Q=r[b];if(b>0){let E=b*f*h;for(let M=0,z=Q.quadList.length;M<z;M++){let Y=Q.quadList[M];Y&&(Y.y-=E)}}}break;case 1:for(let b=0,w=r.length;b<w;b++){let Q=r[b],E=(A-w*l*h)*.5*n+b*f*h;for(let M=0,z=Q.quadList.length;M<z;M++){let Y=Q.quadList[M];Y&&(Y.y-=E)}}break;case 2:for(let b=0,w=r.length;b<w;b++){let Q=r[b],E=(A-w*l*h)*n+b*f*h;for(let M=0,z=Q.quadList.length;M<z;M++){let Y=Q.quadList[M];Y&&(Y.y-=E)}}break}switch(y.h){case 0:break;case 1:for(let b=0,w=r.length;b<w;b++){let Q=r[b],E=(p-Q.width)*.5*n;for(let M=0,z=Q.quadList.length;M<z;M++){let Y=Q.quadList[M];Y&&(Y.x+=E)}}break;case 2:for(let b=0,w=r.length;b<w;b++){let Q=r[b],E=(p-Q.width)*n;for(let M=0,z=Q.quadList.length;M<z;M++){let Y=Q.quadList[M];Y&&(Y.x+=E)}}break}};(()=>{let y=null,b=o.length;for(let w=0;w<b;w++){y||=B();let Q=o.charAt(w);Q==`
|
|
11458
|
-
`||Q==" "?y=null:(S(Q,y),y.width+g>=p&&(y=B()))}})(),C()}getAlignment(e){let t={v:0,h:0};switch(e){case 1:t.v=0,t.h=1;break;case 0:t.v=0,t.h=0;break;case 2:t.v=0,t.h=2;break;case 4:t.v=1,t.h=1;break;case 3:t.v=1,t.h=0;break;case 5:t.v=1,t.h=2;break;case 7:t.v=2,t.h=1;break;case 6:t.v=2,t.h=0;break;case 8:t.v=2,t.h=2;break}return t}}class Os extends mn{_style=Le.NORMAL;_interactive=!1;set interactive(e){this._interactive=e}get interactive(){return this._interactive}set mouseStyle(e){this._style=e}get interactiveVisible(){return this._uiTransform.globalVisible&&this._visible}init(e){super.init(e),this._uiTransform.addUIInteractive(this)}destroy(){this._uiTransform.removeUIInteractive(this),super.destroy()}rayPick(e,t,r,i){return Rf.rayPick(e,r,i,t.space,t.panelRatio,this._uiTransform,t.transform.worldMatrix)}cloneTo(e){e.getOrAddComponent(Os).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.enable=e._enable,this.interactive=e._interactive,this.mouseStyle=e._style,this}}var Mf=(s=>(s[s.NONE=0]="NONE",s[s.COLOR=1]="COLOR",s[s.SPRITE=2]="SPRITE",s))(Mf||{});class bn extends Os{_spriteMap;_colorMap;_image;_isCreateImage;_transition=2;init(e){super.init(e),this._interactive=!0,this._spriteMap=new Map,this._colorMap=new Map,this._image=this.object3D.getComponent(Di),this._isCreateImage=this._image==null,this._image||(this._image=this.object3D.addComponent(Di)),this.imageType=ea.Sliced}onEnable(){this.mouseStyle=Le.NORMAL}onDisable(){this.mouseStyle=Le.DISABLE}set transition(e){this._transition!=e&&(this._transition=e,this.validateStyle(this._style,!0))}get transition(){return this._transition}get imageType(){return this._image.imageType}set imageType(e){this._image.imageType=e}setStyleColor(e,t){return this._colorMap.set(e,t),this._style==e&&this.validateStyle(this._style,!0),this}getStyleColor(e){return this._colorMap.get(e)}set mouseStyle(e){super.mouseStyle=e,this.validateStyle(e,!0)}get normalSprite(){return this._spriteMap.get(Le.NORMAL)}set normalSprite(e){this._spriteMap.set(Le.NORMAL,e),this._style==Le.NORMAL&&this.validateStyle(this._style,!0)}get overSprite(){return this._spriteMap.get(Le.OVER)}set overSprite(e){this._spriteMap.set(Le.OVER,e),this._style==Le.OVER&&this.validateStyle(this._style,!0)}set downSprite(e){this._spriteMap.set(Le.DOWN,e),this._style==Le.DOWN&&this.validateStyle(this._style,!0)}get downSprite(){return this._spriteMap.get(Le.DOWN)}set disableSprite(e){this._spriteMap.set(Le.DISABLE,e),this._style==Le.DISABLE&&this.validateStyle(this._style,!0)}get disableSprite(){return this._spriteMap.get(Le.DISABLE)}validateStyle(e,t){if(this._transition&2){let r=this._spriteMap.get(e);this._image.sprite=r}if(this._transition&1){let r=this._colorMap.get(e);r&&(this._image.color=r)}}cloneTo(e){e.getOrAddComponent(bn).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.imageType=e.imageType,this.transition=e.transition,e._spriteMap.forEach((t,r)=>{t&&this._spriteMap.set(r,t)}),e._colorMap.forEach((t,r)=>{t&&this._colorMap.set(r,t.clone())}),this.mouseStyle=e.mouseStyle,this}destroy(){this._isCreateImage&&this._image&&(this.object3D.removeComponent(Di),this._image=null),super.destroy()}}class Qn extends Ra{_count=0;constructor(){super()}init(e){super.init?.(e),this._count=e?e.count:1;for(let t=0;t<this._count;t++)this.attachQuad(Ir.spawnQuad());this._uiTransform.resize(0,0)}getQuad(e){return this._mainQuads[e]}cloneTo(e){e.addComponent(Qn,{count:this._count}).copyComponent(this)}copyComponent(e){super.copyComponent(e);for(let t=0;t<e._count;t++)this.setSprite(t,e.getSprite(t)),this.setColor(t,e.getColor(t)),this.setImageType(t,e.getImageType(t));return this}setSprite(e,t){this._mainQuads[e].sprite=t||m.res.defaultGUISprite,this.setShadowDirty()}getSprite(e){return this._mainQuads[e].sprite}onUIComponentVisible(e){this.applyComponentVisible()}onUITransformVisible(e){this.applyComponentVisible()}applyComponentVisible(){let e=!this._visible||!this._uiTransform.globalVisible;for(let t of this._mainQuads)t.visible=!e;this.setShadowDirty()}getColor(e){return this._mainQuads[e].color}setColor(e,t){this._mainQuads[e].color=t,this.setShadowDirty()}getImageType(e){return this._mainQuads[e].imageType}setImageType(e,t){this._mainQuads[e].imageType=t,this.setShadowDirty()}setSize(e,t,r){this._mainQuads[e].setSize(t,r),this.setShadowDirty()}setXY(e,t,r){this._mainQuads[e].setXY(t,r),this.setShadowDirty()}getXY(e,t){t||=new K;let r=this._mainQuads[e];return t.x=r.x,t.y=r.y,t}}class Rn extends Ra{_shadowQuality=1;_shadowOffset;_shadowRadius;_shadowColor;_subShadowColor;needUpdateShadow=!1;init(e){super.init?.(e),this._shadowRadius=2,this._shadowQuality=1,this._shadowOffset=new K(4,-4),this._shadowColor=new P(.1,.1,.1,.8),this._subShadowColor=this._shadowColor.clone(),this.isUIShadow=!0}cloneTo(e){e.getOrAddComponent(Rn).copyComponent(this)}copyComponent(e){return super.copyComponent(this),this._shadowColor=e._shadowColor,this._shadowOffset=e._shadowOffset,this._shadowRadius=e._shadowRadius,this._shadowQuality=e.shadowQuality,this}get shadowColor(){return this._shadowColor}set shadowColor(e){this._shadowColor.copyFrom(e),this.needUpdateShadow=!0}set shadowQuality(e){e=ie(e,0,4),this._shadowQuality!=e&&(this._shadowQuality=e,this.needUpdateShadow=!0)}get shadowQuality(){return this._shadowQuality}set shadowOffset(e){this._shadowOffset=e,this.needUpdateShadow=!0}get shadowOffset(){return this._shadowOffset||=new K(4,-4),this._shadowOffset}set shadowRadius(e){this._shadowRadius!=e&&(this._shadowRadius=e,this.applyShadow())}get shadowRadius(){return this._shadowRadius}onUpdate(e){this.needUpdateShadow&&(this.applyShadow(),this.needUpdateShadow=!1)}applyShadow(){if(this.detachQuads(),this._shadowSource&&this._shadowQuality>0){let e=this._shadowSource.mainQuads;if(e.length>0)for(let t of e)this.createQuadShadow(t)}this._uiTransform.setNeedUpdateUIPanel()}createQuadShadow(e){let t=this._shadowQuality,r=Math.PI*2;this._subShadowColor.copyFrom(this._shadowColor),this._subShadowColor.a=1/Math.max(1,t);for(let i=0;i<t;i++){let a=Ir.spawnQuad(),o=0,n=0;if(i==0)a.color=this._shadowColor;else{let l=r*(i-1)/(t-1);o=Math.sin(l)*this._shadowRadius,n=Math.cos(l)*this._shadowRadius,a.color=this._subShadowColor}a.setXY(o+this._shadowOffset.x+e.x,n+this._shadowOffset.y+e.y),a.setSize(e.width,e.height),a.sprite=e.sprite,a.visible=e.visible,a.imageType=e.imageType,this.attachQuad(a)}}}class In extends Ra{_font="\u5FAE\u8F6F\u96C5\u9ED1";_fontSize=14;_originSize=42;_alignment=0;_lineSpacing=1;_text="";_color=new P(1,1,1,1);constructor(){super()}cloneTo(e){e.getOrAddComponent(In).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this._font=e._font,this._fontSize=e._fontSize,this._originSize=e._originSize,this._alignment=e._alignment,this._lineSpacing=e._lineSpacing,this._color.copyFrom(e._color),this.text=e.text,this}get originSize(){return this._originSize}get font(){return this._font}set font(e){this._font=e}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize!=e&&(this._fontSize=e,this.layoutText())}get text(){return this._text}set text(e){this._text!=e&&(e||(e=""),this._text=e,this.layoutText())}textLine=null;layoutProxy=new Df;layoutText(){this.detachQuads(),this.textLine=this.layoutProxy.layout(this);for(let e=0,t=this.textLine.length;e<t;e++){let r=this.textLine[e];for(let i=0,a=r.quadList.length;i<a;i++){let o=r.quadList[i];o&&this.attachQuad(o)}}this.color=this._color,this._uiTransform.setNeedUpdateUIPanel(),this.onUIComponentVisible(this._visible),this.setShadowDirty()}onUIComponentVisible(e){this.applyComponentVisible()}onUITransformVisible(e){this.applyComponentVisible()}applyComponentVisible(){let e=!this._visible||!this._uiTransform.globalVisible;for(let t of this._mainQuads)t&&(t.visible=!e);this.setShadowDirty()}onTransformResize(){this.layoutText()}get color(){return this._color}set color(e){this._color.copyFrom(e);for(let t of this._mainQuads)t.color=e;this.setShadowDirty()}get alignment(){return this._alignment}set alignment(e){this._alignment!=e&&(this._alignment=e,this.layoutText())}get lineSpacing(){return this._lineSpacing}set lineSpacing(e){this._lineSpacing!=e&&(this._lineSpacing=e,this.layoutText())}}var Rm=Object.getOwnPropertyDescriptor,Im=(s,e,t,r)=>{for(var i=r>1?void 0:r?Rm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Cs=class extends Aa{constructor(){super()}init(){super.init(),this.lightData.lightType=Xe.PointLight,this.object3D.name==""&&(this.object3D.name="PointLight"+It())}get range(){return this.lightData.range}set range(s){this.lightData.range=s,this.onChange()}get at(){return this.lightData.linear}set at(s){this.lightData.linear=s,this.onChange()}get radius(){return this.lightData.radius}set radius(s){this.lightData.radius=s,this.onChange()}get quadratic(){return this.lightData.quadratic}set quadratic(s){this.lightData.quadratic=s,this.onChange()}start(){this.transform.rotationX=90,super.start()}onUpdate(){}onGraphic(s){let e=s.scene.getChildByName("graphic3D");if(!e)return;let t=e.createCustomShape(`PointLight_${this.object3D.instanceID}`,this.transform);t.buildAxis(),t.buildCircle(d.ZERO,this.range,32,d.X_AXIS),t.buildCircle(d.ZERO,this.range,32,d.Y_AXIS),t.buildCircle(d.ZERO,this.range,32,d.Z_AXIS)}debug(){}debugDraw(s){}};Cs=Im([Wt(Cs,"Light")],Cs);class Nf extends q{index=0;drawCallFrame=-1;constructor(){super()}}var An=(s=>(s[s.CastGI=0]="CastGI",s[s.ReceiveGI=1]="ReceiveGI",s[s.CastDepth=2]="CastDepth",s[s.Other=3]="Other",s))(An||{});class Vf extends yt{static count=0;constructor(e=0,t=0){super(),O.register("GIProbeShader",ef);let r=new pt,i=new Oe("GIProbeShader","GIProbeShader");i.passType=H.COLOR,r.addRenderPass(i),i.setDefine("USE_BRDF",!0),i.setShaderEntry("VertMain","FragMain"),i.setUniformVector4("probeUniform",new $(t,e,0,0));let a=i.shaderState;a.acceptShadow=!1,a.castShadow=!1,a.receiveEnv=!1,a.acceptGI=!1,a.useLight=!1,r.setTexture("baseMap",m.res.whiteTexture),r.setTexture("normalMap",m.res.normalTexture),r.setTexture("emissiveMap",m.res.blackTexture),this.shader=r}}class Em extends Pe{_probes;_volume;_debugMr=[];init(e){e||=m.views[0]?.scene,m.setting.gi.enable=!0,this._volume=ne.getLightEntries(e).irradianceVolume,this.initProbe(e)}initProbe(e){let t=this._volume.setting.probeXCount,r=this._volume.setting.probeYCount,i=this._volume.setting.probeZCount,a=new Ri(4,16,16),o=new d;this._probes=[];for(let n=0;n<t;n++)for(let l=0;l<r;l++)for(let h=0;h<i;h++){let u=n+h*t+l*(t*i),c=new Nf;c.index=u,c.name=`${n}_${l}_${h}`;let f=c.addComponent(j);f.material=new Vf(An.CastGI,u),f.geometry=a,f.castGI=!1,f.castShadow=!1,this._debugMr.push(f),this.object3D.addChild(c),this._volume.calcPosition(n,l,h,o),c.x=o.x,c.y=o.y,c.z=o.z,this._probes[u]=c,this._debugMr.push(f)}for(let n=0;n<this._probes.length;n++)G.instance.addGIProbe(e,this._probes[n]);this.object3D.transform.enable=!1,this._volume.setting.debug&&this.debug()}debug(){}debugProbeRay(e,t){const r=m.setting.gi.rayNumber;let i=new Z(0,-.7071067811865475,.7071067811865475,0);for(let a=0;a<r;a++){let o=e*r+a,n=new d(-t[o*4+0],-t[o*4+1],-t[o*4+2],0);i.transformVector(n,n);let l=t[o*4+3],h=this._probes[e].transform.worldPosition.clone(),u=n.scaleBy(l);u.add(h,u)}}changeProbesVolumeData(){this._volume.setVolumeDataChange()}changeProbesPosition(){this._volume.setVolumeDataChange();let e=this._volume.setting.probeXCount,t=this._volume.setting.probeYCount,r=this._volume.setting.probeZCount,i=new d;for(let a=0;a<e;a++)for(let o=0;o<t;o++)for(let n=0;n<r;n++){let l=a+n*e+o*(e*r),h=this._probes[l];this._volume.calcPosition(a,o,n,i),h.x=i.x,h.y=i.y,h.z=i.z}}onUpdate(){m.setting.gi.maxDistance=m.setting.gi.probeSpace*1.5;let e=this.transform.scene3D.view.camera,t=d.distance(e.transform.worldPosition,e.transform.targetPos)/300;if(this._debugMr&&this._debugMr.length>0)for(let r=0;r<this._debugMr.length;r++){const i=this._debugMr[r].transform;i.scaleX=t,i.scaleY=t,i.scaleZ=t}}}class wm extends ei{_keyRenderGroup;_keyBufferGroup;_keyIdsGroup;constructor(){super()}init(e){this._keyRenderGroup=new Map,this._keyBufferGroup=new Map,this._keyIdsGroup=new Map}start(){let e=[];this.object3D.getComponents(j,e,!0);for(let t=0;t<e.length;t++){const r=e[t];r.transform.updateWorldMatrix(!0),r.enable=!1;let i=r.geometry.instanceID;for(let a=0;a<r.materials.length;a++){const o=r.materials[a];i+=o.instanceID}if(this._keyRenderGroup.has(i))this._keyRenderGroup.get(i).push(r),this._keyIdsGroup.get(i).push(r.transform.worldMatrix.index);else{let a=new ve(e.length);a.visibility=GPUShaderStage.VERTEX,this._keyRenderGroup.set(i,[r]),this._keyBufferGroup.set(i,a),this._keyIdsGroup.set(i,[r.transform.worldMatrix.index])}}this._keyBufferGroup.forEach((t,r)=>{let i=this._keyIdsGroup.get(r),a=this._keyBufferGroup.get(r);a.setInt32Array("matrixIDs",new Int32Array(i)),a.apply()})}reset(){this._keyRenderGroup.size>0&&(this._keyRenderGroup.clear(),this._keyBufferGroup.clear(),this._keyIdsGroup.clear(),this.start())}nodeUpdate(e,t,r,i){this._keyRenderGroup.forEach((a,o)=>{let n=this._keyBufferGroup.get(o),l=a[0];for(let h=0;h<l.materials.length;h++){let c=l.materials[h].getPass(t);if(c)for(let f=0;f<c.length;f++){const g=c[f];g.setDefine("USE_INSTANCEDRAW",!0),g.setStorageBuffer("instanceDrawID",n)}}l.nodeUpdate(e,t,r,i)})}renderPass(e,t,r){this._keyRenderGroup.forEach((i,a)=>{let o=i[0];o.instanceCount=i.length,this.renderItem(e,t,o,r)})}renderItem(e,t,r,i){let a=r.transform._worldMatrix;for(let o=0;o<r.materials.length;o++){let l=r.materials[o].getPass(t);if(!(!l||l.length==0))for(let h=0;h<l.length;h++){let u=l[h];F.bindGeometryBuffer(i.encoder,r.geometry);const c=u;c.shaderState.splitTexture&&(i.endRenderPass(),Bt.WriteSplitColorTexture(r.instanceID),i.beginOpaqueRenderPass(),F.bindCamera(i.encoder,e.camera),F.bindGeometryBuffer(i.encoder,r.geometry)),F.bindPipeline(i.encoder,c);let A=r.geometry.subGeometries[o].lodLevels[r.lodLevel];r.instanceCount>0?F.drawIndexed(i.encoder,A.indexCount,r.instanceCount,A.indexStart,0,0):F.drawIndexed(i.encoder,A.indexCount,1,A.indexStart,0,a.index)}}}beforeDestroy(e){this._keyRenderGroup.clear(),this._keyBufferGroup.clear(),this._keyIdsGroup.clear(),this._keyRenderGroup=this._keyBufferGroup=this._keyIdsGroup=void 0,Se.removeWaitStart(this.object3D,this)}}var Tm=Object.getOwnPropertyDescriptor,Dm=(s,e,t,r)=>{for(var i=r>1?void 0:r?Tm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Ss=class extends j{constructor(){super()}get geometry(){return null}set geometry(s){}cloneTo(s){}set meshURL(s){let e=m.res.getGeometry(s);e?this.geometry=e:console.error("no geometry set",s)}};Ss=Dm([Wt(Ss,"MeshFilter")],Ss);var Mm=Object.getOwnPropertyDescriptor,Nm=(s,e,t,r)=>{for(var i=r>1?void 0:r?Mm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Ia=class extends j{skinJointsName;mInverseBindMatrixData;mInverseBindMatrixBuffer;mSkeletonAnimation;mJointIndexTableBuffer;constructor(){super(),this.addRendererMask(Be.SkinnedMesh)}start(){if(super.start(),this.skeletonAnimation=this.object3D.getComponent(ai),!this.skeletonAnimation){let s=this.object3D.parentObject.parentObject.getComponentsInChild(ai);s.length>0&&(this.skeletonAnimation=s[0]);let e=this.object3D;for(;!this.skeletonAnimation&&e;)this.skeletonAnimation=e.getComponentFromParent(ai),e.parent&&(e=e.parent.object3D)}}onEnable(){super.onEnable()}get skeletonAnimation(){return this.mSkeletonAnimation}set skeletonAnimation(s){if(this.mSkeletonAnimation=s,!!s&&!this.mJointIndexTableBuffer){let e=this.mSkeletonAnimation.getJointIndexTable(this.skinJointsName);this.mJointIndexTableBuffer=new ve(e.length*4,0,new Float32Array(e)),this.mJointIndexTableBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.COMPUTE}}get skinInverseBindMatrices(){return this.mInverseBindMatrixData}set skinInverseBindMatrices(s){this.mInverseBindMatrixData=s;var e=new Float32Array(s.length*16);for(let t=0;t<s.length;t++){let r=t*16,i=s[t];e.set(i,r)}this.mInverseBindMatrixBuffer=new ve(e.byteLength,0,e),this.mInverseBindMatrixBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.COMPUTE}get inverseBindMatrixBuffer(){return this.mInverseBindMatrixBuffer}get jointIndexTableBuffer(){return this.mJointIndexTableBuffer.buffer}cloneTo(s){let e=s.addComponent(Ia);e.geometry=this.geometry,e.material=this.material.clone(),e.castShadow=this.castShadow,e.castGI=this.castGI,e.receiveShadow=this.receiveShadow,e.rendererMask=this.rendererMask,e.skinJointsName=this.skinJointsName,e.skinInverseBindMatrices=this.skinInverseBindMatrices,e.mJointIndexTableBuffer=this.mJointIndexTableBuffer}nodeUpdate(s,e,t,r){for(let i=0;i<this.materials.length;i++){let o=this.materials[i].getPass(e);if(o)for(let n=0;n<o.length;n++){const l=o[n];!l.pipeline&&this.mSkeletonAnimation&&(l.setStorageBuffer("jointsMatrixIndexTable",this.mSkeletonAnimation.jointMatrixIndexTableBuffer),l.setStorageBuffer("jointsInverseMatrix",this.mInverseBindMatrixBuffer),l.setStorageBuffer("jointsIndexMapingTable",this.mJointIndexTableBuffer))}}super.nodeUpdate(s,e,t,r)}};Ia=Nm([Wt(Ia,"SkinnedMeshRenderer")],Ia);class Vm extends Ke{radius=2.5;height=10;constructor(){super(),this._shapeType=ta.Capsule}}class zs extends Ke{mesh;static triangle;_pickRet;constructor(){super(),this._shapeType=ta.Mesh}rayPick(e,t){if(this.mesh){zs.triangle||=new Ya(new d,new d,new d);let r=this.mesh.getAttribute(V.position),i=this.mesh.getAttribute(V.indices),a=Ke.helpMatrix;a.copyFrom(t).invert();let o=Ke.helpRay.copy(e);if(o.applyMatrix(a),o.intersectBox(this.mesh.bounds),!o.intersectBox(this.mesh.bounds,Ke.v3_help_0))return null;if(i&&r&&i.data.length>0){let l=r.data;for(let h=0,u=i.data.length/3;h<u;h++){let c=h*3;const f=i.data[c+0]*3,g=i.data[c+1]*3,p=i.data[c+2]*3;let A=zs.triangle,U=A.v1.set(l[f+0],l[f+1],l[f+2]),x=A.v2.set(l[g+0],l[g+1],l[g+2]),B=A.v3.set(l[p+0],l[p+1],l[p+2]);A.set(U,x,B);let S=o.intersectTriangle(o.origin,o.direction,A);if(S){this._pickRet||={intersectPoint:new d,distance:0},this._pickRet.intersectPoint=S,this._pickRet.distance=d.distance(o.origin,S);let C=this.mesh.getAttribute(V.normal);if(C){let _=C.data,y=new d(_[f],_[f+1],_[f+2]);t.transformVector(y,y),y.normalize(),this._pickRet.normal=y}return this._pickRet}}}}return null}}class Pm extends Ke{_pickRet;box;radius=.5;constructor(e){super(),this._shapeType=ta.Sphere,this.radius=e,this.box=new Ga(new d,1)}rayPick(e,t){this.box.setFromCenterAndSize(this.center,this.radius);let i=Ke.helpMatrix;i.copyFrom(t).invert();let a=Ke.helpRay.copy(e);a.applyMatrix(i);let o=a.intersectSphere(a.origin,a.direction,this.box.center,this.box.radius);return o?(this._pickRet||(this._pickRet={intersect:!1,intersectPoint:new d,distance:0}),this._pickRet.intersect=!0,this._pickRet.intersectPoint=o,this._pickRet.distance=d.distance(a.origin,Ke.v3_help_0),this._pickRet):null}}class km extends q{_envMap;skyObject;envMapChange=!0;view;constructor(){super(),this.transform.scene3D=this,this.skyObject=new q,this.addChild(this.skyObject),this._isScene3D=!0,this.envMap||=m.res.defaultSky}get envMap(){return this._envMap}set envMap(e){this._envMap!=e&&(this.envMapChange=!0),this._envMap=e,G.instance.sky&&"map"in G.instance.sky&&(G.instance.sky.map=e)}get exposure(){return G.instance.sky&&"exposure"in G.instance.sky?G.instance.sky.exposure:0}set exposure(e){G.instance.sky&&"exposure"in G.instance.sky&&(G.instance.sky.exposure=e,m.setting.sky.skyExposure=e)}get roughness(){if(G.instance.sky&&"roughness"in G.instance.sky)return G.instance.sky.roughness}set roughness(e){G.instance.sky&&"roughness"in G.instance.sky&&(G.instance.sky.roughness=e)}}class Pf{_computeShader;_outBuffer;constructor(){}init(){let e=se.getGBufferFrame(se.colorPass_GBuffer);this._computeShader=new ue(Vc),this._outBuffer=new Hi(32),this._computeShader.setStorageBuffer("outBuffer",this._outBuffer),this._computeShader.setSamplerTexture("gBufferTexture",e.getCompressGBufferTexture())}compute(e){let t=ne.getCameraGroup(e.camera);this._computeShader.setStorageBuffer("globalUniform",t.uniformGPUBuffer);let r=F.beginCommandEncoder();F.computeCommand(r,[this._computeShader]),F.endCommandEncoder(r),this._outBuffer.readBuffer()}getPickMeshID(){var e=this._outBuffer.outFloat32Array[0]+.1;return Math.floor(e)}getPickWorldPosition(e){e||=new d;var t=this._outBuffer.outFloat32Array[4],r=this._outBuffer.outFloat32Array[5],i=this._outBuffer.outFloat32Array[6];return e.set(t,r,i),e}getPickWorldNormal(e){e||=new d;var t=this._outBuffer.outFloat32Array[8],r=this._outBuffer.outFloat32Array[9],i=this._outBuffer.outFloat32Array[10];return e.set(t*2-1,r*2-1,i*2-1).normalize(),e}getPickScreenUV(e){e||=new K;var t=this._outBuffer.outFloat32Array[2],r=this._outBuffer.outFloat32Array[3];return e.set(t,r),e}}class kf extends Er{ray;isTouching=!1;_mouseCode;_pickEvent;_outEvent;_overEvent;_upEvent;_downEvent;_mouseMove;_pickCompute;_lastDownTarget;mouseEnableMap;_view;constructor(e){super(),this._view=e,this.init()}init(){this.ray=new $t,this.mouseEnableMap=new Map,this._pickEvent=new k(k.PICK_CLICK),this._outEvent=new k(k.PICK_OUT),this._overEvent=new k(k.PICK_OVER),this._mouseMove=new k(k.PICK_MOVE),this._upEvent=new k(k.PICK_UP),this._downEvent=new k(k.PICK_DOWN)}start(){m.setting.pick.enable&&(m.inputSystem.addEventListener(k.POINTER_DOWN,this.onTouchStart,this),m.inputSystem.addEventListener(k.POINTER_UP,this.onTouchEnd,this),m.inputSystem.addEventListener(k.POINTER_CLICK,this.onTouchOnce,this),m.inputSystem.addEventListener(k.POINTER_RIGHT_CLICK,this.onTouchOnce,this),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onTouchMove,this)),m.setting.pick.mode=="pixel"&&(this._pickCompute=new Pf,this._pickCompute.init())}stop(){m.inputSystem.removeEventListener(k.POINTER_DOWN,this.onTouchStart,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.onTouchEnd,this),m.inputSystem.removeEventListener(k.POINTER_CLICK,this.onTouchOnce,this),m.inputSystem.removeEventListener(k.POINTER_RIGHT_CLICK,this.onTouchOnce,this),m.inputSystem.removeEventListener(k.POINTER_MOVE,this.onTouchMove,this)}onTouchStart(e){this.isTouching=!0,this._mouseCode=e.mouseCode,this.pick(this._view.camera);let t=this.findNearestObj(this._interestList,this._view.camera);this._lastDownTarget=t,t&&(Object.assign(this._downEvent,e),this._downEvent.type=k.PICK_DOWN,this._downEvent.target=t.object3D,this._downEvent.data=this.getPickInfo(),this.dispatchEvent(this._downEvent),t.object3D.containEventListener(k.PICK_DOWN)&&t.object3D.dispatchEvent(this._downEvent))}onTouchEnd(e){this.isTouching=!1,this._mouseCode=e.mouseCode,this.pick(this._view.camera);let t=this.findNearestObj(this._interestList,this._view.camera);t&&(Object.assign(this._upEvent,e),this._upEvent.type=k.PICK_UP,this._upEvent.target=t.object3D,this._upEvent.data=this.getPickInfo(),this.dispatchEvent(this._upEvent),t.object3D.containEventListener(k.PICK_UP)&&t.object3D.dispatchEvent(this._upEvent))}_lastFocus;getPickInfo(){if(m.setting.pick.mode=="pixel")return{worldPos:this._pickCompute.getPickWorldPosition(),worldNormal:this._pickCompute.getPickWorldNormal(),screenUv:this._pickCompute.getPickScreenUV(),meshID:this._pickCompute.getPickMeshID()};{let e=this._interestList[0];return{worldPos:e.intersectPoint,worldNormal:e.normal,meshID:e.collider.transform.worldMatrix.index,distance:e.distance}}}onTouchMove(e){this.isTouching=!0,this._mouseCode=e.mouseCode,this.pick(this._view.camera);let t=this.findNearestObj(this._interestList,this._view.camera);t&&(Object.assign(this._mouseMove,e),this._mouseMove.type=k.PICK_MOVE,this._mouseMove.target=t.object3D,this._mouseMove.data=this.getPickInfo(),this.dispatchEvent(this._mouseMove),t.object3D.containEventListener(k.PICK_MOVE)&&t.object3D.dispatchEvent(this._mouseMove)),t!=this._lastFocus&&(this._lastFocus&&this._lastFocus.object3D&&(Object.assign(this._outEvent,e),this._outEvent.type=k.PICK_OUT,this._outEvent.target=this._lastFocus.object3D,this._outEvent.data=this.getPickInfo(),this.dispatchEvent(this._outEvent),this._lastFocus.object3D.containEventListener(k.PICK_OUT)&&this._lastFocus.object3D.dispatchEvent(this._outEvent)),t&&(Object.assign(this._overEvent,e),this._overEvent.type=k.PICK_OVER,this._overEvent.target=t.object3D,this._overEvent.data=this.getPickInfo(),this.dispatchEvent(this._overEvent),t.object3D.containEventListener(k.PICK_OVER)&&t.object3D.dispatchEvent(this._overEvent))),this._lastFocus=t}onTouchOnce(e){this.isTouching=!0,this._mouseCode=e.mouseCode,this.pick(this._view.camera);let t=this.findNearestObj(this._interestList,this._view.camera);if(t){let r=this.getPickInfo();Object.assign(this._pickEvent,e),this._pickEvent.type=k.PICK_CLICK,this._pickEvent.target=t.object3D,this._pickEvent.data=r,this.dispatchEvent(this._pickEvent),t===this._lastDownTarget&&t.object3D.containEventListener(k.PICK_CLICK)&&t.object3D.dispatchEvent(this._pickEvent)}this._lastDownTarget=null}findNearestObj(e,t){return e.sort((r,i)=>r.distance>i.distance?1:-1),e[0]?.collider}_interestList=[];pick(e){if(this._interestList.length=0,m.setting.pick.mode=="pixel"){this._pickCompute.compute(this._view);let t=this._pickCompute.getPickMeshID(),r=this.mouseEnableMap.get(t);if(r){let i=this._pickCompute.getPickWorldPosition(),a=d.distance(i,this.ray.origin);this._interestList.push({distance:a,collider:r,intersectPoint:i})}}else if(m.setting.pick.mode=="bound"){this.ray=e.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY);let t,r=Se.componentsEnablePickerList.get(this._view);if(r)for(const i of r){let a=i[0];a.enable&&(t=a.rayPick(this.ray),t&&(t.collider=a,this._interestList.push(t)))}}}}class Lm extends as{_camera;_scene;_viewPort;_enablePick=!1;_enable=!0;pickFire;guiPick;canvasList;constructor(e=0,t=0,r=0,i=0){super(),this.canvasList=[],this._viewPort=new $(e,t,r,i)}get enable(){return this._enable}set enable(e){this._enable=e}get enablePick(){return this._enablePick}set enablePick(e){this._enablePick!=e&&(this.pickFire=new kf(this),this.pickFire.start()),this._enablePick=e}get scene(){return this._scene}set scene(e){this._scene=e,e.view=this,wt.createBuffer(this),e&&this.canvasList.forEach(t=>{t&&e.addChild(t.object3D)})}get camera(){return this._camera}set camera(e){this._camera=e}get viewPort(){return this._viewPort}set viewPort(e){this._viewPort=e}enableUICanvas(e=0){let t=this.canvasList[e];if(!t){let r=new q;r.name="Canvas "+e,t=r.addComponent(Ja),t.index=e,this.canvasList[e]=t}return this.scene.addChild(t.object3D),this.guiPick||(this.guiPick=new yf,this.guiPick.init(this)),t}disableUICanvas(e=0){let t=this.canvasList[e];t&&t.object3D&&t.object3D.removeFromParent()}}class Om{normal;fixNormal;center;rotateShape;distance=0;index;constructor(e){this.index=e,this.rotateShape=[]}}class zm extends Ne{vScale;uNegate;sections;build(e,t,r,i=1,a=!0){if(r.length<2)throw new Error("path length is not enough");return this.vScale=i,this.uNegate=a,e=e.slice(),t&&e.push(e[0]),this.sections=this.buildSections(e,r),this.buildGeometry(e,this.sections),this.bounds=new Re(d.ZERO.clone(),new d(100,100,100)),this}buildSections(e,t){let r,i,a,o=[],n=t.length;for(let h=0;h<n;h++){let u=new Om(h);r=t[h],i=t[h+1],u.center=r.clone(),i==null?(u.normal=a.clone(),u.distance=0):(a=i.subtract(r),u.distance=a.length,u.normal=a.normalize()),o.push(u)}o[0].fixNormal=o[0].normal.clone();for(let h=1;h<n;h++){let u=o[h-1],c=o[h];c.fixNormal=c.normal.add(u.normal).normalize()}let l=new I().identity();for(let h=0;h<n;h++){let u=o[h],c,f;if(h==0)c=d.UP,f=e;else{let g=o[h-1];c=g.fixNormal,f=g.rotateShape}I.fromToRotation(c,u.fixNormal,l);for(let g=0,p=e.length;g<p;g++){let A=l.multiplyPoint3(f[g]);u.rotateShape.push(A)}}return o}buildGeometry(e,t){let r=t.length,i=e.length,a=r*i,o=r-1,n=new Float32Array(a*3),l=new Float32Array(a*3),h=new Float32Array(a*2),u=new Uint32Array(o*(i-1)*6),c=i-1,f=0,g=0,p=[0];for(let U=1;U<i;U++)g+=e[U-1].subtract(e[U]).length,p.push(g);for(let U=0;U<r;U++){let x=t[U];for(let B=0;B<i;B++){let S=(U*i+B)*3,C=x.rotateShape[B].add(x.center);n[S]=C.x,n[S+1]=C.y,n[S+2]=C.z,l[S+1]=1;let _=(U*i+B)*2,y=p[B]/g;h[_]=this.uNegate?1-y:y,h[_+1]=f*this.vScale}f+=x.distance}let A=0;for(let U=0;U<o;U++){let x=U*i;for(let B=0;B<c;B++){let S=B,C=B+1,_=S+i,y=C+i;u[A++]=S+x,u[A++]=C+x,u[A++]=_+x,u[A++]=C+x,u[A++]=y+x,u[A++]=_+x}}return this.setIndices(u),this.setAttribute(V.position,n),this.setAttribute(V.normal,l),this.setAttribute(V.uv,h),this.setAttribute(V.TEXCOORD_1,h),this.addSubGeometry({indexStart:0,indexCount:u.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0}),this.computeNormals(),this}}class Gm{name;offset;size;arrayStride;stepMode;attributes}class Wm{name;format;offset;shaderLocation;stride}var Lf=(s=>(s[s.position=3]="position",s[s.normal=3]="normal",s[s.TANGENT=4]="TANGENT",s[s.uv=2]="uv",s[s.TEXCOORD_1=2]="TEXCOORD_1",s[s.color=4]="color",s[s.joints0=4]="joints0",s[s.weights0=4]="weights0",s[s.joints1=4]="joints1",s[s.weights1=4]="weights1",s[s.vIndex=1]="vIndex",s[s.weight=1]="weight",s[s.a_morphPositions_0=3]="a_morphPositions_0",s))(Lf||{});class Jm{get data(){return null}entity}class Of{min=0;max=0;set(e,t){return this.max=t,this.min=e,this}copy(e){return this.max=e.max,this.min=e.min,this}isInterestRange(e){return!(this.max>e.min||e.max<this.min)}}class zf{_spaceDesc;getRange(e){return this._spaceDesc[e]}initSpace(e){this._spaceDesc={};for(let t of e)(this._spaceDesc[t]=new Of).set(-Number.MAX_VALUE,Number.MAX_VALUE);return this}isContain(e,t){let r=this._spaceDesc[e];return t>=r.min&&t<r.max}isInterestRange(e,t){let r=this._spaceDesc[e];return r?t.isInterestRange(r):!1}splitSpace(e,t,r){let i=this._spaceDesc[e];return t?i.max=r:i.min=r,this}copySpace(e){for(let t in e._spaceDesc){let r=e._spaceDesc[t];this._spaceDesc[t].copy(r)}return this}}class Xa{static MaxEntityCountInLeaf=4;static MaxLayer=10;static ClearLeafLayer=Xa.MaxLayer-4}class Ha{static UUID=0;uuid="0";constructor(){this.uuid=(Ha.UUID++).toString()}}class Zm{map={};_count=0;get count(){return this._count}push(e){return this.map[e.uuid]?!1:(this.map[e.uuid]=e,this._count++,!0)}remove(e){return this.map[e]?(delete this.map[e],this._count--,!0):!1}}class hi extends Ha{_dimensionIndex=0;_dimensions;_dimension;_left;_right;_space;_parent;_entities;layer;get dimension(){return this._dimension}constructor(e=0){super(),this.layer=e,hi.nodeCount++}initNode(e,t,r){return this._dimensions=t,this._dimensionIndex=r,this._dimension=t[r],this._space=new zf().initSpace(t),e&&this._space.copySpace(e._space),this._parent=e,this._entities=new Zm,this}updateEntity(e){if(e.isInNode(this,this._dimension)&&(e.attachTreeNode(this),this.autoSplit(),this._left&&this._right)){let t=(this._dimensionIndex+1)%this._dimensions.length,r=this._dimensions[t];e.isInNode(this._right,r)?this._right.updateEntity(e):e.isInNode(this._left,r)&&this._left.updateEntity(e)}}buildRoot(e){for(const t of e)t.entity.attachTreeNode(this);this.autoSplit()}_splitEntityList=[];autoSplit(){if(this._entities.count>Xa.MaxEntityCountInLeaf&&!this._right&&!this._left&&this.layer<Xa.MaxLayer){let e=this._splitEntityList,t=(this._dimensionIndex+1)%this._dimensions.length,r=this._dimensions[t],i=0;for(const a in this._entities.map){let o=this._entities.map[a];i+=o.centerValue(r),e.push(o)}i/=this._entities.count,this._left=new hi(this.layer+1),this._right=new hi(this.layer+1),this._left.initNode(this,this._dimensions,t),this._right.initNode(this,this._dimensions,t),this._left.setSpace(!0,i),this._right.setSpace(!1,i);for(let a of e)a.isInNode(this._right,r)?a.attachTreeNode(this._right):a.isInNode(this._left,r)&&a.attachTreeNode(this._left)}this._left&&this._left.autoSplit(),this._right&&this._right.autoSplit()}setSpace(e,t){return this._parent&&this._space.splitSpace(this._dimension,e,t),this}isEmpty(){return this._left==null&&this._right==null&&this._entities.count==0}pushEntity(e){return this._entities.push(e)}removeEntity(e){return this._entities.remove(e.uuid)}static nodeCount=0;autoClear(){let e=this;for(;e&&e.layer>Xa.ClearLeafLayer&&e.clearLeaf();)e=e._parent}clearLeaf(){let e=!this._left&&!this._right,t=!e&&this._left.isEmpty()&&this._right.isEmpty();return t&&(this._left=this._right=null,hi.nodeCount-=2),e||t}isContain(e){return this._space.isContain(this._dimension,e)}static rangeBox=new Re(new d(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),new d(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE));nodeIntersectsBox(e){let t=this._space.getRange("x"),r=this._space.getRange("y"),i=this._space.getRange("z"),a=hi.rangeBox;return a.min.set(t.min,r.min,i.min),a.max.set(t.max,r.max,i.max),a.intersectsBox(e)}nodeIntersectsRay(e){let t=this._space.getRange("x"),r=this._space.getRange("y"),i=this._space.getRange("z"),a=hi.rangeBox;return a.min.set(t.min,r.min,i.min),a.max.set(t.max,r.max,i.max),!0}pointCast(e,t=0,r){if(r=r||[],this._entities.count>0){let i=this._entities.map;for(let a in i){let o=i[a],n=o.entityContainPoint(e);!n&&t>0&&(n=o.squareDistanceTo(e,this._dimensions)<=t),n&&r.push(o)}}this._left&&this._left.isContain(e[this._left.dimension])&&this._left.pointCast(e,t,r),this._right&&this._right.isContain(e[this._right.dimension])&&this._right.pointCast(e,t,r)}boxCast(e,t){if(t=t||[],this._entities.count>0){let r=this._entities.map;for(let i in r){let a=r[i];a.entityIntersectsBox(e)&&t.push(a)}}this._left&&this._left.nodeIntersectsBox(e)&&this._left.boxCast(e,t),this._right&&this._right.nodeIntersectsBox(e)&&this._right.boxCast(e,t)}pointIntersect=new d;rayCast(e,t,r){t=t||[],r=r||[];let i=this.pointIntersect;if(this._entities.count>0){let a=this._entities.map;for(let o in a){let n=a[o];n.entityIntersectsRay(e,i)&&(r.push(new d().copyFrom(i)),t.push(n))}}this._left&&this._left.nodeIntersectsRay(e)&&this._left.rayCast(e,t,r),this._right&&this._right.nodeIntersectsRay(e)&&this._right.rayCast(e,t,r)}}class Ym extends Ha{userData;node;constructor(e){super(),this.userData=e}centerValue(e){return 0}isInNode(e,t){return!1}entityContainPoint(e){return!1}squareDistanceTo(e,t){return Number.MAX_VALUE}entityIntersectsBox(e){return!1}entityIntersectsRay(e,t){return!1}attachTreeNode(e){return this.node&&this.detachTreeNode(),this.node=e,this.node.pushEntity(this)}detachTreeNode(){let e=this.node.removeEntity(this);return this.node=null,e}updateNode(e){let t=this.node;t&&this.detachTreeNode(),e.updateEntity(this),t&&t.autoClear()}}class vt{minPosX=0;minPosY=0;maxPosX=0;maxPosY=0;testID=0;points;offsetPosition;static TINY=1e-6;constructor(){this.points=new Array,this.offsetPosition=new d(0,0,0,0),this.clear()}setAABox(e,t,r,i){this.minPosX=e-r/2-vt.TINY,this.maxPosX=e+r/2+vt.TINY,this.minPosY=t-i/2-vt.TINY,this.maxPosY=t+i/2+vt.TINY,this.offsetPosition.setTo(0,0,0)}setOffset(e){this.maxPosX+=e.x-this.offsetPosition.x,this.minPosX+=e.x-this.offsetPosition.x,this.minPosY+=e.z-this.offsetPosition.z,this.maxPosY+=e.z-this.offsetPosition.z,this.offsetPosition.copyFrom(e)}setContainRect(e,t,r,i){this.minPosX>e&&(this.minPosX=e),this.minPosY>t&&(this.minPosY=t),this.maxPosX<r&&(this.maxPosX=r),this.maxPosY<i&&(this.maxPosY=i)}clear(){var e=1e9;this.minPosX=this.minPosY=e,this.maxPosX=this.maxPosY=-e,this.points.length=0,this.testID=0,this.offsetPosition.setTo(0,0,0)}addPoint(e){this.points.indexOf(e)==-1&&(e.x<this.minPosX&&(this.minPosX=e.x-vt.TINY),e.x>this.maxPosX&&(this.maxPosX=e.x+vt.TINY),e.z<this.minPosY&&(this.minPosY=e.z-vt.TINY),e.z>this.maxPosY&&(this.maxPosY=e.z+vt.TINY),this.points.push(e))}clone(){var e=new vt;return e.minPosX=this.minPosX,e.minPosY=this.minPosY,e.maxPosX=this.maxPosX,e.maxPosY=this.maxPosY,e}get radius(){return Math.sqrt((this.maxPosY-this.minPosY)*(this.maxPosY-this.minPosY)+(this.maxPosX-this.minPosX)*(this.maxPosX-this.minPosX))}get sideX(){return this.maxPosX-this.minPosX}get sideY(){return this.maxPosY-this.minPosY}get centreX(){return(this.maxPosX-this.minPosX)*.5+this.minPosX}get centreY(){return(this.maxPosY-this.minPosY)*.5+this.minPosY}overlapTest(e){return!(this.minPosY>=e.maxPosY||this.maxPosY<=e.minPosY||this.minPosX>=e.maxPosX||this.maxPosX<=e.minPosX)}isPointInside(e){return e.x>=this.minPosX&&e.x<=this.maxPosX&&e.z>=this.minPosY&&e.z<=this.maxPosY}isIntersectLineSegment(e,t,r,i){var a=!1,o=t-i,n=r-e,l=e*i-r*t,h=(-l-o*this.minPosX)/n;h<=this.maxPosY&&h>=this.minPosY&&(a=!0),h=(-l-o*this.maxPosX)/n,h<=this.maxPosY&&h>=this.minPosY&&(a=!0);var u=(-l-n*this.minPosY)/o;return u<=this.maxPosX&&u>=this.minPosX&&(a=!0),u=(-l-n*this.maxPosY)/o,u<=this.maxPosX&&u>=this.minPosX&&(a=!0),a}}class di{static NUM_CHILDREN=4;childCellIndices;nodeIndices;aabb;points;constructor(e){this.childCellIndices=new Array,this.childCellIndices.length=di.NUM_CHILDREN,this.nodeIndices=new Array,this.clear(),e?this.aabb=e.clone():this.aabb=new vt}isLeaf(){return this.childCellIndices[0]==-1}clear(){for(var e=0;e<di.NUM_CHILDREN;e++)this.childCellIndices[e]=-1;this.nodeIndices.splice(0,this.nodeIndices.length)}}class Gf{_cells;_rootCell;_quadNodes;_aabb;_cellsToTest;_testID;constructor(){this._testID=0,this._cells=new Array,this._quadNodes=new Array,this._cellsToTest=new Array,this._aabb=new vt}getQuadNode(e){return this._quadNodes[e]}clear(){this._cells.length=0,this._quadNodes.length=0}initNodes(e){this.clear();for(var t=0,r=e.length;t<r;)e[t].calcGlobalQuadAABB(),this._quadNodes.push(e[t]),t++}buildQuadTree(e,t){this._aabb.clear();for(var r of this._quadNodes)if(r.isTriangle)for(var i of r.aabb.points)this._aabb.addPoint(i);else this._aabb.setContainRect(r.aabb.minPosX,r.aabb.minPosY,r.aabb.maxPosX,r.aabb.maxPosY);this._cells.length=0,this._rootCell=new di(this._aabb),this._cells.push(this._rootCell);for(var a=this._quadNodes.length,o=0;o<a;o++)this._cells[0].nodeIndices[o]=o;var n=new Array;n.push(0);for(var l,h,u;n.length!=0;)if(h=n.pop(),!(this._cells[h].nodeIndices.length<=e||this._cells[h].aabb.radius<t)){for(o=0;o<di.NUM_CHILDREN;o++){this._cells[h].childCellIndices[o]=this._cells.length,n.push(this._cells.length),this._cells.push(new di(this.createAABox(this._cells[h].aabb,o))),u=this._cells[this._cells.length-1],a=this._cells[h].nodeIndices.length;for(var c=0;c<a;c++)l=this._cells[h].nodeIndices[c],this.doesNodeIntersectCell(this._quadNodes[l],u)&&u.nodeIndices.push(l)}this._cells[h].nodeIndices.length=0}}createAABox(e,t){var r=e.centreX,i=e.centreY,a=e.sideX,o=e.sideY,n=new vt;switch(t){case 0:n.setAABox(r+a/4,i+o/4,a/2,o/2);break;case 1:n.setAABox(r-a/4,i+o/4,a/2,o/2);break;case 2:n.setAABox(r-a/4,i-o/4,a/2,o/2);break;case 3:n.setAABox(r+a/4,i-o/4,a/2,o/2);break;default:n.setAABox(r+a/4,i-o/4,a/2,o/2);break}return n}doesNodeIntersectCell(e,t){var r=e.aabb;if(!r.overlapTest(t.aabb))return!1;if(!e.isTriangle)return!0;var i=r.points,a=i[0],o=i[1],n=i[2];if(t.aabb.isPointInside(a)||t.aabb.isPointInside(o)||t.aabb.isPointInside(n))return!0;var l=this.pointInTriangle(t.aabb.minPosX,t.aabb.minPosY,a,o,n)||this.pointInTriangle(t.aabb.minPosX,t.aabb.maxPosY,a,o,n)||this.pointInTriangle(t.aabb.maxPosX,t.aabb.maxPosY,a,o,n)||this.pointInTriangle(t.aabb.maxPosX,t.aabb.minPosY,a,o,n);return l?!0:(l=t.aabb.isIntersectLineSegment(a.x,a.z,o.x,o.z)||t.aabb.isIntersectLineSegment(a.x,a.z,n.x,n.z)||t.aabb.isIntersectLineSegment(o.x,o.z,n.x,n.z),l)}getNodesIntersectingtAABox(e,t){if(this._cells.length==0)return 0;this._cellsToTest.length=0,this._cellsToTest.push(0),this.incrementTestCounter();for(var r,i,a,o,n=0;this._cellsToTest.length!=0;)if(r=this._cellsToTest.pop(),a=this._cells[r],!!t.overlapTest(a.aabb))if(a.isLeaf())for(i=a.nodeIndices.length,n=0;n<i;n++)o=this.getQuadNode(a.nodeIndices[n]).aabb,o.testID!=this._testID&&(o.testID=this._testID,t.overlapTest(o)&&e.push(a.nodeIndices[n]));else for(n=0;n<di.NUM_CHILDREN;n++)this._cellsToTest.push(a.childCellIndices[n]);return e.length}pointInTriangle(e,t,r,i,a){var o=r,n=i,l=a,h=o.z-n.z,u=n.x-o.x,c=o.x*n.z-n.x*o.z,f=n.z-l.z,g=l.x-n.x,p=n.x*l.z-l.x*n.z,A=l.z-o.z,U=o.x-l.x,x=l.x*o.z-o.x*l.z,B=!1,S=h*e+u*t+c,C=f*e+g*t+p,_=A*e+U*t+x;const y=.01;return(S>=-y&&C>=-y&&_>=-y||S<=y&&C<=y&&_<=y)&&(B=!0),B}incrementTestCounter(){if(++this._testID,this._testID==0){for(var e=this._quadNodes.length,t=0;t<e;t++)this._quadNodes[t].aabb.testID=0;this._testID=1}}logDeep=0;logTree(e){if(!(e<0)){this.logDeep++;for(var t=this._cells[e],r="",i=0;i<this.logDeep-1;i++)r+="-|";console.log(r+"i="+e+" "+t.aabb.minPosX.toFixed(2)+" "+t.aabb.maxPosX.toFixed(2)+" "+t.aabb.minPosY.toFixed(2)+" "+t.aabb.maxPosY.toFixed(2));var a;for(a=0;a<t.nodeIndices.length;a++)if(t.nodeIndices[a]>=0){var o=this._quadNodes[t.nodeIndices[a]];console.log(r+" t="+t.nodeIndices[a]+" "+o.aabb.minPosX.toFixed(2)+" "+o.aabb.maxPosX.toFixed(2)+" "+o.aabb.minPosY.toFixed(2)+" "+o.aabb.maxPosY.toFixed(2))}for(a=0;a<t.childCellIndices.length;a++)t.childCellIndices[a]>=0&&this.logTree(t.childCellIndices[a]);this.logDeep--}}}class Wf{_maxNodesPerCell;_minCellSize;_quadTree;_collisionNodesIdx;_segBox;_collisionNodes;constructor(e=10,t=500){this._maxNodesPerCell=e,this._minCellSize=t,this._segBox=new vt,this._collisionNodesIdx=new Array,this._collisionNodes=new Array}createQuadTree(e){this._quadTree=new Gf,this._quadTree.initNodes(e),this._quadTree.buildQuadTree(this._maxNodesPerCell,this._minCellSize)}getNodesByAABB(e,t,r,i){this._segBox.clear(),this._segBox.maxPosX=r,this._segBox.maxPosY=i,this._segBox.minPosX=e,this._segBox.minPosY=t,this._collisionNodesIdx.length=0,this._collisionNodes.length=0,this._quadTree.getNodesIntersectingtAABox(this._collisionNodesIdx,this._segBox);for(var a,o=0;o<this._collisionNodesIdx.length;o++)a=this._quadTree.getQuadNode(this._collisionNodesIdx[o]),this._collisionNodes.push(a);return this._collisionNodes}getTriangleAtPoint(e,t=5){this._segBox.clear(),this._segBox.setAABox(e.x,e.z,1,1),this._collisionNodesIdx.length=0,this._collisionNodes.length=0,this._quadTree.getNodesIntersectingtAABox(this._collisionNodesIdx,this._segBox);for(var r=4294967295,i=0,a,o,n,l,h=0;h<this._collisionNodesIdx.length;h++)o=this._quadTree.getQuadNode(this._collisionNodesIdx[h]),l=o.aabb,d.pointInsideTriangle(e,l.points[0],l.points[1],l.points[2])&&(n=o,i=Math.abs(n.plane.distance(e)),!(i>t)&&(o==null||i<=r)&&(a=n,r=i));return a}}var _s=(s=>(s[s.MOUSE_LEFT=0]="MOUSE_LEFT",s[s.MOUSE_MID=1]="MOUSE_MID",s[s.MOUSE_RIGHT=2]="MOUSE_RIGHT",s))(_s||{});class Xm extends qe{static LOADER_PROGRESS="loaderProgress";static LOADER_COMPLETE="loaderComplete"}class Hm extends qe{static ADDED="added";static REMOVED="removed";static CHILD_ADD_EVENT="childAddEvent";static CHILD_REMOVED="childRemoved"}class jm extends qe{static SHOW="show";static HIDE="hide";static UPDATE="update"}class Km{static merge(e,t,r,i){let a=0,o=0;a=Math.max(e.width,a),a=Math.max(t.width,a),a=Math.max(r.width,a),a=Math.max(i.width,a),o=Math.max(e.height,o),o=Math.max(t.height,o),o=Math.max(r.height,o),o=Math.max(i.height,o);let n=new Ae(a,o,X.rgba8unorm),l=new ue(Tc);l.setSamplerTexture("textureR",e),l.setSamplerTexture("textureG",t),l.setSamplerTexture("textureB",r),l.setSamplerTexture("textureA",i),l.setStorageTexture("outTex",n),l.workerSizeX=Math.ceil(a/8),l.workerSizeY=Math.ceil(o/8);let h=F.beginCommandEncoder();return F.computeCommand(h,[l]),F.endCommandEncoder(h),n}}class Jf{computeShader;setInputes(e,t,r){this.computeShader=new ue(Hc(e,t,r,8,8,1));for(let i=0;i<t.length;i++)this.computeShader.setSamplerTexture(`source${i}Map`,t[i]);for(let i=0;i<r.length;i++)this.computeShader.setStorageTexture(`dest${i}Map`,r[i]);e&&this.computeShader.setSamplerTexture("colorMap",e),this.computeShader.workerSizeX=r[0].width/8,this.computeShader.workerSizeY=r[0].height/8,this.computeShader.workerSizeZ=1}}class Zf{sourceShader;compute;needUpdate=!0;constructor(e,t){this.sourceShader=t,this.compute=new ue(e),this.init()}init(){}onUpdate(){this.onFrame&&this.onFrame(),this.onOnce&&this.needUpdate&&(this.needUpdate=!1,this.onFrame())}}class Yf extends Zf{constructor(e){super(Pc,e)}init(){let e=new Ae(256,256,X.rgba8unorm,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING);return this.compute.setStorageTexture("sssMap",e),this.sourceShader.setTexture("lutMap",e),e}onFrame(){this.compute.workerSizeX=256/8,this.compute.workerSizeY=256/8;let e=F.beginCommandEncoder();F.computeCommand(e,[this.compute]),F.endCommandEncoder(e)}}class qm{gpuBuffer;probes;memoryDo;_probeInfoList;initDataUniform(e){this.memoryDo=new Xr,this.probes=e,this._probeInfoList=[],this.memoryDo.destroy(),this.memoryDo.allocation(e.length*17*4);for(let r=0;r<e.length;r++){var t=17;let i=this.memoryDo.allocation_node(t*4);this._probeInfoList.push(i);let a=e[r].transform.worldPosition;i.setArray(0,[a.x,a.y,a.z])}this.gpuBuffer=R.device.createBuffer({size:this.memoryDo.shareDataBuffer.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.STORAGE,label:"ProbeBuffer",mappedAtCreation:!1})}updateGPUBuffer(){const e=this.memoryDo.shareDataBuffer;let t=this.memoryDo.shareDataBuffer.byteLength,r=0;const i=5e3*64;for(;r<t;)R.device.queue.writeBuffer(this.gpuBuffer,r,e,r,Math.floor(Math.min(i,t-r))),r+=i}}class $m extends wr{constructor(e,t,r=0){super(),this.bufferType=tr.StructStorageGPUBuffer,this.createBufferByStruct(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|r,e,t)}}class eA{static codeMax=`
|
|
11458
|
+
`||Q==" "?y=null:(S(Q,y),y.width+g>=p&&(y=B()))}})(),C()}getAlignment(e){let t={v:0,h:0};switch(e){case 1:t.v=0,t.h=1;break;case 0:t.v=0,t.h=0;break;case 2:t.v=0,t.h=2;break;case 4:t.v=1,t.h=1;break;case 3:t.v=1,t.h=0;break;case 5:t.v=1,t.h=2;break;case 7:t.v=2,t.h=1;break;case 6:t.v=2,t.h=0;break;case 8:t.v=2,t.h=2;break}return t}}class Os extends mn{_style=Le.NORMAL;_interactive=!1;set interactive(e){this._interactive=e}get interactive(){return this._interactive}set mouseStyle(e){this._style=e}get interactiveVisible(){return this._uiTransform.globalVisible&&this._visible}init(e){super.init(e),this._uiTransform.addUIInteractive(this)}destroy(){this._uiTransform.removeUIInteractive(this),super.destroy()}rayPick(e,t,r,i){return Rf.rayPick(e,r,i,t.space,t.panelRatio,this._uiTransform,t.transform.worldMatrix)}cloneTo(e){e.getOrAddComponent(Os).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.enable=e._enable,this.interactive=e._interactive,this.mouseStyle=e._style,this}}var Mf=(s=>(s[s.NONE=0]="NONE",s[s.COLOR=1]="COLOR",s[s.SPRITE=2]="SPRITE",s))(Mf||{});class bn extends Os{_spriteMap;_colorMap;_image;_isCreateImage;_transition=2;init(e){super.init(e),this._interactive=!0,this._spriteMap=new Map,this._colorMap=new Map,this._image=this.object3D.getComponent(Di),this._isCreateImage=this._image==null,this._image||(this._image=this.object3D.addComponent(Di)),this.imageType=ea.Sliced}onEnable(){this.mouseStyle=Le.NORMAL}onDisable(){this.mouseStyle=Le.DISABLE}set transition(e){this._transition!=e&&(this._transition=e,this.validateStyle(this._style,!0))}get transition(){return this._transition}get imageType(){return this._image.imageType}set imageType(e){this._image.imageType=e}setStyleColor(e,t){return this._colorMap.set(e,t),this._style==e&&this.validateStyle(this._style,!0),this}getStyleColor(e){return this._colorMap.get(e)}set mouseStyle(e){super.mouseStyle=e,this.validateStyle(e,!0)}get normalSprite(){return this._spriteMap.get(Le.NORMAL)}set normalSprite(e){this._spriteMap.set(Le.NORMAL,e),this._style==Le.NORMAL&&this.validateStyle(this._style,!0)}get overSprite(){return this._spriteMap.get(Le.OVER)}set overSprite(e){this._spriteMap.set(Le.OVER,e),this._style==Le.OVER&&this.validateStyle(this._style,!0)}set downSprite(e){this._spriteMap.set(Le.DOWN,e),this._style==Le.DOWN&&this.validateStyle(this._style,!0)}get downSprite(){return this._spriteMap.get(Le.DOWN)}set disableSprite(e){this._spriteMap.set(Le.DISABLE,e),this._style==Le.DISABLE&&this.validateStyle(this._style,!0)}get disableSprite(){return this._spriteMap.get(Le.DISABLE)}validateStyle(e,t){if(this._transition&2){let r=this._spriteMap.get(e);this._image.sprite=r}if(this._transition&1){let r=this._colorMap.get(e);r&&(this._image.color=r)}}cloneTo(e){e.getOrAddComponent(bn).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.imageType=e.imageType,this.transition=e.transition,e._spriteMap.forEach((t,r)=>{t&&this._spriteMap.set(r,t)}),e._colorMap.forEach((t,r)=>{t&&this._colorMap.set(r,t.clone())}),this.mouseStyle=e.mouseStyle,this}destroy(){this._isCreateImage&&this._image&&(this.object3D.removeComponent(Di),this._image=null),super.destroy()}}class Qn extends Ra{_count=0;constructor(){super()}init(e){super.init?.(e),this._count=e?e.count:1;for(let t=0;t<this._count;t++)this.attachQuad(Ir.spawnQuad());this._uiTransform.resize(0,0)}getQuad(e){return this._mainQuads[e]}cloneTo(e){e.addComponent(Qn,{count:this._count}).copyComponent(this)}copyComponent(e){super.copyComponent(e);for(let t=0;t<e._count;t++)this.setSprite(t,e.getSprite(t)),this.setColor(t,e.getColor(t)),this.setImageType(t,e.getImageType(t));return this}setSprite(e,t){this._mainQuads[e].sprite=t||m.res.defaultGUISprite,this.setShadowDirty()}getSprite(e){return this._mainQuads[e].sprite}onUIComponentVisible(e){this.applyComponentVisible()}onUITransformVisible(e){this.applyComponentVisible()}applyComponentVisible(){let e=!this._visible||!this._uiTransform.globalVisible;for(let t of this._mainQuads)t.visible=!e;this.setShadowDirty()}getColor(e){return this._mainQuads[e].color}setColor(e,t){this._mainQuads[e].color=t,this.setShadowDirty()}getImageType(e){return this._mainQuads[e].imageType}setImageType(e,t){this._mainQuads[e].imageType=t,this.setShadowDirty()}setSize(e,t,r){this._mainQuads[e].setSize(t,r),this.setShadowDirty()}setXY(e,t,r){this._mainQuads[e].setXY(t,r),this.setShadowDirty()}getXY(e,t){t||=new K;let r=this._mainQuads[e];return t.x=r.x,t.y=r.y,t}}class Rn extends Ra{_shadowQuality=1;_shadowOffset;_shadowRadius;_shadowColor;_subShadowColor;needUpdateShadow=!1;init(e){super.init?.(e),this._shadowRadius=2,this._shadowQuality=1,this._shadowOffset=new K(4,-4),this._shadowColor=new P(.1,.1,.1,.8),this._subShadowColor=this._shadowColor.clone(),this.isUIShadow=!0}cloneTo(e){e.getOrAddComponent(Rn).copyComponent(this)}copyComponent(e){return super.copyComponent(this),this._shadowColor=e._shadowColor,this._shadowOffset=e._shadowOffset,this._shadowRadius=e._shadowRadius,this._shadowQuality=e.shadowQuality,this}get shadowColor(){return this._shadowColor}set shadowColor(e){this._shadowColor.copyFrom(e),this.needUpdateShadow=!0}set shadowQuality(e){e=ie(e,0,4),this._shadowQuality!=e&&(this._shadowQuality=e,this.needUpdateShadow=!0)}get shadowQuality(){return this._shadowQuality}set shadowOffset(e){this._shadowOffset=e,this.needUpdateShadow=!0}get shadowOffset(){return this._shadowOffset||=new K(4,-4),this._shadowOffset}set shadowRadius(e){this._shadowRadius!=e&&(this._shadowRadius=e,this.applyShadow())}get shadowRadius(){return this._shadowRadius}onUpdate(e){this.needUpdateShadow&&(this.applyShadow(),this.needUpdateShadow=!1)}applyShadow(){if(this.detachQuads(),this._shadowSource&&this._shadowQuality>0){let e=this._shadowSource.mainQuads;if(e.length>0)for(let t of e)this.createQuadShadow(t)}this._uiTransform.setNeedUpdateUIPanel()}createQuadShadow(e){let t=this._shadowQuality,r=Math.PI*2;this._subShadowColor.copyFrom(this._shadowColor),this._subShadowColor.a=1/Math.max(1,t);for(let i=0;i<t;i++){let a=Ir.spawnQuad(),o=0,n=0;if(i==0)a.color=this._shadowColor;else{let l=r*(i-1)/(t-1);o=Math.sin(l)*this._shadowRadius,n=Math.cos(l)*this._shadowRadius,a.color=this._subShadowColor}a.setXY(o+this._shadowOffset.x+e.x,n+this._shadowOffset.y+e.y),a.setSize(e.width,e.height),a.sprite=e.sprite,a.visible=e.visible,a.imageType=e.imageType,this.attachQuad(a)}}}class In extends Ra{_font="\u5FAE\u8F6F\u96C5\u9ED1";_fontSize=14;_originSize=42;_alignment=0;_lineSpacing=1;_text="";_color=new P(1,1,1,1);constructor(){super()}cloneTo(e){e.getOrAddComponent(In).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this._font=e._font,this._fontSize=e._fontSize,this._originSize=e._originSize,this._alignment=e._alignment,this._lineSpacing=e._lineSpacing,this._color.copyFrom(e._color),this.text=e.text,this}get originSize(){return this._originSize}get font(){return this._font}set font(e){this._font=e}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize!=e&&(this._fontSize=e,this.layoutText())}get text(){return this._text}set text(e){this._text!=e&&(e||(e=""),this._text=e,this.layoutText())}textLine=null;layoutProxy=new Df;layoutText(){this.detachQuads(),this.textLine=this.layoutProxy.layout(this);for(let e=0,t=this.textLine.length;e<t;e++){let r=this.textLine[e];for(let i=0,a=r.quadList.length;i<a;i++){let o=r.quadList[i];o&&this.attachQuad(o)}}this.color=this._color,this._uiTransform.setNeedUpdateUIPanel(),this.onUIComponentVisible(this._visible),this.setShadowDirty()}onUIComponentVisible(e){this.applyComponentVisible()}onUITransformVisible(e){this.applyComponentVisible()}applyComponentVisible(){let e=!this._visible||!this._uiTransform.globalVisible;for(let t of this._mainQuads)t&&(t.visible=!e);this.setShadowDirty()}onTransformResize(){this.layoutText()}get color(){return this._color}set color(e){this._color.copyFrom(e);for(let t of this._mainQuads)t.color=e;this.setShadowDirty()}get alignment(){return this._alignment}set alignment(e){this._alignment!=e&&(this._alignment=e,this.layoutText())}get lineSpacing(){return this._lineSpacing}set lineSpacing(e){this._lineSpacing!=e&&(this._lineSpacing=e,this.layoutText())}}var Rm=Object.getOwnPropertyDescriptor,Im=(s,e,t,r)=>{for(var i=r>1?void 0:r?Rm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Cs=class extends Aa{constructor(){super()}init(){super.init(),this.lightData.lightType=Xe.PointLight,this.object3D.name==""&&(this.object3D.name="PointLight"+It())}get range(){return this.lightData.range}set range(s){this.lightData.range=s,this.onChange()}get at(){return this.lightData.linear}set at(s){this.lightData.linear=s,this.onChange()}get radius(){return this.lightData.radius}set radius(s){this.lightData.radius=s,this.onChange()}get quadratic(){return this.lightData.quadratic}set quadratic(s){this.lightData.quadratic=s,this.onChange()}start(){this.transform.rotationX=90,super.start()}onUpdate(){}onGraphic(s){let e=s.scene.getChildByName("graphic3D");if(!e)return;let t=e.createCustomShape(`PointLight_${this.object3D.instanceID}`,this.transform);t.buildAxis(),t.buildCircle(d.ZERO,this.range,32,d.X_AXIS),t.buildCircle(d.ZERO,this.range,32,d.Y_AXIS),t.buildCircle(d.ZERO,this.range,32,d.Z_AXIS)}debug(){}debugDraw(s){}};Cs=Im([Wt(Cs,"Light")],Cs);class Nf extends q{index=0;drawCallFrame=-1;constructor(){super()}}var An=(s=>(s[s.CastGI=0]="CastGI",s[s.ReceiveGI=1]="ReceiveGI",s[s.CastDepth=2]="CastDepth",s[s.Other=3]="Other",s))(An||{});class Vf extends yt{static count=0;constructor(e=0,t=0){super(),O.register("GIProbeShader",ef);let r=new mt,i=new Oe("GIProbeShader","GIProbeShader");i.passType=H.COLOR,r.addRenderPass(i),i.setDefine("USE_BRDF",!0),i.setShaderEntry("VertMain","FragMain"),i.setUniformVector4("probeUniform",new $(t,e,0,0));let a=i.shaderState;a.acceptShadow=!1,a.castShadow=!1,a.receiveEnv=!1,a.acceptGI=!1,a.useLight=!1,r.setTexture("baseMap",m.res.whiteTexture),r.setTexture("normalMap",m.res.normalTexture),r.setTexture("emissiveMap",m.res.blackTexture),this.shader=r}}class Em extends Pe{_probes;_volume;_debugMr=[];init(e){e||=m.views[0]?.scene,m.setting.gi.enable=!0,this._volume=ne.getLightEntries(e).irradianceVolume,this.initProbe(e)}initProbe(e){let t=this._volume.setting.probeXCount,r=this._volume.setting.probeYCount,i=this._volume.setting.probeZCount,a=new Ri(4,16,16),o=new d;this._probes=[];for(let n=0;n<t;n++)for(let l=0;l<r;l++)for(let h=0;h<i;h++){let u=n+h*t+l*(t*i),c=new Nf;c.index=u,c.name=`${n}_${l}_${h}`;let f=c.addComponent(j);f.material=new Vf(An.CastGI,u),f.geometry=a,f.castGI=!1,f.castShadow=!1,this._debugMr.push(f),this.object3D.addChild(c),this._volume.calcPosition(n,l,h,o),c.x=o.x,c.y=o.y,c.z=o.z,this._probes[u]=c,this._debugMr.push(f)}for(let n=0;n<this._probes.length;n++)G.instance.addGIProbe(e,this._probes[n]);this.object3D.transform.enable=!1,this._volume.setting.debug&&this.debug()}debug(){}debugProbeRay(e,t){const r=m.setting.gi.rayNumber;let i=new Z(0,-.7071067811865475,.7071067811865475,0);for(let a=0;a<r;a++){let o=e*r+a,n=new d(-t[o*4+0],-t[o*4+1],-t[o*4+2],0);i.transformVector(n,n);let l=t[o*4+3],h=this._probes[e].transform.worldPosition.clone(),u=n.scaleBy(l);u.add(h,u)}}changeProbesVolumeData(){this._volume.setVolumeDataChange()}changeProbesPosition(){this._volume.setVolumeDataChange();let e=this._volume.setting.probeXCount,t=this._volume.setting.probeYCount,r=this._volume.setting.probeZCount,i=new d;for(let a=0;a<e;a++)for(let o=0;o<t;o++)for(let n=0;n<r;n++){let l=a+n*e+o*(e*r),h=this._probes[l];this._volume.calcPosition(a,o,n,i),h.x=i.x,h.y=i.y,h.z=i.z}}onUpdate(){m.setting.gi.maxDistance=m.setting.gi.probeSpace*1.5;let e=this.transform.scene3D.view.camera,t=d.distance(e.transform.worldPosition,e.transform.targetPos)/300;if(this._debugMr&&this._debugMr.length>0)for(let r=0;r<this._debugMr.length;r++){const i=this._debugMr[r].transform;i.scaleX=t,i.scaleY=t,i.scaleZ=t}}}class wm extends ei{_keyRenderGroup;_keyBufferGroup;_keyIdsGroup;constructor(){super()}init(e){this._keyRenderGroup=new Map,this._keyBufferGroup=new Map,this._keyIdsGroup=new Map}start(){let e=[];this.object3D.getComponents(j,e,!0);for(let t=0;t<e.length;t++){const r=e[t];r.transform.updateWorldMatrix(!0),r.enable=!1;let i=r.geometry.instanceID;for(let a=0;a<r.materials.length;a++){const o=r.materials[a];i+=o.instanceID}if(this._keyRenderGroup.has(i))this._keyRenderGroup.get(i).push(r),this._keyIdsGroup.get(i).push(r.transform.worldMatrix.index);else{let a=new ve(e.length);a.visibility=GPUShaderStage.VERTEX,this._keyRenderGroup.set(i,[r]),this._keyBufferGroup.set(i,a),this._keyIdsGroup.set(i,[r.transform.worldMatrix.index])}}this._keyBufferGroup.forEach((t,r)=>{let i=this._keyIdsGroup.get(r),a=this._keyBufferGroup.get(r);a.setInt32Array("matrixIDs",new Int32Array(i)),a.apply()})}reset(){this._keyRenderGroup.size>0&&(this._keyRenderGroup.clear(),this._keyBufferGroup.clear(),this._keyIdsGroup.clear(),this.start())}nodeUpdate(e,t,r,i){this._keyRenderGroup.forEach((a,o)=>{let n=this._keyBufferGroup.get(o),l=a[0];for(let h=0;h<l.materials.length;h++){let c=l.materials[h].getPass(t);if(c)for(let f=0;f<c.length;f++){const g=c[f];g.setDefine("USE_INSTANCEDRAW",!0),g.setStorageBuffer("instanceDrawID",n)}}l.nodeUpdate(e,t,r,i)})}renderPass(e,t,r){this._keyRenderGroup.forEach((i,a)=>{let o=i[0];o.instanceCount=i.length,this.renderItem(e,t,o,r)})}renderItem(e,t,r,i){let a=r.transform._worldMatrix;for(let o=0;o<r.materials.length;o++){let l=r.materials[o].getPass(t);if(!(!l||l.length==0))for(let h=0;h<l.length;h++){let u=l[h];F.bindGeometryBuffer(i.encoder,r.geometry);const c=u;c.shaderState.splitTexture&&(i.endRenderPass(),vt.WriteSplitColorTexture(r.instanceID),i.beginOpaqueRenderPass(),F.bindCamera(i.encoder,e.camera),F.bindGeometryBuffer(i.encoder,r.geometry)),F.bindPipeline(i.encoder,c);let A=r.geometry.subGeometries[o].lodLevels[r.lodLevel];r.instanceCount>0?F.drawIndexed(i.encoder,A.indexCount,r.instanceCount,A.indexStart,0,0):F.drawIndexed(i.encoder,A.indexCount,1,A.indexStart,0,a.index)}}}beforeDestroy(e){this._keyRenderGroup.clear(),this._keyBufferGroup.clear(),this._keyIdsGroup.clear(),this._keyRenderGroup=this._keyBufferGroup=this._keyIdsGroup=void 0,Se.removeWaitStart(this.object3D,this)}}var Tm=Object.getOwnPropertyDescriptor,Dm=(s,e,t,r)=>{for(var i=r>1?void 0:r?Tm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Ss=class extends j{constructor(){super()}get geometry(){return null}set geometry(s){}cloneTo(s){}set meshURL(s){let e=m.res.getGeometry(s);e?this.geometry=e:console.error("no geometry set",s)}};Ss=Dm([Wt(Ss,"MeshFilter")],Ss);var Mm=Object.getOwnPropertyDescriptor,Nm=(s,e,t,r)=>{for(var i=r>1?void 0:r?Mm(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Ia=class extends j{skinJointsName;mInverseBindMatrixData;mInverseBindMatrixBuffer;mSkeletonAnimation;mJointIndexTableBuffer;constructor(){super(),this.addRendererMask(Be.SkinnedMesh)}start(){if(super.start(),this.skeletonAnimation=this.object3D.getComponent(ai),!this.skeletonAnimation){let s=this.object3D.parentObject.parentObject.getComponentsInChild(ai);s.length>0&&(this.skeletonAnimation=s[0]);let e=this.object3D;for(;!this.skeletonAnimation&&e;)this.skeletonAnimation=e.getComponentFromParent(ai),e.parent&&(e=e.parent.object3D)}}onEnable(){super.onEnable()}get skeletonAnimation(){return this.mSkeletonAnimation}set skeletonAnimation(s){if(this.mSkeletonAnimation=s,!!s&&!this.mJointIndexTableBuffer){let e=this.mSkeletonAnimation.getJointIndexTable(this.skinJointsName);this.mJointIndexTableBuffer=new ve(e.length*4,0,new Float32Array(e)),this.mJointIndexTableBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.COMPUTE}}get skinInverseBindMatrices(){return this.mInverseBindMatrixData}set skinInverseBindMatrices(s){this.mInverseBindMatrixData=s;var e=new Float32Array(s.length*16);for(let t=0;t<s.length;t++){let r=t*16,i=s[t];e.set(i,r)}this.mInverseBindMatrixBuffer=new ve(e.byteLength,0,e),this.mInverseBindMatrixBuffer.visibility=GPUShaderStage.VERTEX|GPUShaderStage.COMPUTE}get inverseBindMatrixBuffer(){return this.mInverseBindMatrixBuffer}get jointIndexTableBuffer(){return this.mJointIndexTableBuffer.buffer}cloneTo(s){let e=s.addComponent(Ia);e.geometry=this.geometry,e.material=this.material.clone(),e.castShadow=this.castShadow,e.castGI=this.castGI,e.receiveShadow=this.receiveShadow,e.rendererMask=this.rendererMask,e.skinJointsName=this.skinJointsName,e.skinInverseBindMatrices=this.skinInverseBindMatrices,e.mJointIndexTableBuffer=this.mJointIndexTableBuffer}nodeUpdate(s,e,t,r){for(let i=0;i<this.materials.length;i++){let o=this.materials[i].getPass(e);if(o)for(let n=0;n<o.length;n++){const l=o[n];!l.pipeline&&this.mSkeletonAnimation&&(l.setStorageBuffer("jointsMatrixIndexTable",this.mSkeletonAnimation.jointMatrixIndexTableBuffer),l.setStorageBuffer("jointsInverseMatrix",this.mInverseBindMatrixBuffer),l.setStorageBuffer("jointsIndexMapingTable",this.mJointIndexTableBuffer))}}super.nodeUpdate(s,e,t,r)}};Ia=Nm([Wt(Ia,"SkinnedMeshRenderer")],Ia);class Vm extends Ke{radius=2.5;height=10;constructor(){super(),this._shapeType=ta.Capsule}}class zs extends Ke{mesh;static triangle;_pickRet;constructor(){super(),this._shapeType=ta.Mesh}rayPick(e,t){if(this.mesh){zs.triangle||=new Ya(new d,new d,new d);let r=this.mesh.getAttribute(V.position),i=this.mesh.getAttribute(V.indices),a=Ke.helpMatrix;a.copyFrom(t).invert();let o=Ke.helpRay.copy(e);if(o.applyMatrix(a),o.intersectBox(this.mesh.bounds),!o.intersectBox(this.mesh.bounds,Ke.v3_help_0))return null;if(i&&r&&i.data.length>0){let l=r.data;for(let h=0,u=i.data.length/3;h<u;h++){let c=h*3;const f=i.data[c+0]*3,g=i.data[c+1]*3,p=i.data[c+2]*3;let A=zs.triangle,U=A.v1.set(l[f+0],l[f+1],l[f+2]),x=A.v2.set(l[g+0],l[g+1],l[g+2]),B=A.v3.set(l[p+0],l[p+1],l[p+2]);A.set(U,x,B);let S=o.intersectTriangle(o.origin,o.direction,A);if(S){this._pickRet||={intersectPoint:new d,distance:0},this._pickRet.intersectPoint=S,this._pickRet.distance=d.distance(o.origin,S);let C=this.mesh.getAttribute(V.normal);if(C){let _=C.data,y=new d(_[f],_[f+1],_[f+2]);t.transformVector(y,y),y.normalize(),this._pickRet.normal=y}return this._pickRet}}}}return null}}class Pm extends Ke{_pickRet;box;radius=.5;constructor(e){super(),this._shapeType=ta.Sphere,this.radius=e,this.box=new Ga(new d,1)}rayPick(e,t){this.box.setFromCenterAndSize(this.center,this.radius);let i=Ke.helpMatrix;i.copyFrom(t).invert();let a=Ke.helpRay.copy(e);a.applyMatrix(i);let o=a.intersectSphere(a.origin,a.direction,this.box.center,this.box.radius);return o?(this._pickRet||(this._pickRet={intersect:!1,intersectPoint:new d,distance:0}),this._pickRet.intersect=!0,this._pickRet.intersectPoint=o,this._pickRet.distance=d.distance(a.origin,Ke.v3_help_0),this._pickRet):null}}class km extends q{_envMap;skyObject;envMapChange=!0;view;constructor(){super(),this.transform.scene3D=this,this.skyObject=new q,this.addChild(this.skyObject),this._isScene3D=!0,this.envMap||=m.res.defaultSky}get envMap(){return this._envMap}set envMap(e){this._envMap!=e&&(this.envMapChange=!0),this._envMap=e,G.instance.sky&&"map"in G.instance.sky&&(G.instance.sky.map=e)}get exposure(){return G.instance.sky&&"exposure"in G.instance.sky?G.instance.sky.exposure:0}set exposure(e){G.instance.sky&&"exposure"in G.instance.sky&&(G.instance.sky.exposure=e,m.setting.sky.skyExposure=e)}get roughness(){if(G.instance.sky&&"roughness"in G.instance.sky)return G.instance.sky.roughness}set roughness(e){G.instance.sky&&"roughness"in G.instance.sky&&(G.instance.sky.roughness=e)}}class Pf{_computeShader;_outBuffer;constructor(){}init(){let e=se.getGBufferFrame(se.colorPass_GBuffer);this._computeShader=new ue(Vc),this._outBuffer=new Hi(32),this._computeShader.setStorageBuffer("outBuffer",this._outBuffer),this._computeShader.setSamplerTexture("gBufferTexture",e.getCompressGBufferTexture())}compute(e){let t=ne.getCameraGroup(e.camera);this._computeShader.setStorageBuffer("globalUniform",t.uniformGPUBuffer);let r=F.beginCommandEncoder();F.computeCommand(r,[this._computeShader]),F.endCommandEncoder(r),this._outBuffer.readBuffer()}getPickMeshID(){var e=this._outBuffer.outFloat32Array[0]+.1;return Math.floor(e)}getPickWorldPosition(e){e||=new d;var t=this._outBuffer.outFloat32Array[4],r=this._outBuffer.outFloat32Array[5],i=this._outBuffer.outFloat32Array[6];return e.set(t,r,i),e}getPickWorldNormal(e){e||=new d;var t=this._outBuffer.outFloat32Array[8],r=this._outBuffer.outFloat32Array[9],i=this._outBuffer.outFloat32Array[10];return e.set(t*2-1,r*2-1,i*2-1).normalize(),e}getPickScreenUV(e){e||=new K;var t=this._outBuffer.outFloat32Array[2],r=this._outBuffer.outFloat32Array[3];return e.set(t,r),e}}class kf extends Er{ray;isTouching=!1;_mouseCode;_pickEvent;_outEvent;_overEvent;_upEvent;_downEvent;_mouseMove;_pickCompute;_lastDownTarget;mouseEnableMap;_view;constructor(e){super(),this._view=e,this.init()}init(){this.ray=new $t,this.mouseEnableMap=new Map,this._pickEvent=new k(k.PICK_CLICK),this._outEvent=new k(k.PICK_OUT),this._overEvent=new k(k.PICK_OVER),this._mouseMove=new k(k.PICK_MOVE),this._upEvent=new k(k.PICK_UP),this._downEvent=new k(k.PICK_DOWN)}start(){m.setting.pick.enable&&(m.inputSystem.addEventListener(k.POINTER_DOWN,this.onTouchStart,this),m.inputSystem.addEventListener(k.POINTER_UP,this.onTouchEnd,this),m.inputSystem.addEventListener(k.POINTER_CLICK,this.onTouchOnce,this),m.inputSystem.addEventListener(k.POINTER_RIGHT_CLICK,this.onTouchOnce,this),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onTouchMove,this)),m.setting.pick.mode=="pixel"&&(this._pickCompute=new Pf,this._pickCompute.init())}stop(){m.inputSystem.removeEventListener(k.POINTER_DOWN,this.onTouchStart,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.onTouchEnd,this),m.inputSystem.removeEventListener(k.POINTER_CLICK,this.onTouchOnce,this),m.inputSystem.removeEventListener(k.POINTER_RIGHT_CLICK,this.onTouchOnce,this),m.inputSystem.removeEventListener(k.POINTER_MOVE,this.onTouchMove,this)}onTouchStart(e){this.isTouching=!0,this._mouseCode=e.mouseCode,this.pick(this._view.camera);let t=this.findNearestObj(this._interestList,this._view.camera);this._lastDownTarget=t,t&&(Object.assign(this._downEvent,e),this._downEvent.type=k.PICK_DOWN,this._downEvent.target=t.object3D,this._downEvent.data=this.getPickInfo(),this.dispatchEvent(this._downEvent),t.object3D.containEventListener(k.PICK_DOWN)&&t.object3D.dispatchEvent(this._downEvent))}onTouchEnd(e){this.isTouching=!1,this._mouseCode=e.mouseCode,this.pick(this._view.camera);let t=this.findNearestObj(this._interestList,this._view.camera);t&&(Object.assign(this._upEvent,e),this._upEvent.type=k.PICK_UP,this._upEvent.target=t.object3D,this._upEvent.data=this.getPickInfo(),this.dispatchEvent(this._upEvent),t.object3D.containEventListener(k.PICK_UP)&&t.object3D.dispatchEvent(this._upEvent))}_lastFocus;getPickInfo(){if(m.setting.pick.mode=="pixel")return{worldPos:this._pickCompute.getPickWorldPosition(),worldNormal:this._pickCompute.getPickWorldNormal(),screenUv:this._pickCompute.getPickScreenUV(),meshID:this._pickCompute.getPickMeshID()};{let e=this._interestList[0];return{worldPos:e.intersectPoint,worldNormal:e.normal,meshID:e.collider.transform.worldMatrix.index,distance:e.distance}}}onTouchMove(e){this.isTouching=!0,this._mouseCode=e.mouseCode,this.pick(this._view.camera);let t=this.findNearestObj(this._interestList,this._view.camera);t&&(Object.assign(this._mouseMove,e),this._mouseMove.type=k.PICK_MOVE,this._mouseMove.target=t.object3D,this._mouseMove.data=this.getPickInfo(),this.dispatchEvent(this._mouseMove),t.object3D.containEventListener(k.PICK_MOVE)&&t.object3D.dispatchEvent(this._mouseMove)),t!=this._lastFocus&&(this._lastFocus&&this._lastFocus.object3D&&(Object.assign(this._outEvent,e),this._outEvent.type=k.PICK_OUT,this._outEvent.target=this._lastFocus.object3D,this._outEvent.data=this.getPickInfo(),this.dispatchEvent(this._outEvent),this._lastFocus.object3D.containEventListener(k.PICK_OUT)&&this._lastFocus.object3D.dispatchEvent(this._outEvent)),t&&(Object.assign(this._overEvent,e),this._overEvent.type=k.PICK_OVER,this._overEvent.target=t.object3D,this._overEvent.data=this.getPickInfo(),this.dispatchEvent(this._overEvent),t.object3D.containEventListener(k.PICK_OVER)&&t.object3D.dispatchEvent(this._overEvent))),this._lastFocus=t}onTouchOnce(e){this.isTouching=!0,this._mouseCode=e.mouseCode,this.pick(this._view.camera);let t=this.findNearestObj(this._interestList,this._view.camera);if(t){let r=this.getPickInfo();Object.assign(this._pickEvent,e),this._pickEvent.type=k.PICK_CLICK,this._pickEvent.target=t.object3D,this._pickEvent.data=r,this.dispatchEvent(this._pickEvent),t===this._lastDownTarget&&t.object3D.containEventListener(k.PICK_CLICK)&&t.object3D.dispatchEvent(this._pickEvent)}this._lastDownTarget=null}findNearestObj(e,t){return e.sort((r,i)=>r.distance>i.distance?1:-1),e[0]?.collider}_interestList=[];pick(e){if(this._interestList.length=0,m.setting.pick.mode=="pixel"){this._pickCompute.compute(this._view);let t=this._pickCompute.getPickMeshID(),r=this.mouseEnableMap.get(t);if(r){let i=this._pickCompute.getPickWorldPosition(),a=d.distance(i,this.ray.origin);this._interestList.push({distance:a,collider:r,intersectPoint:i})}}else if(m.setting.pick.mode=="bound"){this.ray=e.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY);let t,r=Se.componentsEnablePickerList.get(this._view);if(r)for(const i of r){let a=i[0];a.enable&&(t=a.rayPick(this.ray),t&&(t.collider=a,this._interestList.push(t)))}}}}class Lm extends as{_camera;_scene;_viewPort;_enablePick=!1;_enable=!0;pickFire;guiPick;canvasList;constructor(e=0,t=0,r=0,i=0){super(),this.canvasList=[],this._viewPort=new $(e,t,r,i)}get enable(){return this._enable}set enable(e){this._enable=e}get enablePick(){return this._enablePick}set enablePick(e){this._enablePick!=e&&(this.pickFire=new kf(this),this.pickFire.start()),this._enablePick=e}get scene(){return this._scene}set scene(e){this._scene=e,e.view=this,wt.createBuffer(this),e&&this.canvasList.forEach(t=>{t&&e.addChild(t.object3D)})}get camera(){return this._camera}set camera(e){this._camera=e}get viewPort(){return this._viewPort}set viewPort(e){this._viewPort=e}enableUICanvas(e=0){let t=this.canvasList[e];if(!t){let r=new q;r.name="Canvas "+e,t=r.addComponent(Ja),t.index=e,this.canvasList[e]=t}return this.scene.addChild(t.object3D),this.guiPick||(this.guiPick=new yf,this.guiPick.init(this)),t}disableUICanvas(e=0){let t=this.canvasList[e];t&&t.object3D&&t.object3D.removeFromParent()}}class Om{normal;fixNormal;center;rotateShape;distance=0;index;constructor(e){this.index=e,this.rotateShape=[]}}class zm extends Ne{vScale;uNegate;sections;build(e,t,r,i=1,a=!0){if(r.length<2)throw new Error("path length is not enough");return this.vScale=i,this.uNegate=a,e=e.slice(),t&&e.push(e[0]),this.sections=this.buildSections(e,r),this.buildGeometry(e,this.sections),this.bounds=new Re(d.ZERO.clone(),new d(100,100,100)),this}buildSections(e,t){let r,i,a,o=[],n=t.length;for(let h=0;h<n;h++){let u=new Om(h);r=t[h],i=t[h+1],u.center=r.clone(),i==null?(u.normal=a.clone(),u.distance=0):(a=i.subtract(r),u.distance=a.length,u.normal=a.normalize()),o.push(u)}o[0].fixNormal=o[0].normal.clone();for(let h=1;h<n;h++){let u=o[h-1],c=o[h];c.fixNormal=c.normal.add(u.normal).normalize()}let l=new I().identity();for(let h=0;h<n;h++){let u=o[h],c,f;if(h==0)c=d.UP,f=e;else{let g=o[h-1];c=g.fixNormal,f=g.rotateShape}I.fromToRotation(c,u.fixNormal,l);for(let g=0,p=e.length;g<p;g++){let A=l.multiplyPoint3(f[g]);u.rotateShape.push(A)}}return o}buildGeometry(e,t){let r=t.length,i=e.length,a=r*i,o=r-1,n=new Float32Array(a*3),l=new Float32Array(a*3),h=new Float32Array(a*2),u=new Uint32Array(o*(i-1)*6),c=i-1,f=0,g=0,p=[0];for(let U=1;U<i;U++)g+=e[U-1].subtract(e[U]).length,p.push(g);for(let U=0;U<r;U++){let x=t[U];for(let B=0;B<i;B++){let S=(U*i+B)*3,C=x.rotateShape[B].add(x.center);n[S]=C.x,n[S+1]=C.y,n[S+2]=C.z,l[S+1]=1;let _=(U*i+B)*2,y=p[B]/g;h[_]=this.uNegate?1-y:y,h[_+1]=f*this.vScale}f+=x.distance}let A=0;for(let U=0;U<o;U++){let x=U*i;for(let B=0;B<c;B++){let S=B,C=B+1,_=S+i,y=C+i;u[A++]=S+x,u[A++]=C+x,u[A++]=_+x,u[A++]=C+x,u[A++]=y+x,u[A++]=_+x}}return this.setIndices(u),this.setAttribute(V.position,n),this.setAttribute(V.normal,l),this.setAttribute(V.uv,h),this.setAttribute(V.TEXCOORD_1,h),this.addSubGeometry({indexStart:0,indexCount:u.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0}),this.computeNormals(),this}}class Gm{name;offset;size;arrayStride;stepMode;attributes}class Wm{name;format;offset;shaderLocation;stride}var Lf=(s=>(s[s.position=3]="position",s[s.normal=3]="normal",s[s.TANGENT=4]="TANGENT",s[s.uv=2]="uv",s[s.TEXCOORD_1=2]="TEXCOORD_1",s[s.color=4]="color",s[s.joints0=4]="joints0",s[s.weights0=4]="weights0",s[s.joints1=4]="joints1",s[s.weights1=4]="weights1",s[s.vIndex=1]="vIndex",s[s.weight=1]="weight",s[s.a_morphPositions_0=3]="a_morphPositions_0",s))(Lf||{});class Jm{get data(){return null}entity}class Of{min=0;max=0;set(e,t){return this.max=t,this.min=e,this}copy(e){return this.max=e.max,this.min=e.min,this}isInterestRange(e){return!(this.max>e.min||e.max<this.min)}}class zf{_spaceDesc;getRange(e){return this._spaceDesc[e]}initSpace(e){this._spaceDesc={};for(let t of e)(this._spaceDesc[t]=new Of).set(-Number.MAX_VALUE,Number.MAX_VALUE);return this}isContain(e,t){let r=this._spaceDesc[e];return t>=r.min&&t<r.max}isInterestRange(e,t){let r=this._spaceDesc[e];return r?t.isInterestRange(r):!1}splitSpace(e,t,r){let i=this._spaceDesc[e];return t?i.max=r:i.min=r,this}copySpace(e){for(let t in e._spaceDesc){let r=e._spaceDesc[t];this._spaceDesc[t].copy(r)}return this}}class Xa{static MaxEntityCountInLeaf=4;static MaxLayer=10;static ClearLeafLayer=Xa.MaxLayer-4}class Ha{static UUID=0;uuid="0";constructor(){this.uuid=(Ha.UUID++).toString()}}class Zm{map={};_count=0;get count(){return this._count}push(e){return this.map[e.uuid]?!1:(this.map[e.uuid]=e,this._count++,!0)}remove(e){return this.map[e]?(delete this.map[e],this._count--,!0):!1}}class hi extends Ha{_dimensionIndex=0;_dimensions;_dimension;_left;_right;_space;_parent;_entities;layer;get dimension(){return this._dimension}constructor(e=0){super(),this.layer=e,hi.nodeCount++}initNode(e,t,r){return this._dimensions=t,this._dimensionIndex=r,this._dimension=t[r],this._space=new zf().initSpace(t),e&&this._space.copySpace(e._space),this._parent=e,this._entities=new Zm,this}updateEntity(e){if(e.isInNode(this,this._dimension)&&(e.attachTreeNode(this),this.autoSplit(),this._left&&this._right)){let t=(this._dimensionIndex+1)%this._dimensions.length,r=this._dimensions[t];e.isInNode(this._right,r)?this._right.updateEntity(e):e.isInNode(this._left,r)&&this._left.updateEntity(e)}}buildRoot(e){for(const t of e)t.entity.attachTreeNode(this);this.autoSplit()}_splitEntityList=[];autoSplit(){if(this._entities.count>Xa.MaxEntityCountInLeaf&&!this._right&&!this._left&&this.layer<Xa.MaxLayer){let e=this._splitEntityList,t=(this._dimensionIndex+1)%this._dimensions.length,r=this._dimensions[t],i=0;for(const a in this._entities.map){let o=this._entities.map[a];i+=o.centerValue(r),e.push(o)}i/=this._entities.count,this._left=new hi(this.layer+1),this._right=new hi(this.layer+1),this._left.initNode(this,this._dimensions,t),this._right.initNode(this,this._dimensions,t),this._left.setSpace(!0,i),this._right.setSpace(!1,i);for(let a of e)a.isInNode(this._right,r)?a.attachTreeNode(this._right):a.isInNode(this._left,r)&&a.attachTreeNode(this._left)}this._left&&this._left.autoSplit(),this._right&&this._right.autoSplit()}setSpace(e,t){return this._parent&&this._space.splitSpace(this._dimension,e,t),this}isEmpty(){return this._left==null&&this._right==null&&this._entities.count==0}pushEntity(e){return this._entities.push(e)}removeEntity(e){return this._entities.remove(e.uuid)}static nodeCount=0;autoClear(){let e=this;for(;e&&e.layer>Xa.ClearLeafLayer&&e.clearLeaf();)e=e._parent}clearLeaf(){let e=!this._left&&!this._right,t=!e&&this._left.isEmpty()&&this._right.isEmpty();return t&&(this._left=this._right=null,hi.nodeCount-=2),e||t}isContain(e){return this._space.isContain(this._dimension,e)}static rangeBox=new Re(new d(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),new d(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE));nodeIntersectsBox(e){let t=this._space.getRange("x"),r=this._space.getRange("y"),i=this._space.getRange("z"),a=hi.rangeBox;return a.min.set(t.min,r.min,i.min),a.max.set(t.max,r.max,i.max),a.intersectsBox(e)}nodeIntersectsRay(e){let t=this._space.getRange("x"),r=this._space.getRange("y"),i=this._space.getRange("z"),a=hi.rangeBox;return a.min.set(t.min,r.min,i.min),a.max.set(t.max,r.max,i.max),!0}pointCast(e,t=0,r){if(r=r||[],this._entities.count>0){let i=this._entities.map;for(let a in i){let o=i[a],n=o.entityContainPoint(e);!n&&t>0&&(n=o.squareDistanceTo(e,this._dimensions)<=t),n&&r.push(o)}}this._left&&this._left.isContain(e[this._left.dimension])&&this._left.pointCast(e,t,r),this._right&&this._right.isContain(e[this._right.dimension])&&this._right.pointCast(e,t,r)}boxCast(e,t){if(t=t||[],this._entities.count>0){let r=this._entities.map;for(let i in r){let a=r[i];a.entityIntersectsBox(e)&&t.push(a)}}this._left&&this._left.nodeIntersectsBox(e)&&this._left.boxCast(e,t),this._right&&this._right.nodeIntersectsBox(e)&&this._right.boxCast(e,t)}pointIntersect=new d;rayCast(e,t,r){t=t||[],r=r||[];let i=this.pointIntersect;if(this._entities.count>0){let a=this._entities.map;for(let o in a){let n=a[o];n.entityIntersectsRay(e,i)&&(r.push(new d().copyFrom(i)),t.push(n))}}this._left&&this._left.nodeIntersectsRay(e)&&this._left.rayCast(e,t,r),this._right&&this._right.nodeIntersectsRay(e)&&this._right.rayCast(e,t,r)}}class Ym extends Ha{userData;node;constructor(e){super(),this.userData=e}centerValue(e){return 0}isInNode(e,t){return!1}entityContainPoint(e){return!1}squareDistanceTo(e,t){return Number.MAX_VALUE}entityIntersectsBox(e){return!1}entityIntersectsRay(e,t){return!1}attachTreeNode(e){return this.node&&this.detachTreeNode(),this.node=e,this.node.pushEntity(this)}detachTreeNode(){let e=this.node.removeEntity(this);return this.node=null,e}updateNode(e){let t=this.node;t&&this.detachTreeNode(),e.updateEntity(this),t&&t.autoClear()}}class Ct{minPosX=0;minPosY=0;maxPosX=0;maxPosY=0;testID=0;points;offsetPosition;static TINY=1e-6;constructor(){this.points=new Array,this.offsetPosition=new d(0,0,0,0),this.clear()}setAABox(e,t,r,i){this.minPosX=e-r/2-Ct.TINY,this.maxPosX=e+r/2+Ct.TINY,this.minPosY=t-i/2-Ct.TINY,this.maxPosY=t+i/2+Ct.TINY,this.offsetPosition.setTo(0,0,0)}setOffset(e){this.maxPosX+=e.x-this.offsetPosition.x,this.minPosX+=e.x-this.offsetPosition.x,this.minPosY+=e.z-this.offsetPosition.z,this.maxPosY+=e.z-this.offsetPosition.z,this.offsetPosition.copyFrom(e)}setContainRect(e,t,r,i){this.minPosX>e&&(this.minPosX=e),this.minPosY>t&&(this.minPosY=t),this.maxPosX<r&&(this.maxPosX=r),this.maxPosY<i&&(this.maxPosY=i)}clear(){var e=1e9;this.minPosX=this.minPosY=e,this.maxPosX=this.maxPosY=-e,this.points.length=0,this.testID=0,this.offsetPosition.setTo(0,0,0)}addPoint(e){this.points.indexOf(e)==-1&&(e.x<this.minPosX&&(this.minPosX=e.x-Ct.TINY),e.x>this.maxPosX&&(this.maxPosX=e.x+Ct.TINY),e.z<this.minPosY&&(this.minPosY=e.z-Ct.TINY),e.z>this.maxPosY&&(this.maxPosY=e.z+Ct.TINY),this.points.push(e))}clone(){var e=new Ct;return e.minPosX=this.minPosX,e.minPosY=this.minPosY,e.maxPosX=this.maxPosX,e.maxPosY=this.maxPosY,e}get radius(){return Math.sqrt((this.maxPosY-this.minPosY)*(this.maxPosY-this.minPosY)+(this.maxPosX-this.minPosX)*(this.maxPosX-this.minPosX))}get sideX(){return this.maxPosX-this.minPosX}get sideY(){return this.maxPosY-this.minPosY}get centreX(){return(this.maxPosX-this.minPosX)*.5+this.minPosX}get centreY(){return(this.maxPosY-this.minPosY)*.5+this.minPosY}overlapTest(e){return!(this.minPosY>=e.maxPosY||this.maxPosY<=e.minPosY||this.minPosX>=e.maxPosX||this.maxPosX<=e.minPosX)}isPointInside(e){return e.x>=this.minPosX&&e.x<=this.maxPosX&&e.z>=this.minPosY&&e.z<=this.maxPosY}isIntersectLineSegment(e,t,r,i){var a=!1,o=t-i,n=r-e,l=e*i-r*t,h=(-l-o*this.minPosX)/n;h<=this.maxPosY&&h>=this.minPosY&&(a=!0),h=(-l-o*this.maxPosX)/n,h<=this.maxPosY&&h>=this.minPosY&&(a=!0);var u=(-l-n*this.minPosY)/o;return u<=this.maxPosX&&u>=this.minPosX&&(a=!0),u=(-l-n*this.maxPosY)/o,u<=this.maxPosX&&u>=this.minPosX&&(a=!0),a}}class di{static NUM_CHILDREN=4;childCellIndices;nodeIndices;aabb;points;constructor(e){this.childCellIndices=new Array,this.childCellIndices.length=di.NUM_CHILDREN,this.nodeIndices=new Array,this.clear(),e?this.aabb=e.clone():this.aabb=new Ct}isLeaf(){return this.childCellIndices[0]==-1}clear(){for(var e=0;e<di.NUM_CHILDREN;e++)this.childCellIndices[e]=-1;this.nodeIndices.splice(0,this.nodeIndices.length)}}class Gf{_cells;_rootCell;_quadNodes;_aabb;_cellsToTest;_testID;constructor(){this._testID=0,this._cells=new Array,this._quadNodes=new Array,this._cellsToTest=new Array,this._aabb=new Ct}getQuadNode(e){return this._quadNodes[e]}clear(){this._cells.length=0,this._quadNodes.length=0}initNodes(e){this.clear();for(var t=0,r=e.length;t<r;)e[t].calcGlobalQuadAABB(),this._quadNodes.push(e[t]),t++}buildQuadTree(e,t){this._aabb.clear();for(var r of this._quadNodes)if(r.isTriangle)for(var i of r.aabb.points)this._aabb.addPoint(i);else this._aabb.setContainRect(r.aabb.minPosX,r.aabb.minPosY,r.aabb.maxPosX,r.aabb.maxPosY);this._cells.length=0,this._rootCell=new di(this._aabb),this._cells.push(this._rootCell);for(var a=this._quadNodes.length,o=0;o<a;o++)this._cells[0].nodeIndices[o]=o;var n=new Array;n.push(0);for(var l,h,u;n.length!=0;)if(h=n.pop(),!(this._cells[h].nodeIndices.length<=e||this._cells[h].aabb.radius<t)){for(o=0;o<di.NUM_CHILDREN;o++){this._cells[h].childCellIndices[o]=this._cells.length,n.push(this._cells.length),this._cells.push(new di(this.createAABox(this._cells[h].aabb,o))),u=this._cells[this._cells.length-1],a=this._cells[h].nodeIndices.length;for(var c=0;c<a;c++)l=this._cells[h].nodeIndices[c],this.doesNodeIntersectCell(this._quadNodes[l],u)&&u.nodeIndices.push(l)}this._cells[h].nodeIndices.length=0}}createAABox(e,t){var r=e.centreX,i=e.centreY,a=e.sideX,o=e.sideY,n=new Ct;switch(t){case 0:n.setAABox(r+a/4,i+o/4,a/2,o/2);break;case 1:n.setAABox(r-a/4,i+o/4,a/2,o/2);break;case 2:n.setAABox(r-a/4,i-o/4,a/2,o/2);break;case 3:n.setAABox(r+a/4,i-o/4,a/2,o/2);break;default:n.setAABox(r+a/4,i-o/4,a/2,o/2);break}return n}doesNodeIntersectCell(e,t){var r=e.aabb;if(!r.overlapTest(t.aabb))return!1;if(!e.isTriangle)return!0;var i=r.points,a=i[0],o=i[1],n=i[2];if(t.aabb.isPointInside(a)||t.aabb.isPointInside(o)||t.aabb.isPointInside(n))return!0;var l=this.pointInTriangle(t.aabb.minPosX,t.aabb.minPosY,a,o,n)||this.pointInTriangle(t.aabb.minPosX,t.aabb.maxPosY,a,o,n)||this.pointInTriangle(t.aabb.maxPosX,t.aabb.maxPosY,a,o,n)||this.pointInTriangle(t.aabb.maxPosX,t.aabb.minPosY,a,o,n);return l?!0:(l=t.aabb.isIntersectLineSegment(a.x,a.z,o.x,o.z)||t.aabb.isIntersectLineSegment(a.x,a.z,n.x,n.z)||t.aabb.isIntersectLineSegment(o.x,o.z,n.x,n.z),l)}getNodesIntersectingtAABox(e,t){if(this._cells.length==0)return 0;this._cellsToTest.length=0,this._cellsToTest.push(0),this.incrementTestCounter();for(var r,i,a,o,n=0;this._cellsToTest.length!=0;)if(r=this._cellsToTest.pop(),a=this._cells[r],!!t.overlapTest(a.aabb))if(a.isLeaf())for(i=a.nodeIndices.length,n=0;n<i;n++)o=this.getQuadNode(a.nodeIndices[n]).aabb,o.testID!=this._testID&&(o.testID=this._testID,t.overlapTest(o)&&e.push(a.nodeIndices[n]));else for(n=0;n<di.NUM_CHILDREN;n++)this._cellsToTest.push(a.childCellIndices[n]);return e.length}pointInTriangle(e,t,r,i,a){var o=r,n=i,l=a,h=o.z-n.z,u=n.x-o.x,c=o.x*n.z-n.x*o.z,f=n.z-l.z,g=l.x-n.x,p=n.x*l.z-l.x*n.z,A=l.z-o.z,U=o.x-l.x,x=l.x*o.z-o.x*l.z,B=!1,S=h*e+u*t+c,C=f*e+g*t+p,_=A*e+U*t+x;const y=.01;return(S>=-y&&C>=-y&&_>=-y||S<=y&&C<=y&&_<=y)&&(B=!0),B}incrementTestCounter(){if(++this._testID,this._testID==0){for(var e=this._quadNodes.length,t=0;t<e;t++)this._quadNodes[t].aabb.testID=0;this._testID=1}}logDeep=0;logTree(e){if(!(e<0)){this.logDeep++;for(var t=this._cells[e],r="",i=0;i<this.logDeep-1;i++)r+="-|";console.log(r+"i="+e+" "+t.aabb.minPosX.toFixed(2)+" "+t.aabb.maxPosX.toFixed(2)+" "+t.aabb.minPosY.toFixed(2)+" "+t.aabb.maxPosY.toFixed(2));var a;for(a=0;a<t.nodeIndices.length;a++)if(t.nodeIndices[a]>=0){var o=this._quadNodes[t.nodeIndices[a]];console.log(r+" t="+t.nodeIndices[a]+" "+o.aabb.minPosX.toFixed(2)+" "+o.aabb.maxPosX.toFixed(2)+" "+o.aabb.minPosY.toFixed(2)+" "+o.aabb.maxPosY.toFixed(2))}for(a=0;a<t.childCellIndices.length;a++)t.childCellIndices[a]>=0&&this.logTree(t.childCellIndices[a]);this.logDeep--}}}class Wf{_maxNodesPerCell;_minCellSize;_quadTree;_collisionNodesIdx;_segBox;_collisionNodes;constructor(e=10,t=500){this._maxNodesPerCell=e,this._minCellSize=t,this._segBox=new Ct,this._collisionNodesIdx=new Array,this._collisionNodes=new Array}createQuadTree(e){this._quadTree=new Gf,this._quadTree.initNodes(e),this._quadTree.buildQuadTree(this._maxNodesPerCell,this._minCellSize)}getNodesByAABB(e,t,r,i){this._segBox.clear(),this._segBox.maxPosX=r,this._segBox.maxPosY=i,this._segBox.minPosX=e,this._segBox.minPosY=t,this._collisionNodesIdx.length=0,this._collisionNodes.length=0,this._quadTree.getNodesIntersectingtAABox(this._collisionNodesIdx,this._segBox);for(var a,o=0;o<this._collisionNodesIdx.length;o++)a=this._quadTree.getQuadNode(this._collisionNodesIdx[o]),this._collisionNodes.push(a);return this._collisionNodes}getTriangleAtPoint(e,t=5){this._segBox.clear(),this._segBox.setAABox(e.x,e.z,1,1),this._collisionNodesIdx.length=0,this._collisionNodes.length=0,this._quadTree.getNodesIntersectingtAABox(this._collisionNodesIdx,this._segBox);for(var r=4294967295,i=0,a,o,n,l,h=0;h<this._collisionNodesIdx.length;h++)o=this._quadTree.getQuadNode(this._collisionNodesIdx[h]),l=o.aabb,d.pointInsideTriangle(e,l.points[0],l.points[1],l.points[2])&&(n=o,i=Math.abs(n.plane.distance(e)),!(i>t)&&(o==null||i<=r)&&(a=n,r=i));return a}}var _s=(s=>(s[s.MOUSE_LEFT=0]="MOUSE_LEFT",s[s.MOUSE_MID=1]="MOUSE_MID",s[s.MOUSE_RIGHT=2]="MOUSE_RIGHT",s))(_s||{});class Xm extends qe{static LOADER_PROGRESS="loaderProgress";static LOADER_COMPLETE="loaderComplete"}class Hm extends qe{static ADDED="added";static REMOVED="removed";static CHILD_ADD_EVENT="childAddEvent";static CHILD_REMOVED="childRemoved"}class jm extends qe{static SHOW="show";static HIDE="hide";static UPDATE="update"}class Km{static merge(e,t,r,i){let a=0,o=0;a=Math.max(e.width,a),a=Math.max(t.width,a),a=Math.max(r.width,a),a=Math.max(i.width,a),o=Math.max(e.height,o),o=Math.max(t.height,o),o=Math.max(r.height,o),o=Math.max(i.height,o);let n=new Ae(a,o,X.rgba8unorm),l=new ue(Tc);l.setSamplerTexture("textureR",e),l.setSamplerTexture("textureG",t),l.setSamplerTexture("textureB",r),l.setSamplerTexture("textureA",i),l.setStorageTexture("outTex",n),l.workerSizeX=Math.ceil(a/8),l.workerSizeY=Math.ceil(o/8);let h=F.beginCommandEncoder();return F.computeCommand(h,[l]),F.endCommandEncoder(h),n}}class Jf{computeShader;setInputes(e,t,r){this.computeShader=new ue(Hc(e,t,r,8,8,1));for(let i=0;i<t.length;i++)this.computeShader.setSamplerTexture(`source${i}Map`,t[i]);for(let i=0;i<r.length;i++)this.computeShader.setStorageTexture(`dest${i}Map`,r[i]);e&&this.computeShader.setSamplerTexture("colorMap",e),this.computeShader.workerSizeX=r[0].width/8,this.computeShader.workerSizeY=r[0].height/8,this.computeShader.workerSizeZ=1}}class Zf{sourceShader;compute;needUpdate=!0;constructor(e,t){this.sourceShader=t,this.compute=new ue(e),this.init()}init(){}onUpdate(){this.onFrame&&this.onFrame(),this.onOnce&&this.needUpdate&&(this.needUpdate=!1,this.onFrame())}}class Yf extends Zf{constructor(e){super(Pc,e)}init(){let e=new Ae(256,256,X.rgba8unorm,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING);return this.compute.setStorageTexture("sssMap",e),this.sourceShader.setTexture("lutMap",e),e}onFrame(){this.compute.workerSizeX=256/8,this.compute.workerSizeY=256/8;let e=F.beginCommandEncoder();F.computeCommand(e,[this.compute]),F.endCommandEncoder(e)}}class qm{gpuBuffer;probes;memoryDo;_probeInfoList;initDataUniform(e){this.memoryDo=new Xr,this.probes=e,this._probeInfoList=[],this.memoryDo.destroy(),this.memoryDo.allocation(e.length*17*4);for(let r=0;r<e.length;r++){var t=17;let i=this.memoryDo.allocation_node(t*4);this._probeInfoList.push(i);let a=e[r].transform.worldPosition;i.setArray(0,[a.x,a.y,a.z])}this.gpuBuffer=R.device.createBuffer({size:this.memoryDo.shareDataBuffer.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.STORAGE,label:"ProbeBuffer",mappedAtCreation:!1})}updateGPUBuffer(){const e=this.memoryDo.shareDataBuffer;let t=this.memoryDo.shareDataBuffer.byteLength,r=0;const i=5e3*64;for(;r<t;)R.device.queue.writeBuffer(this.gpuBuffer,r,e,r,Math.floor(Math.min(i,t-r))),r+=i}}class $m extends wr{constructor(e,t,r=0){super(),this.bufferType=tr.StructStorageGPUBuffer,this.createBufferByStruct(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|r,e,t)}}class eA{static codeMax=`
|
|
11459
11459
|
@group(0) @binding(0) var inputTexture : texture_2d<f32>;
|
|
11460
11460
|
@group(0) @binding(1) var inputTextureSampler : sampler;
|
|
11461
11461
|
@group(0) @binding(2) var outputTexture : texture_storage_2d<rgba8unorm, write>;
|
|
@@ -11481,6 +11481,6 @@ fn frag(){
|
|
|
11481
11481
|
let dstCoord = vec2<i32>(i32(GlobalInvocationID.x), i32(GlobalInvocationID.y));
|
|
11482
11482
|
textureStore(outputTexture, dstCoord, fromColor);
|
|
11483
11483
|
}
|
|
11484
|
-
`;static _pipelineMax;static _pipelineMin;static createMipmap(e,t){const r=R.device;this._pipelineMax||=r.createComputePipeline({layout:"auto",compute:{module:r.createShaderModule({code:this.codeMax}),entryPoint:"main"}}),this._pipelineMin||=r.createComputePipeline({layout:"auto",compute:{module:r.createShaderModule({code:this.codeMin}),entryPoint:"main"}});let i=Math.ceil(e.width*.5),a=Math.ceil(e.height*.5),o={mipmapCount:t,texture:e,srcView:null,mipLevel:1,dstHeight:a,dstWidth:i};o.srcView=e.getGPUTexture().createView({format:e.format,dimension:"2d",baseMipLevel:0,mipLevelCount:1}),e.width>1024&&e.height>1024?this.mipmap(this._pipelineMax,o):this.mipmap(this._pipelineMin,o)}static mipmap(e,t){const r=R.device,i=F.beginCommandEncoder();let a=e==this._pipelineMax,o,n;for(let l=t.mipLevel;l<t.mipmapCount;l++){let h=[],u=0;h.push({binding:u++,resource:t.srcView}),h.push({binding:u++,resource:t.texture.gpuSampler}),o=t.texture.getGPUTexture().createView({format:t.texture.format,dimension:"2d",baseMipLevel:l,mipLevelCount:1}),h.push({binding:u++,resource:o});const c=r.createBindGroup({layout:e.getBindGroupLayout(0),entries:h}),f=i.beginComputePass();f.setPipeline(e),f.setBindGroup(0,c);let g=t.dstWidth,p=t.dstHeight;if(a&&(g=Math.max(1,Math.floor(t.dstWidth/8)),p=Math.max(1,Math.floor(t.dstHeight/8))),f.dispatchWorkgroups(g,p),t.dstHeight*=.5,t.dstWidth*=.5,t.srcView=o,t.mipLevel=l+1,n=a&&(t.dstWidth<8||t.dstHeight<8),f.end(),n)break}F.endCommandEncoder(i),n&&this.mipmap(this._pipelineMin,t)}}class Xf{name="";passMap=new Map}class Hf{passType="";shaderState=new Map;vertexShader="";fragmentShader=""}class tA{static passKeyword="pass";static shaderKeyword="Shader";static vertexKeyword="vertex";static fragmentKeyword="fragment";static passTypeKeyword="PassType";static parser(e,t){e=rr.filterComment(e);let r=new Xf,i=e.indexOf(this.shaderKeyword),a=e.indexOf("{",i),o=e.substring(i+this.shaderKeyword.length,a).trim();r.name=o.substring(1,o.length-1),o=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"));let n=this.splitPassBlock(o);for(let l of n){let h=this.parserPassBlock(l),u;r.passMap.has(h.passType)?u=r.passMap.get(h.passType):(u=[],r.passMap.set(h.passType,u)),u.push(h),h.vertexShader.length>0&&(h.vertexShader=rr.parse(h.vertexShader,t)),h.fragmentShader.length>0&&(h.fragmentShader=rr.parse(h.fragmentShader,t))}return r}static splitPassBlock(e){let t=0,r=[];for(;t<e.length;){let i=e.indexOf(this.passKeyword,t);if(i==-1){r.push(e.substring(t));break}t!=0&&r.push(e.substring(t,i)),t=i+this.passKeyword.length}return r}static parserPassBlock(e){let t=new Hf,r=e.indexOf(this.passTypeKeyword),i=e.indexOf('"',r);return r=e.indexOf('"',i+1),t.passType=e.substring(r+1,i).trim(),this.parserShaderState(t,e),r=e.indexOf(this.vertexKeyword),r!=-1&&(t.vertexShader=this.extractBlock(e.substring(r+this.vertexKeyword.length),"{","}")),r=e.indexOf(this.fragmentKeyword),r!=-1&&(t.fragmentShader=this.extractBlock(e.substring(r+this.fragmentKeyword.length),"{","}")),t}static parserShaderState(e,t){let r=t.indexOf("ShaderState");if(r==-1)return!1;r=t.indexOf("{",r);let i=t.indexOf("}",r),o=t.substring(r+1,i).split(",");for(let n of o){let l=n.split(":"),h=l[0].trim(),u=this.convertValue(l[1].trim());e.shaderState.set(h,u)}return!0}static convertValue(e){return e.length==4&&e.toLowerCase()=="true"?!0:e.length==5&&e.toLowerCase()=="false"?!1:e[0]=='"'?e.substring(1,e.length-1):Number.parseInt(e)}static extractBlock(e,t,r){let i=e.indexOf(t);if(i==-1)return"";let a=0,o=0;e=e.substring(i);for(let l of e){if(l==t?a++:l==r&&a--,a<=0)break;o++}return e.substring(1,o).trim()}}let jf=new qe("IrradianceDataReaderCompleteEvent");class ts extends Er{readFlag=!1;probeRenderer;opColorBuffer;opDepthBuffer;srcColorMap;srcDepthMap;opDepthArray;opColorArray;initReader(e,t,r){this.probeRenderer=e,this.srcColorMap=t,this.srcDepthMap=r;let i=m.setting.gi,a=i.octRTMaxSize*i.octRTMaxSize;this.opColorBuffer=R.device.createBuffer({size:a*4*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,mappedAtCreation:!1}),this.opColorArray=new Float32Array(a*4),this.opDepthBuffer=R.device.createBuffer({size:a*4*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,mappedAtCreation:!1}),this.opDepthArray=new Float32Array(a*4),this.probeRenderer.addEventListener(Eo.type,()=>{this.onProbeRenderComplete()},this),this.probeRenderer.addEventListener(fs.type,()=>{console.log("GIRenderStartEvent")},this)}async onProbeRenderComplete(){if(console.log("GIRenderCompleteEvent"),this.readFlag)console.log("irradianceDataReader is reading yet!!!");else{this.readFlag=!0;let e=Date.now();console.log("irradianceDataReader start reading "),await ts.read(this.srcColorMap.getGPUTexture(),this.opColorBuffer,this.opColorArray),await ts.read(this.srcDepthMap.getGPUTexture(),this.opDepthBuffer,this.opDepthArray),this.readFlag=!1,console.log("process time :",Date.now()-e),console.log("irradianceDataReader read complete"),this.dispatchEvent(jf)}}static async read(e,t,r){let i=F.beginCommandEncoder();i.copyTextureToBuffer({texture:e},{buffer:t,bytesPerRow:e.width*16},[e.width,e.height]),F.endCommandEncoder(i),await t.mapAsync(GPUMapMode.READ);const a=t.getMappedRange();r.set(new Float32Array(a),0),t.unmap()}}let rA=new ts;class iA{computeShader;visibleBuffer;texture;constructor(){this.computeShader=new ue(Kc),this.visibleBuffer=new Hi(8192*2),this.computeShader.setStorageBuffer("visibleBuffer",this.visibleBuffer),this.texture=Bt.getTexture(_r.zBufferTexture_NAME),this.computeShader.setSamplerTexture("zBufferTexture",this.texture),this.computeShader.workerSizeX=Math.ceil(this.texture.width/8),this.computeShader.workerSizeY=Math.ceil(this.texture.height/8),this.computeShader.workerSizeZ=1}compute(e,t){this.visibleBuffer.reset(!0,0),this.visibleBuffer.apply();let r=F.beginCommandEncoder();F.computeCommand(r,[this.computeShader]),this.visibleBuffer.readBuffer(),t.zVisibleList=this.visibleBuffer.outFloat32Array}}class aA extends Et{RT_BloomUp;RT_BloomDown;RT_threshold;rendererPassState;thresholdCompute;downSampleComputes;upSampleComputes;postCompute;bloomSetting;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.bloom.enable=!0,this.createGUI()}onDetach(e){m.setting.render.postProcessing.bloom.enable=!1,this.removeGUI()}createGUI(){}removeGUI(){}get downSampleBlurSize(){return m.setting.render.postProcessing.bloom.downSampleBlurSize}set downSampleBlurSize(e){m.setting.render.postProcessing.bloom.downSampleBlurSize=e}get downSampleBlurSigma(){return m.setting.render.postProcessing.bloom.downSampleBlurSigma}set downSampleBlurSigma(e){m.setting.render.postProcessing.bloom.downSampleBlurSigma=e}get upSampleBlurSize(){return m.setting.render.postProcessing.bloom.upSampleBlurSize}set upSampleBlurSize(e){m.setting.render.postProcessing.bloom.upSampleBlurSize=e}get upSampleBlurSigma(){return m.setting.render.postProcessing.bloom.upSampleBlurSigma}set upSampleBlurSigma(e){m.setting.render.postProcessing.bloom.upSampleBlurSigma=e}get luminanceThreshole(){return m.setting.render.postProcessing.bloom.luminanceThreshole}set luminanceThreshole(e){m.setting.render.postProcessing.bloom.luminanceThreshole=e}get bloomIntensity(){return m.setting.render.postProcessing.bloom.bloomIntensity}set bloomIntensity(e){m.setting.render.postProcessing.bloom.bloomIntensity=e}get hdr(){return m.setting.render.postProcessing.bloom.hdr}set hdr(e){m.setting.render.postProcessing.bloom.hdr=e}createThreshouldCompute(){this.thresholdCompute=new ue(bc),this.autoSetColorTexture("inTex",this.thresholdCompute),this.thresholdCompute.setStorageTexture("outTex",this.RT_threshold),this.thresholdCompute.setUniformBuffer("bloomCfg",this.bloomSetting),this.thresholdCompute.workerSizeX=Math.ceil(this.RT_threshold.width/8),this.thresholdCompute.workerSizeY=Math.ceil(this.RT_threshold.height/8),this.thresholdCompute.workerSizeZ=1}createDownSampleComputes(){const t=m.setting.render.postProcessing.bloom.downSampleStep;this.downSampleComputes=[];for(let r=0;r<t;r++){let i=new ue(Qc),a=this.RT_BloomDown[r],o=r==0?this.RT_threshold:this.RT_BloomDown[r-1];i.setSamplerTexture("inTex",o),i.setStorageTexture("outTex",a),i.setUniformBuffer("bloomCfg",this.bloomSetting),i.workerSizeX=Math.ceil(a.width/8),i.workerSizeY=Math.ceil(a.height/8),i.workerSizeZ=1,this.downSampleComputes.push(i)}}createUpSampleComputes(){const t=m.setting.render.postProcessing.bloom.downSampleStep;this.upSampleComputes=[];{let r=new ue(un),i=this.RT_BloomUp[0],a=this.RT_BloomDown[t-2];r.setSamplerTexture("_MainTex",a),r.setSamplerTexture("_PrevMip",this.RT_BloomDown[t-1]),r.setStorageTexture("outTex",i),r.setUniformBuffer("bloomCfg",this.bloomSetting),r.workerSizeX=Math.ceil(i.width/8),r.workerSizeY=Math.ceil(i.height/8),r.workerSizeZ=1,this.upSampleComputes.push(r)}for(let r=1;r<t-1;r++){let i=new ue(un),a=this.RT_BloomUp[r],o=this.RT_BloomDown[t-2-r];i.setSamplerTexture("_MainTex",o),i.setSamplerTexture("_PrevMip",this.RT_BloomUp[r-1]),i.setStorageTexture("outTex",a),i.setUniformBuffer("bloomCfg",this.bloomSetting),i.workerSizeX=Math.ceil(a.width/8),i.workerSizeY=Math.ceil(a.height/8),i.workerSizeZ=1,this.upSampleComputes.push(i)}}createPostCompute(){const t=m.setting.render.postProcessing.bloom.downSampleStep;this.postCompute=new ue(Rc),this.autoSetColorTexture("_MainTex",this.postCompute),this.postCompute.setSamplerTexture("_BloomTex",this.RT_BloomUp[t-2]),this.postCompute.setStorageTexture("outTex",this.RT_threshold),this.postCompute.setUniformBuffer("bloomCfg",this.bloomSetting),this.postCompute.workerSizeX=Math.ceil(this.RT_threshold.width/8),this.postCompute.workerSizeY=Math.ceil(this.RT_threshold.height/8),this.postCompute.workerSizeZ=1}createResource(){let e=m.setting.render.postProcessing.bloom;this.bloomSetting=new ht(8);let[t,r]=R.presentationSize,i=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING;this.RT_threshold=new Ae(t,r,X.rgba16float,!1,i);const a=e.downSampleStep;{this.RT_BloomDown=[];let n=Math.ceil(t/4),l=Math.ceil(r/4);for(let h=0;h<a;h++)this.RT_BloomDown[h]=new Ae(n,l,X.rgba16float,!1,i),n=Math.ceil(n/2),l=Math.ceil(l/2)}{this.RT_BloomUp=[];for(let n=0;n<a-1;n++){let l=this.RT_BloomDown[a-2-n].width,h=this.RT_BloomDown[a-2-n].height;this.RT_BloomUp[n]=new Ae(l,h,X.rgba16float,!1,i)}}let o=new Qe;o.loadOp="load",this.rtFrame=new Ze([this.RT_threshold],[o])}render(e,t){this.thresholdCompute||(this.createResource(),this.createThreshouldCompute(),this.createDownSampleComputes(),this.createUpSampleComputes(),this.createPostCompute(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="Bloom");let r=m.setting.render.postProcessing.bloom;this.bloomSetting.setFloat("downSampleStep",r.downSampleStep),this.bloomSetting.setFloat("downSampleBlurSize",r.downSampleBlurSize),this.bloomSetting.setFloat("downSampleBlurSigma",r.downSampleBlurSigma),this.bloomSetting.setFloat("upSampleBlurSize",r.upSampleBlurSize),this.bloomSetting.setFloat("upSampleBlurSigma",r.upSampleBlurSigma),this.bloomSetting.setFloat("luminanceThreshole",r.luminanceThreshole),this.bloomSetting.setFloat("bloomIntensity",r.bloomIntensity),this.bloomSetting.setFloat("hdr",r.hdr),this.bloomSetting.apply(),F.computeCommand(t,[this.thresholdCompute,...this.downSampleComputes,...this.upSampleComputes,this.postCompute]),F.lastRenderPassState=this.rendererPassState}onResize(){let e=m.setting.render.postProcessing.bloom,[t,r]=R.presentationSize;this.RT_threshold.resize(t,r);const i=e.downSampleStep;let a=Math.ceil(t/4),o=Math.ceil(r/4);for(let n=0;n<i;n++)this.RT_BloomDown[n].resize(a,o),a=Math.ceil(a/2),o=Math.ceil(o/2);for(let n=0;n<i-1;n++){let l=this.RT_BloomDown[i-2-n].width,h=this.RT_BloomDown[i-2-n].height;this.RT_BloomUp[n].resize(l,h)}this.thresholdCompute.workerSizeX=Math.ceil(this.RT_threshold.width/8),this.thresholdCompute.workerSizeY=Math.ceil(this.RT_threshold.height/8),this.thresholdCompute.workerSizeZ=1;for(let n=0;n<i;n++){let l=this.downSampleComputes[n],h=this.RT_BloomDown[n];l.workerSizeX=Math.ceil(h.width/8),l.workerSizeY=Math.ceil(h.height/8),l.workerSizeZ=1}{let n=this.RT_BloomUp[0],l=this.upSampleComputes[0];l.workerSizeX=Math.ceil(n.width/8),l.workerSizeY=Math.ceil(n.height/8),l.workerSizeZ=1}for(let n=1;n<i-1;n++){let l=this.RT_BloomUp[n],h=this.upSampleComputes[n];h.workerSizeX=Math.ceil(l.width/8),h.workerSizeY=Math.ceil(l.height/8),h.workerSizeZ=1}this.postCompute.workerSizeX=Math.ceil(this.RT_threshold.width/8),this.postCompute.workerSizeY=Math.ceil(this.RT_threshold.height/8),this.postCompute.workerSizeZ=1}}class sA extends Et{blurTexture1;blurTexture2;rendererPassState;blurComputes;blurSettings;outTexture;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.depthOfView.enable=!0}onDetach(e){m.setting.render.postProcessing.depthOfView.enable=!1}get pixelOffset(){return m.setting.render.postProcessing.depthOfView.pixelOffset}set pixelOffset(e){e=Math.max(0,e);let t=m.setting.render.postProcessing.depthOfView;t.pixelOffset=e}get near(){return m.setting.render.postProcessing.depthOfView.near}set near(e){e=Math.max(0,e);let t=m.setting.render.postProcessing.depthOfView;t.near=e}get far(){return m.setting.render.postProcessing.depthOfView.far}set far(e){e=Math.max(0,e);let t=m.setting.render.postProcessing.depthOfView;t.far=e}createBlurCompute(){this.blurSettings=[],this.blurComputes=[];let e=m.setting.render.postProcessing.depthOfView;for(let t=0;t<e.iterationCount;t++){let r=new ht(4),i=new ue(Ic);this.blurComputes.push(i),this.blurSettings.push(r),i.setUniformBuffer("blurSetting",r);let a=se.getGBufferFrame(se.colorPass_GBuffer);i.setSamplerTexture("gBufferTexture",a.getCompressGBufferTexture());let o=t%2==0?this.blurTexture1:this.blurTexture2,n=t%2==1?this.blurTexture1:this.blurTexture2;i.setSamplerTexture("inTex",o),i.setStorageTexture("outTex",n),i.workerSizeX=Math.ceil(this.blurTexture1.width/8),i.workerSizeY=Math.ceil(this.blurTexture1.height/8),i.workerSizeZ=1,this.outTexture=n}}createResource(){let e=R.presentationSize,t=e[0],r=e[1];this.blurTexture1=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.blurTexture1.name="dof1";let i=new Qe;i.clearValue=[0,0,0,1],i.loadOp="clear",this.blurTexture2=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.blurTexture2.name="dof2";let a=new Qe;a.clearValue=[0,0,0,1],a.loadOp="clear",this.rtFrame=new Ze([this.blurTexture1,this.blurTexture2],[i,a])}render(e,t){if(!this.blurComputes){this.createResource(),this.createBlurCompute();let i=ne.getCameraGroup(e.camera);for(let a=0;a<this.blurComputes.length;a++)this.blurComputes[a].setUniformBuffer("globalUniform",i.uniformGPUBuffer);this.rendererPassState=Te.createRendererPassState(this.rtFrame,null)}this.autoSetColorTexture("inTex",this.blurComputes[0]);let r=m.setting.render.postProcessing.depthOfView;r.far=Math.max(r.near,r.far)+1e-4;for(let i=0;i<r.iterationCount;i++){let a=this.blurComputes[i],o=this.blurSettings[i];o.setFloat("near",r.near),o.setFloat("far",r.far),o.setFloat("pixelOffset",(i+1)*r.pixelOffset),o.apply(),a.setStorageBuffer("blurSetting",o)}F.computeCommand(t,this.blurComputes),F.lastRenderPassState=this.rendererPassState}onResize(){let e=R.presentationSize,t=e[0],r=e[1],i=m.setting.render.postProcessing.depthOfView;i.far=Math.max(i.near,i.far)+1e-4,this.blurTexture1.resize(t,r),this.blurTexture2.resize(t,r);for(let a=0;a<i.iterationCount;a++){let o=this.blurComputes[a];o.workerSizeX=Math.ceil(this.blurTexture1.width/8),o.workerSizeY=Math.ceil(this.blurTexture1.height/8),o.workerSizeZ=1}}}class oA extends Et{outTexture;rendererPassState;rtFrame;view;gBufferTexture;testCompute;_state=0;_state1=256;_state2=256;uniformBuffer;currentRenderTexture;constructor(){super()}onAttach(e){this.view=e}onDetach(e){}set state(e){this._state=e,this.uniformBuffer.setInt32("state",e),this.uniformBuffer.apply()}get state(){return this._state}set size1(e){this._state1=e,this.uniformBuffer.setInt32("state1",e),this.uniformBuffer.apply()}get size1(){return this._state1}set size2(e){this._state2=e,this.uniformBuffer.setInt32("state2",e),this.uniformBuffer.apply()}get size2(){return this._state2}createResource(){let e=se.getGBufferFrame("ColorPassGBuffer");this.currentRenderTexture=e.getColorTexture(),this.gBufferTexture=e.getCompressGBufferTexture();let[t,r]=R.presentationSize;this.outTexture=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="outTexture";let i=new Qe;i.loadOp="load",this.rtFrame=new Ze([this.outTexture],[i])}createCompute(){this.uniformBuffer=new ht(4),this.uniformBuffer.setInt32("state",this._state);let e=ne.getCameraGroup(this.view.camera),r=se.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture(),i=m.setting.reflectionSetting,o=se.getGBufferFrame(se.reflections_GBuffer,i.width,i.height).getCompressGBufferTexture(),n=m.renderJobs.get(this.view).reflectionRenderer.outTexture;this.testCompute=new ue(Xc),this.testCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.testCompute.setUniformBuffer("uniformData",this.uniformBuffer),this.testCompute.setSamplerTexture("gBufferTexture",r),this.testCompute.setSamplerTexture("currentRenderTexture",this.currentRenderTexture),this.testCompute.setSamplerTexture("reflectionsGBufferTexture",o),this.testCompute.setSamplerTexture("envMap",n),this.testCompute.setStorageTexture("outputTexture",this.outTexture),this.testCompute.workerSizeX=Math.ceil(this.outTexture.width/16),this.testCompute.workerSizeY=Math.ceil(this.outTexture.height/16),this.testCompute.workerSizeZ=1}render(e,t){}compute(e){this.testCompute||(this.createResource(),this.createCompute(),this.onResize(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="test");let t=F.beginCommandEncoder();F.computeCommand(t,[this.testCompute]),F.endCommandEncoder(t),F.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=R.presentationSize;this.outTexture.resize(e,t),this.testCompute.workerSizeX=Math.ceil(this.outTexture.width/16),this.testCompute.workerSizeY=Math.ceil(this.outTexture.height/16)}}class nA extends Et{gtaoTexture;rendererPassState;gtaoCompute;gtaoSetting;aoBuffer;directionsBuffer;directionsArray;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.gtao.enable=!0}Render;onDetach(e){m.setting.render.postProcessing.gtao.enable=!1}get maxDistance(){return m.setting.render.postProcessing.gtao.maxDistance}set maxDistance(e){e=ie(e,.1,50);let t=m.setting.render.postProcessing.gtao;t.maxDistance=e}get maxPixel(){return m.setting.render.postProcessing.gtao.maxPixel}set maxPixel(e){e=ie(e,5,100);let t=m.setting.render.postProcessing.gtao;t.maxPixel=e}get darkFactor(){return m.setting.render.postProcessing.gtao.darkFactor}set darkFactor(e){e=ie(e,.01,1);let t=m.setting.render.postProcessing.gtao;t.darkFactor=e}get rayMarchSegment(){return m.setting.render.postProcessing.gtao.rayMarchSegment}set rayMarchSegment(e){e=ie(e,4,10);let t=m.setting.render.postProcessing.gtao;t.rayMarchSegment=e}get multiBounce(){return m.setting.render.postProcessing.gtao.multiBounce}set multiBounce(e){let t=m.setting.render.postProcessing.gtao;t.multiBounce=e}get blendColor(){return m.setting.render.postProcessing.gtao.blendColor}set blendColor(e){let t=m.setting.render.postProcessing.gtao;t.blendColor=e}get usePosFloat32(){return m.setting.render.postProcessing.gtao.usePosFloat32}set usePosFloat32(e){let t=m.setting.render.postProcessing.gtao;t.usePosFloat32=e}createCompute(){this.gtaoCompute=new ue(Ec);let e=new ht(8);this.gtaoCompute.setUniformBuffer("gtaoData",e),this.directionsArray=new Float32Array(16),this.directionsBuffer=new ve(16),this.directionsBuffer.setFloat32Array("array",this.randomDirection()),this.directionsBuffer.apply(),this.gtaoCompute.setStorageBuffer("directions",this.directionsBuffer),this.aoBuffer=new ve(this.gtaoTexture.width*this.gtaoTexture.height),this.gtaoCompute.setStorageBuffer("aoBuffer",this.aoBuffer);let t=se.getGBufferFrame(se.colorPass_GBuffer);this.gtaoCompute.setSamplerTexture("gBufferTexture",t.getCompressGBufferTexture()),this.autoSetColorTexture("inTex",this.gtaoCompute),this.gtaoCompute.setStorageTexture("outTex",this.gtaoTexture),this.gtaoSetting=e}createResource(){let[e,t]=R.presentationSize;this.gtaoTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.gtaoTexture.name="gtaoTex";let r=new Qe;r.loadOp="load",this.rtFrame=new Ze([this.gtaoTexture],[r])}randomCount=0;randomDirection(){this.randomCount=0;let e=Math.PI*2*this.randomCount/16,t=Math.PI*2/8;for(let r=0;r<8;r++){let i=e+r*t;this.directionsArray[r*2]=Math.sin(i),this.directionsArray[r*2+1]=Math.cos(i)}return this.directionsArray}render(e,t){if(!this.gtaoCompute){this.createResource(),this.createCompute(),this.onResize(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="GTAO";let l=ne.getCameraGroup(e.camera);this.gtaoCompute.setUniformBuffer("globalUniform",l.uniformGPUBuffer)}let r=m.setting.render.postProcessing.gtao;this.directionsBuffer.setFloat32Array("array",this.randomDirection()),this.directionsBuffer.apply();let i=1-.2*(be.frame%2),a=r.maxDistance*i,o=r.maxPixel*i;this.gtaoSetting.setFloat("maxDistance",a),this.gtaoSetting.setFloat("maxPixel",o),this.gtaoSetting.setFloat("darkFactor",r.darkFactor),this.gtaoSetting.setFloat("rayMarchSegment",r.rayMarchSegment);let n=e.camera;this.gtaoSetting.setFloat("cameraNear",n.near),this.gtaoSetting.setFloat("cameraFar",n.far),this.gtaoSetting.setFloat("multiBounce",r.multiBounce?1:0),this.gtaoSetting.setFloat("blendColor",r.blendColor?1:0),this.gtaoSetting.apply(),F.computeCommand(t,[this.gtaoCompute]),F.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=R.presentationSize;this.gtaoTexture.resize(e,t),this.gtaoCompute.workerSizeX=Math.ceil(this.gtaoTexture.width/8),this.gtaoCompute.workerSizeY=Math.ceil(this.gtaoTexture.height/8),this.gtaoCompute.workerSizeZ=1}}class lA extends Et{fogSetting;fogOpTexture;fogCompute;fogUniform;rendererPassState;constructor(){super(),this.fogSetting=m.setting.render.postProcessing.globalFog}createCompute(e){O.register("GlobalFog_shader",cn),this.fogCompute=new ue(cn),this.fogUniform=new ht(20),this.fogCompute.setUniformBuffer("fogUniform",this.fogUniform);let t=se.getGBufferFrame(se.colorPass_GBuffer);this.fogCompute.setSamplerTexture("gBufferTexture",t.getCompressGBufferTexture()),this.fogCompute.setSamplerTexture("inTex",t.getColorTexture()),this._lastSkyTexture=this.getSkyTexture(),this.fogCompute.setSamplerTexture("prefilterMap",this._lastSkyTexture),this.fogCompute.setStorageTexture("outTex",this.fogOpTexture),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="FOG";let r=ne.getLightEntries(e.scene);this.fogCompute.setStorageBuffer("lightBuffer",r.storageGPUBuffer)}uploadSetting(){let e=this.fogUniform,t=this.fogSetting;e.setColor("fogColor",t.fogColor),e.setFloat("fogType",t.fogType),e.setFloat("fogHeightScale",t.fogHeightScale),e.setFloat("start",t.start),e.setFloat("end",t.end),e.setFloat("density",t.density),e.setFloat("ins",t.ins),e.setFloat("falloff",t.falloff),e.setFloat("rayLength",t.rayLength),e.setFloat("scatteringExponent",t.scatteringExponent),e.setFloat("dirHeightLine",t.dirHeightLine),e.setFloat("skyFactor",t.skyFactor),e.setFloat("skyRoughness",t.skyRoughness),e.setFloat("overrideSkyFactor",t.overrideSkyFactor),e.setFloat("isSkyHDR",0),e.apply(),this.fogCompute.setUniformBuffer("fogUniform",this.fogUniform)}rtFrame;createResource(){let[e,t]=R.presentationSize;this.fogOpTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.fogOpTexture.name="fogTex";let r=new Qe;r.loadOp="load",this.rtFrame=new Ze([this.fogOpTexture],[r])}onAttach(e){m.setting.render.postProcessing.globalFog.enable=!0}onDetach(e){m.setting.render.postProcessing.globalFog.enable=!1}set fogType(e){this.fogSetting.fogType=e}get fogType(){return this.fogSetting.fogType}set fogHeightScale(e){this.fogSetting.fogHeightScale=e}get fogHeightScale(){return this.fogSetting.fogHeightScale}set start(e){this.fogSetting.start=e}get start(){return this.fogSetting.start}set end(e){this.fogSetting.end=e}get end(){return this.fogSetting.end}set ins(e){this.fogSetting.ins=e}get ins(){return this.fogSetting.ins}set density(e){this.fogSetting.density=e}get density(){return this.fogSetting.density}set skyRoughness(e){this.fogSetting.skyRoughness=e}get skyRoughness(){return this.fogSetting.skyRoughness}set skyFactor(e){this.fogSetting.skyFactor=e}get skyFactor(){return this.fogSetting.skyFactor}set overrideSkyFactor(e){this.fogSetting.overrideSkyFactor=e}get overrideSkyFactor(){return this.fogSetting.overrideSkyFactor}get fogColor(){return this.fogSetting.fogColor}set fogColor(e){this.fogSetting.fogColor.copyFrom(e)}set falloff(e){this.fogSetting.falloff=e}get falloff(){return this.fogSetting.falloff}set rayLength(e){this.fogSetting.rayLength=e}get rayLength(){return this.fogSetting.rayLength}set scatteringExponent(e){this.fogSetting.scatteringExponent=e}get scatteringExponent(){return this.fogSetting.scatteringExponent}set dirHeightLine(e){this.fogSetting.dirHeightLine=e}get dirHeightLine(){return this.fogSetting.dirHeightLine}_lastSkyTexture;getSkyTexture(){let e=m.res.defaultSky;return G.instance.sky instanceof Bs&&(e=G.instance.sky.map),e}render(e,t){if(!this.fogCompute){this.createResource(),this.createCompute(e),this.onResize();let i=ne.getCameraGroup(e.camera);this.fogCompute.setUniformBuffer("globalUniform",i.uniformGPUBuffer)}let r=this.getSkyTexture();r!=this._lastSkyTexture&&(this._lastSkyTexture=r,this.fogCompute.setSamplerTexture("prefilterMap",this._lastSkyTexture)),this.fogCompute.setUniformFloat("isSkyHDR",r.isHDRTexture?1:0),this.uploadSetting(),F.computeCommand(t,[this.fogCompute]),F.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=R.presentationSize;this.fogOpTexture.resize(e,t),this.fogCompute.workerSizeX=Math.ceil(this.fogOpTexture.width/8),this.fogCompute.workerSizeY=Math.ceil(this.fogOpTexture.height/8),this.fogCompute.workerSizeZ=1}}class hA extends Et{godRayTexture;rendererPassState;godRayCompute;historyGodRayData;godRaySetting;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.godRay.enable=!0,this.createGUI()}Render;onDetach(e){m.setting.render.postProcessing.godRay.enable=!1,this.removeGUI()}get blendColor(){return m.setting.render.postProcessing.godRay.blendColor}set blendColor(e){m.setting.render.postProcessing.godRay.blendColor=e}get rayMarchCount(){return m.setting.render.postProcessing.godRay.rayMarchCount}set rayMarchCount(e){e=ie(e,8,20),m.setting.render.postProcessing.godRay.rayMarchCount=e}get scatteringExponent(){return m.setting.render.postProcessing.godRay.scatteringExponent}set scatteringExponent(e){e=ie(e,1,40),m.setting.render.postProcessing.godRay.scatteringExponent=e}get intensity(){return m.setting.render.postProcessing.godRay.intensity}set intensity(e){e=ie(e,.01,5),m.setting.render.postProcessing.godRay.intensity=e}createGUI(){}removeGUI(){}createCompute(e){this.godRayCompute=new ue(wc);let t=new ht(12);this.godRayCompute.setUniformBuffer("godRayUniform",t),this.historyGodRayData=new ve(4*this.godRayTexture.width*this.godRayTexture.height),this.godRayCompute.setStorageBuffer("historyGodRayData",this.historyGodRayData);let r=se.getGBufferFrame(se.colorPass_GBuffer);this.godRayCompute.setSamplerTexture("gBufferTexture",r.getCompressGBufferTexture()),this.autoSetColorTexture("inTex",this.godRayCompute),this.godRayCompute.setStorageTexture("outTex",this.godRayTexture);let i=m.getRenderJob(e).shadowMapPassRenderer;this.godRayCompute.setSamplerTexture("shadowMap",i.depth2DArrayTexture),this.godRaySetting=t,this.onResize()}createResource(){let e=R.presentationSize,[t,r]=e;this.godRayTexture=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.godRayTexture.name="godRayTexture";let i=new Qe;i.loadOp="load",this.rtFrame=new Ze([this.godRayTexture],[i])}onResize(){let e=R.presentationSize,[t,r]=e;this.godRayTexture.resize(t,r),this.historyGodRayData.resizeBuffer(4*this.godRayTexture.width*this.godRayTexture.height),this.godRayCompute.setStorageBuffer("historyGodRayData",this.historyGodRayData),this.godRayCompute.workerSizeX=Math.ceil(this.godRayTexture.width/8),this.godRayCompute.workerSizeY=Math.ceil(this.godRayTexture.height/8),this.godRayCompute.workerSizeZ=1}render(e,t){if(!this.godRayCompute){this.createResource(),this.createCompute(e);let n=ne.getLightEntries(e.scene);this.godRayCompute.setStorageBuffer("lightBuffer",n.storageGPUBuffer),this.godRayCompute.setStorageBuffer("models",ne.modelMatrixBindGroup.matrixBufferDst),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="GodRay";let l=ne.getCameraGroup(e.camera);this.godRayCompute.setUniformBuffer("globalUniform",l.uniformGPUBuffer)}let r=m.setting.render.postProcessing.godRay;this.godRaySetting.setFloat("intensity",r.intensity),this.godRaySetting.setFloat("rayMarchCount",r.rayMarchCount);let i=R.presentationSize,[a,o]=i;this.godRaySetting.setFloat("viewPortWidth",a),this.godRaySetting.setFloat("viewPortHeight",o),this.godRaySetting.setFloat("blendColor",r.blendColor?1:0),this.godRaySetting.setFloat("scatteringExponent",r.scatteringExponent),this.godRaySetting.apply(),F.computeCommand(t,[this.godRayCompute]),F.lastRenderPassState=this.rendererPassState}}class Kf{indexList;color;count}class qf{SlotCount=8;MaxEntities=16;defaultColor=new P(.2,1,1,1);slots=[];dataDirty=!0;constructor(){let e=m.setting.render.postProcessing.outline.groupCount;this.SlotCount=Math.max(1,Math.min(e,this.SlotCount));for(let t=0;t<this.SlotCount;t++){let r=this.slots[t]=new Kf;r.indexList=new Float32Array(this.MaxEntities),r.color=this.defaultColor.clone(),r.count=0}}clear(){for(let e=0;e<this.SlotCount;e++)this.clearAt(e)}clearAt(e){this.dataDirty=!0;let t=this.slots[e];return t.color.copyFrom(this.defaultColor),t.indexList.fill(-1),t.count=0,this}fillDataAt(e,t,r){this.dataDirty=!0;let i=this.slots[e];if(i){i.indexList.fill(-1);for(let a=0,o=t.length;a<o;a++)i.indexList[a]=t[a];i.count=t.length,i.color.copyFrom(r)}return this}fetchData(e){return e.dirty=this.dataDirty,e.slots=this.slots,this.dataDirty=!1,this}}let nr=new qf;class uA extends Et{outlineTex;lowTex;rendererPassState;calcWeightCompute;outlineCompute;blendCompute;outlineSetting;slotsBuffer;slotsArray;entitiesArray;entitiesBuffer;weightBuffer;lowTexSize;oldOutlineColor;rtFrame;view;constructor(){super()}onAttach(e){this.view=e,m.setting.render.postProcessing.outline.enable=!0}onDetach(e){m.setting.render.postProcessing.outline.enable=!1}set outlinePixel(e){e=ie(e,0,8);let t=m.setting.render.postProcessing.outline;t.outlinePixel!=e&&(t.outlinePixel=e)}get outlinePixel(){return m.setting.render.postProcessing.outline.outlinePixel}set fadeOutlinePixel(e){let t=m.setting.render.postProcessing.outline;e=ie(e,0,8),t.fadeOutlinePixel!=e&&(t.fadeOutlinePixel=e)}get fadeOutlinePixel(){return m.setting.render.postProcessing.outline.fadeOutlinePixel}set strength(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.outline;t.strength!=e&&(t.strength=e)}get strength(){return m.setting.render.postProcessing.outline.strength}set useAddMode(e){m.setting.render.postProcessing.outline.useAddMode=e}get useAddMode(){return m.setting.render.postProcessing.outline.useAddMode}createGUI(){}createCompute(){let e=se.getGBufferFrame(se.colorPass_GBuffer);this.calcWeightCompute=new ue(Mc);let t=ne.getCameraGroup(this.view.camera);this.calcWeightCompute.setUniformBuffer("globalUniform",t.uniformGPUBuffer),this.calcWeightCompute.setStorageBuffer("outlineSetting",this.outlineSetting),this.calcWeightCompute.setStorageBuffer("slotsBuffer",this.slotsBuffer),this.calcWeightCompute.setStorageBuffer("weightBuffer",this.weightBuffer),this.calcWeightCompute.setStorageBuffer("entitiesBuffer",this.entitiesBuffer),this.calcWeightCompute.setSamplerTexture("gBufferTexture",e.getCompressGBufferTexture()),this.calcWeightCompute.workerSizeX=Math.ceil(this.lowTex.width/8),this.calcWeightCompute.workerSizeY=Math.ceil(this.lowTex.height/8),this.calcWeightCompute.workerSizeZ=1,this.outlineCompute=new ue(Nc),this.outlineCompute.setStorageBuffer("outlineSetting",this.outlineSetting),this.outlineCompute.setStorageBuffer("slotsBuffer",this.slotsBuffer),this.outlineCompute.setStorageBuffer("weightBuffer",this.weightBuffer),this.outlineCompute.setStorageBuffer("oldOutlineColor",this.oldOutlineColor),this.outlineCompute.setStorageTexture("lowTex",this.lowTex),this.outlineCompute.workerSizeX=Math.ceil(this.lowTex.width/8),this.outlineCompute.workerSizeY=Math.ceil(this.lowTex.height/8),this.outlineCompute.workerSizeZ=1,this.blendCompute=new ue(Dc),this.blendCompute.setStorageBuffer("outlineSetting",this.outlineSetting),this.autoSetColorTexture("inTex",this.blendCompute),this.blendCompute.setSamplerTexture("lowTex",this.lowTex),this.blendCompute.setStorageTexture("outlineTex",this.outlineTex),this.blendCompute.workerSizeX=Math.ceil(this.outlineTex.width/8),this.blendCompute.workerSizeY=Math.ceil(this.outlineTex.height/8),this.blendCompute.workerSizeZ=1}createResource(){let e=R.presentationSize,t=e[0],r=e[1],i=m.setting.render.postProcessing.outline.textureScale;this.lowTexSize=new K(Math.ceil(t*i),Math.ceil(r*i)),this.lowTex=new Ae(this.lowTexSize.x,this.lowTexSize.y,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.lowTex.name="lowTex";let a=new Qe;a.clearValue=[0,0,0,1],a.loadOp="clear",this.outlineTex=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outlineTex.name="outlineTex";let o=new Qe;o.clearValue=[0,0,0,1],o.loadOp="clear",this.rtFrame=new Ze([this.outlineTex],[o]),this.outlineSetting=new ht(8),this.weightBuffer=new ve(this.lowTexSize.x*this.lowTexSize.y*4,GPUBufferUsage.COPY_SRC),this.oldOutlineColor=new ve(this.lowTexSize.x*this.lowTexSize.y*4,GPUBufferUsage.COPY_SRC),this.slotsArray=new Float32Array(nr.SlotCount*4),this.slotsBuffer=new ve(this.slotsArray.length),this.slotsBuffer.setFloat32Array("slotsArray",this.slotsArray),this.slotsBuffer.apply(),this.entitiesArray=new Float32Array(nr.SlotCount*nr.MaxEntities),this.entitiesBuffer=new ve(this.entitiesArray.length),this.entitiesBuffer.setFloat32Array("entitiesArray",this.entitiesArray),this.slotsBuffer.apply(),this.fetchData||={}}fetchData;fetchOutlineData(){if(nr.fetchData(this.fetchData),this.fetchData.dirty){let e=nr.SlotCount,t=nr.MaxEntities;for(let r=0;r<e;r++){let i=4*r,a=this.fetchData.slots[r];this.slotsArray[i+0]=a.color.r,this.slotsArray[i+1]=a.color.g,this.slotsArray[i+2]=a.color.b,this.slotsArray[i+3]=a.count,i=t*r,this.entitiesArray.set(a.indexList,i)}this.slotsBuffer.setFloat32Array("slotsArray",this.slotsArray),this.slotsBuffer.apply(),this.entitiesBuffer.setFloat32Array("entitiesArray",this.entitiesArray),this.entitiesBuffer.apply()}}computeList;render(e,t){this.calcWeightCompute||(this.createResource(),this.createCompute(),this.createGUI(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null)),this.computeList||=[this.calcWeightCompute,this.outlineCompute,this.blendCompute];let r=m.setting.render.postProcessing.outline;this.outlineSetting.setFloat("strength",r.strength),this.outlineSetting.setFloat("useAddMode",r.useAddMode?1:0),this.outlineSetting.setFloat("outlinePixel",r.outlinePixel),this.outlineSetting.setFloat("fadeOutlinePixel",r.fadeOutlinePixel),this.outlineSetting.setFloat("lowTexWidth",this.lowTexSize.x),this.outlineSetting.setFloat("lowTexHeight",this.lowTexSize.y),this.outlineSetting.apply(),this.fetchOutlineData(),F.computeCommand(t,this.computeList),F.lastRenderPassState=this.rendererPassState}onResize(){let e=R.presentationSize,t=e[0],r=e[1],i=m.setting.render.postProcessing.outline.textureScale;this.lowTexSize=new K(Math.ceil(t*i),Math.ceil(r*i)),this.lowTex.resize(this.lowTexSize.x,this.lowTexSize.y),this.outlineTex.resize(t,r),this.weightBuffer.resizeBuffer(this.lowTexSize.x*this.lowTexSize.y*4),this.oldOutlineColor.resizeBuffer(this.lowTexSize.x*this.lowTexSize.y*4),this.calcWeightCompute.workerSizeX=Math.ceil(this.lowTex.width/8),this.calcWeightCompute.workerSizeY=Math.ceil(this.lowTex.height/8),this.calcWeightCompute.workerSizeZ=1,this.outlineCompute.workerSizeX=Math.ceil(this.lowTex.width/8),this.outlineCompute.workerSizeY=Math.ceil(this.lowTex.height/8),this.outlineCompute.workerSizeZ=1,this.blendCompute.workerSizeX=Math.ceil(this.outlineTex.width/8),this.blendCompute.workerSizeY=Math.ceil(this.outlineTex.height/8),this.blendCompute.workerSizeZ=1}}class cA extends Et{outTexture;newTexture;oldTexture;combineTexture;rendererPassState;ssgiCompute;delayCompute;combineCompute;rtFrame;textureScaleSmallCompute;textureScaleBigCompute;view;colorTexture;posTexture;normalTexture;gBufferTexture;lastPosTexture;downSampleCofe=1;debugChanal="0";updateBuffer;constructor(){super(),this.updateBuffer=new ve(32),this.updateBuffer.setFloat("frameCount",10),this.updateBuffer.setFloat("indirectIns",1.5),this.updateBuffer.setFloat("delay",.02),this.updateBuffer.setFloat("colorIns",1),this.updateBuffer.setFloat("d1",.03),this.updateBuffer.apply()}onAttach(e){this.view=e,e.camera.transform.onPositionChange=e.camera.transform.onPositionChange?ss(e.camera.transform.onPositionChange,(t,r)=>this.onCameraChange(t,r)):(t,r)=>this.onCameraChange(t,r)}onCameraChange(e,t){console.log("a");let r=d.distance(e,t);r=Math.min(.45,r)+.01,this.updateBuffer.setFloat("delay",r)}Render;onDetach(e){}set ins(e){this.updateBuffer.setFloat("indirectIns",e),this.updateBuffer.apply()}get ins(){return this.updateBuffer.getFloat("indirectIns")}set delay(e){this.updateBuffer.setFloat("delay",e),this.updateBuffer.apply()}get delay(){return this.updateBuffer.getFloat("delay")}set colorIns(e){this.updateBuffer.setFloat("colorIns",e),this.updateBuffer.apply()}get colorIns(){return this.updateBuffer.getFloat("colorIns")}set frameCount(e){this.updateBuffer.setFloat("frameCount",e),this.updateBuffer.apply()}get frameCount(){return this.updateBuffer.getFloat("frameCount")}set d1(e){this.updateBuffer.setFloat("d1",e),this.updateBuffer.apply()}get d1(){return this.updateBuffer.getFloat("d1")}createResource(){let e=se.getGBufferFrame("ColorPassGBuffer");this.gBufferTexture=e.getCompressGBufferTexture();let t=R.presentationSize,r=t[0],i=t[1];this.lastPosTexture=new Ae(r,i,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.lastPosTexture.name="lastPosTexture",this.outTexture=new Ae(r,i,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="outTexture";let a=Math.floor(r*this.downSampleCofe),o=Math.floor(i*this.downSampleCofe);this.newTexture=new Ae(a,o,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.newTexture.name="newTexture",this.oldTexture=new Ae(a,o,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.oldTexture.name="oldTexture",this.combineTexture=new Ae(a,o,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.combineTexture.name="combineTexture";let n=new Qe;n.loadOp="load",this.rtFrame=new Ze([this.outTexture],[n])}createCompute(){this.ssgiCompute=new ue(kc),this.delayCompute=new ue(Yc),this.combineCompute=new ue(Zc);let e=ne.getCameraGroup(this.view.camera);this.ssgiCompute.setSamplerTexture("gBufferTexture",this.gBufferTexture),this.ssgiCompute.setSamplerTexture("combineTexture",this.combineTexture),this.ssgiCompute.setSamplerTexture("oldTexture",this.oldTexture),this.ssgiCompute.setStorageTexture("newTexture",this.newTexture),this.ssgiCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.ssgiCompute.setStorageBuffer("updateBuffer",this.updateBuffer),this.autoSetColorTexture("inTex",this.ssgiCompute),this.delayCompute.setSamplerTexture("newTexture",this.newTexture),this.delayCompute.setSamplerTexture("oldTexture",this.oldTexture),this.delayCompute.setStorageTexture("combineTexture",this.combineTexture),this.delayCompute.setStorageBuffer("updateBuffer",this.updateBuffer),this.combineCompute.setSamplerTexture("inputBTexture",this.combineTexture),this.combineCompute.setSamplerTexture("gBufferTexture",this.gBufferTexture),this.combineCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.combineCompute.setStorageTexture("outTexture",this.outTexture),this.combineCompute.setStorageBuffer("updateBuffer",this.updateBuffer),this.textureScaleBigCompute=new Jf,this.textureScaleBigCompute.setInputes(null,[this.combineTexture],[this.outTexture])}render(e,t){}frame=0;compute(e){this.ssgiCompute||(this.createResource(),this.createCompute(),this.onResize(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="SSGI"),this.frameCount=this.frame,this.frame++;let t=F.beginCommandEncoder();switch(parseInt(this.debugChanal)){case 0:F.copyTexture(t,this.combineTexture,this.oldTexture),F.computeCommand(t,[this.ssgiCompute,this.delayCompute,this.combineCompute]);break;case 1:F.copyTexture(t,this.posTexture,this.lastPosTexture),F.copyTexture(t,this.lastPosTexture,this.outTexture);break;case 2:F.copyTexture(t,this.normalTexture,this.outTexture);break;case 3:F.copyTexture(t,this.posTexture,this.outTexture);break;case 4:F.copyTexture(t,this.colorTexture,this.outTexture);break;case 5:F.copyTexture(t,this.gBufferTexture,this.outTexture);break}F.lastRenderPassState=this.rendererPassState,this.updateBuffer.setFloat("delay",.01)}onResize(){let e=R.presentationSize,t=e[0],r=e[1];this.outTexture.resize(t,r),this.ssgiCompute.workerSizeX=Math.ceil(this.newTexture.width/16),this.ssgiCompute.workerSizeY=Math.ceil(this.newTexture.height/16),this.ssgiCompute.workerSizeZ=1,this.delayCompute.workerSizeX=Math.ceil(this.combineTexture.width/16),this.delayCompute.workerSizeY=Math.ceil(this.combineTexture.height/16),this.delayCompute.workerSizeZ=1,this.combineCompute.workerSizeX=Math.ceil(this.outTexture.width/16),this.combineCompute.workerSizeY=Math.ceil(this.outTexture.height/16),this.combineCompute.workerSizeZ=1}}class fA extends Et{SSR_RayTraceCompute;SSR_IS_Compute;SSR_Blend_Compute;isRetTexture;finalTexture;rendererPassState;ssrUniformBuffer;rayTraceData;ssrColorData;rtFrame;historyPosition;view;onAttach(e){this.view=e,m.setting.render.postProcessing.ssr.enable=!0}onDetach(e){m.setting.render.postProcessing.ssr.enable=!1}reflectionRatio=.5;get fadeEdgeRatio(){return m.setting.render.postProcessing.ssr.fadeEdgeRatio}set fadeEdgeRatio(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.ssr;t.fadeEdgeRatio=e}get rayMarchRatio(){return m.setting.render.postProcessing.ssr.rayMarchRatio}set rayMarchRatio(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.ssr;t.rayMarchRatio=e}get roughnessThreshold(){return m.setting.render.postProcessing.ssr.roughnessThreshold}set roughnessThreshold(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.ssr;t.roughnessThreshold=e}get fadeDistanceMin(){return m.setting.render.postProcessing.ssr.fadeDistanceMin}set fadeDistanceMin(e){e=ie(e,0,1e4);let t=m.setting.render.postProcessing.ssr;t.fadeDistanceMin=e}get fadeDistanceMax(){return m.setting.render.postProcessing.ssr.fadeDistanceMax}set fadeDistanceMax(e){e=ie(e,0,1e4);let t=m.setting.render.postProcessing.ssr;t.fadeDistanceMax=e}get powDotRN(){return m.setting.render.postProcessing.ssr.powDotRN}set powDotRN(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.ssr;t.powDotRN=e}createRayTraceShader(){let e=ne.getCameraGroup(this.view.camera);this.SSR_RayTraceCompute=new ue(zc),this.SSR_RayTraceCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.SSR_RayTraceCompute.setUniformBuffer("ssrUniform",this.ssrUniformBuffer),this.SSR_RayTraceCompute.setStorageBuffer("rayTraceBuffer",this.rayTraceData),this.SSR_RayTraceCompute.setStorageBuffer("historyPosition",this.historyPosition);let r=se.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture();this.SSR_RayTraceCompute.setSamplerTexture("gBufferTexture",r),G.instance.sky instanceof Bs&&this.SSR_RayTraceCompute.setSamplerTexture("prefilterMap",G.instance.sky.map),this.SSR_RayTraceCompute.workerSizeX=Math.ceil(this.isRetTexture.width/8),this.SSR_RayTraceCompute.workerSizeY=Math.ceil(this.isRetTexture.height/8),this.SSR_RayTraceCompute.workerSizeZ=1}createISShader(){this.SSR_IS_Compute=new ue(Oc),this.SSR_IS_Compute.setStorageBuffer("ssrUniform",this.ssrUniformBuffer),this.SSR_IS_Compute.setStorageBuffer("rayTraceBuffer",this.rayTraceData),this.SSR_IS_Compute.setStorageBuffer("ssrColorData",this.ssrColorData),this.SSR_IS_Compute.setStorageBuffer("historyPosition",this.historyPosition),this.SSR_IS_Compute.setSamplerTexture("colorMap",this.getOutTexture()),this.SSR_IS_Compute.setStorageTexture("outTex",this.isRetTexture),this.SSR_IS_Compute.workerSizeX=Math.ceil(this.isRetTexture.width/8),this.SSR_IS_Compute.workerSizeY=Math.ceil(this.isRetTexture.height/8),this.SSR_IS_Compute.workerSizeZ=1}createBlendShader(e){let t=ne.getCameraGroup(this.view.camera);this.SSR_Blend_Compute=new ue(Lc),this.SSR_Blend_Compute.setStorageBuffer("rayTraceBuffer",this.rayTraceData),this.SSR_Blend_Compute.setUniformBuffer("globalUniform",t.uniformGPUBuffer);let i=se.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture();this.SSR_Blend_Compute.setSamplerTexture("gBufferTexture",i),this.SSR_Blend_Compute.setSamplerTexture("colorMap",this.getOutTexture()),this.SSR_Blend_Compute.setSamplerTexture("ssrMap",e),this.SSR_Blend_Compute.setStorageTexture("outTex",this.finalTexture),this.SSR_Blend_Compute.workerSizeX=Math.ceil(this.finalTexture.width/8),this.SSR_Blend_Compute.workerSizeY=Math.ceil(this.finalTexture.height/8),this.SSR_Blend_Compute.workerSizeZ=1}createResource(){let[e,t]=R.presentationSize;this.finalTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),this.finalTexture.name="ssrOutTex";let r=new Qe;r.clearValue=[0,0,0,0],r.loadOp="clear";let i=Math.ceil(e*m.setting.render.postProcessing.ssr.pixelRatio),a=Math.ceil(t*m.setting.render.postProcessing.ssr.pixelRatio);this.isRetTexture=new Ae(i,a,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),this.isRetTexture.name="ssrTextureIn";let o=new Qe;o.clearValue=[0,0,0,0],o.loadOp="clear",this.rtFrame=new Ze([this.finalTexture,this.isRetTexture],[r,o]),this.rayTraceData=new ve(i*a*8,GPUBufferUsage.COPY_SRC),this.ssrColorData=new ve(i*a*4,GPUBufferUsage.COPY_SRC),this.historyPosition=new ve(i*a*4,GPUBufferUsage.COPY_SRC),this.ssrUniformBuffer=new ht(32),this.ssrUniformBuffer.setFloat("ssrBufferSizeX",this.isRetTexture.width),this.ssrUniformBuffer.setFloat("ssrBufferSizeY",this.isRetTexture.height),this.ssrUniformBuffer.setFloat("colorMapSizeX",this.finalTexture.width),this.ssrUniformBuffer.setFloat("colorMapSizeY",this.finalTexture.height),this.ssrUniformBuffer.apply()}render(e,t){if(!this.SSR_RayTraceCompute){this.createResource(),this.createISShader(),this.createRayTraceShader(),this.createBlendShader(this.isRetTexture),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null);let a=ne.getCameraGroup(e.camera);this.SSR_RayTraceCompute.setUniformBuffer("standUniform",a.uniformGPUBuffer)}let r=m.setting.render.postProcessing.ssr;this.ssrUniformBuffer.setFloat("fadeEdgeRatio",r.fadeEdgeRatio),this.ssrUniformBuffer.setFloat("rayMarchRatio",r.rayMarchRatio),this.ssrUniformBuffer.setFloat("fadeDistanceMin",r.fadeDistanceMin),this.ssrUniformBuffer.setFloat("fadeDistanceMax",r.fadeDistanceMax),this.ssrUniformBuffer.setFloat("mixThreshold",r.mixThreshold),this.ssrUniformBuffer.setFloat("roughnessThreshold",r.roughnessThreshold),this.ssrUniformBuffer.setFloat("reflectionRatio",this.reflectionRatio),this.ssrUniformBuffer.setFloat("powDotRN",r.powDotRN),this.ssrUniformBuffer.setFloat("randomSeedX",Math.random()),this.ssrUniformBuffer.setFloat("randomSeedY",Math.random()),this.ssrUniformBuffer.apply();let i=[this.SSR_RayTraceCompute,this.SSR_IS_Compute,this.SSR_Blend_Compute];F.computeCommand(t,i),F.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=R.presentationSize,r=Math.ceil(e*m.setting.render.postProcessing.ssr.pixelRatio),i=Math.ceil(t*m.setting.render.postProcessing.ssr.pixelRatio);this.finalTexture.resize(e,t),this.isRetTexture.resize(r,i),this.rayTraceData.resizeBuffer(r*i*8),this.ssrColorData.resizeBuffer(r*i*4),this.historyPosition.resizeBuffer(r*i*4),this.ssrUniformBuffer.setFloat("ssrBufferSizeX",this.isRetTexture.width),this.ssrUniformBuffer.setFloat("ssrBufferSizeY",this.isRetTexture.height),this.ssrUniformBuffer.setFloat("colorMapSizeX",this.finalTexture.width),this.ssrUniformBuffer.setFloat("colorMapSizeY",this.finalTexture.height),this.SSR_RayTraceCompute.workerSizeX=Math.ceil(this.isRetTexture.width/8),this.SSR_RayTraceCompute.workerSizeY=Math.ceil(this.isRetTexture.height/8),this.SSR_RayTraceCompute.workerSizeZ=1,this.SSR_IS_Compute.workerSizeX=Math.ceil(this.isRetTexture.width/8),this.SSR_IS_Compute.workerSizeY=Math.ceil(this.isRetTexture.height/8),this.SSR_IS_Compute.workerSizeZ=1,this.SSR_Blend_Compute.workerSizeX=Math.ceil(this.finalTexture.width/8),this.SSR_Blend_Compute.workerSizeY=Math.ceil(this.finalTexture.height/8),this.SSR_Blend_Compute.workerSizeZ=1}}class dA{static createSeeds(){let e=20,t=32,r=[new d(0,0,e)],i=0,a=.02;for(let o=1;o<t;o++){let n=new d;r.push(n),i+=1-(1-.618)*o/t,a+=o*.01,n.x=Math.sin(i)*a,n.y=Math.cos(i)*a,n.z=1-o/t,n.multiplyScalar(e)}return r}}class gA extends Et{taaTexture;outTexture;rendererPassState;taaCompute;copyTexCompute;sharpCompute;taaSetting;preColorBuffer;preColorTex;preProjMatrix;preViewMatrix;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.taa.enable=!0,e.camera.enableJitterProjection(!0),this.createGUI()}onDetach(e){m.setting.render.postProcessing.taa.enable=!1,e.camera.enableJitterProjection(!1)}get jitterSeedCount(){return m.setting.render.postProcessing.taa.jitterSeedCount}set jitterSeedCount(e){e=ie(e,2,32),e=Math.round(e);let t=m.setting.render.postProcessing.taa;t.jitterSeedCount=e}get blendFactor(){return m.setting.render.postProcessing.taa.blendFactor}set blendFactor(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.taa;t.blendFactor=e}get sharpFactor(){return m.setting.render.postProcessing.taa.sharpFactor}set sharpFactor(e){e=ie(e,.1,.99);let t=m.setting.render.postProcessing.taa;t.sharpFactor=e}get sharpPreBlurFactor(){return m.setting.render.postProcessing.taa.sharpPreBlurFactor}set sharpPreBlurFactor(e){e=ie(e,.1,.99);let t=m.setting.render.postProcessing.taa;t.sharpPreBlurFactor=e}get temporalJitterScale(){return m.setting.render.postProcessing.taa.temporalJitterScale}set temporalJitterScale(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.taa;t.temporalJitterScale=e}createGUI(){}createCompute(e){let t=new ue(Jc),r=new ht(44),i=ne.getCameraGroup(e.camera);t.setUniformBuffer("globalUniform",i.uniformGPUBuffer),t.setUniformBuffer("taaData",r),t.setStorageBuffer("preColorBuffer",this.preColorBuffer);let a=se.getGBufferFrame(se.colorPass_GBuffer);t.setSamplerTexture("preColorTex",this.preColorTex),t.setSamplerTexture("gBufferTexture",a.getCompressGBufferTexture()),this.autoSetColorTexture("inTex",t),t.setStorageTexture("outTex",this.taaTexture),t.workerSizeX=Math.ceil(this.taaTexture.width/8),t.workerSizeY=Math.ceil(this.taaTexture.height/8),t.workerSizeZ=1,this.taaCompute=t,this.taaSetting=r,this.copyTexCompute=new ue(Gc),this.copyTexCompute.setStorageBuffer("preColor",this.preColorBuffer),this.copyTexCompute.setStorageTexture("preColorTex",this.preColorTex),this.copyTexCompute.workerSizeX=Math.ceil(this.taaTexture.width/8),this.copyTexCompute.workerSizeY=Math.ceil(this.taaTexture.height/8),this.copyTexCompute.workerSizeZ=1,this.sharpCompute=new ue(Wc),this.sharpCompute.setUniformBuffer("taaData",r),this.sharpCompute.setSamplerTexture("inTex",this.taaTexture),this.sharpCompute.setStorageTexture("outTex",this.outTexture),this.sharpCompute.workerSizeX=Math.ceil(this.outTexture.width/8),this.sharpCompute.workerSizeY=Math.ceil(this.outTexture.height/8),this.sharpCompute.workerSizeZ=1}createResource(){this.preProjMatrix=new I().identity(),this.preViewMatrix=new I().identity();let[e,t]=R.presentationSize;this.preColorBuffer=new ve(e*t*4,GPUBufferUsage.COPY_SRC),this.preColorTex=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.preColorTex.name="taaTex";let r=new Qe;r.clearValue=[0,0,0,1],r.loadOp="clear",this.taaTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.taaTexture.name="taaTex";let i=new Qe;i.clearValue=[0,0,0,1],i.loadOp="clear",this.outTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="sharpTaaTex";let a=new Qe;a.clearValue=[0,0,0,1],a.loadOp="clear",this.rtFrame=new Ze([this.preColorTex,this.taaTexture,this.outTexture],[r,i,a])}render(e,t){this.taaCompute||(this.createResource(),this.createCompute(e),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null));let r=m.setting.render.postProcessing.taa;this.taaSetting.setMatrix("preProjMatrix",this.preProjMatrix),this.taaSetting.setMatrix("preViewMatrix",this.preViewMatrix),this.taaSetting.setFloat("jitterFrameIndex",e.camera.jitterFrameIndex),this.taaSetting.setFloat("blendFactor",r.blendFactor),this.taaSetting.setFloat("sharpFactor",r.sharpFactor),this.taaSetting.setFloat("sharpPreBlurFactor",r.sharpPreBlurFactor),this.taaSetting.setFloat("jitterX",e.camera.jitterX),this.taaSetting.setFloat("jitterY",e.camera.jitterY),this.taaSetting.apply(),F.computeCommand(t,[this.copyTexCompute,this.taaCompute,this.sharpCompute]),F.lastRenderPassState=this.rendererPassState,this.preProjMatrix.copyFrom(e.camera.projectionMatrix),this.preViewMatrix.copyFrom(e.camera.viewMatrix)}onResize(){let[e,t]=R.presentationSize;this.preColorBuffer.resizeBuffer(e*t*4),this.taaTexture.resize(e,t),this.outTexture.resize(e,t),this.preColorTex.resize(e,t),this.taaCompute.workerSizeX=Math.ceil(this.taaTexture.width/8),this.taaCompute.workerSizeY=Math.ceil(this.taaTexture.height/8),this.taaCompute.workerSizeZ=1,this.copyTexCompute.workerSizeX=Math.ceil(this.taaTexture.width/8),this.copyTexCompute.workerSizeY=Math.ceil(this.taaTexture.height/8),this.copyTexCompute.workerSizeZ=1,this.sharpCompute.workerSizeX=Math.ceil(this.outTexture.width/8),this.sharpCompute.workerSizeY=Math.ceil(this.outTexture.height/8),this.sharpCompute.workerSizeZ=1}}class $f{_tempIndexArray=[];setOutline(e,t){this.setOutlineList([e],t?[t]:null)}setOutlineList(e,t){e||=[];let r=nr.defaultColor,i=nr.SlotCount;for(let a=0;a<i;a++){this._tempIndexArray.length=0;let o=e[a],n=(t?t[a]:null)||r;if(o)for(const l of o)this.getEntityIdList(l,this._tempIndexArray);nr.fillDataAt(a,this._tempIndexArray,n)}}clearOutline(){return nr.clear(),this}_rendererList=[];getEntityIdList(e,t){this._rendererList.length=0;let r=e.getComponents(j,this._rendererList);for(const i of r)t.push(i.object3D.transform._worldMatrix.index)}}let pA=new $f;class ed{localPosition=new d;worldPosition=new d;uv=new K;faceIndex;isIn=!1;t=0;u=0;v=0;triangle;v0;v1;v2;pickList;color}class na{static EPS=1e-4;static FLT_MAX=3402823466e29;static distPtTri(e,t,r,i){let a=new d,o=new d,n=new d;i.subtract(t,a),r.subtract(t,o),e.subtract(t,n);let l=ct(a,a),h=ct(a,o),u=ct(a,n),c=ct(o,o),f=ct(o,n),g=1/(l*c-h*h),p=(c*u-h*f)*g,A=(l*f-h*u)*g;if(p>=-na.EPS&&A>=-na.EPS&&p+A<=1+na.EPS){let U=t[1]+a[1]*p+o[1]*A;return Math.abs(U-e[1])}return na.FLT_MAX}static _info=new ed;static IntersectTriangle(e,t,r){let i=t.v1,a=t.v2,o=t.v3,n=a.subtract(i,d.HELP_3),l=o.subtract(i,d.HELP_4),h=e.direction.crossProduct(l,d.HELP_5),u=ct(n,h),c;if(u>0){if(r)return null;c=e.origin.subtract(i,d.HELP_2)}else c=i.subtract(e.origin,d.HELP_2),u=-u;if(u<1e-4)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let f=ct(c,h);if(f<0||f>u)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let g=c.crossProduct(n,d.HELP_1),p=ct(e.direction,g);if(p<0||f+p>u)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let A=ct(l,g),U=1/u;A*=U,f*=U,p*=U,this._info.isIn=!0,this._info.t=A,this._info.u=f,this._info.v=p;let x=1-f-p;return this._u0.copyFrom(t.u1),this._u0.scale(x),this._u1.copyFrom(t.u2),this._u1.scale(f),this._u2.copyFrom(t.u3),this._u2.scale(p),this._info.uv.copyFrom(this._u0),this._info.uv.add(this._u1,this._info.uv),this._info.uv.add(this._u2,this._info.uv),this._info.localPosition.copyFrom(e.direction).multiplyScalar(A),this._info.localPosition.add(e.origin,this._info.localPosition),this._info}static _u0=new K;static _u1=new K;static _u2=new K}class Gs extends Er{static _instance;_maxRetry=3;loadAll(e,t){return new Promise((r,i)=>{let a=e.length,o=[];e.forEach((n,l)=>{let h=new t;this.load(n,t).then(u=>{h.parse(u),o.push(h),a--,a===0&&r(o)})})})}constructor(){if(super(),Gs._instance)throw new Error("LoadManager is singleton class...")}static getInstance(){return this._instance||(this._instance=new Gs)}loadUrls(e,t){return new Promise((r,i)=>{let a=e.length,o=[];e.forEach((n,l)=>{this.load(n,t).then(h=>{o.push(h),a--,a===0&&r(o),a<0&&console.error(`loadUrls ${e} error`)})})})}get maxRetry(){return this._maxRetry}set maxRetry(e){this._maxRetry=e}load(e,t){return new Promise((r,i)=>{t.format})}}function td(s){const e=[1/0,1/0,1/0],t=[-1/0,-1/0,-1/0];for(let r=0;r<s.length;r+=3){const i=s[r+0],a=s[r+1],o=s[r+2];i<e[0]&&(e[0]=i),a<e[1]&&(e[1]=a),o<e[2]&&(e[2]=o),i>t[0]&&(t[0]=i),a>t[1]&&(t[1]=a),o>t[2]&&(t[2]=o)}return{min:e,max:t}}var sa=(s=>(s.PLY="ply",s.SPLAT="splat",s.KSPLAT="ksplat",s.UNKNOWN="unknown",s))(sa||{});function rd(s){if(s.byteLength<16)return"unknown";const e=new Uint8Array(s,0,Math.min(512,s.byteLength));return new TextDecoder("utf-8").decode(e).startsWith("ply")?"ply":"unknown"}function id(s){switch(s){case"char":case"uchar":case"uint8":case"int8":return 1;case"short":case"ushort":case"int16":case"uint16":return 2;case"int":case"uint":case"int32":case"uint32":case"float":case"float32":return 4;case"double":case"float64":return 8;default:return 4}}function et(s,e,t){switch(t){case"char":case"int8":return s.getInt8(e);case"uchar":case"uint8":return s.getUint8(e);case"short":case"int16":return s.getInt16(e,!0);case"ushort":case"uint16":return s.getUint16(e,!0);case"int":case"int32":return s.getInt32(e,!0);case"uint":case"uint32":return s.getUint32(e,!0);case"double":case"float64":return s.getFloat64(e,!0);case"float":case"float32":default:return s.getFloat32(e,!0)}}function ad(s){const e=Math.round(Math.sqrt(s));return Math.max(0,e-1)}function sd(s){const e=new TextDecoder("utf-8").decode(new Uint8Array(s,0,Math.min(4096,s.byteLength)));if(!e.startsWith("ply"))throw new Error("PLY: Unsupported format. Expecting PLY file.");const t=e.indexOf(`end_header
|
|
11485
|
-
`);if(t<0)throw new Error("PLY: Invalid PLY header");const r=e.substring(0,t+11),i=r.split(/\r?\n/);let a="",o=0;const n=[];let l=!1;for(const h of i)if(h.startsWith("format "))a=h.split(/\s+/)[1];else if(h.startsWith("element ")){const u=h.split(/\s+/);l=u[1]==="vertex",l&&(o=parseInt(u[2]))}else if(l&&h.startsWith("property ")){const u=h.split(/\s+/),c=u[1],f=u[2];n.push({name:f,type:c})}if(a!=="binary_little_endian")throw new Error("PLY: Only binary_little_endian PLY is supported");return{format:a,vertexCount:o,properties:n,headerByteLength:r.length}}function od(s){const e=sd(s),{vertexCount:t,properties:r,headerByteLength:i}=e,a=new DataView(s,i),o=C=>r.find(_=>_.name===C)!=null,n=C=>r.findIndex(_=>_.name===C),l=new Float32Array(t*3),h=o("scale_0")?new Float32Array(t*3):void 0,u=o("rot_0")?new Float32Array(t*4):void 0,c=o("opacity")?new Float32Array(t):void 0,f=[n("f_dc_0"),n("f_dc_1"),n("f_dc_2")],g=[];for(let C=0;C<r.length;C++)r[C].name.startsWith("f_rest_")&&g.push(C);const p=f[0]>=0&&f[1]>=0&&f[2]>=0;let A,U=0;if(p){const C=1+g.length/3;U=ad(C),A=new Float32Array(t*C*3)}const x=[];let B=0;for(const C of r)x.push(B),B+=id(C.type);let S=0;for(let C=0;C<t;C++){const _=S,y=n("x"),b=n("y"),w=n("z");if(y<0||b<0||w<0)throw new Error("PLY: Missing x/y/z for vertex");if(l[C*3+0]=et(a,_+x[y],r[y].type),l[C*3+1]=et(a,_+x[b],r[b].type),l[C*3+2]=et(a,_+x[w],r[w].type),h){const Q=n("scale_0"),E=n("scale_1"),M=n("scale_2");h[C*3+0]=et(a,_+x[Q],r[Q].type),h[C*3+1]=et(a,_+x[E],r[E].type),h[C*3+2]=et(a,_+x[M],r[M].type)}if(u){const Q=n("rot_0"),E=n("rot_1"),M=n("rot_2"),z=n("rot_3"),Y=et(a,_+x[Q],r[Q].type),ee=et(a,_+x[E],r[E].type),oe=et(a,_+x[M],r[M].type),te=et(a,_+x[z],r[z].type);u[C*4+0]=ee,u[C*4+1]=oe,u[C*4+2]=te,u[C*4+3]=Y}if(c){const Q=n("opacity");c[C]=et(a,_+x[Q],r[Q].type)}if(p&&A){const Q=1+g.length/3,E=C*Q*3;A[E+0]=et(a,_+x[f[0]],r[f[0]].type),A[E+Q+0]=et(a,_+x[f[1]],r[f[1]].type),A[E+2*Q+0]=et(a,_+x[f[2]],r[f[2]].type);let M=1,z=1,Y=1;for(let ee=0;ee<g.length;ee+=3){const oe=g[ee+0],te=g[ee+1],ge=g[ee+2];A[E+M]=et(a,_+x[oe],r[oe].type),A[E+Q+z]=et(a,_+x[te],r[te].type),A[E+2*Q+Y]=et(a,_+x[ge],r[ge].type),M++,z++,Y++}}S+=B}return{vertexCount:t,position:l,scale:h,rotation:u,opacity:c,sh:p&&A?{order:U,coeffs:A}:void 0}}class mA extends st{static format=Ge.BIN;async parseBuffer(e){const t=rd(e);let r;switch(t){case sa.PLY:{const i=od(e);r={count:i.vertexCount,position:i.position,rotation:i.rotation,scale:i.scale,opacity:i.opacity,sh:i.sh},r.bbox=td(i.position);break}case sa.SPLAT:throw new Error("SPLAT format is not yet supported");case sa.KSPLAT:throw new Error("KSPLAT format is not yet supported");case sa.UNKNOWN:default:throw new Error("Unknown or unsupported Gaussian Splatting file format")}return this.data=r,r}verification(){return!!this.data&&this.data.count>0}}var Fs=(s=>(s.Point="Point",s.LineString="LineString",s.MultiPolygon="MultiPolygon",s))(Fs||{});class AA extends st{static format=Ge.JSON;json;async parseString(e){this.json=e,this.data=JSON.parse(e)}}class UA{static getPath(e){let t=[];for(let r=0;r<e.features.length;r++){const i=e.features[r];switch(i.geometry.type){case Fs.LineString:break;case Fs.MultiPolygon:let a=[];for(let o=0;o<i.geometry.coordinates.length;o++){const n=i.geometry.coordinates[o];for(const l of n)for(const h of l){let u=new d(h[0],0,h[1]);a.push(u)}}t.push(a);break}}return t}}class xA{name;defines;doubleSided;baseColorFactor;emissiveFactor;metallicFactor;roughnessFactor;alphaCutoff;enableBlend;baseColorTexture;metallicRoughnessTexture;normalTexture;occlusionTexture;emissiveTexture;extensions;baseMapOffsetSize;normalMapOffsetSize;emissiveMapOffsetSize;roughnessMapOffsetSize;metallicMapOffsetSize;aoMapOffsetSize}class BA{}class vA{}class Un{boneName;bonePath;parentBoneName;boneID;parentBoneID;instanceID;parentInstanceID;t;q;s;formBytes(e){this.boneName=e.readUTF(),this.bonePath=e.readUTF(),this.parentBoneName=e.readUTF(),this.boneID=e.readInt32(),this.parentBoneID=e.readInt32(),this.instanceID=e.readUTF(),this.parentInstanceID=e.readUTF(),this.t=e.readVector3(),this.q=e.readQuaternion(),this.s=e.readVector3()}}class xn{name;count;boneData;boneMap;formBytes(e){this.boneData=[],this.boneMap=new Map,this.name=e.readUTF(),this.count=e.readInt32();for(let t=0;t<this.count;t++){let r=new Un;r.formBytes(e.readBytesArray()),this.boneData[t]=r,this.boneMap.set(r.boneName,r)}}}class nd extends st{static format=Ge.BIN;static parser(e,t){let r=e.readInt32();for(let i=0;i<r;i++){let a=new xn;a.formBytes(e.readBytesArray()),m.res.addObj(a.name,a)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}V.position,V.normal,V.color,V.TANGENT,V.uv,V.TEXCOORD_1,V.TEXCOORD_2,V.TEXCOORD_2,V.TEXCOORD_4,V.TEXCOORD_5,V.TEXCOORD_6,V.TEXCOORD_7,V.joints0,V.weights0;var L=(s=>(s[s.single=0]="single",s[s.boolean=1]="boolean",s[s.int=2]="int",s[s.int16=3]="int16",s[s.int32=4]="int32",s[s.float=5]="float",s[s.long=6]="long",s[s.uint=7]="uint",s[s.uint32=8]="uint32",s[s.uint64=9]="uint64",s[s.double=10]="double",s[s.string=11]="string",s[s.singleArray=12]="singleArray",s[s.stringArray=13]="stringArray",s[s.floatArray=14]="floatArray",s[s.vector2=15]="vector2",s[s.vector3=16]="vector3",s[s.vector4=17]="vector4",s[s.color=18]="color",s[s.color32=19]="color32",s[s.animationCurve=20]="animationCurve",s[s.quaternion=21]="quaternion",s[s.matrix4x4=22]="matrix4x4",s[s.mesh=23]="mesh",s[s.texture=24]="texture",s[s.material=25]="material",s[s.materials=26]="materials",s[s.skeleton=27]="skeleton",s[s.animClip=28]="animClip",s[s.vector2Int=29]="vector2Int",s[s.int32List=30]="int32List",s[s.colorList=31]="colorList",s[s.color32List=32]="color32List",s))(L||{});class ys{static GetMaterial(e){let t=e,r=t.split("/");t=r[r.length-1],r=t.split("."),t=r[r.length-1];let i=Gn(t);if(i){let a=new yt;return a.shader=new i,a}else throw new Error("not found shader, shader name is "+t)}static applyMaterialTexture(e,t){for(let r=0;r<t.length;r++){const i=t[r];i.property in e?e[i.property]=i.texture:i.property in e.shader?e.shader[i.property]=i.texture:e.setTexture(i.property,i.texture)}}static applyMaterialProperties(e,t){for(let r=0;r<t.length;r++){const i=t[r],a=i.key;switch(i.type){case L.color:case L.color32:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformColor(a,o)}break;case L.single:case L.float:case L.int:case L.int16:case L.int32:case L.uint:case L.uint32:case L.uint64:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformFloat(a,o)}break;case L.singleArray:{let o=i.getValue()[0];a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformFloat(a,o)}break;case L.vector2:case L.vector2Int:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformVector2(a,o)}break;case L.vector3:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformVector3(a,o)}break;case L.vector4:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformVector4(a,o)}break}}}}class Rr{static parser(e){switch(e.readInt32()){case L.single:return{t:L.single,v:e.readFloat32()};case L.boolean:return{t:L.boolean,v:e.readBoolean()};case L.int:return{t:L.int,v:e.readInt32()};case L.int16:return{t:L.int16,v:e.readInt16()};case L.int32:return{t:L.int32,v:e.readInt32()};case L.float:return{t:L.float,v:e.readFloat32()};case L.long:return{t:L.long,v:e.readFloat64()};case L.uint:return{t:L.uint,v:e.readUnit32()};case L.uint32:return{t:L.uint32,v:e.readUnit32()};case L.uint64:return{t:L.uint64,v:e.readUnit32()};case L.double:return{t:L.double,v:e.readFloat64()};case L.string:return{t:L.string,v:e.readUTF()};case L.singleArray:return{t:L.singleArray,v:e.readFloatArray()};case L.stringArray:return{t:L.stringArray,v:e.readStringArray()};case L.floatArray:return{t:L.floatArray,v:e.readFloatArray()};case L.vector2:return{t:L.vector2,v:e.readVector2()};case L.vector3:return{t:L.vector3,v:e.readVector3()};case L.vector4:return{t:L.vector4,v:e.readVector4()};case L.color:return{t:L.color,v:e.readColor()};case L.color32:return{t:L.color32,v:e.readColor()};case L.animationCurve:return{t:L.animationCurve,v:null};case L.quaternion:return{t:L.quaternion,v:e.readQuaternion()};case L.matrix4x4:return{t:L.matrix4x4,v:null};case L.mesh:{let n=e.readUTF(),l=m.res.getGeometry(n);return{t:L.mesh,v:l}}case L.texture:{let n=e.readUTF(),l=m.res.getTexture(n);return{t:L.texture,v:l}}case L.material:{let n=e.readUTF(),l=m.res.getMat(n);return{t:L.material,v:l}}case L.materials:{let n=e.readStringArray(),l=[];for(let h=0;h<n.length;h++){const u=n[h];let c=m.res.getMat(u);l.push(c)}return{t:L.materials,v:l}}case L.skeleton:break;case L.animClip:{let n=[],l=e.readInt32();for(let h=0;h<l;h++){let u=new Sn;u.formBytes(e),n.push(u)}return{t:L.animClip,v:n}}case L.vector2Int:return{t:L.vector2Int,v:e.readVector2int()};case L.int32List:return{t:L.int32List,v:e.readInt32List()};case L.colorList:let r=e.readInt32(),i=[];for(let n=0;n<r;n++){const l=Rr.parser(e).v;i.push(l)}return{t:L.colorList,v:i};case L.color32List:let a=e.readInt32(),o=[];for(let n=0;n<a;n++){const l=Rr.parser(e).v;o.push(l)}return{t:L.color32List,v:o}}}}class Bn{key;type;_data;getValue(){return this._data}formBytes(e){this.key=e.readUTF();let{t,v:r}=Rr.parser(e);this.type=t,this._data=r}}class ld{property;name;texture;texelSize;wrapModeU;wrapModeV;wrapModeW;wrapMode;anisoLevel;dimension;filterMode}class hd extends st{static format=Ge.TEXT;static parserMaterial(e,t){let r=e.readInt32();for(let i=0;i<r;i++){let a=e.readBytesArray(),o=a.readUTF(),n=a.readUTF();a.readUTF();let l=a.readStringArray();a.readVector4(),a.readVector4();let h=a.readUTF(),u=[],c=[],f=a.readInt32();for(let A=0;A<f;A++){let U=new Bn;U.formBytes(a),u.push(U)}let g=a.readInt32();for(let A=0;A<g;A++){let U=a.readBytesArray(),x=new ld;x.property=U.readUTF(),x.name=U.readUTF(),x.texture=m.res.getTexture(x.name),x.texelSize=U.readVector2(),x.wrapModeU=U.readUnit32(),x.wrapModeV=U.readUnit32(),x.wrapModeW=U.readUnit32(),x.wrapMode=U.readUnit32(),x.anisoLevel=U.readUnit32(),x.dimension=U.readUnit32(),x.filterMode=U.readUnit32(),c.push(x)}let p=ys.GetMaterial(h);p.name=o;for(let A=0;A<l.length;A++){const U=l[A];p.shader.setDefine(U,!0)}ys.applyMaterialTexture(p,c),ys.applyMaterialProperties(p,u),m.res.addMat(n,p)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class vn{shapeName;shapeIndex;frameCount;blendPositionList=new Float32Array;blendNormalList=new Float32Array;formBytes(e){let t=e.readBytesArray();this.shapeName=t.readUTF(),this.shapeIndex=t.readInt32(),this.frameCount=t.readInt32();let r=t.readInt32();this.blendPositionList=t.readFloat32Array(r*3);let i=t.readInt32();this.blendNormalList=t.readFloat32Array(i*3)}}class Cn{vertexCount;shapeNames;shapeIndexs;blendCount;blendShapePropertyDatas;blendShapeMap;formBytes(e){this.blendShapeMap=new Map,this.blendShapePropertyDatas=[];let t=e.readBytesArray();this.vertexCount=t.readInt32(),this.shapeNames=t.readStringArray(),this.shapeIndexs=t.readIntArray(),this.blendCount=t.readInt32();for(let r=0;r<this.blendCount;r++){let i=new vn;i.formBytes(t),this.blendShapePropertyDatas.push(i),this.blendShapeMap.set(i.shapeName,i)}return e}}class ud{name;meshName;meshID;vertexCount;vertexStrip;vertexBuffer;indices;attributes;bones;bindPose;blendShapeData}class cd extends st{static format=Ge.BIN;async parseBuffer(e){}static parserMeshs(e,t){let r=e.readInt32();for(let i=0;i<r;i++){let a=new ud,o=e.readBytesArray();a.meshName=o.readUTF(),a.meshID=o.readUTF(),o.readFloat32()>0,o.readFloat32()>0,o.readFloat32()>0;let n=o.readFloat32()>0,l=o.readFloat32()>0;n&&(a.bones=o.readStringArray(),a.bindPose=o.readMatrix44Array()),l&&(a.blendShapeData=new Cn,a.blendShapeData.formBytes(o));let h=o.readBytesArray(),u=o.readBytesArray(),c=h.readInt32(),f=0,g=[];for(let B=0;B<c;B++)g[B]={},g[B].att=CA[h.readUTF()],g[B].dim=h.readInt32(),f+=g[B].dim,g[B].format=h.readUTF();a.vertexCount=h.readInt32(),a.vertexBuffer=u.getFloat32Array();let p=o.readInt32Array(),A=[],U=o.readInt32();for(let B=0;B<U;B++){let S=o.readInt32(),C=o.readInt32(),_=o.readInt32(),y=o.readInt32(),b=o.readInt32(),w=o.readInt32();o.readVector3(),o.readVector3();let Q={indexStart:C,indexCount:_,vertexStart:y,vertexCount:w,firstStart:b,topology:S,index:B};A.push(Q)}p.length>65535?a.indices=new Uint32Array(p):a.indices=new Uint16Array(p);let x=new Ne;if(x.vertexDim=f,x.geometryType=ft.compose_bin,x.setIndices(a.indices),x.setAttribute(V.all,a.vertexBuffer),n&&(x.skinNames=a.bones,x.bindPose=a.bindPose),l){x.blendShapeData=a.blendShapeData,x.morphTargetsRelative=!0,x.morphTargetDictionary={};for(let B=0;B<a.blendShapeData.blendCount;B++){x.setAttribute("a_morphPositions_"+B,a.blendShapeData.blendShapePropertyDatas[B].blendPositionList),x.setAttribute("a_morphNormals_"+B,a.blendShapeData.blendShapePropertyDatas[B].blendNormalList);for(let S=0;S<a.blendShapeData.blendCount;S++){let C=a.blendShapeData.shapeNames[S],_=a.blendShapeData.shapeIndexs[S];x.morphTargetDictionary[C]=_}}}for(let B=0;B<g.length;B++){const S=g[B].att;x.setAttribute(S,null)}for(let B=0;B<A.length;B++){const S=A[B];x.addSubGeometry(S)}x.name=a.meshName,m.res.addGeometry(a.meshID,x)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}let CA={Position:V.position,Normal:V.normal,Color:V.color,Tangent:V.TANGENT,TexCoord0:V.uv,TexCoord1:V.TEXCOORD_1,TexCoord2:V.TEXCOORD_2,TexCoord3:V.TEXCOORD_2,TexCoord4:V.TEXCOORD_4,TexCoord5:V.TEXCOORD_5,TexCoord6:V.TEXCOORD_6,TexCoord7:V.vIndex,BlendIndices:V.joints0,BlendWeight:V.weights0};class Ws extends DataView{get buffer(){return super.buffer}get byteOffset(){return super.byteOffset}get byteLength(){return super.byteLength}getInt16(e,t){return super.getInt16(e,t)}getInt32(e,t){return super.getInt32(e,t)}getFloat32(e,t){return super.getFloat32(e,t)}getFloat64(e,t){return super.getFloat64(e,t)}getUint8(e){return super.getUint8(e)}getUint32(e,t){return super.getUint32(e,t)}getInt8(e){return super.getInt8(e)}getUint16(e,t){return super.getUint16(e,t)}position=0;littleEndian=!0;constructor(e,t,r){super(e,t,r),this.position=0,this.position+=this.byteOffset}readUTF(){let e=this.readInt32(),t=e%4;t>0&&t<4&&(t=4-t);let r="",i=new Int8Array(this.buffer,this.position,e);return this.position+=e*Int8Array.BYTES_PER_ELEMENT,r+=String.fromCharCode.apply(null,i),this.position+=t*Int8Array.BYTES_PER_ELEMENT,r}readStringArray(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readUTF());return e}readByte(){let e=this.buffer[this.position];return this.position+=1,e}readBoolean(){let e=this.readInt32();return this.position+=4,e==1}readBytes(e){let t=new DataView(this.buffer,this.position,e);return this.position+=e,t.buffer}readBytesArray(){let e=this.readInt32(),t=new Ws(this.buffer.slice(this.position,this.position+e));return this.position+=e,t}readUnit8(){let e=this.getUint8(this.position);return this.position+=Uint8Array.BYTES_PER_ELEMENT,e}readUnit16(){let e=this.getUint16(this.position);return this.position+=Uint16Array.BYTES_PER_ELEMENT,e}readUnit32(){let e=this.getUint32(this.position);return this.position+=Uint32Array.BYTES_PER_ELEMENT,e}readInt8(){let e=this.getInt8(this.position);return this.position+=Int8Array.BYTES_PER_ELEMENT,e}readInt16(){let e=this.getInt16(this.position,this.littleEndian);return this.position+=Int16Array.BYTES_PER_ELEMENT,e}readInt32(){let e=this.getInt32(this.position,this.littleEndian);return this.position+=Int32Array.BYTES_PER_ELEMENT,e}readFloat32(){let e=this.getFloat32(this.position,this.littleEndian);return this.position+=Float32Array.BYTES_PER_ELEMENT,e}readFloat64(){let e=this.getFloat64(this.position,this.littleEndian);return this.position+=Float64Array.BYTES_PER_ELEMENT,e}readInt32Array(){let e=this.readInt32(),t=new Int32Array(this.buffer,this.position,e);return t=t.slice(0,e),this.position+=t.byteLength,t}readInt32List(){let e=this.readInt32(),t=[];for(let r=0;r<e;r++)t.push(this.readInt32());return t}readFloatArray(){let e=this.readInt32(),t=[];for(let r=0;r<e;r++){let i=this.readFloat32();t.push(i)}return t}readIntArray(){let e=this.readInt32(),t=[];for(let r=0;r<e;r++){let i=this.readInt32();t.push(i)}return t}readVector2int(){let e=new K;return e.x=this.readInt32(),e.y=this.readInt32(),e}readVector2(){let e=new K;return e.x=this.readFloat32(),e.y=this.readFloat32(),e}readVector3(){let e=new d;return e.x=this.readFloat32(),e.y=this.readFloat32(),e.z=this.readFloat32(),e}readVector3Array(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readVector3());return e}readVector4(){let e=new $;return e.x=this.readFloat32(),e.y=this.readFloat32(),e.z=this.readFloat32(),e.w=this.readFloat32(),e}readVector4Array(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readVector4());return e}readColor(){let e=new P;return e.r=this.readFloat32(),e.g=this.readFloat32(),e.b=this.readFloat32(),e.a=this.readFloat32(),e}readColorArray(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readColor());return e}readQuaternion(){let e=new Z;return e.x=this.readFloat32(),e.y=this.readFloat32(),e.z=this.readFloat32(),e.w=this.readFloat32(),e}readQuaternionArray(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readQuaternion());return e}readMatrix44(){let e=new I,t=e.rawData;return t[0]=this.readFloat32(),t[1]=this.readFloat32(),t[2]=this.readFloat32(),t[3]=this.readFloat32(),t[4]=this.readFloat32(),t[5]=this.readFloat32(),t[6]=this.readFloat32(),t[7]=this.readFloat32(),t[8]=this.readFloat32(),t[9]=this.readFloat32(),t[10]=this.readFloat32(),t[11]=this.readFloat32(),t[12]=this.readFloat32(),t[13]=this.readFloat32(),t[14]=this.readFloat32(),t[15]=this.readFloat32(),e}readMatrix44Array(){let e=this.readInt32(),t=[];for(let r=0;r<e;r++){let i=this.readMatrix44();t.push(i)}return t}readFloat32Array(e){let t=new DataView(this.buffer),r=new Float32Array(e);for(let i=0;i<e;i++)r[i]=t.getFloat32(this.position+i*Float32Array.BYTES_PER_ELEMENT,this.littleEndian);return this.position+=e*Float32Array.BYTES_PER_ELEMENT,r}getFloat32Array(){let e=new Float32Array(this.buffer,this.byteOffset,this.byteLength/Float32Array.BYTES_PER_ELEMENT);return e=e.slice(0,this.byteLength),e}}class fd extends st{static format=Ge.TEXT;static async parserTexture(e,t,r){let i=e.readInt32(),a=[];for(let n=0;n<i;n++){let l=e.readUTF();dd.useWebp?(l=l.replace("png","webp"),l=l.replace("jpb","webp"),a.push(t.baseUrl+"webp/"+l)):a.push(t.baseUrl+l)}let o=await m.res.loadBitmapTextures(a,m.setting.loader.numConcurrent,r,!0);for(const n of o)m.res.addTexture(n.name,n)}verification(){if(this.data)return!0;throw new Error("verify failed.")}}var SA=Object.getOwnPropertyDescriptor,_A=(s,e,t,r)=>{for(var i=r>1?void 0:r?SA(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let bs=class extends pt{constructor(){super(),O.register("PBRLitSSSShader",tf);let s=new Oe("PBRLitSSSShader","PBRLitSSSShader");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);let e=s.shaderState;e.acceptShadow=!0,e.castShadow=!0,e.receiveEnv=!0,e.acceptGI=!0,e.useLight=!0,this.setDefine("USE_BRDF",!0),this.setDefine("USE_AO_R",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefine("USE_CUSTOMUNIFORM",!0),this.setDefault(),this.computes=[new Yf(this)]}setDefault(){this.setUniformFloat("shadowBias",35e-5),this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformColor("emissiveColor",new P(1,1,1)),this.setUniformVector4("materialF0",new $(.04,.04,.04,1)),this.setUniformColor("specularColor",new P(.04,.04,.04)),this.setUniformFloat("envIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("roughness",1),this.setUniformFloat("metallic",0),this.setUniformFloat("ao",1),this.setUniformFloat("roughness_min",0),this.setUniformFloat("roughness_max",1),this.setUniformFloat("metallic_min",0),this.setUniformFloat("metallic_max",1),this.setUniformFloat("emissiveIntensity",0),this.setUniformFloat("alphaCutoff",0),this.setUniformFloat("ior",1.5),this.setUniformFloat("clearcoatFactor",0),this.setUniformFloat("clearcoatRoughnessFactor",0),this.setUniformColor("clearcoatColor",new P(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this.setUniformColor("skinColor",new P(1,0,0)),this.setUniformFloat("skinPower",3.4),this.setUniformFloat("skinColorIns",.5),this.setUniformFloat("curveFactor",1)}set _MainTex(s){this.setTexture("baseMap",s)}set _BumpMap(s){this.setTexture("normalMap",s)}set _SSSMap(s){this.setTexture("sssMap",s)}set _MaskTex(s){this.setTexture("maskMap",s)}set _UVTransform(s){this.setUniformVector4("transformUV1",s)}set _Metallic(s){this.setUniformFloat("metallic",s)}set _Roughness(s){this.setUniformFloat("roughness",s)}set _MainColor(s){this.setUniformColor("baseColor",s)}set _AlphaCutoff(s){this.setUniformFloat("alphaCutoff",s)}set _DoubleSidedEnable(s){let e=this.getDefaultColorShader();e.shaderState.cullMode=s?Jt.none:e.shaderState.cullMode}set _SkinColor(s){this.setUniformColor("skinColor",s)}set _SkinPower(s){this.setUniformFloat("skinPower",s)}set _SkinColorIns(s){this.setUniformFloat("skinColorIns",s)}set curveFactor(s){this.setUniformFloat("curveFactor",s)}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=ae.NONE:e.blendMode=ae.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};bs=_A([yi(bs,"LitSSSShader")],bs);var FA=Object.getOwnPropertyDescriptor,yA=(s,e,t,r)=>{for(var i=r>1?void 0:r?FA(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Qs=class extends pt{constructor(){super();let s=new Oe("PBRLItShader","PBRLItShader");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);let e=s.shaderState;e.acceptShadow=!0,e.castShadow=!0,e.receiveEnv=!0,e.acceptGI=!0,e.useLight=!0,this.setDefine("USE_BRDF",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformFloat("shadowBias",35e-5),this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformColor("emissiveColor",new P(0,0,0)),this.setUniformVector4("materialF0",new $(.04,.04,.04,1)),this.setUniformColor("specularColor",new P(.04,.04,.04)),this.setUniformFloat("envIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("roughness",1),this.setUniformFloat("metallic",0),this.setUniformFloat("ao",1),this.setUniformFloat("roughness_min",0),this.setUniformFloat("roughness_max",1),this.setUniformFloat("metallic_min",0),this.setUniformFloat("metallic_max",1),this.setUniformFloat("emissiveIntensity",0),this.setUniformFloat("alphaCutoff",0),this.setUniformFloat("ior",1.5),this.setUniformFloat("clearcoatFactor",0),this.setUniformFloat("clearcoatRoughnessFactor",0),this.setUniformColor("clearcoatColor",new P(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this._MainTex=m.res.grayTexture,this._BumpMap=m.res.normalTexture,this._MaskTex=m.res.maskTexture}set _MainTex(s){this.setTexture("baseMap",s)}set _BumpMap(s){this.setTexture("normalMap",s)}set _MaskTex(s){this.setTexture("maskMap",s)}set _UVTransform(s){this.setUniformVector4("transformUV1",s)}set _Metallic(s){this.setUniformFloat("metallic",s)}set _Roughness(s){this.setUniformFloat("roughness",s)}set _MainColor(s){this.setUniformColor("baseColor",s)}set _AlphaCutoff(s){this.setUniformFloat("alphaCutoff",s)}set _DoubleSidedEnable(s){let e=this.getDefaultColorShader();e.shaderState.cullMode=s?Jt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=ae.NONE:e.blendMode=ae.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};Qs=yA([yi(Qs,"LitShader")],Qs);class Js{comName;data;static parser(e){let t=e.readBytesArray(),r=new Js;r.comName=t.readUTF(),r.data=[];let i=t.readInt32();for(let a=0;a<i;a++){let o=new Bn;o.formBytes(t),r.data.push(o)}return r}}class rs{name;parentName;position;rotation;scale;comDatas;child;static parser(e){let t=e.readBytesArray(),r=new rs;r.name=t.readUTF(),r.parentName=t.readUTF(),r.position=t.readVector3(),r.rotation=t.readQuaternion(),r.scale=t.readVector3(),r.comDatas=[],r.child=[];let i=t.readInt32();for(let o=0;o<i;o++){const n=Js.parser(t);r.comDatas.push(n)}let a=t.readInt32();for(let o=0;o<a;o++){const n=rs.parser(t);r.child.push(n)}return r}}class dd extends st{static useWebp=!0;static format=Ge.BIN;avatarDic;nodeData;async parseBuffer(e){this.avatarDic={};let t=new Ws(e,0);await fd.parserTexture(t,this,this.loaderFunctions),nd.parser(t,this),cd.parserMeshs(t,this),hd.parserMaterial(t,this),this.nodeData=this.parserPrefabNode(t),this.data=this.data=this.parserNodeTree(this.nodeData)}parserPrefabNode(e){return rs.parser(e)}parserNodeTree(e){let t=new q;if(t.localPosition=d.serialize(e.position),t.localQuaternion=Z.serialize(e.rotation),t.localScale=d.serialize(e.scale),t.name=e.name,e.comDatas)for(let r=0;r<e.comDatas.length;r++){const i=e.comDatas[r];let a=null,o=zn(i.comName);if(o){a=t.getOrAddComponent(o);for(let n=0;n<i.data.length;n++){const l=i.data[n];l.key in a&&(a[l.key]=l.getValue())}}}if(e.child&&e.child.length>0)for(let r=0;r<e.child.length;r++){let i=this.parserNodeTree(e.child[r]);t.addChild(i)}return t}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class bA{static getNumber(e){return parseFloat(e)}static getInt(e){return parseInt(e)}static getBoolean(e){return e=="true"}static getNumberArray(e){let t=e.replaceAll("[","");t=t.replaceAll("]","");let r=t.split(",");for(let i=0;i<r.length;i++)parseFloat(r[i]);return t}static getStringArray(e){let t=e.replaceAll("[","");t=t.replaceAll("]","");let r=t.split(","),i=[];for(let a=0;a<r.length;a++){const o=r[a];i.push(o)}return i}static getVector2(e){}static getVector3(e){}static getVector4(e){}static getQuaternion(e){}static getColor(e){}}var QA=Object.getOwnPropertyDescriptor,RA=(s,e,t,r)=>{for(var i=r>1?void 0:r?QA(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Ea=class extends pt{constructor(){super();let s=new Oe("UnLit","UnLit");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);let e=s.shaderState;e.acceptShadow=!1,e.castShadow=!1,e.receiveEnv=!1,e.acceptGI=!1,e.useLight=!1,this.setDefine("USE_BRDF",!0),this.setDefine("USE_AO_R",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformFloat("alphaCutoff",0)}set _MainTex(s){this.setTexture("baseMap",s)}set _BumpMap(s){this.setTexture("normalMap",s)}set _MaskTex(s){this.setTexture("maskMap",s)}set _UVTransform(s){this.setUniformVector4("transformUV1",s)}set _Metallic(s){this.setUniformFloat("metallic",s)}set _Roughness(s){this.setUniformFloat("roughness",s)}set _MainColor(s){this.setUniformColor("baseColor",s)}set _AlphaCutoff(s){this.setUniformFloat("alphaCutoff",s)}set _DoubleSidedEnable(s){let e=this.getDefaultColorShader();e.shaderState.cullMode=s?Jt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=ae.NONE:e.blendMode=ae.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};Ea=RA([yi(Ea,"UnLitShader")],Ea);var IA=Object.getOwnPropertyDescriptor,EA=(s,e,t,r)=>{for(var i=r>1?void 0:r?IA(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let wa=class extends pt{constructor(){super(),O.register("VertexAttributeIndexShader",qc),O.register("UnLitTextureArray",rf);let s=new Oe("UnLitTextureArray","UnLitTextureArray");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);let e=s.shaderState;e.acceptShadow=!1,e.castShadow=!1,e.receiveEnv=!1,e.acceptGI=!1,e.useLight=!1,this.setDefine("USE_BRDF",!0),this.setDefine("USE_AO_R",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformFloat("alphaCutoff",0)}set _MainTex(s){this.setTexture("baseMap",s)}set _BumpMap(s){this.setTexture("normalMap",s)}set _MaskTex(s){this.setTexture("maskMap",s)}set _UVTransform(s){this.setUniformVector4("transformUV1",s)}set _Metallic(s){this.setUniformFloat("metallic",s)}set _Roughness(s){this.setUniformFloat("roughness",s)}set _MainColor(s){this.setUniformColor("baseColor",s)}set _AlphaCutoff(s){this.setUniformFloat("alphaCutoff",s)}set _DoubleSidedEnable(s){let e=this.getDefaultColorShader();e.shaderState.cullMode=s?Jt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=ae.NONE:e.blendMode=ae.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};wa=EA([yi(wa,"UnLitTexArrayShader")],wa);class wA{asset;extras;geometricError;properties;refine;root}class TA{boundingVolume;children;geometricError;transform}class DA{boundingVolume;geometricError;refine;content;contents}class MA{uri;group;metadata}class NA{class;properties}class En{group;_modelList;_tileSet;_rootPath;constructor(){this.group=new q}async loadTileSet(e,t){this._modelList=[],this._rootPath=e;let r=e+"/"+t;if(this._tileSet=await m.res.loadJSON(r),this._tileSet.root.transform){let n=new I;for(let l=0;l<16;l++)n.rawData[l]=this._tileSet.root.transform[l]}let i=new I;switch((this._tileSet.asset&&this._tileSet.asset.gltfUpAxis||"y").toLowerCase()){case"x":i.makeRotationAxis(d.Y_AXIS,-Math.PI/2);break;case"y":i.makeRotationAxis(d.X_AXIS,Math.PI/2);break;case"z":i.identity();break}let o=i.clone();o.invert(),this.applyTransform(this.group.transform,o);for(let n of this._tileSet.root.children){let l=[];if(n.content&&n.content.uri&&l.push(n.content.uri),n.contents)for(let h of n.contents)l.push(h.uri);for(let h of l){let u=this._rootPath+"/"+h,c={onProgress:g=>this.onLoadProgress(g),onComplete:g=>this.onComplete(g)},f;if(u.endsWith(".glb"))f=await m.res.loadGltf(u,c),this.applyTransform(f.transform,i);else if(u.endsWith("tileset.json")){let g=u.replace("/tileset.json",""),p=new En;await p.loadTileSet(g,"tileset.json"),f=p.group}else u.endsWith(".i3dm")?f=await m.res.loadI3DM(u,c,i):u.endsWith(".b3dm")&&(f=await m.res.loadB3DM(u,c,i));f&&(this._modelList.push(f),this.group.addChild(f))}}}onLoadProgress(e){}onComplete(e){}applyTransform(e,t){let r=t.decompose(ir.QUATERNION);e.localRotQuat.copyFrom(r[1]),e.localRotQuat=e.localRotQuat,e.localPosition.copyFrom(r[0]),e.localPosition=e.localPosition,e.localScale.copyFrom(r[2]),e.localScale=e.localScale}}class VA extends yt{static count=0;constructor(){super(),O.register("ColorLitShader",$c),this.shader=new pt;let e=new Oe("ColorLitShader","ColorLitShader");e.passType=H.COLOR,this.shader.addRenderPass(e),e.setDefine("USE_BRDF",!0),e.setShaderEntry("VertMain","FragMain"),e.setUniformColor("baseColor",new P),e.setUniformColor("emissiveColor",new P),e.setUniformFloat("envIntensity",1),e.setUniformFloat("normalScale",1),e.setUniformFloat("roughness",0),e.setUniformFloat("metallic",0),e.setUniformFloat("ao",1),e.setUniformFloat("alphaCutoff",0);let t=e.shaderState;t.acceptShadow=!0,t.receiveEnv=!0,t.acceptGI=!0,t.useLight=!0,e.setTexture("normalMap",m.res.normalTexture),e.setTexture("emissiveMap",m.res.blackTexture)}clone(){return null}debug(){}}class PA extends yt{constructor(){super();let e=new Oe("LambertShader","LambertShader");e.setShaderEntry("VertMain","FragMain"),e.passType=H.COLOR,e.setUniformVector4("transformUV1",new $(0,0,1,1)),e.setUniformVector4("transformUV2",new $(0,0,1,1)),e.setUniformColor("baseColor",new P(1,1,1,1)),e.setUniformFloat("alphaCutoff",.5);let t=e.shaderState;t.acceptShadow=!1,t.castShadow=!1,t.receiveEnv=!1,t.acceptGI=!1,t.useLight=!1;let r=new pt;r.addRenderPass(e),this.shader=r,this.baseMap=m.res.grayTexture}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set envMap(e){}set shadowMap(e){}}function kA(s,e){}class LA extends yt{constructor(){super(),this.shader=new wa,this.baseMap=m.res.whiteTexture}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set shadowMap(e){}}class Sn{clipName;loopTime;startTime;stopTime;sampleRate;useSkeletonPos;useSkeletonScale;positionCurves=new Map;rotationCurves=new Map;scaleCurves=new Map;floatCurves=new Map;formBytes(e){if(this.clipName=e.readUTF(),this.loopTime=!e.readInt32(),this.startTime=e.readFloat32(),this.stopTime=e.readFloat32(),this.sampleRate=e.readInt32(),this.useSkeletonPos=e.readInt32()>0,this.useSkeletonScale=e.readInt32()>0,this.useSkeletonPos){let i=e.readInt32();for(let a=0;a<i;a++){let o=new ni;o.formBytes(e),this.positionCurves.set(o.path,o)}}let t=e.readInt32();for(let i=0;i<t;i++){let a=new ni;a.formBytes(e),this.rotationCurves.set(a.path,a)}if(this.useSkeletonScale){let i=e.readInt32();for(let a=0;a<i;a++){let o=new ni;o.formBytes(e),this.scaleCurves.set(o.path,o)}}let r=e.readInt32();for(let i=0;i<r;i++){let a=new ni;a.formBytes(e),this.floatCurves.set(a.attribute,a)}}}class ni{path;attribute;propertys;preInfinity;postInfinity;rotationOrder;m_curves;k=0;_cacheValue;_kValue;constructor(e=1){this.k=e,this.m_curves=[],this.check()}check(){for(let e=0;e<this.k;e++)this.m_curves[e]||=new _a;switch(this.k){case 1:this._cacheValue=0;break;case 2:this._cacheValue=new K;break;case 3:this._cacheValue=new d;break;case 4:this._cacheValue=new $;break}}get totalTime(){return this.m_curves[0].totalTime}addKeyFrame(e){for(let t=0;t<this.k;t++)this.m_curves[t].addKeyFrame(e.getK(t))}removeKeyFrame(e){for(let t=0;t<this.k;t++)this.m_curves[t].removeKeyFrame(e.getK(t))}getValue(e){switch(this.k){case 1:this._cacheValue=this.m_curves[0].getValue(e);break;case 2:this._cacheValue.x=this.m_curves[0].getValue(e),this._cacheValue.y=this.m_curves[1].getValue(e);break;case 3:this._cacheValue.x=this.m_curves[0].getValue(e),this._cacheValue.y=this.m_curves[1].getValue(e),this._cacheValue.z=this.m_curves[2].getValue(e);break;case 4:const t=this.m_curves[0].getCurveFramesExtent(e),r=t.lhsIndex,i=t.rhsIndex;e=t.time;let a=this.m_curves[0].getKey(r),o=this.m_curves[0].getKey(i);e%=this.m_curves[0].totalTime;let n=(e-a.time)/(o.time-a.time);Z.HELP_0.set(this.m_curves[0].getKey(r).value,this.m_curves[1].getKey(r).value,this.m_curves[2].getKey(r).value,this.m_curves[3].getKey(r).value),Z.HELP_1.set(this.m_curves[0].getKey(i).value,this.m_curves[1].getKey(i).value,this.m_curves[2].getKey(i).value,this.m_curves[3].getKey(i).value),Z.HELP_2.slerp(Z.HELP_0,Z.HELP_1,n),this._cacheValue.x=Z.HELP_2.x,this._cacheValue.y=Z.HELP_2.y,this._cacheValue.z=Z.HELP_2.z,this._cacheValue.w=Z.HELP_2.w;break}return this._cacheValue}getKeyCount(){return this.m_curves[0].getKeyCount()}getKey(e){let t=[];for(let r=0;r<this.k;r++)t.push(this.m_curves[r].getKey(e));return t}formBytes(e){this.path=e.readUTF(),this.k=e.readInt32(),this.check(),this.attribute=e.readUTF(),this.propertys=this.attribute.split("."),this.preInfinity=e.readInt32(),this.postInfinity=e.readInt32(),this.rotationOrder=e.readInt32();let t=e.readInt32();for(let r=0;r<t;r++){let i=new Ma(0);i.formBytes(e),this.addKeyFrame(i)}}}class OA extends Map{negtive;constructor(e){if(super(e),this.negtive=new Map,e)for(let t of e)this.negtive.set(t[1],t[0])}delete(e){if(this.has(e)){let t=this.get(e);return this.negtive.delete(t),super.delete(e)}return!1}getKey(e){return this.negtive.get(e)}deleteValue(e){let t=this.negtive.get(e);return t&&this.delete(t),this.negtive.delete(e)}set(e,t){return super.set(e,t),this.negtive.set(t,e),this}clear(){this.negtive.clear(),super.clear()}}class zA{colorArray;constructor(e){this.colorArray=e}getColor(e){let t=e*this.colorArray.length,r=Math.floor(t),i=Math.min(r+1,this.colorArray.length-1),a=this.colorArray[r],o=this.colorArray[i];return P.lerp(t-r,a,o)}}class Rs{controlVertices;constructor(e){this.setControlVertices(e)}setControlVertices(e){e.length==4&&(this.controlVertices=e.concat())}getPoint(e){if(!(e>=0&&e<=1))return d.ZERO;let t=1-e,r=t*t*t,i=3*e*t*t,a=3*e*e*t,o=e*e*e;return this.controlVertices[0].mul(r).add(this.controlVertices[1].mul(i)).add(this.controlVertices[2].mul(a)).add(this.controlVertices[3].mul(o))}getTangent(e){if(!(e>=0&&e<=1))return d.ZERO;let t=this.controlVertices,r=t[0].add(t[1].add(t[0]).mul(e)),i=t[1].add(t[2].add(t[1]).mul(e)),a=t[2].add(t[3].add(t[2]).mul(e)),o=r.add(i.subtract(r).mul(e));return i.add(a.subtract(i).mul(e)).subtract(o)}getClosestParam(e,t=1e-6){return this.getClosestParamRec(e,0,1,t)}getClosestParamRec(e,t,r,i){let a=(t+r)/2;if(r-t<i)return a;let o=(t+a)/2,n=(a+r)/2,l=this.getPoint(o),h=this.getPoint(n),u=l.subtract(e).lengthSquared,c=h.subtract(e).lengthSquared;return u<c?r=a:t=a,this.getClosestParamRec(e,t,r,i)}}var gd=(s=>(s[s.Open=0]="Open",s[s.Closed=1]="Closed",s))(gd||{});class GA{type=0;numCurveSegments=0;numControlVertices=0;controlVertices=[];constructor(e,t=0){this.setControlVertices(e,t)}getPathType(){return this.type}isClosed(){return this.type==1}isValid(){return this.numCurveSegments>0}clear(){this.controlVertices.length=0,this.type=0,this.numCurveSegments=0,this.numControlVertices=0}computeApproxLength(){if(!this.isValid())return 0;let e=this.numCurveSegments+1;if(e<2)return 0;let t=0,r=this.controlVertices;for(let i=1;i<e;i++){let a=r[(i-1)*3],o=r[i*3];t+=a.subtract(o).lengthSquared}return t==0?0:t}computeApproxParamPerUnitLength(){let e=this.computeApproxLength();return this.numCurveSegments/e}computeApproxNormParamPerUnitLength(){return 1/this.computeApproxLength()}interpolatePoints(e,t){let r=e.length;r<2&&console.error("point count must great 1"),this.clear(),this.type=t;let i=this.controlVertices;switch(t){case 0:{this.numCurveSegments=r-1,this.numControlVertices=3*r-2,i.length=this.numControlVertices;for(let n=0;n<r;n++)i[n*3]=e[n];let a=e[1].subtract(e[0]).mul(.25);i[1]=e[0].add(a);let o=e[r-2].subtract(e[r-1]).mul(.25);i[this.numControlVertices-2]=e[r-1].add(o);for(let n=1;n<this.numCurveSegments;n++){let l=e[n-1].subtract(e[n]),h=e[n+1].subtract(e[n]),u=l.lengthSquared,c=h.lengthSquared;if(u>0&&c>0){let f=(u+c)/8,g=h.div(c).subtract(l.div(u));g.normalize(),g=g.mul(f),i[n*3-1]=e[n].subtract(g),i[n*3+1]=e[n].add(g)}else i[n*3-1]=e[n],i[n*3+1]=e[n]}break}case 1:{this.numCurveSegments=r,this.numControlVertices=3*r+1,i.length=this.numControlVertices;for(let a=0;a<r;a++)i[a*3]=e[a];i[this.numControlVertices-1]=e[0];for(let a=1;a<=this.numCurveSegments;a++){let o=a-1,n=(a+1)%this.numCurveSegments,l=a%this.numCurveSegments,h=e[o].subtract(e[l]),u=e[n].subtract(e[l]),c=h.lengthSquared,f=u.lengthSquared,g=3*a-1,p=(3*a+1)%(this.numControlVertices-1);if(c>0&&f>0){let A=(c+f)/8,U=u.div(f).subtract(h.div(c));U.normalize(),U=U.mul(A),i[g]=e[l].subtract(U),i[p]=e[l].add(U)}else i[g]=e[l],i[p]=e[l]}break}}}setControlVertices(e,t){let r=e.length;r<=0||t==0&&r<4||t==1&&r<7||(r-1)%3==0&&(this.clear(),this.type=t,this.numControlVertices=r,this.numCurveSegments=(r-1)/3,this.controlVertices=e)}getPoint(e){if(this.type==1){for(;e<0;)e+=this.numCurveSegments;for(;e>this.numCurveSegments;)e-=this.numCurveSegments}else e=bt.clampf(e,0,this.numCurveSegments);if(!(e>=0)&&e<=this.numCurveSegments)return;let t=Math.floor(e);t>=this.numCurveSegments&&(t=this.numCurveSegments-1);let r=[],i=this.controlVertices;return r[0]=i[3*t+0],r[1]=i[3*t+1],r[2]=i[3*t+2],r[3]=i[3*t+3],new Rs(r).getPoint(e-t)}getPointNorm(e){return this.getPoint(e*this.numCurveSegments)}getTangent(e){if(this.type==1){for(;e<0;)e+=this.numCurveSegments;for(;e>this.numCurveSegments;)e-=this.numCurveSegments}else e=bt.clampf(e,0,this.numCurveSegments);if(!(e>=0)&&e<=this.numCurveSegments)return;let t=Math.floor(e);t>=this.numCurveSegments&&(t=this.numCurveSegments-1);let r=this.controlVertices,i=[];return i[0]=r[3*t+0],i[1]=r[3*t+1],i[2]=r[3*t+2],i[3]=r[3*t+3],new Rs(i).getTangent(e-t)}getTangentNorm(e){return this.getTangent(e*this.numCurveSegments)}computeClosestParam(e,t){let r=Number.MAX_SAFE_INTEGER,i=0,a=[],o=new Rs(a);for(let n=0;n<this.controlVertices.length-1;n+=3){for(let c=0;c<4;c++)a[c]=this.controlVertices[n+c];o.setControlVertices(a);let l=o.getClosestParam(e,t),u=o.getPoint(l).subtract(e).lengthSquared;u<r&&(r=u,i=n/3+l)}return i}computeClosestNormParam(e,t){return this.computeClosestParam(e,t*this.numCurveSegments)}}class WA extends Map{valueList;keyList;isChange=!0;constructor(e,t,r){if(super(e),t&&(this.keyList=[]),r&&(this.valueList=[]),e)for(let i of e)this.valueList?.push(i[1]),this.keyList?.push(i[0])}delete(e){if(this.has(e)){let t=this.get(e);return this.valueList&&this.deleteValue(t),this.keyList&&this.deleteKey(e),this.isChange=!0,super.delete(e)}return!1}deleteValue(e){let t=this.valueList.indexOf(e);return t>=0&&this.valueList.splice(t,1),this}deleteKey(e){let t=this.keyList.indexOf(e);return t>=0&&this.keyList.splice(t,1),this}set(e,t){return this.delete(e),this.keyList?.push(e),this.valueList?.push(t),super.set(e,t),this.isChange=!0,this}clear(){this.valueList&&(this.valueList.length=0),this.keyList&&(this.keyList.length=0),this.isChange=!0,super.clear()}}var pd=(s=>(s[s.kParticleSystemClampVelocityCurveId=322376503]="kParticleSystemClampVelocityCurveId",s[s.kParticleSystemForceCurveId=306581307]="kParticleSystemForceCurveId",s[s.kParticleSystemRotationCurveId=1793934638]="kParticleSystemRotationCurveId",s[s.kParticleSystemRotationBySpeedCurveId=3737431713]="kParticleSystemRotationBySpeedCurveId",s[s.kParticleSystemStartSpeedCurveId=2527743459]="kParticleSystemStartSpeedCurveId",s[s.kParticleSystemSizeCurveId=2368504881]="kParticleSystemSizeCurveId",s[s.kParticleSystemSizeBySpeedCurveId=4085612399]="kParticleSystemSizeBySpeedCurveId",s[s.kParticleSystemVelocityCurveId=3774601268]="kParticleSystemVelocityCurveId",s[s.kParticleSystemUVCurveId=326370691]="kParticleSystemUVCurveId",s[s.kParticleSystemColorGradientId=1494990940]="kParticleSystemColorGradientId",s[s.kParticleSystemColorByVelocityGradientId=1089181156]="kParticleSystemColorByVelocityGradientId",s[s.kParticleSystemMeshSelectionId=3159510623]="kParticleSystemMeshSelectionId",s[s.kParticleSystemUVRowSelectionId=2941263940]="kParticleSystemUVRowSelectionId",s))(pd||{});const JA=3.141592653589793;class ZA{}function md(s,e,t){let r=.3333333333333333,i=.5,a=s*r,o=a*a,l=o*a-a*e*i+t*i,h=-o+e*r,u=h*h*h,c=u+l*l;if(c>=0){let p=Math.sqrt(c)-l;return p=p>0?Math.pow(p,r):-Math.pow(-p,r),-a-h/p+p}let f=Math.sqrt(-u),g=Math.acos(-l/f);return f=Math.pow(f,r),f=f-h/f,g=-a+f*Math.cos(g*r),g}function Is(s,e,t,r){let i=1e-5;if(Math.abs(s)<i)return Math.abs(e)>i?(r.r0=-t/e,1):0;let a=e*e-4*s*t;if(a<0)return 0;let o=.5/s,n=Math.sqrt(a);return r.r0=(n-e)*o,r.r1=(-n-e)*o,2}function Ad(s,e,t,r,i){let a=0;if(Math.abs(e)>=1e-4){let o=t/e,n=r/e,l=i/e;s[0]=md(o,n,l),a++;let h=e,u=t+e*s[0],c=r+t*s[0]+e*s[0]*s[0];a+=Is(h,u,c,{r0:s[1],r1:s[2]})}else a+=Is(t,r,i,{r0:s[1],r1:s[2]});return a}class br{coeff=[];static EvalSegment(e,t){return e*(e*(e*t[0]+t[1])+t[2])+t[3]}}class zr{static kMaxNumSegments=8;segments=[];integrationCache=[];doubleIntegrationCache=[];times=[];segmentCount;constructor(){this.segments[zr.kMaxNumSegments]=new br,this.integrationCache[zr.kMaxNumSegments]=0,this.doubleIntegrationCache[zr.kMaxNumSegments]=0,this.times[zr.kMaxNumSegments]=0}calculateMinMax(e,t){e.x=Math.min(e.x,t),e.y=Math.max(e.y,t)}findMinMaxDoubleIntegrated(){let e=K.ZERO.clone(),t=20,r=1/t,i=r;for(let a=0;a<t;a++)this.calculateMinMax(e,this.evaluateDoubleIntegrated(i)),i+=r;return e}findMinMaxIntegrated(){let e=K.ZERO.clone(),t=[],r=[];for(let i=0;i<this.segmentCount;i++){let a=4*this.segments[i].coeff[0],o=3*this.segments[i].coeff[1],n=2*this.segments[i].coeff[2],l=1*this.segments[i].coeff[3],h=[],u=Ad(h,a,o,n,l);for(let c=0;c<u;c++){let f=h[c]+t[i];f>=t[i]&&f<r[i]&&this.calculateMinMax(e,this.evaluateIntegrated(f))}this.calculateMinMax(e,this.evaluateIntegrated(r[i])),this.times[i]}return e}generateIntegrationCache(e){e.integrationCache[0]=0;let t=e.times[0],r=0;for(let i=1;i<e.segmentCount;i++){let a=e.segments[i-1].coeff;_n(a);let o=t-r;e.integrationCache[i]=e.integrationCache[i-1]+br.EvalSegment(o,a)*o,r=t,t=e.times[i]}}generateDoubleIntegrationCache(e){let t=0,r=0;for(let i=0;i<e.segmentCount;i++){e.doubleIntegrationCache[i]=t;let a=e.times[i]-r;a=Math.max(a,0),t+=br.EvalSegment(a,e.segments[i].coeff)*a*a+e.integrationCache[i]*a,r=e.times[i]}}integrate(){this.generateIntegrationCache(this);for(let e=0;e<this.segmentCount;e++)_n(this.segments[e].coeff)}doubleIntegrate(){this.generateIntegrationCache(this);for(let e=0;e<this.segmentCount;e++)Ud(this.segments[e].coeff);this.generateDoubleIntegrationCache(this)}static isValidCurve(e){let t=e.getKeyCount(),r=t-1;return e.getKey(0).time!=0&&r++,e.getKey(t-1).time!=1&&r++,r<=zr.kMaxNumSegments}evaluateDoubleIntegrated(e){let t=0;for(let r=0;r<this.segmentCount;r++){if(e<=this.times[r]){let i=e-t;return this.doubleIntegrationCache[r]+this.integrationCache[r]*i+br.EvalSegment(i,this.segments[r].coeff)*i*i}t=this.times[r]}return 1}evaluateIntegrated(e){let t=0;for(let r=0;r<this.segmentCount;r++){if(e<=this.times[r]){let i=e-t;return this.integrationCache[r]+br.EvalSegment(i,this.segments[r].coeff)*i}t=this.times[r]}return 1}evaluate(e){let t=0;for(let r=0;r<this.segmentCount;r++){if(e<=this.times[r])return br.EvalSegment(e-t,this.segments[r].coeff);t=this.times[r]}return 1}buildCurve(e,t){let r=e.getKeyCount();this.segmentCount=1;let i=1.01;if(this.segments.length=0,this.integrationCache.length=0,this.doubleIntegrationCache.length=0,this.times.length=0,this.times[0]=i,r!=0)if(r==1)this.segments[0]=new br,this.segments[0].coeff[3]=e.getKey(0).value*t;else{this.segmentCount=r-1;let a=0;e.getKey(0).time!=0&&(this.segments[0].coeff[3]=e.getKey(0).value,this.times[0]=e.getKey(0).time,a=1);for(let o=0;o<this.segmentCount;o++){let n;e.calculateCacheData(n,o,o+1,0),this.segments[o+a].coeff=n.coeff.concat(),this.times[o+a]=e.getKey(o+1).time}this.segmentCount+=a,e.getKey(r-1).time!=1&&(this.segments[this.segmentCount].coeff[3]=e.getKey(r-1).value,this.segmentCount++),this.times[this.segmentCount-1]=i;for(let o=0;o<this.segmentCount;o++)this.segments[o].coeff[0]*=t,this.segments[o].coeff[1]*=t,this.segments[o].coeff[2]*=t,this.segments[o].coeff[3]*=t}return!0}}function Ud(s){s[0]/=20,s[1]/=12,s[2]/=6,s[3]/=2}function _n(s){s[0]/=4,s[1]/=3,s[2]/=2,s[3]/=1}var xd=(s=>(s[s.kEMScalar=0]="kEMScalar",s[s.kEMOptimized=1]="kEMOptimized",s[s.kEMOptimizedMinMax=2]="kEMOptimizedMinMax",s[s.kEMSlow=3]="kEMSlow",s))(xd||{}),Bd=(s=>(s[s.kMMCScalar=0]="kMMCScalar",s[s.kMMCCurve=1]="kMMCCurve",s[s.kMMCTwoCurves=2]="kMMCTwoCurves",s[s.kMMCTwoConstants=3]="kMMCTwoConstants",s))(Bd||{});class YA{max;min}class XA{max;min;integrate(){this.max.integrate(),this.min.integrate()}doubleIntegrate(){this.max.doubleIntegrate(),this.min.doubleIntegrate()}findMinMaxIntegrated(){return null}findMinMaxDoubleIntegrated(){return null}}class vd{minMaxState;minCurve;maxCurve;_scalar=1;_minScalar;constructor(e=1){this._scalar=e,this.minMaxState=0,this.minCurve=new _a,this.maxCurve=new _a}setScalar(e){this._scalar=e}getScalar(){return this._scalar}static evaluateSlow(e,t,r){let i=e.maxCurve.getValue(t)*e.getScalar();return e.minMaxState==2?bi(e.minCurve.getValue(t)*e.getScalar(),i,r):i}static evaluate(e,t,r=1){if(e.minMaxState==0)return e.getScalar();let i=e.maxCurve.getValue(t)*e.getScalar();return e.minMaxState==1?bi(e.minCurve.getValue(t)*e.getScalar(),i,r):e.minMaxState==3?bi(e._minScalar,e._scalar,r):e.minMaxState==2?bi(e.minCurve.getValue(t)*e.getScalar(),i,1*Math.random()):this.evaluateSlow(e,t,1)}unSerialized(e){this.minMaxState=e.minMaxState,this._scalar=e.scalar,this._minScalar=e.minScalar,this.maxCurve.unSerialized(e.maxCurve),this.minCurve.unSerialized(e.minCurve)}}class HA{value=0;mode=0;spread=0;speed=new vd;unSerialized(e){this.value=e.value,this.mode=e.mode,this.spread=e.spread,this.speed.unSerialized(e.speed)}}function jA(s,e){let t=zr.isValidCurve(s.max);return e!=2&&e!=3?t:t&&zr.isValidCurve(s.min)}function KA(s,e,t,r){s.max.buildCurve(e.max,t),r!=2&&r!=3?s.min.buildCurve(e.max,t):s.min.buildCurve(e.min,t)}function qA(s,e){let t=e.getKeyCount();if(t!=0)if(t==1)Ta(s,e.getKey(0).value);else{let r=t-1;Ta(s,e.getKey(0).value);for(let i=0;i<r;i++){let a=new fn;e.calculateCacheData(a,i,i+1,0);let o=3*a.coeff[0],n=2*a.coeff[1],l=1*a.coeff[2],h=e.getKey(i).time,u=e.getKey(i+1).time,c=[],f=Is(o,n,l,{r0:c[0],r1:c[1]});for(let g=0;g<f;g++)c[g]>=0&&c[g]+h<u&&Ta(s,br.EvalSegment(c[g],a.coeff));Ta(s,br.EvalSegment(u-h,a.coeff))}}}function Ta(s,e){s.x=Math.min(s.x,e),s.y=Math.max(s.y,e)}class Ei{static BACK=0;static FRONT=1;static IN=0;static OUT=1;static INTERSECT=2}class Cd{a;b;c;d;static ALIGN_ANY=0;static ALIGN_XY_AXIS=1;static ALIGN_YZ_AXIS=2;static ALIGN_XZ_AXIS=3;constructor(e=0,t=0,r=0,i=0){this.a=e,this.b=t,this.c=r,this.d=i}setTo(e=0,t=0,r=0,i=0){this.a=e,this.b=t,this.c=r,this.d=i}fromPoints(e,t,r){var i=t.x-e.x,a=t.y-e.y,o=t.z-e.z,n=r.x-e.x,l=r.y-e.y,h=r.z-e.z;this.a=a*h-o*l,this.b=o*n-i*h,this.c=i*l-a*n,this.d=-(this.a*e.x+this.b*e.y+this.c*e.z)}fromNormalAndPoint(e,t){this.a=e.x,this.b=e.y,this.c=e.z,this.d=-(this.a*t.x+this.b*t.y+this.c*t.z)}normalize(){var e=Math.sqrt(this.a*this.a+this.b*this.b+this.c*this.c);if(e>0){var t=1/e;this.a*=t,this.b*=t,this.c*=t,this.d*=t}return e}distance(e){return this.a*e.x+this.b*e.y+this.c*e.z+this.d}classifyPoint(e,t=.01){var r=this.distance(e);return r<-t?Ei.BACK:r>t?Ei.FRONT:Ei.INTERSECT}toString(){return"Plane3D [a:"+this.a+", b:"+this.b+", c:"+this.c+", d:"+this.d+"]"}}function $A(s,e){return Math.random()*e+Math.random()*s+(e-s)*Math.random()}function e0(s,e,t){let r=t*Math.random();return Math.random()*e*r+Math.random()*s*r+(e-s)*Math.random()*r}function Sd(s,e,t){let r=0,i=0;for(;r===0;)r=Math.random();for(;i===0;)i=Math.random();let a=Math.sqrt(-2*Math.log(r))*Math.cos(2*Math.PI*i);return a=a/10+.5,(a>1||a<0)&&(a=Sd(s,e,t)),a=Math.pow(a,t),a*=e-s,a+=s,a}function lr(s){return s>0?Math.floor(s):Math.floor(s)-1}let le=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180];function Fn(s,e){let t=s&15,r=1+(t&7);return t&8&&(r=-r),r*e}function Es(s,e,t){let r=s&7,i=r<4?e:t,a=r<4?t:e;return(r&1?-i:i)+(r&2?-2*a:2*a)}function Da(s,e,t,r){let i=s&15,a=i<8?e:t,o=i<4?t:i==12||i==14?e:r;return(i&1?-a:a)+(i&2?-o:o)}function oa(s,e,t,r,i){let a=s&31,o=a<24?e:t,n=a<16?t:r,l=a<8?r:i;return(a&1?-o:o)+(a&2?-n:n)+(a&4?-l:l)}let Lt=[[0,1,2,3],[0,1,3,2],[0,0,0,0],[0,2,3,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,3,0],[0,2,1,3],[0,0,0,0],[0,3,1,2],[0,3,2,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,3,2,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,0,3],[0,0,0,0],[1,3,0,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,3,0,1],[2,3,1,0],[1,0,2,3],[1,0,3,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,3,1],[0,0,0,0],[2,1,3,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,1,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,0,1,2],[3,0,2,1],[0,0,0,0],[3,1,2,0],[2,1,0,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,1,0,2],[0,0,0,0],[3,2,0,1],[3,2,1,0]];function t0(s){let e=lr(s),t=e+1,r=s-e,i=r-1,a,o,n=1-r*r;n*=n,a=n*n*Fn(le[e&255],r);let l=1-i*i;return l*=l,o=l*l*Fn(le[t&255],i),.25*(a+o)}function r0(s,e){const t=.366025403,r=.211324865;let i,a,o,n=(s+e)*t,l=s+n,h=e+n,u=lr(l),c=lr(h),f=(u+c)*r,g=u-f,p=c-f,A=s-g,U=e-p,x,B;A>U?(x=1,B=0):(x=0,B=1);let S=A-x+r,C=U-B+r,_=A-1+2*r,y=U-1+2*r,b=u&255,w=c&255,Q=.5-A*A-U*U;Q<0?i=0:(Q*=Q,i=Q*Q*Es(le[b+le[w]],A,U));let E=.5-S*S-C*C;E<0?a=0:(E*=E,a=E*E*Es(le[b+x+le[w+B]],S,C));let M=.5-_*_-y*y;return M<0?o=0:(M*=M,o=M*M*Es(le[b+1+le[w+1]],_,y)),40*(i+a+o)}function i0(s,e,t){const r=.333333333,i=.166666667;let a,o,n,l,h=(s+e+t)*r,u=s+h,c=e+h,f=t+h,g=lr(u),p=lr(c),A=lr(f),U=(g+p+A)*i,x=g-U,B=p-U,S=A-U,C=s-x,_=e-B,y=t-S,b,w,Q,E,M,z;C>=_?_>=y?(b=1,w=0,Q=0,E=1,M=1,z=0):C>=y?(b=1,w=0,Q=0,E=1,M=0,z=1):(b=0,w=0,Q=1,E=1,M=0,z=1):_<y?(b=0,w=0,Q=1,E=0,M=1,z=1):C<y?(b=0,w=1,Q=0,E=0,M=1,z=1):(b=0,w=1,Q=0,E=1,M=1,z=0);let Y=C-b+i,ee=_-w+i,oe=y-Q+i,te=C-E+2*i,ge=_-M+2*i,Ce=y-z+2*i,J=C-1+3*i,ce=_-1+3*i,he=y-1+3*i,Ue=g&255,xe=p&255,Ve=A&255,Ie=.6-C*C-_*_-y*y;Ie<0?a=0:(Ie*=Ie,a=Ie*Ie*Da(le[Ue+le[xe+le[Ve]]],C,_,y));let Fe=.6-Y*Y-ee*ee-oe*oe;Fe<0?o=0:(Fe*=Fe,o=Fe*Fe*Da(le[Ue+b+le[xe+w+le[Ve+Q]]],Y,ee,oe));let Me=.6-te*te-ge*ge-Ce*Ce;Me<0?n=0:(Me*=Me,n=Me*Me*Da(le[Ue+E+le[xe+M+le[Ve+z]]],te,ge,Ce));let nt=.6-J*J-ce*ce-he*he;return nt<0?l=0:(nt*=nt,l=nt*nt*Da(le[Ue+1+le[xe+1+le[Ve+1]]],J,ce,he)),32*(a+o+n+l)}function a0(s,e,t,r){const i=.309016994,a=.138196601;let o,n,l,h,u,c=(s+e+t+r)*i,f=s+c,g=e+c,p=t+c,A=r+c,U=lr(f),x=lr(g),B=lr(p),S=lr(A),C=(U+x+B+S)*a,_=U-C,y=x-C,b=B-C,w=S-C,Q=s-_,E=e-y,M=t-b,z=r-w,Y=Q>E?32:0,ee=Q>M?16:0,oe=E>M?8:0,te=Q>z?4:0,ge=E>z?2:0,Ce=M>z?1:0,J=Y+ee+oe+te+ge+Ce,ce,he,Ue,xe,Ve,Ie,Fe,Me,nt,mr,Mt,Qt;ce=Lt[J][0]>=3?1:0,he=Lt[J][1]>=3?1:0,Ue=Lt[J][2]>=3?1:0,xe=Lt[J][3]>=3?1:0,Ve=Lt[J][0]>=2?1:0,Ie=Lt[J][1]>=2?1:0,Fe=Lt[J][2]>=2?1:0,Me=Lt[J][3]>=2?1:0,nt=Lt[J][0]>=1?1:0,mr=Lt[J][1]>=1?1:0,Mt=Lt[J][2]>=1?1:0,Qt=Lt[J][3]>=1?1:0;let Rt=Q-ce+a,Nt=E-he+a,Ct=M-Ue+a,Ar=z-xe+a,Ur=Q-Ve+2*a,xr=E-Ie+2*a,Br=M-Fe+2*a,gi=z-Me+2*a,Wr=Q-nt+3*a,vr=E-mr+3*a,pi=M-Mt+3*a,Jr=z-Qt+3*a,mi=Q-1+4*a,Cr=E-1+4*a,Ai=M-1+4*a,Ui=z-1+4*a,zt=U&255,xi=x&255,Bi=B&255,Zr=S&255,vi=.6-Q*Q-E*E-M*M-z*z;vi<0?o=0:(vi*=vi,o=vi*vi*oa(le[zt+le[xi+le[Bi+le[Zr]]]],Q,E,M,z));let Ci=.6-Rt*Rt-Nt*Nt-Ct*Ct-Ar*Ar;Ci<0?n=0:(Ci*=Ci,n=Ci*Ci*oa(le[zt+ce+le[xi+he+le[Bi+Ue+le[Zr+xe]]]],Rt,Nt,Ct,Ar));let Si=.6-Ur*Ur-xr*xr-Br*Br-gi*gi;Si<0?l=0:(Si*=Si,l=Si*Si*oa(le[zt+Ve+le[xi+Ie+le[Bi+Fe+le[Zr+Me]]]],Ur,xr,Br,gi));let _i=.6-Wr*Wr-vr*vr-pi*pi-Jr*Jr;_i<0?h=0:(_i*=_i,h=_i*_i*oa(le[zt+nt+le[xi+mr+le[Bi+Mt+le[Zr+Qt]]]],Wr,vr,pi,Jr));let Fi=.6-mi*mi-Cr*Cr-Ai*Ai-Ui*Ui;return Fi<0?u=0:(Fi*=Fi,u=Fi*Fi*oa(le[zt+1+le[xi+1+le[Bi+1+le[Zr+1]]]],mi,Cr,Ai,Ui)),27*(o+n+l+h+u)}class wn extends K{static uv_0=new wn;u=0;v=0;constructor(e=0,t=0){super(e,t),this.u=e,this.v=t}length(){return 0}static getUVSheet(e,t,r){let i=Math.floor(e%(t*r)),a=Math.floor(i/t),o=i%t;return new $(a/t,o/r,1/t,1/r)}}class Ma{serializedVersion="2";time;tangentMode=0;weightedMode=0;propertyKeyFrame;constructor(e=0){this.time=e,this.propertyKeyFrame={}}getK(e){return this.propertyKeyFrame[e]}split(e,t,r){switch(e){case L.single:{let i=this.getKeyFrame(0);i[r]=t}break;case L.float:{let i=this.getKeyFrame(0);i[r]=t}break;case L.vector2:{let i=t,a=this.getKeyFrame(0);a[r]=i.x;let o=this.getKeyFrame(1);o[r]=i.y}break;case L.vector3:{let i=t,a=this.getKeyFrame(0);a[r]=i.x;let o=this.getKeyFrame(1);o[r]=i.y;let n=this.getKeyFrame(2);n[r]=i.z}break;case L.vector4:{let i=t,a=this.getKeyFrame(0);a[r]=i.x;let o=this.getKeyFrame(1);o[r]=i.y;let n=this.getKeyFrame(2);n[r]=i.z;let l=this.getKeyFrame(3);l[r]=i.w}break;case L.quaternion:{let i=t,a=this.getKeyFrame(0);a[r]=i.x;let o=this.getKeyFrame(1);o[r]=i.y;let n=this.getKeyFrame(2);n[r]=i.z;let l=this.getKeyFrame(3);l[r]=i.w}break}}getKeyFrame(e){let t=this.propertyKeyFrame[e];return t||(t=new vs,t.time=this.time,t.tangentMode=this.tangentMode,t.weightedMode=this.weightedMode,this.propertyKeyFrame[e]=t),t}formBytes(e){this.time=e.readFloat32();{let{t,v:r}=Rr.parser(e);this.split(t,r,"value")}{let{t,v:r}=Rr.parser(e);this.split(t,r,"inSlope")}{let{t,v:r}=Rr.parser(e);this.split(t,r,"outSlope")}this.tangentMode=e.readInt32(),this.weightedMode=e.readInt32();{let{t,v:r}=Rr.parser(e);this.split(t,r,"inWeight")}{let{t,v:r}=Rr.parser(e);this.split(t,r,"outWeight")}}}class s0{static sub(e,t){switch(e.constructor.name){case"number":return e-t;case"Vector2":{let i=e,a=t;return new K(i.x-a.x,i.y-a.y)}case"Vector3":{let i=e,a=t;return new d(i.x-a.x,i.y-a.y,i.z-a.z)}case"Vector4":{let i=e,a=t;return new $(i.x-a.x,i.y-a.y,i.z-a.z,i.w-a.w)}case"Quaternion":{let i=e,a=t;return new Z(i.x-a.x,i.y-a.y,i.z-a.z,i.w-a.w)}}}}class Na{_keys=new Array;_values=new Array;getIndexByKey(e){return this._keys.indexOf(e)}getValueByKey(e){var t=this.getIndexByKey(e);return t>-1?this._values[t]:null}put(e,t){if(e==null)return null;var r=this.remove(e);return this._keys.push(e),this._values.push(t),r}remove(e){var t=this._keys.indexOf(e),r;return t>-1&&(r=this._values[t],this._keys.splice(t,1),this._values.splice(t,1)),r}getValues(){return this._values}getKeys(){return this._keys}clear(){this._values.length=0,this._keys.length=0}}class li{static WalkAble=1}class Va{static SetConst(e){this.EPSILON=e,this.POWER_EPSILON=e*e}static EPSILON=.1;static POWER_EPSILON=this.EPSILON*this.EPSILON}class Ut extends d{static CALC_VECTOR3D1=new d;static CALC_VECTOR3D2=new d;static CALC_VECTOR3D3=new d;static CALC_VECTOR3D4=new d;static CALC_VECTOR3D5=new d;_pointId=0;constructor(e,t,r,i){super(t,r,i,0),this._pointId=e}get id(){return this._pointId}static equalPoint(e,t){return(e.x-t.x)*(e.x-t.x)+(e.y-t.y)*(e.y-t.y)+(e.z-t.z)*(e.z-t.z)<Va.POWER_EPSILON}static calcDistance(e,t){return Ut.CALC_VECTOR3D3.setTo(e.x-t.x,e.y-t.y,e.z-t.z),Ut.CALC_VECTOR3D3.length}}class _d{_openedList;_closedList;_endNode;_startNode;_triangleChannel;_navMesh;_findIndex=0;constructor(){this._openedList=new Array,this._closedList=new Array}findPath(e,t,r){return this._findIndex++,this._navMesh=e,this._startNode=t,this._endNode=r,this._openedList.length=0,this._closedList.length=0,this._startNode&&this._endNode?(this._startNode.gg=0,this._startNode.h=0,this._startNode.f=0,this._startNode.parent=null,this.search()):!1}search(){for(var e=this._startNode,t=[],r;e!=this._endNode;){t=e.getNeibourTriangles(t,li.WalkAble,li.WalkAble);for(r of t)if(r.closeId!=this._findIndex&&!(r==e||!r.walkAble)){var i=e.gg+Ut.calcDistance(r,e)*r.costMultiplier,a=Ut.calcDistance(r,this._endNode),o=i+a;r.openId==this._findIndex?r.f>o&&(r.f=o,r.gg=i,r.h=a,r.parent=e):(r.f=o,r.gg=i,r.h=a,r.parent=e,r.openId=this._findIndex,this._openedList.push(r))}if(e.closeId=this._findIndex,this._closedList.push(e),this._openedList.length==0)return!1;this._openedList.sort(function(n,l){return n.f-l.f}),e=this._openedList.shift()}return this.buildPath(),!0}buildPath(){this._triangleChannel=[];var e=this._endNode;for(this._triangleChannel.push(e);e!=this._startNode;)e=e.parent,this._triangleChannel.unshift(e)}get channel(){return this._triangleChannel}}class cr extends Ut{_ownerPoint;_ownerEdge;radius=0;constructor(e,t){super(e.id,0,0,0),this._ownerEdge=t,this._ownerPoint=e}get ownerPoint(){return this._ownerPoint}get ownerEdge(){return this._ownerEdge}scalePoint(e=.7){var t=new cr(this._ownerPoint,this._ownerEdge);return t.copyFrom(this),t.decrementBy(this._ownerPoint),t.scaleBy(e),t.radius=t.length,t.incrementBy(this._ownerPoint),t}}class dr{_edgeMask=0;_edgeSize=0;_pointA;_pointB;_triangleOwners;_centerPoint;_edgeDirA2B;crossPoint;fatPointA;fatPointB;static CALC_FAT_VECTOR=new d;constructor(e,t){if(this._pointA=e,this._pointB=t,e.id>=t.id)throw new Error("edge point order error!!!");this._triangleOwners=new Array,this._centerPoint=new d,this._edgeMask=li.WalkAble,Ut.CALC_VECTOR3D1.setTo(e.x-t.x,e.y-t.y,e.z-t.z),this._edgeSize=Ut.CALC_VECTOR3D1.length,this._centerPoint.setTo((e.x+t.x)/2,(e.y+t.y)/2,(e.z+t.z)/2)}get size(){return this._edgeSize}get triangleOwners(){return this._triangleOwners}get centerPoint(){return this._centerPoint}initFatPoints(e){this._edgeDirA2B=this._pointB.subtract(this._pointA),this._edgeDirA2B.normalize(),this.fatPointA=this.fatPointA||new cr(this._pointA,this),this.fatPointB=this.fatPointB||new cr(this._pointB,this),this.fatPointA.radius!=e&&(dr.CALC_FAT_VECTOR.copyFrom(this._edgeDirA2B),dr.CALC_FAT_VECTOR.scaleBy(e),dr.CALC_FAT_VECTOR.incrementBy(this._pointA),this.fatPointA.copyFrom(dr.CALC_FAT_VECTOR),this.fatPointA.radius=e),this.fatPointB.radius!=e&&(dr.CALC_FAT_VECTOR.copyFrom(this._edgeDirA2B),dr.CALC_FAT_VECTOR.scaleBy(-e),dr.CALC_FAT_VECTOR.incrementBy(this._pointB),this.fatPointB.copyFrom(dr.CALC_FAT_VECTOR),this.fatPointB.radius=e)}getFatPoint(e){return e==this._pointA?this.fatPointA:this.fatPointB}getAnotherFatPoint(e){return e==this._pointA?this.fatPointB:this.fatPointA}getAnotherPoint(e){return e==this._pointA?this._pointB:this._pointA}containsPoint(e){return Ut.equalPoint(e,this._pointA)?this._pointA:Ut.equalPoint(e,this._pointB)?this._pointB:null}addTriangleOwners(e){if(e.edges.indexOf(this)==-1)throw new Error("the edge is not belong triangle!!!");this._triangleOwners.indexOf(e)==-1&&this._triangleOwners.push(e)}getPublicPoint(e){return this._pointA==e._pointA||this._pointA==e._pointB?this._pointA:this._pointB==e._pointA||this._pointB==e._pointB?this._pointB:null}getEqualPoint(e){return Ut.equalPoint(e,this._pointA)?this._pointA:Ut.equalPoint(e,this._pointB)?this._pointB:null}get pointA(){return this._pointA}get pointB(){return this._pointB}get walkAble(){return(this._edgeMask&li.WalkAble)==li.WalkAble}testMask(e){return(this._edgeMask&e)==e}}class re{endPoint;curPoint;rayA;rayB;rayAPoint;rayBPoint;static RAY_1=new d;static RAY_2=new d;static TEST_RAY=new d;static TEST_RAY_1=new d;static TEST_RAY_2=new d;static CALC_CROSS_POINT=new d;static CALC_CROSS_TEST=new d;cornerPoint;cornerEdge;continuePass(e,t,r){this.resetData(),this.curPoint=e,this.endPoint=t,this.cornerEdge=r}passEdge(e,t,r,i){if((this.rayA==null||this.rayB==null)&&(this.rayA=re.RAY_1,this.rayB=re.RAY_2,this.rayAPoint=e.pointA,this.rayBPoint=e.pointB,this.rayA.setTo(this.rayAPoint.x-this.curPoint.x,0,this.rayAPoint.z-this.curPoint.z),this.rayB.setTo(this.rayBPoint.x-this.curPoint.x,0,this.rayBPoint.z-this.curPoint.z)),i)return this.checkEndPoint(r);if(re.TEST_RAY.setTo(r.x-this.curPoint.x,0,r.z-this.curPoint.z),this.isPointAtCenter(re.TEST_RAY,this.rayA,this.rayB)){this.hasCrossPoint(t.pointA,t.pointB,this.rayAPoint,this.rayA)?(this.rayB.copyFrom(re.TEST_RAY),r instanceof Ut?this.rayBPoint=r:this.rayBPoint=null):(this.rayA.copyFrom(re.TEST_RAY),r instanceof Ut?this.rayAPoint=r:this.rayAPoint=null);var a=t.getAnotherPoint(r);re.TEST_RAY.setTo(a.x-this.curPoint.x,0,a.z-this.curPoint.z),(a==this.rayAPoint||a==this.rayBPoint||this.isPointAtCenter(re.TEST_RAY,this.rayA,this.rayB))&&(this.cornerEdge=t)}else{var o;if(re.TEST_RAY_1.copyFrom(t.pointA),re.TEST_RAY_1.decrementBy(this.curPoint),re.TEST_RAY_2.copyFrom(t.pointB),re.TEST_RAY_2.decrementBy(this.curPoint),re.TEST_RAY_1.y=0,re.TEST_RAY_2.y=0,this.isPointAtCenter(this.rayA,re.TEST_RAY_1,re.TEST_RAY_2)||this.isPointAtCenter(this.rayB,re.TEST_RAY_1,re.TEST_RAY_2)?o=!1:o=!0,o)return this.isPointAtCenter(this.rayA,re.TEST_RAY,this.rayB)?this.cornerPoint=this.rayAPoint:this.cornerPoint=this.rayBPoint,this.cornerEdge.crossPoint=this.cornerPoint,!1}return!0}checkEndPoint(e){return re.TEST_RAY.setTo(e.x-this.curPoint.x,0,e.z-this.curPoint.z),this.isPointAtCenter(re.TEST_RAY,this.rayA,this.rayB)?!0:(this.isPointAtCenter(this.rayA,re.TEST_RAY,this.rayB)?this.cornerPoint=this.rayAPoint:this.cornerPoint=this.rayBPoint,this.cornerEdge.crossPoint=this.cornerPoint,!1)}calcCrossEdge(e,t,r){return this.calcCrossPoint(e.fatPointA,e.fatPointB,t,r)}calcCrossPoint(e,t,r,i){re.CALC_CROSS_POINT.copyFrom(t),re.CALC_CROSS_POINT.decrementBy(e);let a=re.CALC_CROSS_POINT.x*i.z-i.x*re.CALC_CROSS_POINT.z;var o=0;return a!=0&&(o=((e.z-r.z)*i.x-(e.x-r.x)*i.z)/a),o>1?o=1:o<0&&(o=0),re.CALC_CROSS_POINT.scaleBy(o),re.CALC_CROSS_POINT.incrementBy(e),re.CALC_CROSS_POINT.clone()}calcCrossPointOut(e,t,r,i){re.CALC_CROSS_POINT.copyFrom(t),re.CALC_CROSS_POINT.decrementBy(e);var a=((e.z-r.z)*i.x-(e.x-r.x)*i.z)/(re.CALC_CROSS_POINT.x*i.z-i.x*re.CALC_CROSS_POINT.z);return a<=1&&a>=0?null:(re.CALC_CROSS_POINT.scaleBy(a),re.CALC_CROSS_POINT.incrementBy(e),re.CALC_CROSS_POINT.clone())}hasCrossPoint(e,t,r,i){re.CALC_CROSS_TEST.copyFrom(t),re.CALC_CROSS_TEST.decrementBy(e);var a=((e.z-r.z)*i.x-(e.x-r.x)*i.z)/(re.CALC_CROSS_TEST.x*i.z-i.x*re.CALC_CROSS_TEST.z);return a<=1&&a>=0}isPointAtCenter(e,t,r){var i=t.crossProduct(e);if(i.length==0&&e.length<t.length)return!0;var a=r.crossProduct(e);return a.length==0&&e.length<r.length?!0:(i.normalize(),a.normalize(),i.incrementBy(a),i.length<.01)}resetData(){this.cornerEdge=null,this.cornerPoint=null,this.curPoint=null,this.rayA=this.rayB=null,this.rayAPoint=this.rayBPoint=null,re.RAY_1.setTo(0,0,0),re.RAY_2.setTo(0,0,0)}}class Or{_aiRadius=0;_router;_result;_tempPublicEdgeList=new Array;_tempSamePlaneList=new Array;static CROSS_TEST_DIRECTION=new d;constructor(){this._router=new re}searchPath(e,t,r,i=0){return i<=0&&(i=1),this._aiRadius=i*1.5,this.searchEnable(e,t,r)?(this.search(e,t,r),!0):!1}get path(){return this._result}searchEnable(e,t,r){return!(e==null||t==null||r==null||r[0].plane.classifyPoint(e,Va.EPSILON)!=Ei.INTERSECT||r[r.length-1].plane.classifyPoint(t,Va.EPSILON)!=Ei.INTERSECT)}search(e,t,r){this._tempPublicEdgeList.length=0,this._tempSamePlaneList.length=0;var i=0,a=r.length-1,o,n,l,h;for(i=0;i<a;i++)n=r[i].getPublicEdge(r[i+1]),n.crossPoint=null,n.initFatPoints(this._aiRadius),this._tempPublicEdgeList.push(n),o=r[i],h=o.plane,o=r[i+1],l=o.getEdgeAgainstPoint(n),this._tempSamePlaneList.push(h.classifyPoint(l,Va.EPSILON)==Ei.INTERSECT);this._router.continuePass(e,t,this._tempPublicEdgeList[0]),a=this._tempPublicEdgeList.length;var u,c,f,g;for(i=0;i<a;i++)n=this._tempPublicEdgeList[i],o=r[i+1],g=i==a-1,g?l=t:l=o.getEdgeAgainstPoint(n),f=this._router.passEdge(n,this._tempPublicEdgeList[i+1],l,g),f||(u=this._router.cornerPoint,c=this._router.cornerEdge,i=this._tempPublicEdgeList.indexOf(c),this._router.continuePass(u,t,this._tempPublicEdgeList[i+1]));this.pushAllPathPoint2(e,t),this._result.length>=3&&(this.optimusTerminusFat(),this.optimusByRadius());let p=[];for(let A of this._result)p.push(new d().copyFrom(A));this._result=p}optimusTerminusFat(){var e,t,r;r=this._result[1],r instanceof cr&&(e=r),r=this._result[this._result.length-2],r instanceof cr&&(t=r),e&&(this._result[1]=e.scalePoint()),t&&e!=t&&(this._result[this._result.length-2]=t.scalePoint())}pushAllPathPoint2(e,t){var r=this._tempPublicEdgeList.length,i,a;this._result=new Array,this._result.push(e);for(var o=e,n,l,h,u=0;u<r;u++)if(i=this._tempPublicEdgeList[u],l=null,i.crossPoint)l=this.getFatPoint(i,i.crossPoint),l?this._result.push(l):this._result.push(i.crossPoint),o=i.crossPoint;else{a=null,n=null;for(var c=u+1;c<r&&(a=this._tempPublicEdgeList[c],n=a.crossPoint,!n);c++);n==null&&(n=t),l=this.getFatPoint(i,n),l?this._result.push(l):(n==o?h=n.clone():(Or.CROSS_TEST_DIRECTION.setTo(n.x-o.x,0,n.z-o.z),h=this._router.calcCrossEdge(i,o,Or.CROSS_TEST_DIRECTION)),this._result.push(h))}this._result.push(t)}optimusByRadius(){var e=new Array;e.length=this._result.length;var t=this._result.length-2,r,i,a,o,n,l,h,u,c,f,g,p,A;for(A=0;A<t;A++)h=u=c=null,o=n=l=null,g=!1,p=null,r=this._result[A],i=this._result[A+1],a=this._result[A+2],r instanceof cr&&(o=r),i instanceof cr&&(n=i),a instanceof cr&&(l=a),o&&(h=o.ownerPoint),n&&(u=n.ownerPoint),l&&(c=l.ownerPoint),h&&u&&h==u&&u!=c&&(g=!0),c&&u&&c==u&&h!=u&&(g=!0),g&&(Or.CROSS_TEST_DIRECTION.copyFrom(r),Or.CROSS_TEST_DIRECTION.decrementBy(a),f=n.ownerEdge,g=this._router.hasCrossPoint(f.pointA,f.pointB,a,Or.CROSS_TEST_DIRECTION),g&&(p=this._router.calcCrossPointOut(u,i,a,Or.CROSS_TEST_DIRECTION)),p&&(e[A+1]=p))}getFatPoint(e,t){if(e==null)return null;var r;t instanceof cr&&(r=t);var i;return r?i=r.ownerPoint:i=e.getEqualPoint(t),i==null?null:(r=e.getFatPoint(i),r)}}class Fd extends d{_id=0;_plane;_points=new Array;_edges=new Array;_neibourTriangles=new Na;_pointAgainstEdge=new Na;_edgeAgainstPoint=new Na;_mask=0;_aabbBox;f=0;gg=0;h=0;parent;costMultiplier=1;openId=0;closeId=0;get aabb(){return this._aabbBox}initAABB(){this._aabbBox=new vt,this._aabbBox.addPoint(this._points[0]),this._aabbBox.addPoint(this._points[1]),this._aabbBox.addPoint(this._points[2])}calcGlobalQuadAABB(){}get isTriangle(){return!0}constructor(e,t,r,i){super(0,0,0,0),this._id=e,this._mask=li.WalkAble,this._edges.push(t,r,i);var a;for(a of this._edges)this._points.indexOf(a.pointA)==-1&&this._points.push(a.pointA),this._points.indexOf(a.pointB)==-1&&this._points.push(a.pointB);this.x=(this._points[0].x+this._points[1].x+this._points[2].x)/3,this.y=(this._points[0].y+this._points[1].y+this._points[2].y)/3,this.z=(this._points[0].z+this._points[1].z+this._points[2].z)/3,this._plane=new Cd,this._plane.fromPoints(this._points[0],this._points[1],this._points[2]),this._plane.normalize(),this.genarateAgainstData(),this.initAABB()}genarateAgainstData(){var e,t;for(e of this._edges)for(t of this._points)e.pointA!=t&&e.pointB!=t&&(this._edgeAgainstPoint.put(e,t),this._pointAgainstEdge.put(t,e))}get id(){return this._id}get plane(){return this._plane}get points(){return this._points}addNeibour(e,t){if(this._edges.indexOf(e)>=0)this._neibourTriangles.put(e,t);else throw new Error("the edge is not in triangle!!!")}getNeibourTriangles(e=null,t=1,r=1){e=e||new Array,e.length=0;var i,a,o=this._neibourTriangles.getKeys(),n;for(n of o)a=n,a.testMask(t)&&(i=this._neibourTriangles.getValueByKey(a),i.testMask(r)&&e.push(i));return e}getEdges(e=null,t=1){e=e||new Array,e.length=0;var r;for(r of this._edges)r.testMask(t)&&e.push(r);return e}get walkAble(){return this.testMask(li.WalkAble)}get edges(){return this._edges}testMask(e){return(this._mask&e)==e}getEdgeAgainstPoint(e){return this._edgeAgainstPoint.getValueByKey(e)}getPointAgainstEdge(e){return this._pointAgainstEdge.getValueByKey(e)}getPublicEdge(e){if(e&&e!=this){var t=this._neibourTriangles.getKeys(),r;for(r of t)if(this._neibourTriangles.getValueByKey(r)==e)return r}return null}loopPublicEdge(e){var t,r;if(e&&e!=this){for(t of this._edges)for(r of e._edges)if(t==r)return t}return null}randomPoint(){var e=this._points[2].subtract(this._points[0]);e.scaleBy(Math.random()),e.incrementBy(this._points[0]);var t=this._points[1].subtract(e);return t.scaleBy(Math.random()),t.incrementBy(e),t}}class o0{_nav3dPoints;_nav3dEdges;_nav3dTriangles;_path;_edgesDict;_nav3dAstar;_nav3dFunnel;_terrainQuad;_triangleList;get edges(){return this._nav3dEdges}get points(){return this._nav3dPoints}get path(){return this._path}get triangles(){return this._nav3dTriangles}constructor(e,t){this._nav3dPoints=new Array,this._nav3dEdges=new Array,this._nav3dTriangles=new Array,this._edgesDict=new Na,this.initPoints(e),this.initEdgesAndTriangles(t),this.createConnections(),this._nav3dAstar=new _d,this._nav3dFunnel=new Or,this._terrainQuad=new Wf(8,128),this._terrainQuad.createQuadTree(this._nav3dTriangles)}getTriangleAtPoint(e,t=5){return this._terrainQuad.getTriangleAtPoint(e,t)}findPath(e,t,r=5){this._path=null,this._triangleList=null;var i=this.getTriangleAtPoint(e,10),a=this.getTriangleAtPoint(t,10),o=this._nav3dAstar.findPath(this,i,a);return o?(this._triangleList=this._nav3dAstar.channel,o=this._nav3dFunnel.searchPath(e,t,this._triangleList,r),this._path=this._nav3dFunnel.path,o):!1}initPoints(e){for(var t,r,i=e.length,a=0;a<i;a++)t=e[a],r=new Ut(a,t.x,t.y,t.z),this._nav3dPoints.push(r)}initEdgesAndTriangles(e){for(var t,r,i,a,o,n=e.length,l=0;l<n;l++)t=e[l],r=this.tryCreateEdge(t[0],t[1]),i=this.tryCreateEdge(t[1],t[2]),a=this.tryCreateEdge(t[2],t[0]),!(r==null||i==null||a==null)&&(o=new Fd(l,r,i,a),this._nav3dTriangles.push(o))}tryCreateEdge(e,t){if(e==t)throw new Error("edge point index error!!!");if(e>t){var r=e;e=t,t=r}var i=this._edgesDict.getValueByKey(e+"_"+t);return i==null&&(i=new dr(this._nav3dPoints[e],this._nav3dPoints[t]),this._nav3dEdges.push(i),this._edgesDict.put(e+"_"+t,i)),i}createConnections(){for(var e=this._nav3dTriangles.length,t=this._nav3dTriangles.length,r,i,a,o,n=0;n<e;n++){r=this._nav3dTriangles[n];for(a of r.edges)a.addTriangleOwners(r);for(var l=0;l<t;l++)i=this._nav3dTriangles[l],r!=i&&(o=r.loopPublicEdge(i),o&&(r.addNeibour(o,i),i.addNeibour(o,r)))}}}class Tn{x;y;setTo(e,t){this.x=e,this.y=t}equals(e,t){return e==this.x&&t==this.y}equalPoint(e){return this.equals(e.x,e.y)}get length(){return Math.sqrt(this.x*this.x+this.y*this.y)}clone(){var e=new Tn;return e.setTo(this.x,this.y),e}normalize(){var e=length;e!=0&&this.setTo(this.x/e,this.y/e)}}class Qr extends Ne{width;height;depth;constructor(e=1,t=1,r=1){super(),this.width=e,this.height=t,this.depth=r,this.initVertex()}initVertex(){let e=this.width/2,t=this.height/2,r=this.depth/2;this.bounds=new Re(d.ZERO.clone(),new d(this.width,this.height,this.depth));let i=new Float32Array([-e,t,r,e,t,r,e,t,-r,-e,t,-r,-e,t,r,e,t,-r,e,-t,r,-e,-t,r,-e,-t,-r,e,-t,-r,e,-t,r,-e,-t,-r,-e,-t,r,-e,t,r,-e,t,-r,-e,-t,-r,-e,-t,r,-e,t,-r,e,t,r,e,-t,r,e,-t,-r,e,t,-r,e,t,r,e,-t,-r,e,t,r,-e,t,r,-e,-t,r,-e,-t,r,e,-t,r,e,t,r,e,-t,-r,-e,-t,-r,-e,t,-r,e,t,-r,e,-t,-r,-e,t,-r]),a=new Float32Array([0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1]),o=new Float32Array([1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0]),n=[0,2,1,3,5,4,6,8,7,9,11,10,12,14,13,15,17,16,18,20,19,21,23,22,24,26,25,27,29,28,30,32,31,33,35,34],l=new Uint16Array(n.reverse());this.setIndices(l),this.setAttribute(V.position,i),this.setAttribute(V.normal,a),this.setAttribute(V.uv,o),this.setAttribute(V.TEXCOORD_1,o),this.addSubGeometry({indexStart:0,indexCount:n.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class yd extends Ne{radiusTop;radiusBottom;height;radialSegments;heightSegments;openEnded;thetaStart;thetaLength;constructor(e=1,t=1,r=1,i=8,a=8,o=!1,n=0,l=Math.PI*2){super(),this.radiusTop=e,this.radiusBottom=t,this.height=r,this.radialSegments=i,this.heightSegments=a,this.openEnded=o,this.thetaStart=n,this.thetaLength=l,this.instanceID=It(),this.buildGeometry()}addGroup(e,t,r){this.addSubGeometry({indexStart:e,indexCount:t,vertexStart:e,vertexCount:0,firstStart:0,index:r,topology:0})}buildGeometry(){const e=this;this.radialSegments=Math.floor(this.radialSegments),this.heightSegments=Math.floor(this.heightSegments);const t=[],r=[],i=[],a=[];let o=0;const n=[],l=this.height/2;let h=0;p(),this.openEnded===!1&&(this.radiusTop>0&&A(!0),this.radiusBottom>0&&A(!1));let u=new Float32Array(t),c=new Float32Array(r),f=new Float32Array(i),g=new Uint16Array(a);this.setAttribute(V.position,u),this.setAttribute(V.normal,c),this.setAttribute(V.uv,f),this.setAttribute(V.TEXCOORD_1,f),this.setIndices(g);function p(){const U=new d,x=new d;let B=0;const S=(e.radiusBottom-e.radiusTop)/e.height;for(let C=0;C<=e.heightSegments;C++){const _=[],y=C/e.heightSegments,b=y*(e.radiusBottom-e.radiusTop)+e.radiusTop;for(let w=0;w<=e.radialSegments;w++){const Q=w/e.radialSegments;let E=Q*e.thetaLength+e.thetaStart;w==e.radialSegments&&Math.abs(e.thetaLength-e.thetaStart)==Math.PI*2&&(E=0);const M=Math.sin(E),z=Math.cos(E);x.x=b*M,x.y=-y*e.height+l,x.z=b*z,t.push(x.x,x.y,x.z),U.set(M,S,z).normalize(),r.push(U.x,U.y,U.z),i.push(Q,1-y),_.push(o++)}n.push(_)}for(let C=0;C<e.radialSegments;C++)for(let _=0;_<e.heightSegments;_++){const y=n[_][C],b=n[_+1][C],w=n[_+1][C+1],Q=n[_][C+1];a.push(y,b,Q),a.push(b,w,Q),B+=6}e.addGroup(h,B,0),h+=B}function A(U){const x=o,B=new K,S=new d;let C=0;const _=U===!0?e.radiusTop:e.radiusBottom,y=U===!0?1:-1;for(let w=1;w<=e.radialSegments;w++)t.push(0,l*y,0),r.push(0,y,0),i.push(.5,.5),o++;const b=o;for(let w=0;w<=e.radialSegments;w++){const E=w/e.radialSegments*e.thetaLength+e.thetaStart,M=Math.cos(E),z=Math.sin(E);S.x=_*z,S.y=l*y,S.z=_*M,t.push(S.x,S.y,S.z),r.push(0,y,0),B.x=M*.5+.5,B.y=z*.5*y+.5,i.push(B.x,B.y),o++}for(let w=0;w<e.radialSegments;w++){const Q=x+w,E=b+w;U===!0?a.push(E,E+1,Q):a.push(E+1,E,Q),C+=3}e.addGroup(h,C,U===!0?1:2),h+=C}}}class bd extends Ne{radius;tube;radialSegments;tubularSegments;constructor(e=.4,t=.1,r=32,i=32){super(),this.radius=e,this.tube=t,this.radialSegments=r,this.tubularSegments=i,this.initVertex()}initVertex(){const e=2*Math.PI,t=this.radius,r=this.tube,i=this.radialSegments,a=this.tubularSegments;this.bounds=new Re(d.ZERO.clone(),new d(t*2,r*2,t*2));var o=(i+1)*(a+1);let n=new Float32Array(o*3),l=new Float32Array(o*3),h=new Float32Array(o*2),u=new Uint16Array(i*a*2*3),c=0,f=0,g=0,p=0;for(let A=0;A<=i;A++)for(let U=0;U<=a;U++){const x=U/a,B=A/i,S=x*e,C=B*Math.PI*2;if(n[c++]=(t+r*Math.cos(C))*Math.sin(S),n[c++]=r*Math.sin(C),n[c++]=(t+r*Math.cos(C))*Math.cos(S),l[f++]=Math.sin(S)*Math.cos(C),l[f++]=Math.sin(C),l[f++]=Math.cos(S)*Math.cos(C),h[g++]=x,h[g++]=B,U<a&&A<i){const _=a+1,y=_*A+U,b=_*(A+1)+U,w=_*(A+1)+U+1,Q=_*A+U+1;u[p++]=y,u[p++]=Q,u[p++]=b,u[p++]=Q,u[p++]=w,u[p++]=b}}this.setIndices(u),this.setAttribute(V.position,n),this.setAttribute(V.normal,l),this.setAttribute(V.uv,h),this.setAttribute(V.TEXCOORD_1,h),this.addSubGeometry({indexStart:0,indexCount:u.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class n0 extends Ne{segment;row=0;constructor(e){super(),this.segment=e,this.buildGeometry()}buildGeometry(){this.row=this.segment+1;let e=new Uint32Array(this.segment*6),t=new Float32Array(this.row*3*2),r=new Float32Array(this.row*3*2),i=new Float32Array(this.row*2*2);for(let a=0;a<this.row;a++){t[a*3*2+0]=0,t[a*3*2+1]=0,t[a*3*2+2]=0,t[a*3*2+3]=0,t[a*3*2+4]=0,t[a*3*2+5]=0,r[a*3*2+0]=0,r[a*3*2+1]=0,r[a*3*2+2]=1,r[a*3*2+3]=0,r[a*3*2+4]=0,r[a*3*2+5]=1,i[a*2*2+0]=0,i[a*2*2+1]=a/this.segment,i[a*2*2+2]=1,i[a*2*2+3]=a/this.segment;let o=a*2,n=o,l=o+1,h=o+2,u=o+3;e[a*6+0]=n,e[a*6+1]=l,e[a*6+2]=h,e[a*6+3]=l,e[a*6+4]=u,e[a*6+5]=h}this.setIndices(e),this.setAttribute(V.position,t),this.setAttribute(V.normal,r),this.setAttribute(V.uv,i),this.setAttribute(V.TEXCOORD_1,i),this.addSubGeometry({indexStart:0,indexCount:e.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class l0 extends Ne{faceCount=0;constructor(e){super(),this.faceCount=e,this.buildGeometry()}buildGeometry(){let e=new Uint32Array(this.faceCount*3),t=new Float32Array(this.faceCount*3*3),r=new Float32Array(this.faceCount*3*3),i=new Float32Array(this.faceCount*3*2),a=new Float32Array(this.faceCount*3*1);for(let o=0;o<this.faceCount;o++){let n=o*3+0,l=o*3+1,h=o*3+2;e[n]=n,e[l]=l,e[h]=h}this.setIndices(e),this.setAttribute(V.position,t),this.setAttribute(V.normal,r),this.setAttribute(V.uv,i),this.setAttribute(V.TEXCOORD_1,i),this.setAttribute(V.vIndex,a),this.addSubGeometry({indexStart:0,indexCount:e.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class h0 extends $e{create(e,t,r,i=!0){let a=R.device;const o=e*4*4;this.format=X.rgba32float,this.createTextureDescriptor(e,t,1,this.format);const l=a.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});a.queue.writeBuffer(l,0,r);const h=F.beginCommandEncoder();h.copyBufferToTexture({buffer:l,bytesPerRow:o},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(h),i&&(this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="unfilterable-float"),this.gpuSampler=a.createSampler({})}fromBuffer(e,t,r){let i=R.device;const a=e*4*4;this.format=X.rgba32float,this.mipmapCount=1,this.createTextureDescriptor(e,t,this.mipmapCount,this.format);const o=F.beginCommandEncoder();return o.copyBufferToTexture({buffer:r,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(o),this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="unfilterable-float",this.gpuSampler=i.createSampler({}),this}}class u0 extends Us{_internalTexture;_minSize=32;_skyColor;constructor(e){super(),this._skyColor=e,this._internalTexture=new Co;let t=[];return m.res.fillColor(t,this._minSize,this._minSize,this.color.r,this.color.g,this.color.b,this.color.a),this._internalTexture.create(this._minSize,this._minSize,t,!1),this.createFromTexture(this._minSize,this._internalTexture),this}changeColor(e){return this._skyColor=e,m.res.fillColor(this._internalTexture.floatArray,this._minSize,this._minSize,this.color.r,this.color.g,this.color.b,this.color.a),this._internalTexture.updateTexture(this._minSize,this._minSize,this._internalTexture.floatArray,!1),this._faceData.uploadTexture(0,this._internalTexture),this}get color(){return this._skyColor}set color(e){this.changeColor(e)}}class c0 extends q{length=100;thickness=.1;constructor(e,t=.1){super(),this.length=e,this.thickness=t,this.init()}init(){let e=new q,t=new q,r=new q,i=new Qr(2,2,2),a=new Qr(2,2,2),o=new Qr(2,2,2),n=new Ft;n.baseColor=new P(1,0,0);let l=new Ft;l.baseColor=new P(0,1,0);let h=new Ft;h.baseColor=new P(0,0,1);let u=e.addComponent(j),c=t.addComponent(j),f=r.addComponent(j);u.geometry=i,u.material=n,u.castShadow=!1,c.geometry=a,c.material=l,c.castShadow=!1,f.geometry=o,f.material=h,f.castShadow=!1,e.localScale=new d(this.length,this.thickness,this.thickness),e.x=this.length,t.localScale=new d(this.thickness,this.length,this.thickness),t.y=this.length,r.localScale=new d(this.thickness,this.thickness,this.length),r.z=this.length,this.addChild(e),this.addChild(t),this.addChild(r)}}class f0{static merge(e,t,r){}static mergeNumber(e,t,r){let i=r||new Ne,a=e.getAttribute(V.position).data.length/3,o=new Float32Array(a*t);for(const u of e.vertexAttributeMap){let c=u[1].attribute;if(c==V.indices)continue;let f=e.getAttribute(c).data,g=f.length,p=new Float32Array(g*t);for(let A=0;A<t;A++){p.set(f,g*A);for(let U=0;U<a;U++)o[a*A+U]=A}i.setAttribute(c,p)}i.setAttribute(V.vIndex,o);let n=e.getAttribute(V.indices).data,l=n.length,h=new Uint32Array(n.length*t);for(let u=0;u<t;u++)for(let c=0;c<l;c++){let f=u*a,g=u*l;const p=n[c]+f;h[g+c]=p}return i.setIndices(h),i.addSubGeometry({indexStart:0,indexCount:h.length,vertexStart:0,index:0,vertexCount:0,firstStart:0,topology:0}),i}static generateNormal(){}static generateTangent(){}static packUV(){}}class d0 extends q{size=100;divisions=10;constructor(e=100,t=10){super(),this.size=e,this.divisions=t,this.buildGeometry(),this.addAxis()}buildGeometry(){const e=[],t=[],r=this.size/this.divisions,i=this.size/2,a=this.divisions/2;for(let h=0,u=-i;h<=this.divisions;h++,u+=r)h!==a&&(e.push(-i,0,u,i,0,u),e.push(u,0,-i,u,0,i));for(let h=0;h<e.length/3;h+=2)t.push(h,h+1);let o=new Ne;o.setIndices(t.length>Uint16Array.length?new Uint32Array(t):new Uint16Array(t)),o.setAttribute(V.position,new Float32Array(e)),o.addSubGeometry({indexStart:0,indexCount:t.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let n=new Ft;n.topology="line-list",n.baseColor=new P(1,1,1,.15),n.blendMode=ae.ADD,n.castReflection=!1;let l=this.addComponent(j);l.geometry=o,l.material=n}addAxis(){const e=this.size/2;let t=new Float32Array([-e,0,0,e,0,0]),r=new Uint16Array([0,1,2,3]),i=new Ne;i.setIndices(r),i.setAttribute(V.position,t),i.addSubGeometry({indexStart:0,indexCount:r.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});{let a=new q,o=a.addComponent(j);o.geometry=i;let n=o.material=new Ft;n.baseColor=new P(1,0,0,.5),n.blendMode=ae.ADD,n.castReflection=!1,n.topology="line-list",this.addChild(a)}{let a=new q;a.rotationY=90;let o=a.addComponent(j);o.geometry=i;let n=o.material=new Ft;n.baseColor=new P(0,1,0,.5),n.blendMode=ae.ADD,n.castReflection=!1,n.topology="line-list",this.addChild(a)}}}class g0{static color_temperature_to_rgb(e){e<1e3?e=1e3:e>4e4&&(e=4e4);let t=e/100,r=this.get_red(t),i=this.get_green(t),a=this.get_blue(t);return new P(r/255,i/255,a/255,1)}static get_red(e){if(e<=66)return 255;let t=329.698727446*Math.pow(e-60,-.1332047592);return this.bound(t)}static get_green(e){let t=0;return e<=66?t=99.4708025861*Math.log(e)-161.1195681661:t=288.1221695283*Math.pow(e-60,-.0755148492),this.bound(t)}static get_blue(e){let t=0;return e>=66?255:e<=19?0:(t=138.5177312231*Math.log(e-10)-305.0447927307,this.bound(t))}static bound(e,t=0,r=255){let i=Math.max(e,t);return Math.min(i,r)}}class p0{static boxGeo;static planeGeo;static sphere;static material;static materialMap;static initHeap(){this.boxGeo||(this.boxGeo=new Qr),this.planeGeo||(this.planeGeo=new Qi(1,1,1,1,d.UP)),this.sphere||(this.sphere=new Ri(1,35,35)),this.material||(this.material=new ur),this.materialMap||(this.materialMap=new Map)}static get CubeMesh(){return this.initHeap(),this.boxGeo}static get SphereMesh(){return this.initHeap(),this.sphere}static GetCube(){this.initHeap();let e=new q,t=e.addComponent(j);return t.geometry=this.boxGeo,t.material=this.material.clone(),t.castShadow=!0,e}static GetMaterial(e){let t=this.materialMap.get(e);return t||(t=new ur,t.baseMap=e,this.materialMap.set(e,t)),t.clone()}static GetPlane(e){this.initHeap();let t=new q,r=t.addComponent(j);r.geometry=this.planeGeo;let i=this.GetMaterial(e);return i.blendMode=ae.ADD,i.castShadow=!1,r.material=i,r.castGI=!1,r.castReflection=!1,t}static GetSingleCube(e,t,r,i,a,o){this.initHeap();let n=new ur;n.roughness=.5,n.metallic=.1,n.baseColor=new P(i,a,o,1);let l=new q,h=l.addComponent(j);return h.castGI=!0,h.geometry=new Qr(e,t,r),h.material=n,l}static GetSingleSphere(e,t,r,i){this.initHeap();let a=new ur;a.baseColor=new P(t,r,i,1);let o=new q,n=o.addComponent(j);return n.castGI=!0,n.geometry=new Ri(e,20,20),n.material=a,o}static get Sphere(){this.initHeap();let e=new q,t=e.addComponent(j);return t.geometry=this.sphere,t.material=this.material,e}static GetSingleCube2(e,t=10){this.initHeap();let r=new q,i=r.addComponent(j);return i.castShadow=!1,i.geometry=new Qr(t,t,t),i.material=e,r}static GetPointLight(e,t,r,i,a,o,n=1,l=!0){let h=new q,u=h.addComponent(ji);u.lightColor=new P(i,a,o,1),u.intensity=n,u.range=r,u.at=8,u.radius=0,u.castShadow=l,h.localPosition=e,h.localRotation=t;let c=this.GetSingleSphere(.1,1,1,1);return h.addChild(c),u}}var T=(s=>(s[s.X=0]="X",s[s.Y=1]="Y",s[s.Z=2]="Z",s[s.XY=3]="XY",s[s.XZ=4]="XZ",s[s.YZ=5]="YZ",s[s.XYZ=6]="XYZ",s[s.MAX=7]="MAX",s[s.NONE=8]="NONE",s))(T||{}),qt=(s=>(s[s.Local=0]="Local",s[s.Global=1]="Global",s))(qt||{});class ws extends Pe{mAxis;mAxisColor;mContainer;mAxisMaterial;mAxisCollider;constructor(){super(),this._enable=!1,this.mAxis=new Array(T.MAX),this.mAxisColor=new Array(T.MAX),this.mAxisMaterial=new Array(T.MAX),this.mAxisCollider=new Array(T.MAX)}get target(){return this.object3D.target}get mX(){return this.object3D.mXObj}get mY(){return this.object3D.mYObj}get mZ(){return this.object3D.mZObj}get transformSpaceMode(){return this.object3D.transformSpaceMode}init(e){this.mContainer=new q;let t=new Ft;t.baseColor=new P(1,0,0),t.depthCompare=rt.always,this.mAxisColor[T.X]=t.baseColor,this.mAxisMaterial[T.X]=t;let r=new Ft;r.baseColor=new P(0,1,0),r.depthCompare=rt.always,this.mAxisColor[T.Y]=r.baseColor,this.mAxisMaterial[T.Y]=r;let i=new Ft;i.baseColor=new P(0,0,1),i.depthCompare=rt.always,this.mAxisColor[T.Z]=i.baseColor,this.mAxisMaterial[T.Z]=i;let a=this.createCustomAxis(T.X),o=this.createCustomAxis(T.Y),n=this.createCustomAxis(T.Z);this.mContainer.addChild(this.mAxis[T.X]=a),this.mContainer.addChild(this.mAxis[T.Y]=o),this.mContainer.addChild(this.mAxis[T.Z]=n),this.mAxisCollider[T.X]=a.getComponent(Kt),this.mAxisCollider[T.Y]=o.getComponent(Kt),this.mAxisCollider[T.Z]=n.getComponent(Kt)}start(){}onEnable(e){this.object3D.addChild(this.mContainer),this.reset()}onDisable(e){this.object3D.removeChild(this.mContainer)}reset(){switch(this.transformSpaceMode){case qt.Local:{let t=I.help_matrix_0.copyFrom(this.mX.transform.worldMatrix).decompose();this.object3D.scaleX=1,this.object3D.scaleY=1,this.object3D.scaleZ=1,this.object3D.rotationX=t[1].x,this.object3D.rotationY=t[1].y,this.object3D.rotationZ=t[1].z,this.object3D.x=t[0].x,this.object3D.y=t[0].y,this.object3D.z=t[0].z}break;case qt.Global:{this.object3D.scaleX=1,this.object3D.scaleY=1,this.object3D.scaleZ=1,this.object3D.rotationX=0,this.object3D.rotationY=0,this.object3D.rotationZ=0;const e=this.mX.transform.worldPosition;this.object3D.x=e.x,this.object3D.y=e.y,this.object3D.z=e.z}break}}pickAxis(){let r=this.object3D.transform.scene3D.view.camera.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY),i,a;for(let o=0;o<=T.MAX;o++){let n=this.mAxisCollider[o];if(n&&(i=n.rayPick(r),i&&(!a||a.distance>i.distance||o==T.XYZ)&&(a={axis:o,obj:n.object3D,distance:i.distance,intersectPoint:i.intersectPoint},o==T.XYZ)))break}return a}currentAxis=T.NONE;beginPoint=new d;beginMousePos=new d;currentPoint=new d;onMouseDown(e){if(e.mouseCode!=_s.MOUSE_LEFT)return;let t=this.pickAxis();if(!t)return;this.currentAxis=t.axis,e.stopImmediatePropagation();const i=this.object3D.transform.scene3D.view.camera;let a=i.worldToScreenPoint(this.mX.transform.worldPosition),o=i.screenPointToWorld(m.inputSystem.mouseX,m.inputSystem.mouseY,a.z);this.beginPoint.copyFrom(o),this.beginMousePos.x=m.inputSystem.mouseX,this.beginMousePos.y=m.inputSystem.mouseY}lastMoveObj;lastMoveAxis;onMouseMove(e){if(this.currentAxis==T.NONE){let t=this.lastMoveObj.getComponent(j).material;this.lastMoveObj&&"baseColor"in t&&(t.baseColor=this.mAxisColor[this.lastMoveAxis],this.lastMoveObj=null,this.lastMoveAxis==T.XYZ&&(this.mAxis[T.X].getComponent(j).material.setUniformColor("baseColor",this.mAxisColor[T.X]),this.mAxis[T.Y].getComponent(j).material.setUniformColor("baseColor",this.mAxisColor[T.Y]),this.mAxis[T.Z].getComponent(j).material.setUniformColor("baseColor",this.mAxisColor[T.Z])),this.lastMoveAxis=T.NONE);let r=this.pickAxis();if(!r)return;t.setUniformColor("baseColor",new P(1,1,1)),this.lastMoveObj=r.obj,this.lastMoveAxis=r.axis,this.lastMoveAxis==T.XYZ&&(this.mAxis[T.X].getComponent(j).material.setUniformColor("baseColor",new P(1,1,1)),this.mAxis[T.Y].getComponent(j).material.setUniformColor("baseColor",new P(1,1,1)),this.mAxis[T.Z].getComponent(j).material.setUniformColor("baseColor",new P(1,1,1)))}else{const r=this.object3D.transform.scene3D.view.camera;let i=r.worldToScreenPoint(this.mX.transform.worldPosition),a=r.screenPointToWorld(m.inputSystem.mouseX,m.inputSystem.mouseY,i.z);this.currentPoint.copyFrom(a);let o=a.subtract(this.beginPoint);d.HELP_0.set(m.inputSystem.mouseX,m.inputSystem.mouseY,0);let n=d.distance(d.HELP_0,this.beginMousePos);switch(this.beginMousePos.copyFrom(d.HELP_0),this.transformSpaceMode){case qt.Local:this.applyLocalTransform(this.currentAxis,o,n);break;case qt.Global:this.applyGlobalTransform(this.currentAxis,o,n);break}this.beginPoint.copyFrom(a),this.reset()}}onMouseUp(e){e.mouseCode==_s.MOUSE_LEFT&&(this.currentAxis=T.NONE,this.reset())}onUpdate(e){let r=d.distance(e.camera.transform.worldPosition,this.object3D.transform.worldPosition)/100;if(this.mContainer.scaleX=this.mContainer.scaleY=this.mContainer.scaleZ=r,this.mX){const i=this.mX.transform.worldPosition;this.object3D.x=i.x,this.object3D.y=i.y,this.object3D.z=i.z}}applyLocalTransform(e,t,r){console.warn("not imp")}applyGlobalTransform(e,t,r){console.warn("not imp")}createCustomAxis(e){return this.createAxis(e)}createAxis(e){let t=0,r=0,i=0;switch(e){case T.X:t=1;break;case T.Y:r=1;break;case T.Z:i=1;break}let a=.4+t*20,o=.4+r*20,n=.4+i*20,l=new q;l.x=a*.5,l.y=o*.5,l.z=n*.5;let h=l.addComponent(j);h.geometry=new Qr(a,o,n),h.material=this.mAxisMaterial[e];let u=l.addComponent(Kt),c=new ra;return c.setFromCenterAndSize(new d(0,0,0),new d(a+1,o+1,n+1)),u.shape=c,l}}class Qd extends ws{init(e){super.init(e);let t=new Ft;t.doubleSide=!0,t.baseColor=new P(.9,.9,.9),t.depthCompare=rt.always,this.mAxisColor[T.XYZ]=t.baseColor,this.mAxisMaterial[T.XYZ]=t;let r=new q,i=r.addComponent(j);i.geometry=new Qr(2,2,2),i.material=this.mAxisMaterial[T.XYZ];let a=r.addComponent(Kt),o=new ra;o.setFromCenterAndSize(new d(0,0,0),new d(2,2,2)),a.shape=o,this.mContainer.addChild(this.mAxis[T.XYZ]=r),this.mAxisCollider[T.XYZ]=r.getComponent(Kt)}applyLocalTransform(e,t,r){switch(this.currentAxis){case T.XYZ:{let i=0;Math.abs(t.x)>Math.abs(t.y)?Math.abs(t.x)>Math.abs(t.z)?i=t.x:i=t.z:i=t.y,this.mX.scaleX+=i,this.mX.scaleY+=i,this.mX.scaleZ+=i}break;default:this.mX.transform.worldMatrix.transformVector(t,t),(this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ)&&(this.mX.scaleX=Math.abs(this.mX.scaleX+t.x)),(this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ)&&(this.mX.scaleY=Math.abs(this.mX.scaleY+t.y)),(this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ)&&(this.mX.scaleZ=Math.abs(this.mX.scaleZ+t.z));break}}applyGlobalTransform(e,t,r){let i=d.HELP_0;i.set(0,0,0),(this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ)&&(i.x=t.x),(this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ)&&(i.y=t.y),(this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ)&&(i.z=t.z),this.mX.transform.worldMatrix.transformVector(i,d.HELP_1),this.mX.scaleX+=d.HELP_1.x,this.mX.scaleY+=d.HELP_1.y,this.mX.scaleZ+=d.HELP_1.z}createCustomAxis(e){let t=super.createAxis(e),r=this.createBox(e);return t.addChild(r),t}createBox(e){let t=0,r=0,i=0,a=new q;switch(e){case T.X:t=1,a.rotationZ=-90;break;case T.Y:r=1;break;case T.Z:i=1,a.rotationX=90;break}let o=.2+t*20,n=.2+r*20,l=.2+i*20;a.x=o*.5,a.y=n*.5,a.z=l*.5;let h=a.addComponent(j);return h.geometry=new Qr(2,2,2),h.material=this.mAxisMaterial[e],a}}var tt=(s=>(s[s.Scale=0]="Scale",s[s.Rotation=1]="Rotation",s[s.Translation=2]="Translation",s[s.NONE=3]="NONE",s))(tt||{});class Rd extends ws{applyLocalTransform(e,t,r){if(this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ,this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ){I.help_matrix_0.copyFrom(this.mX.transform.worldMatrix),I.help_matrix_1.identity(),I.help_matrix_1.createByRotation(1,d.Y_AXIS),I.help_matrix_2.multiplyMatrices(I.help_matrix_1,I.help_matrix_0),I.help_matrix_2.invert(),I.help_matrix_1.multiplyMatrices(I.help_matrix_2,I.help_matrix_0);let i=I.help_matrix_1.decompose();this.mX.rotationX+=i[1].x,this.mY.rotationY+=i[1].y,this.mZ.rotationZ+=i[1].z}this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ}getAngle(){const t=this.object3D.transform.scene3D.view.camera,r=this.mZ.transform.worldPosition;if(t.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY),this.currentAxis==T.X){let i=t.worldToScreenPoint(r);d.HELP_1.set(i.x,i.y,0),d.HELP_2.set(m.inputSystem.mouseX,m.inputSystem.mouseY,0);let a=d.HELP_2.subtract(d.HELP_1),o=d.getAngle(d.X_AXIS,a);return a.y>0&&(o=360-o),t.transform.worldPosition.x-r.x>0&&(o=360-o),o}if(this.currentAxis==T.Y){let i=t.worldToScreenPoint(r);d.HELP_1.set(i.x,i.y,0),d.HELP_2.set(m.inputSystem.mouseX,m.inputSystem.mouseY,0);let a=d.HELP_2.subtract(d.HELP_1),o=d.getAngle(d.X_AXIS,a);return a.y>0&&(o=360-o),t.transform.worldPosition.y-r.y>0&&(o=360-o),o}if(this.currentAxis==T.Z){let i=t.worldToScreenPoint(r);d.HELP_1.set(i.x,i.y,0),d.HELP_2.set(m.inputSystem.mouseX,m.inputSystem.mouseY,0);let a=d.HELP_2.subtract(d.HELP_1),o=d.getAngle(d.X_AXIS,a);return a.y>0&&(o=360-o),t.transform.worldPosition.z-r.z>0&&(o=360-o),o}return 0}mLastAngle=0;applyGlobalTransform(e,t,r){if(this.currentAxis==T.X||this.currentAxis==T.Y||this.currentAxis==T.Z){let i=this.getAngle();switch(I.help_matrix_0.identity(),this.currentAxis){case T.X:I.help_matrix_0.createByRotation(this.mLastAngle-i,d.X_AXIS);break;case T.Y:I.help_matrix_0.createByRotation(this.mLastAngle-i,d.Y_AXIS);break;case T.Z:I.help_matrix_0.createByRotation(this.mLastAngle-i,d.Z_AXIS);break}I.help_matrix_1.copyFrom(this.mX.transform.worldMatrix),I.help_matrix_1.append(I.help_matrix_0),this.mX.parent&&(I.help_matrix_2.copyFrom(this.mX.parent.worldMatrix),I.help_matrix_2.invert(),I.help_matrix_1.multiply(I.help_matrix_2));let o=I.help_matrix_1.decompose(ir.QUATERNION)[1];Z.HELP_0.set(o.x,o.y,o.z,o.w),this.mLastAngle=i,this.mX.transform.localRotQuat=Z.HELP_0}}onMouseDown(e){super.onMouseDown(e),this.currentAxis!=T.NONE&&(this.mAxis[T.X].getComponent(j).enable=!1,this.mAxis[T.Y].getComponent(j).enable=!1,this.mAxis[T.Z].getComponent(j).enable=!1,this.mAxis[this.currentAxis].getComponent(j).enable=!0,this.mLastAngle=this.getAngle())}onMouseUp(e){super.onMouseUp(e),this.currentAxis==T.NONE&&(this.mAxis[T.X].getComponent(j).enable=!0,this.mAxis[T.Y].getComponent(j).enable=!0,this.mAxis[T.Z].getComponent(j).enable=!0)}createCustomAxis(e){return this.createAxis(e)}createAxis(e){let t=new q;switch(e){case T.X:t.rotationZ=90;break;case T.Y:break;case T.Z:t.rotationX=90;break}let r=t.addComponent(j);r.geometry=new bd(20,.4),r.material=this.mAxisMaterial[e];let i=t.addComponent(Kt),a=new ra;return a.setFromCenterAndSize(new d,new d(40,.4,40)),i.shape=a,t}pickAxis(){let r=this.object3D.transform.scene3D.view.camera.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY),i,a;for(let o=0;o<=T.MAX;o++){let n=this.mAxisCollider[o];if(n&&(i=n.rayPick(r),i)){let l=d.distance(i.intersectPoint,n.shape.center);if(l>20+.8||l<20-.8)continue;(!a||a.distance>i.distance)&&(a={axis:o,obj:n.object3D,distance:i.distance,intersectPoint:i.intersectPoint})}}return a}}class Id extends ws{init(e){super.init(e);let t=new Ft;t.doubleSide=!0,t.baseColor=new P(0,0,1),t.depthCompare=rt.always,this.mAxisColor[T.XY]=t.baseColor,this.mAxisMaterial[T.XY]=t;let r=new Ft;r.doubleSide=!0,r.baseColor=new P(0,1,0),r.depthCompare=rt.always,this.mAxisColor[T.XZ]=r.baseColor,this.mAxisMaterial[T.XZ]=r;let i=new Ft;i.doubleSide=!0,i.baseColor=new P(1,0,0),i.depthCompare=rt.always,this.mAxisColor[T.YZ]=i.baseColor,this.mAxisMaterial[T.YZ]=i;let a=this.createPlane(T.XY),o=this.createPlane(T.XZ),n=this.createPlane(T.YZ);this.mContainer.addChild(this.mAxis[T.XY]=a),this.mContainer.addChild(this.mAxis[T.XZ]=o),this.mContainer.addChild(this.mAxis[T.YZ]=n),this.mAxisCollider[T.XY]=a.getComponent(Kt),this.mAxisCollider[T.XZ]=o.getComponent(Kt),this.mAxisCollider[T.YZ]=n.getComponent(Kt)}applyLocalTransform(e,t,r){I.help_matrix_0.copyFrom(this.mX.transform.worldMatrix).invert(),I.help_matrix_0.transformVector(t,d.HELP_0),this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ||(d.HELP_0.x=0),this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ||(d.HELP_0.y=0),this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ||(d.HELP_0.z=0),this.mX.transform.worldMatrix.transformVector(d.HELP_0,d.HELP_1),this.mX.x+=d.HELP_1.x,this.mX.y+=d.HELP_1.y,this.mX.z+=d.HELP_1.z}applyGlobalTransform(e,t,r){I.help_matrix_0.identity(),(this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ)&&I.help_matrix_0.appendTranslation(t.x,0,0),(this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ)&&I.help_matrix_0.appendTranslation(0,t.y,0),(this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ)&&I.help_matrix_0.appendTranslation(0,0,t.z),I.help_matrix_1.copyFrom(this.mX.transform.worldMatrix),I.help_matrix_1.append(I.help_matrix_0),this.mX.parent&&(I.help_matrix_2.copyFrom(this.mX.parent.worldMatrix),I.help_matrix_2.invert(),I.help_matrix_1.multiply(I.help_matrix_2));let i=I.help_matrix_1.decompose(ir.QUATERNION);this.mX.transform.localPosition=i[0],console.log(this.target.localPosition)}createCustomAxis(e){let t=super.createAxis(e),r=this.createArrows(e);return t.addChild(r),t}createArrows(e){let t=0,r=0,i=0,a=new q;switch(e){case T.X:t=1,a.rotationZ=-90;break;case T.Y:r=1,a.rotationY=-90;break;case T.Z:i=1,a.rotationX=90;break}let o=.2+t*20,n=.2+r*20,l=.2+i*20;a.x=o*.5,a.y=n*.5,a.z=l*.5;let h=a.addComponent(j);return h.geometry=new yd(0,1,4),h.material=this.mAxisMaterial[e],a}createPlane(e){let t=new q,r=t.addComponent(j);r.material=this.mAxisMaterial[e];let i=t.addComponent(Kt),a=new ra;switch(i.shape=a,e){case T.XY:r.geometry=new Qi(4,4,1,1,d.Z_AXIS),t.x=8,t.y=8,a.setFromCenterAndSize(new d(0,0,0),new d(4,4,.1));break;case T.XZ:r.geometry=new Qi(4,4,1,1,d.Y_AXIS),t.x=8,t.z=8,a.setFromCenterAndSize(new d(0,0,0),new d(4,.1,4));break;case T.YZ:r.geometry=new Qi(4,4,1,1,d.X_AXIS),t.y=8,t.z=8,a.setFromCenterAndSize(new d(0,0,0),new d(.1,4,4));break}return t}}class Dn extends q{static _instance;static get instance(){return this._instance||(this._instance=new Dn),this._instance}mTarget;mTransformMode=tt.NONE;mTransformSpaceType=qt.Global;mControllers;mXObj;mYObj;mZObj;constructor(){super(),this.mControllers=[null,null,null],this.mControllers[tt.Scale]=this.addComponent(Qd),this.mControllers[tt.Rotation]=this.addComponent(Rd),this.mControllers[tt.Translation]=this.addComponent(Id),this.mControllers[tt.Scale].enable=!1,this.mControllers[tt.Rotation].enable=!1,this.mControllers[tt.Translation].enable=!1,this.mXObj=new q,this.mYObj=new q,this.mZObj=new q,this.mXObj.addChild(this.mYObj),this.mYObj.addChild(this.mZObj)}get transformMode(){return this.mTransformMode}get transformSpaceMode(){return this.mTransformSpaceType}active(e){e.addChild(this),e.addChild(this.mXObj)}unActive(e){e.removeChild(this)}get target(){return this.mTarget}selectObject(e,t,r){this.mTarget!=e&&(e?this.activate():this.unactivate(),this.mTarget=e,this.mXObj.localPosition=e.transform.worldPosition.clone()),t!=null&&this.selectTransformMode(t),r!=null&&this.selectTransformSpaceMode(r)}selectTransformMode(e){this.mTransformMode!=e&&(this.mTransformMode!=tt.NONE&&(this.mControllers[this.mTransformMode].enable=!1),this.mTransformMode=e,this.mTransformMode!=tt.NONE&&(this.mControllers[this.mTransformMode].enable=!0))}selectTransformSpaceMode(e){this.mTransformSpaceType!=e&&(this.mTransformSpaceType=e,this.mTransformMode!=tt.NONE&&this.mControllers[this.mTransformMode].reset())}activate(){m.inputSystem.addEventListener(Sr.KEY_DOWN,this.onKeyDown,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.onMouseDown,this,null,99999),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onMouseMove,this,null,99999),m.inputSystem.addEventListener(k.POINTER_UP,this.onMouseUp,this,null,99999)}unactivate(){m.inputSystem.removeEventListener(Sr.KEY_DOWN,this.onKeyDown,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.onMouseDown,this),m.inputSystem.removeEventListener(k.POINTER_MOVE,this.onMouseMove,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.onMouseUp,this)}onKeyDown(e){switch(e.keyCode){case ke.Key_R:this.selectTransformMode(tt.Scale),this.selectTransformSpaceMode(qt.Local);break;case ke.Key_E:this.selectTransformMode(tt.Rotation),this.selectTransformSpaceMode(qt.Global);break;case ke.Key_W:this.selectTransformMode(tt.Translation),this.selectTransformSpaceMode(qt.Global);break;case ke.Key_A:this.selectTransformSpaceMode(qt.Local);break;case ke.Key_S:this.selectTransformSpaceMode(qt.Global);break}}onMouseDown(e){this.mTransformMode!=tt.NONE&&this.mControllers[this.mTransformMode].onMouseDown(e)}onMouseMove(e){this.mTransformMode!=tt.NONE&&this.mControllers[this.mTransformMode].onMouseMove(e)}onMouseUp(e){this.mTransformMode!=tt.NONE&&this.mControllers[this.mTransformMode].onMouseUp(e)}}const m0=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{Su as AccelerateDecelerateInterpolator,vu as AccelerateInterpolator,_a as AnimationCurve,ni as AnimationCurveT,ki as AnimationMonitor,Nr as AnimatorComponent,cm as AnimatorEventKeyframe,yu as AnticipateInterpolator,qa as AnticipateOvershootInterpolator,Ld as ArrayHas,Od as ArrayItemIndex,pc as AtlasParser,im as AtmosphericComponent,of as AtmosphericScatteringSky,sf as AtmosphericScatteringSkySetting,af as AtmosphericScatteringSky_shader,gf as AttributeAnimCurve,c0 as AxisObject,kr as B3DMLoader,ec as B3DMLoaderBase,en as B3DMParseUtil,tc as B3DMParser,lc as BRDFLUT,hc as BRDFLUTGenerate,ml as BRDF_frag,Ko as BatchTable,OA as BiMap,Wa as BillboardComponent,ii as BillboardType,Gl as BitUtil,Mr as BitmapTexture2D,hh as BitmapTexture2DArray,Jo as BitmapTextureCube,nh as Blend,lh as BlendFactor,ae as BlendMode,Cn as BlendShapeData,vn as BlendShapePropertyData,aA as BloomPost,Ju as BlurEffectCreatorBlur_cs,Wu as BlurEffectCreatorSample_cs,Zu as BlurTexture2DBufferCreator,Ot as BounceInterpolator,So as BoundUtil,Re as BoundingBox,Ga as BoundingSphere,ra as BoxColliderShape,Qr as BoxGeometry,ol as BrdfLut_frag,Ul as BsDF_frag,Al as BxDF_frag,Cl as BxdfDebug_frag,Ws as BytesArray,qe as CEvent,Er as CEventDispatcher,as as CEventListener,Yr as CResizeEvent,Zt as CSM,Zi as Camera3D,Bm as CameraControllerBase,He as CameraType,je as CameraUtil,Vm as CapsuleColliderShape,Sh as CastPointShadowMaterialPass,Ch as CastShadowMaterialPass,xl as Clearcoat_frag,jh as ClusterBoundsSource_cs,dt as ClusterConfig,Xn as ClusterDebug_frag,Il as ClusterLight,Hh as ClusterLightingBuffer,qh as ClusterLightingRender,Kh as ClusterLighting_cs,bh as CollectInfo,Kt as ColliderComponent,Ke as ColliderShape,ta as ColliderShapeType,P as Color,zA as ColorGradient,VA as ColorLitMaterial,$c as ColorLitShader,Xp as ColorPassFragmentOutput,Xh as ColorPassRenderer,os as ColorUtil,Js as ComData,Zc as Combine_cs,al as Common_frag,sl as Common_vert,Pe as ComponentBase,Se as ComponentCollect,Hi as ComputeGPUBuffer,ue as ComputeShader,On as Context3D,Ro as CubeCamera,Yu as CubeMapFaceEnum,$s as CubeSky_Shader,Rs as CubicBezierCurve,GA as CubicBezierPath,gd as CubicBezierType,bu as CycleInterpolator,yd as CylinderGeometry,du as DDGIIrradianceComputePass,ts as DDGIIrradianceGPUBufferReader,Lh as DDGIIrradianceVolume,fu as DDGIIrradiance_shader,Au as DDGILightingPass,mu as DDGILighting_shader,pu as DDGIMultiBouncePass,Uu as DDGIProbeRenderer,it as DEGREES_TO_RADIANS,Cu as DecelerateInterpolator,Yc as Denoising_cs,ru as Depth2DTextureArray,eu as DepthCubeArrayTexture,_h as DepthMaterialPass,sA as DepthOfFieldPost,Ic as DepthOfView_cs,Ua as DirectLight,Na as DoubleArray,zi as EditorInspector,m as Engine3D,kh as Entity,Qh as EntityBatchCollect,G as EntityCollect,nl as EnvMap_frag,Dt as ErpImage2CubeMap,Xu as ErpImage2CubeMapCreateCube_cs,Hu as ErpImage2CubeMapRgbe2rgba_cs,zm as ExtrudeGeometry,lr as FASTFLOOR,Io as FXAAPost,hu as FXAAShader,hl as FastMathShader,As as FeatureTable,gt as FileLoader,vm as FirstPersonCameraController,Co as Float16ArrayTexture,h0 as Float32ArrayTexture,Cm as FlyCameraController,fc as FontChar,uc as FontInfo,cc as FontPage,Lr as FontParser,Bu as ForwardRenderJob,ro as FragmentOutput,cl as FragmentVarying,fn as FrameCache,sh as Frustum,oh as FrustumCSM,Yp as FrustumCulling_cs,Sl as FullQuad_vert_wgsl,se as GBufferFrame,vh as GBufferPass,oA as GBufferPost,Wl as GBufferStand,io as GBuffer_pass,Go as GILighting,Vf as GIProbeMaterial,An as GIProbeMaterialType,ef as GIProbeShader,Eo as GIRenderCompleteEvent,fs as GIRenderStartEvent,Ou as GLBChunk,Lu as GLBHeader,Wo as GLBParser,uh as GLSLLexer,ua as GLSLLexerToken,ch as GLSLPreprocessor,ph as GLSLSyntax,ac as GLTFBinaryExtension,xA as GLTFMaterial,At as GLTFParser,gs as GLTFSubParser,Iu as GLTFSubParserCamera,ku as GLTFSubParserConverter,wu as GLTFSubParserMaterial,Eu as GLTFSubParserMesh,zo as GLTFSubParserSkeleton,Tu as GLTFSubParserSkin,Yt as GLTFType,qg as GLTF_Accessors,ds as GLTF_Info,Xg as GLTF_Light,Kg as GLTF_Mesh,Hg as GLTF_Node,jg as GLTF_Primitives,Yg as GLTF_Scene,Pt as GPUAddressMode,zd as GPUBlendFactor,wr as GPUBufferBase,tr as GPUBufferType,rt as GPUCompareFunction,F as GPUContext,Jt as GPUCullMode,Kr as GPUFilterMode,qs as GPUPrimitiveTopology,X as GPUTextureFormat,ha as GPUVertexFormat,Jd as GPUVertexStepMode,sa as GSplatFormat,Th as GSplatMaterial,da as GSplatRenderer,wh as GSplat_FS,Eh as GSplat_VS,nA as GTAOPost,Ec as GTAO_cs,gc as GUIAtlasTexture,Ja as GUICanvas,Ii as GUIConfig,Bf as GUIGeometry,Cf as GUIGeometryRebuild,pn as GUIMaterial,xu as GUIPassRenderer,yf as GUIPick,Rf as GUIPickHelper,Ir as GUIQuad,Je as GUIQuadAttrEnum,Sf as GUIRenderer,gn as GUIShader,jt as GUISpace,Ki as GUISprite,fi as GUITexture,mA as GaussianSplatParser,Ql as GenerayRandomDir,AA as GeoJsonParser,UA as GeoJsonUtil,Fs as GeoType,Ne as GeometryBase,Nh as GeometryIndicesBuffer,f0 as GeometryUtil,Dh as GeometryVertexBuffer,ft as GeometryVertexType,zn as GetComponentClass,js as GetCountInstanceID,eg as GetRepeat,Gn as GetShader,Hp as GlassShader,ne as GlobalBindGroup,fo as GlobalBindGroupLayout,lA as GlobalFog,cn as GlobalFog_shader,Em as GlobalIlluminationComponent,eo as GlobalUniform,_o as GlobalUniformGroup,hA as GodRayPost,wc as GodRay_cs,d0 as GridObject,Yo as HDRTexture,ms as HDRTextureCube,El as Hair_frag,jp as Hair_shader_op,Kp as Hair_shader_tr,us as HaltonSeq,wf as Horizontal,Sm as HoverCameraController,fr as I3DMLoader,sc as I3DMLoaderBase,nc as I3DMParser,qu as IBLEnvMapCreator,Ku as IBLEnvMapCreator_cs,pr as IESProfiles,dl as IESProfiles_frag,Jm as IKDTreeUserData,ea as ImageType,Mh as IndicesGPUBuffer,il as Inline_vert,Ln as InputSystem,wm as InstanceDrawComponent,ll as InstanceUniform,oc as InstancedMesh,ci as Interpolator,wo as InterpolatorEnum,jf as IrradianceDataReaderCompleteEvent,rl as IrradianceVolumeData_frag,pl as Irradiance_frag,Pd as IsEditorInspector,Xs as IsNonSerialize,Du as Joint,Oo as JointPose,Fu as JumperInterpolator,Ym as KDTreeEntity,hi as KDTreeNode,Of as KDTreeRange,zf as KDTreeSpace,Ha as KDTreeUUID,Lo as KHR_draco_mesh_compression,BA as KHR_lights_punctual,Nu as KHR_materials_clearcoat,Vu as KHR_materials_emissive_strength,vA as KHR_materials_ior,Pu as KHR_materials_unlit,Sc as KMZParser,Bn as KV,g0 as KelvinUtil,ke as KeyCode,Sr as KeyEvent,vs as Keyframe,Ma as KeyframeT,Us as LDRTextureCube,PA as LambertMaterial,Tl as Lambert_shader,Cs as Light,Aa as LightBase,hs as LightData,Oh as LightEntries,Xe as LightType,Hn as LightingFunction_frag,ot as Line,bf as LineClassification,_u as LinearInterpolator,ur as LitMaterial,bs as LitSSSShader,Qs as LitShader,Bl as Lit_shader,Li as LoaderBase,Xm as LoaderEvent,Gs as LoaderManager,Hd as MAX_VALUE,jd as MIN_VALUE,yt as Material,xh as MaterialDataUniformGPUBuffer,ys as MaterialUtilities,jn as MathShader,bt as MathUtil,Ti as Matrix3,I as Matrix4,Wh as MatrixBindGroup,Gh as MatrixGPUBuffer,Rl as MatrixShader,Xr as MemoryDO,Jn as MemoryInfo,Km as MergeRGBACreator,Tc as MergeRGBA_cs,zs as MeshColliderShape,Ss as MeshFilter,j as MeshRenderer,YA as MinMaxAnimationCurves,vd as MinMaxCurve,Bd as MinMaxCurveState,XA as MinMaxPolyCurves,tA as MorePassParser,Xf as MorePassShader,gm as MorphTargetBlender,Zh as MorphTargetData,pm as MorphTargetFrame,Af as MorphTargetTransformKey,Vt as MorphTarget_shader,_s as MouseCode,gu as MultiBouncePass_cs,_d as Navi3DAstar,Va as Navi3DConst,dr as Navi3DEdge,Or as Navi3DFunnel,li as Navi3DMaskType,o0 as Navi3DMesh,Ut as Navi3DPoint,Tn as Navi3DPoint2D,cr as Navi3DPointFat,re as Navi3DRouter,Fd as Navi3DTriangle,Ys as NonSerialize,ul as NormalMap_frag,Mu as OAnimationEvent,Gu as OBJParser,q as Object3D,Hm as Object3DEvent,Dn as Object3DTransformTools,p0 as Object3DUtil,pf as ObjectAnimClip,Qo as OcclusionSystem,ui as Octree,Ih as OctreeEntity,_m as OrbitController,WA as OrderMap,ir as Orientation3D,Dc as OutLineBlendColor_cs,Mc as OutlineCalcOutline_cs,qp as OutlinePass,uA as OutlinePost,qf as OutlinePostData,$f as OutlinePostManager,Kf as OutlinePostSlot,Nc as Outline_cs,Qu as OvershootInterpolator,vl as PBRLItShader,tf as PBRLitSSSShader,st as ParserBase,Ge as ParserFormat,xd as ParticleSystemCurveEvalMode,pd as ParticleSystemRandomnessIds,ca as PassGenerate,Hf as PassShader,H as PassType,Kn as PhysicMaterialUniform_frag,Pf as PickCompute,kf as PickFire,lt as PickGUIEvent3D,ed as PickResult,Vc as Picker_cs,ao as PingPong,Ao as PipelinePool,Cd as Plane3D,Ei as PlaneClassification,Qi as PlaneGeometry,Qf as PointClassification,ji as PointLight,tu as PointLightShadowRenderer,$h as PointShadowCubeCamera,k as PointerEvent3D,br as Polynomial,zr as PolynomialCurve,ZA as Polynomials,_f as PoolNode,Et as PostBase,Fc as PostProcessingComponent,ou as PostRenderer,au as PreDepthPassRenderer,nu as PreFilteredEnvironment_cs,Lp as PreFilteredEnvironment_cs2,Pc as PreIntegratedLut,Yf as PreIntegratedLutCompute,xn as PrefabAvatarData,nd as PrefabAvatarParser,Un as PrefabBoneData,hd as PrefabMaterialParser,ud as PrefabMeshData,cd as PrefabMeshParser,rs as PrefabNode,dd as PrefabParser,bA as PrefabStringUtil,ld as PrefabTextureData,fd as PrefabTextureParser,rr as Preprocessor,Nf as Probe,qm as ProbeEntries,cu as ProbeGBufferFrame,Ye as ProfilerUtil,um as PropertyAnimClip,mf as PropertyAnimTag,yn as PropertyAnimation,Sn as PropertyAnimationClip,df as PropertyAnimationClipState,ya as PropertyAnimationEvent,Fa as PropertyHelp,vt as QuadAABB,Ml as QuadGlsl_fs,Dl as QuadGlsl_vs,Wf as QuadRoot,ga as QuadShader,Gf as QuadTree,di as QuadTreeCell,Zd as Quad_depth2dArray_frag_wgsl,yl as Quad_depth2d_frag_wgsl,bl as Quad_depthCube_frag_wgsl,Fl as Quad_frag_wgsl,_l as Quad_vert_wgsl,Z as Quaternion,Wi as RADIANS_TO_DEGREES,ju as RGBEErrorCode,Xo as RGBEHeader,Ho as RGBEParser,Qe as RTDescriptor,Ze as RTFrame,_r as RTResourceConfig,Bt as RTResourceMap,ka as Rand,tg as RandomSeed,$t as Ray,na as RayCastMeshDetail,Yi as Reader,ja as Rect,me as Reference,lf as Reflection,Zl as ReflectionCG,zh as ReflectionEntries,uf as ReflectionMaterial,lu as ReflectionRenderer,hf as ReflectionShader,Jl as ReflectionShader_shader,Wt as RegisterComponent,yi as RegisterShader,bo as RenderContext,fa as RenderLayer,Uo as RenderLayerUtil,ei as RenderNode,Rh as RenderShaderCollect,Zf as RenderShaderCompute,Oe as RenderShaderPass,mt as RenderTexture,Fr as RendererBase,uu as RendererJob,su as RendererMap,Be as RendererMask,Gt as RendererMaskUtil,Yh as RendererPassState,so as RepeatSE,_c as Res,Rd as RotationControlComponents,Yl as SHCommon_frag,Ka as SN_ArrayConstant,$r as SN_BinaryOperation,wg as SN_Break,hr as SN_CodeBlock,Pr as SN_Constant,Ms as SN_Continue,ze as SN_Declaration,Tg as SN_Discard,Eg as SN_DoWhileLoop,de as SN_Expression,Ni as SN_ForLoop,Ts as SN_Function,Ds as SN_FunctionArgs,Mi as SN_FunctionCall,wi as SN_IFBranch,Tr as SN_Identifier,Pi as SN_IndexOperation,za as SN_Layout,dh as SN_ParenExpression,Ns as SN_Precision,La as SN_Return,Oa as SN_SelectOperation,Vr as SN_Struct,gh as SN_TernaryOperation,Xi as SN_UnaryOperation,Vi as SN_WhileLoop,Op as SSAO_cs,kc as SSGI2_cs,cA as SSGIPost,fA as SSRPost,Lc as SSR_BlendColor_cs,dA as SSR_IS_Kernel,Oc as SSR_IS_cs,zc as SSR_RayTrace_cs,Qd as ScaleControlComponents,km as Scene3D,pt as Shader,mo as ShaderAttributeInfo,mh as ShaderConverter,Ah as ShaderConverterResult,O as ShaderLib,Ks as ShaderPassBase,xt as ShaderReflection,ar as ShaderStage,Uh as ShaderState,po as ShaderUniformInfo,Dr as ShaderUtil,fl as ShadingInput,wt as ShadowLightsCollect,iu as ShadowMapPassRenderer,gl as ShadowMapping_frag,mm as Skeleton,Vs as SkeletonAnimationClip,ff as SkeletonAnimationClipState,ai as SkeletonAnimationComponent,Am as SkeletonAnimationCompute,Gi as SkeletonAnimation_shader,Um as SkeletonBlendComputeArgs,ma as SkeletonPose,xm as SkeletonTransformComputeArgs,Ia as SkinnedMeshRenderer,oi as SkinnedMeshRenderer2,Bh as SkyGBufferPass,Nl as SkyGBuffer_pass,nf as SkyMaterial,Bs as SkyRenderer,Sa as SkyShader,u0 as SolidColorSky,Pm as SphereColliderShape,Ri as SphereGeometry,cf as SphereReflection,xa as SpotLight,zu as StandShader,_e as StatementNode,ve as StorageGPUBuffer,_t as StringUtil,la as Struct,$m as StructStorageGPUBuffer,Vh as SubGeometry,Gc as TAACopyTex_cs,gA as TAAPost,Wc as TAASharpTex_cs,Jc as TAA_cs,Xc as TestComputeLoadBuffer,If as TextAnchor,Df as TextFieldLayout,Tf as TextFieldLine,$e as Texture,ps as TextureCube,jo as TextureCubeFaceData,Ps as TextureCubeStdCreator,Zo as TextureCubeUtils,eA as TextureMipmapCompute,gr as TextureMipmapGenerator,Jf as TextureScaleCompute,ym as ThirdPersonCameraController,wA as TileSet,DA as TileSetChild,MA as TileSetChildContent,NA as TileSetChildContentMetaData,TA as TileSetRoot,En as TilesRenderer,be as Time,v as TokenType,bd as TorusGeometry,kn as TouchData,n0 as TrailGeometry,Tt as Transform,T as TransformAxisEnum,ws as TransformControllerBaseComponent,tt as TransformMode,qt as TransformSpaceMode,Id as TranslationControlComponents,go as TranslatorContext,l0 as TriGeometry,Ya as Triangle,bn as UIButton,Mf as UIButtonTransition,mn as UIComponentBase,jm as UIEvent,Di as UIImage,Qn as UIImageGroup,Os as UIInteractive,Le as UIInteractiveStyle,Za as UIPanel,Ra as UIRenderAble,Rn as UIShadow,In as UITextField,Gr as UITransform,It as UUID,wn as UV,vo as Uint32ArrayTexture,Bo as Uint8ArrayTexture,wl as UnLit,Ft as UnLitMaterial,qn as UnLitMaterialUniform_frag,Ea as UnLitShader,LA as UnLitTexArrayMaterial,wa as UnLitTexArrayShader,rf as UnLitTextureArray,$n as UnLit_frag,ht as UniformGPUBuffer,Hr as UniformNode,ut as UniformType,L as ValueEnumType,s0 as ValueOp,Rr as ValueParser,HA as ValueSpread,K as Vector2,d as Vector3,ba as Vector3Ex,$ as Vector4,Wm as VertexAttribute,qc as VertexAttributeIndexShader,V as VertexAttributeName,jr as VertexAttributeSize,Lf as VertexAttributeStride,el as VertexAttributes_vert,Gm as VertexBufferLayout,Yn as VertexFormat,cs as VertexGPUBuffer,Ef as Vertical,tl as VideoUniform_frag,Lm as View3D,ks as ViewPanel,yo as ViewQuad,Ae as VirtualTexture,fh as WGSLTranslator,es as WayLines3D,$a as WayPoint3D,Te as WebGPUDescriptorCreator,to as WorldMatrixUniform,Ls as WorldPanel,ia as WrapMode,si as WrapTimeMode,iA as ZCullingCompute,Kc as ZPassShader_cs,zl as ZPassShader_fs,Ol as ZPassShader_vs,Fh as ZSorterUtil,ah as append,$u as arrayToString,Gd as blendComponent,KA as buildCurves,id as byteSizeOfType,qA as calculateCurveRangesValue,Ta as calculateMinMax,Pl as castPointShadowMap_vert,ie as clamp,Sg as clampRepeat,td as computeAABBFromPositions,gg as cos,Bg as crossProduct,md as cubicPolynomialRoot,Ad as cubicPolynomialRootsGeneric,jA as curvesSupportProcedural,cg as deg2Rad,rd as detectGSplatFormat,Ll as directionShadowCastMap_frag,ct as dot,Ud as doubleIntegrateSegment,Qc as downSample,rh as fastInvSqrt,th as floorfToIntPos,qi as fonts,vg as generateRandom,Cg as generateRandom3,Kl as getFloatFromInt,up as getGLTypeFromTypedArray,hp as getGLTypeFromTypedArrayType,pg as getGlobalRandomSeed,cp as getTypedArray,ko as getTypedArrayTypeFromGLType,Fn as grad1,Es as grad2,Da as grad3,oa as grad4,ad as inferSHOrder,_n as integrateSegment,rA as irradianceDataReader,JA as kPI,bi as lerp,$d as lerpByte,qd as lerpColor,Kd as lerpVector3,no as magnitude,Bp as makeAloneSprite,dc as makeGUISprite,ls as makeMatrix44,co as matrixMultiply,bg as matrixRotate,yg as matrixRotateY,ss as mergeFunctions,ih as multiplyMatrices4x4REF,Sd as normal_distribution,xg as normalizeFast,jl as normalizeSafe,Ug as normalizedToByte,Ag as normalizedToWord,nr as outlinePostData,pA as outlinePostManager,od as parsePlyGaussianSplat,sd as parsePlyHeader,le as perm,Rc as post,Is as quadraticPolynomialRootsGeneric,fg as rad2Deg,Ji as random01,ug as randomBarycentricCoord,hg as randomPointBetweenEllipsoid,ng as randomPointBetweenSphere,sg as randomPointInsideCube,og as randomPointInsideEllipsoid,lg as randomPointInsideUnitCircle,$l as randomPointInsideUnitSphere,ig as randomQuaternion,ag as randomQuaternionUniformDistribution,eh as randomSeed,ns as randomUnitVector,ql as randomUnitVector2,at as rangedRandomFloat,rg as rangedRandomInt,et as readByType,qo as readMagicBytes,kA as registerMaterial,uo as repeat,Fg as rotMatrix,Xd as rotateVectorByQuat,lo as roundfToIntPos,oo as scale,kl as shadowCastMap_frag,Vl as shadowCastMap_vert,Lt as simplex,dg as sin,t0 as snoise1,r0 as snoise2,i0 as snoise3,a0 as snoise4,ho as sqrMagnitude,Hl as sqrtImpl,Wd as stencilStateFace,mg as swap,Hc as textureCompress,bc as threshold,ti as toHalfFloat,Zp as tw,$A as uniform_real_distribution,e0 as uniform_real_distribution2,un as upSample,R as webGPUContext,yh as zSorterUtil};
|
|
11484
|
+
`;static _pipelineMax;static _pipelineMin;static createMipmap(e,t){const r=R.device;this._pipelineMax||=r.createComputePipeline({layout:"auto",compute:{module:r.createShaderModule({code:this.codeMax}),entryPoint:"main"}}),this._pipelineMin||=r.createComputePipeline({layout:"auto",compute:{module:r.createShaderModule({code:this.codeMin}),entryPoint:"main"}});let i=Math.ceil(e.width*.5),a=Math.ceil(e.height*.5),o={mipmapCount:t,texture:e,srcView:null,mipLevel:1,dstHeight:a,dstWidth:i};o.srcView=e.getGPUTexture().createView({format:e.format,dimension:"2d",baseMipLevel:0,mipLevelCount:1}),e.width>1024&&e.height>1024?this.mipmap(this._pipelineMax,o):this.mipmap(this._pipelineMin,o)}static mipmap(e,t){const r=R.device,i=F.beginCommandEncoder();let a=e==this._pipelineMax,o,n;for(let l=t.mipLevel;l<t.mipmapCount;l++){let h=[],u=0;h.push({binding:u++,resource:t.srcView}),h.push({binding:u++,resource:t.texture.gpuSampler}),o=t.texture.getGPUTexture().createView({format:t.texture.format,dimension:"2d",baseMipLevel:l,mipLevelCount:1}),h.push({binding:u++,resource:o});const c=r.createBindGroup({layout:e.getBindGroupLayout(0),entries:h}),f=i.beginComputePass();f.setPipeline(e),f.setBindGroup(0,c);let g=t.dstWidth,p=t.dstHeight;if(a&&(g=Math.max(1,Math.floor(t.dstWidth/8)),p=Math.max(1,Math.floor(t.dstHeight/8))),f.dispatchWorkgroups(g,p),t.dstHeight*=.5,t.dstWidth*=.5,t.srcView=o,t.mipLevel=l+1,n=a&&(t.dstWidth<8||t.dstHeight<8),f.end(),n)break}F.endCommandEncoder(i),n&&this.mipmap(this._pipelineMin,t)}}class Xf{name="";passMap=new Map}class Hf{passType="";shaderState=new Map;vertexShader="";fragmentShader=""}class tA{static passKeyword="pass";static shaderKeyword="Shader";static vertexKeyword="vertex";static fragmentKeyword="fragment";static passTypeKeyword="PassType";static parser(e,t){e=rr.filterComment(e);let r=new Xf,i=e.indexOf(this.shaderKeyword),a=e.indexOf("{",i),o=e.substring(i+this.shaderKeyword.length,a).trim();r.name=o.substring(1,o.length-1),o=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"));let n=this.splitPassBlock(o);for(let l of n){let h=this.parserPassBlock(l),u;r.passMap.has(h.passType)?u=r.passMap.get(h.passType):(u=[],r.passMap.set(h.passType,u)),u.push(h),h.vertexShader.length>0&&(h.vertexShader=rr.parse(h.vertexShader,t)),h.fragmentShader.length>0&&(h.fragmentShader=rr.parse(h.fragmentShader,t))}return r}static splitPassBlock(e){let t=0,r=[];for(;t<e.length;){let i=e.indexOf(this.passKeyword,t);if(i==-1){r.push(e.substring(t));break}t!=0&&r.push(e.substring(t,i)),t=i+this.passKeyword.length}return r}static parserPassBlock(e){let t=new Hf,r=e.indexOf(this.passTypeKeyword),i=e.indexOf('"',r);return r=e.indexOf('"',i+1),t.passType=e.substring(r+1,i).trim(),this.parserShaderState(t,e),r=e.indexOf(this.vertexKeyword),r!=-1&&(t.vertexShader=this.extractBlock(e.substring(r+this.vertexKeyword.length),"{","}")),r=e.indexOf(this.fragmentKeyword),r!=-1&&(t.fragmentShader=this.extractBlock(e.substring(r+this.fragmentKeyword.length),"{","}")),t}static parserShaderState(e,t){let r=t.indexOf("ShaderState");if(r==-1)return!1;r=t.indexOf("{",r);let i=t.indexOf("}",r),o=t.substring(r+1,i).split(",");for(let n of o){let l=n.split(":"),h=l[0].trim(),u=this.convertValue(l[1].trim());e.shaderState.set(h,u)}return!0}static convertValue(e){return e.length==4&&e.toLowerCase()=="true"?!0:e.length==5&&e.toLowerCase()=="false"?!1:e[0]=='"'?e.substring(1,e.length-1):Number.parseInt(e)}static extractBlock(e,t,r){let i=e.indexOf(t);if(i==-1)return"";let a=0,o=0;e=e.substring(i);for(let l of e){if(l==t?a++:l==r&&a--,a<=0)break;o++}return e.substring(1,o).trim()}}let jf=new qe("IrradianceDataReaderCompleteEvent");class ts extends Er{readFlag=!1;probeRenderer;opColorBuffer;opDepthBuffer;srcColorMap;srcDepthMap;opDepthArray;opColorArray;initReader(e,t,r){this.probeRenderer=e,this.srcColorMap=t,this.srcDepthMap=r;let i=m.setting.gi,a=i.octRTMaxSize*i.octRTMaxSize;this.opColorBuffer=R.device.createBuffer({size:a*4*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,mappedAtCreation:!1}),this.opColorArray=new Float32Array(a*4),this.opDepthBuffer=R.device.createBuffer({size:a*4*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,mappedAtCreation:!1}),this.opDepthArray=new Float32Array(a*4),this.probeRenderer.addEventListener(Eo.type,()=>{this.onProbeRenderComplete()},this),this.probeRenderer.addEventListener(fs.type,()=>{console.log("GIRenderStartEvent")},this)}async onProbeRenderComplete(){if(console.log("GIRenderCompleteEvent"),this.readFlag)console.log("irradianceDataReader is reading yet!!!");else{this.readFlag=!0;let e=Date.now();console.log("irradianceDataReader start reading "),await ts.read(this.srcColorMap.getGPUTexture(),this.opColorBuffer,this.opColorArray),await ts.read(this.srcDepthMap.getGPUTexture(),this.opDepthBuffer,this.opDepthArray),this.readFlag=!1,console.log("process time :",Date.now()-e),console.log("irradianceDataReader read complete"),this.dispatchEvent(jf)}}static async read(e,t,r){let i=F.beginCommandEncoder();i.copyTextureToBuffer({texture:e},{buffer:t,bytesPerRow:e.width*16},[e.width,e.height]),F.endCommandEncoder(i),await t.mapAsync(GPUMapMode.READ);const a=t.getMappedRange();r.set(new Float32Array(a),0),t.unmap()}}let rA=new ts;class iA{computeShader;visibleBuffer;texture;constructor(){this.computeShader=new ue(Kc),this.visibleBuffer=new Hi(8192*2),this.computeShader.setStorageBuffer("visibleBuffer",this.visibleBuffer),this.texture=vt.getTexture(Sr.zBufferTexture_NAME),this.computeShader.setSamplerTexture("zBufferTexture",this.texture),this.computeShader.workerSizeX=Math.ceil(this.texture.width/8),this.computeShader.workerSizeY=Math.ceil(this.texture.height/8),this.computeShader.workerSizeZ=1}compute(e,t){this.visibleBuffer.reset(!0,0),this.visibleBuffer.apply();let r=F.beginCommandEncoder();F.computeCommand(r,[this.computeShader]),this.visibleBuffer.readBuffer(),t.zVisibleList=this.visibleBuffer.outFloat32Array}}class aA extends Et{RT_BloomUp;RT_BloomDown;RT_threshold;rendererPassState;thresholdCompute;downSampleComputes;upSampleComputes;postCompute;bloomSetting;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.bloom.enable=!0,this.createGUI()}onDetach(e){m.setting.render.postProcessing.bloom.enable=!1,this.removeGUI()}createGUI(){}removeGUI(){}get downSampleBlurSize(){return m.setting.render.postProcessing.bloom.downSampleBlurSize}set downSampleBlurSize(e){m.setting.render.postProcessing.bloom.downSampleBlurSize=e}get downSampleBlurSigma(){return m.setting.render.postProcessing.bloom.downSampleBlurSigma}set downSampleBlurSigma(e){m.setting.render.postProcessing.bloom.downSampleBlurSigma=e}get upSampleBlurSize(){return m.setting.render.postProcessing.bloom.upSampleBlurSize}set upSampleBlurSize(e){m.setting.render.postProcessing.bloom.upSampleBlurSize=e}get upSampleBlurSigma(){return m.setting.render.postProcessing.bloom.upSampleBlurSigma}set upSampleBlurSigma(e){m.setting.render.postProcessing.bloom.upSampleBlurSigma=e}get luminanceThreshole(){return m.setting.render.postProcessing.bloom.luminanceThreshole}set luminanceThreshole(e){m.setting.render.postProcessing.bloom.luminanceThreshole=e}get bloomIntensity(){return m.setting.render.postProcessing.bloom.bloomIntensity}set bloomIntensity(e){m.setting.render.postProcessing.bloom.bloomIntensity=e}get hdr(){return m.setting.render.postProcessing.bloom.hdr}set hdr(e){m.setting.render.postProcessing.bloom.hdr=e}createThreshouldCompute(){this.thresholdCompute=new ue(bc),this.autoSetColorTexture("inTex",this.thresholdCompute),this.thresholdCompute.setStorageTexture("outTex",this.RT_threshold),this.thresholdCompute.setUniformBuffer("bloomCfg",this.bloomSetting),this.thresholdCompute.workerSizeX=Math.ceil(this.RT_threshold.width/8),this.thresholdCompute.workerSizeY=Math.ceil(this.RT_threshold.height/8),this.thresholdCompute.workerSizeZ=1}createDownSampleComputes(){const t=m.setting.render.postProcessing.bloom.downSampleStep;this.downSampleComputes=[];for(let r=0;r<t;r++){let i=new ue(Qc),a=this.RT_BloomDown[r],o=r==0?this.RT_threshold:this.RT_BloomDown[r-1];i.setSamplerTexture("inTex",o),i.setStorageTexture("outTex",a),i.setUniformBuffer("bloomCfg",this.bloomSetting),i.workerSizeX=Math.ceil(a.width/8),i.workerSizeY=Math.ceil(a.height/8),i.workerSizeZ=1,this.downSampleComputes.push(i)}}createUpSampleComputes(){const t=m.setting.render.postProcessing.bloom.downSampleStep;this.upSampleComputes=[];{let r=new ue(un),i=this.RT_BloomUp[0],a=this.RT_BloomDown[t-2];r.setSamplerTexture("_MainTex",a),r.setSamplerTexture("_PrevMip",this.RT_BloomDown[t-1]),r.setStorageTexture("outTex",i),r.setUniformBuffer("bloomCfg",this.bloomSetting),r.workerSizeX=Math.ceil(i.width/8),r.workerSizeY=Math.ceil(i.height/8),r.workerSizeZ=1,this.upSampleComputes.push(r)}for(let r=1;r<t-1;r++){let i=new ue(un),a=this.RT_BloomUp[r],o=this.RT_BloomDown[t-2-r];i.setSamplerTexture("_MainTex",o),i.setSamplerTexture("_PrevMip",this.RT_BloomUp[r-1]),i.setStorageTexture("outTex",a),i.setUniformBuffer("bloomCfg",this.bloomSetting),i.workerSizeX=Math.ceil(a.width/8),i.workerSizeY=Math.ceil(a.height/8),i.workerSizeZ=1,this.upSampleComputes.push(i)}}createPostCompute(){const t=m.setting.render.postProcessing.bloom.downSampleStep;this.postCompute=new ue(Rc),this.autoSetColorTexture("_MainTex",this.postCompute),this.postCompute.setSamplerTexture("_BloomTex",this.RT_BloomUp[t-2]),this.postCompute.setStorageTexture("outTex",this.RT_threshold),this.postCompute.setUniformBuffer("bloomCfg",this.bloomSetting),this.postCompute.workerSizeX=Math.ceil(this.RT_threshold.width/8),this.postCompute.workerSizeY=Math.ceil(this.RT_threshold.height/8),this.postCompute.workerSizeZ=1}createResource(){let e=m.setting.render.postProcessing.bloom;this.bloomSetting=new ht(8);let[t,r]=R.presentationSize,i=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING;this.RT_threshold=new Ae(t,r,X.rgba16float,!1,i);const a=e.downSampleStep;{this.RT_BloomDown=[];let n=Math.ceil(t/4),l=Math.ceil(r/4);for(let h=0;h<a;h++)this.RT_BloomDown[h]=new Ae(n,l,X.rgba16float,!1,i),n=Math.ceil(n/2),l=Math.ceil(l/2)}{this.RT_BloomUp=[];for(let n=0;n<a-1;n++){let l=this.RT_BloomDown[a-2-n].width,h=this.RT_BloomDown[a-2-n].height;this.RT_BloomUp[n]=new Ae(l,h,X.rgba16float,!1,i)}}let o=new Qe;o.loadOp="load",this.rtFrame=new Ze([this.RT_threshold],[o])}render(e,t){this.thresholdCompute||(this.createResource(),this.createThreshouldCompute(),this.createDownSampleComputes(),this.createUpSampleComputes(),this.createPostCompute(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="Bloom");let r=m.setting.render.postProcessing.bloom;this.bloomSetting.setFloat("downSampleStep",r.downSampleStep),this.bloomSetting.setFloat("downSampleBlurSize",r.downSampleBlurSize),this.bloomSetting.setFloat("downSampleBlurSigma",r.downSampleBlurSigma),this.bloomSetting.setFloat("upSampleBlurSize",r.upSampleBlurSize),this.bloomSetting.setFloat("upSampleBlurSigma",r.upSampleBlurSigma),this.bloomSetting.setFloat("luminanceThreshole",r.luminanceThreshole),this.bloomSetting.setFloat("bloomIntensity",r.bloomIntensity),this.bloomSetting.setFloat("hdr",r.hdr),this.bloomSetting.apply(),F.computeCommand(t,[this.thresholdCompute,...this.downSampleComputes,...this.upSampleComputes,this.postCompute]),F.lastRenderPassState=this.rendererPassState}onResize(){let e=m.setting.render.postProcessing.bloom,[t,r]=R.presentationSize;this.RT_threshold.resize(t,r);const i=e.downSampleStep;let a=Math.ceil(t/4),o=Math.ceil(r/4);for(let n=0;n<i;n++)this.RT_BloomDown[n].resize(a,o),a=Math.ceil(a/2),o=Math.ceil(o/2);for(let n=0;n<i-1;n++){let l=this.RT_BloomDown[i-2-n].width,h=this.RT_BloomDown[i-2-n].height;this.RT_BloomUp[n].resize(l,h)}this.thresholdCompute.workerSizeX=Math.ceil(this.RT_threshold.width/8),this.thresholdCompute.workerSizeY=Math.ceil(this.RT_threshold.height/8),this.thresholdCompute.workerSizeZ=1;for(let n=0;n<i;n++){let l=this.downSampleComputes[n],h=this.RT_BloomDown[n];l.workerSizeX=Math.ceil(h.width/8),l.workerSizeY=Math.ceil(h.height/8),l.workerSizeZ=1}{let n=this.RT_BloomUp[0],l=this.upSampleComputes[0];l.workerSizeX=Math.ceil(n.width/8),l.workerSizeY=Math.ceil(n.height/8),l.workerSizeZ=1}for(let n=1;n<i-1;n++){let l=this.RT_BloomUp[n],h=this.upSampleComputes[n];h.workerSizeX=Math.ceil(l.width/8),h.workerSizeY=Math.ceil(l.height/8),h.workerSizeZ=1}this.postCompute.workerSizeX=Math.ceil(this.RT_threshold.width/8),this.postCompute.workerSizeY=Math.ceil(this.RT_threshold.height/8),this.postCompute.workerSizeZ=1}}class sA extends Et{blurTexture1;blurTexture2;rendererPassState;blurComputes;blurSettings;outTexture;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.depthOfView.enable=!0}onDetach(e){m.setting.render.postProcessing.depthOfView.enable=!1}get pixelOffset(){return m.setting.render.postProcessing.depthOfView.pixelOffset}set pixelOffset(e){e=Math.max(0,e);let t=m.setting.render.postProcessing.depthOfView;t.pixelOffset=e}get near(){return m.setting.render.postProcessing.depthOfView.near}set near(e){e=Math.max(0,e);let t=m.setting.render.postProcessing.depthOfView;t.near=e}get far(){return m.setting.render.postProcessing.depthOfView.far}set far(e){e=Math.max(0,e);let t=m.setting.render.postProcessing.depthOfView;t.far=e}createBlurCompute(){this.blurSettings=[],this.blurComputes=[];let e=m.setting.render.postProcessing.depthOfView;for(let t=0;t<e.iterationCount;t++){let r=new ht(4),i=new ue(Ic);this.blurComputes.push(i),this.blurSettings.push(r),i.setUniformBuffer("blurSetting",r);let a=se.getGBufferFrame(se.colorPass_GBuffer);i.setSamplerTexture("gBufferTexture",a.getCompressGBufferTexture());let o=t%2==0?this.blurTexture1:this.blurTexture2,n=t%2==1?this.blurTexture1:this.blurTexture2;i.setSamplerTexture("inTex",o),i.setStorageTexture("outTex",n),i.workerSizeX=Math.ceil(this.blurTexture1.width/8),i.workerSizeY=Math.ceil(this.blurTexture1.height/8),i.workerSizeZ=1,this.outTexture=n}}createResource(){let e=R.presentationSize,t=e[0],r=e[1];this.blurTexture1=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.blurTexture1.name="dof1";let i=new Qe;i.clearValue=[0,0,0,1],i.loadOp="clear",this.blurTexture2=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.blurTexture2.name="dof2";let a=new Qe;a.clearValue=[0,0,0,1],a.loadOp="clear",this.rtFrame=new Ze([this.blurTexture1,this.blurTexture2],[i,a])}render(e,t){if(!this.blurComputes){this.createResource(),this.createBlurCompute();let i=ne.getCameraGroup(e.camera);for(let a=0;a<this.blurComputes.length;a++)this.blurComputes[a].setUniformBuffer("globalUniform",i.uniformGPUBuffer);this.rendererPassState=Te.createRendererPassState(this.rtFrame,null)}this.autoSetColorTexture("inTex",this.blurComputes[0]);let r=m.setting.render.postProcessing.depthOfView;r.far=Math.max(r.near,r.far)+1e-4;for(let i=0;i<r.iterationCount;i++){let a=this.blurComputes[i],o=this.blurSettings[i];o.setFloat("near",r.near),o.setFloat("far",r.far),o.setFloat("pixelOffset",(i+1)*r.pixelOffset),o.apply(),a.setStorageBuffer("blurSetting",o)}F.computeCommand(t,this.blurComputes),F.lastRenderPassState=this.rendererPassState}onResize(){let e=R.presentationSize,t=e[0],r=e[1],i=m.setting.render.postProcessing.depthOfView;i.far=Math.max(i.near,i.far)+1e-4,this.blurTexture1.resize(t,r),this.blurTexture2.resize(t,r);for(let a=0;a<i.iterationCount;a++){let o=this.blurComputes[a];o.workerSizeX=Math.ceil(this.blurTexture1.width/8),o.workerSizeY=Math.ceil(this.blurTexture1.height/8),o.workerSizeZ=1}}}class oA extends Et{outTexture;rendererPassState;rtFrame;view;gBufferTexture;testCompute;_state=0;_state1=256;_state2=256;uniformBuffer;currentRenderTexture;constructor(){super()}onAttach(e){this.view=e}onDetach(e){}set state(e){this._state=e,this.uniformBuffer.setInt32("state",e),this.uniformBuffer.apply()}get state(){return this._state}set size1(e){this._state1=e,this.uniformBuffer.setInt32("state1",e),this.uniformBuffer.apply()}get size1(){return this._state1}set size2(e){this._state2=e,this.uniformBuffer.setInt32("state2",e),this.uniformBuffer.apply()}get size2(){return this._state2}createResource(){let e=se.getGBufferFrame("ColorPassGBuffer");this.currentRenderTexture=e.getColorTexture(),this.gBufferTexture=e.getCompressGBufferTexture();let[t,r]=R.presentationSize;this.outTexture=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="outTexture";let i=new Qe;i.loadOp="load",this.rtFrame=new Ze([this.outTexture],[i])}createCompute(){this.uniformBuffer=new ht(4),this.uniformBuffer.setInt32("state",this._state);let e=ne.getCameraGroup(this.view.camera),r=se.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture(),i=m.setting.reflectionSetting,o=se.getGBufferFrame(se.reflections_GBuffer,i.width,i.height).getCompressGBufferTexture(),n=m.renderJobs.get(this.view).reflectionRenderer.outTexture;this.testCompute=new ue(Xc),this.testCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.testCompute.setUniformBuffer("uniformData",this.uniformBuffer),this.testCompute.setSamplerTexture("gBufferTexture",r),this.testCompute.setSamplerTexture("currentRenderTexture",this.currentRenderTexture),this.testCompute.setSamplerTexture("reflectionsGBufferTexture",o),this.testCompute.setSamplerTexture("envMap",n),this.testCompute.setStorageTexture("outputTexture",this.outTexture),this.testCompute.workerSizeX=Math.ceil(this.outTexture.width/16),this.testCompute.workerSizeY=Math.ceil(this.outTexture.height/16),this.testCompute.workerSizeZ=1}render(e,t){}compute(e){this.testCompute||(this.createResource(),this.createCompute(),this.onResize(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="test");let t=F.beginCommandEncoder();F.computeCommand(t,[this.testCompute]),F.endCommandEncoder(t),F.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=R.presentationSize;this.outTexture.resize(e,t),this.testCompute.workerSizeX=Math.ceil(this.outTexture.width/16),this.testCompute.workerSizeY=Math.ceil(this.outTexture.height/16)}}class nA extends Et{gtaoTexture;rendererPassState;gtaoCompute;gtaoSetting;aoBuffer;directionsBuffer;directionsArray;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.gtao.enable=!0}Render;onDetach(e){m.setting.render.postProcessing.gtao.enable=!1}get maxDistance(){return m.setting.render.postProcessing.gtao.maxDistance}set maxDistance(e){e=ie(e,.1,50);let t=m.setting.render.postProcessing.gtao;t.maxDistance=e}get maxPixel(){return m.setting.render.postProcessing.gtao.maxPixel}set maxPixel(e){e=ie(e,5,100);let t=m.setting.render.postProcessing.gtao;t.maxPixel=e}get darkFactor(){return m.setting.render.postProcessing.gtao.darkFactor}set darkFactor(e){e=ie(e,.01,1);let t=m.setting.render.postProcessing.gtao;t.darkFactor=e}get rayMarchSegment(){return m.setting.render.postProcessing.gtao.rayMarchSegment}set rayMarchSegment(e){e=ie(e,4,10);let t=m.setting.render.postProcessing.gtao;t.rayMarchSegment=e}get multiBounce(){return m.setting.render.postProcessing.gtao.multiBounce}set multiBounce(e){let t=m.setting.render.postProcessing.gtao;t.multiBounce=e}get blendColor(){return m.setting.render.postProcessing.gtao.blendColor}set blendColor(e){let t=m.setting.render.postProcessing.gtao;t.blendColor=e}get usePosFloat32(){return m.setting.render.postProcessing.gtao.usePosFloat32}set usePosFloat32(e){let t=m.setting.render.postProcessing.gtao;t.usePosFloat32=e}createCompute(){this.gtaoCompute=new ue(Ec);let e=new ht(8);this.gtaoCompute.setUniformBuffer("gtaoData",e),this.directionsArray=new Float32Array(16),this.directionsBuffer=new ve(16),this.directionsBuffer.setFloat32Array("array",this.randomDirection()),this.directionsBuffer.apply(),this.gtaoCompute.setStorageBuffer("directions",this.directionsBuffer),this.aoBuffer=new ve(this.gtaoTexture.width*this.gtaoTexture.height),this.gtaoCompute.setStorageBuffer("aoBuffer",this.aoBuffer);let t=se.getGBufferFrame(se.colorPass_GBuffer);this.gtaoCompute.setSamplerTexture("gBufferTexture",t.getCompressGBufferTexture()),this.autoSetColorTexture("inTex",this.gtaoCompute),this.gtaoCompute.setStorageTexture("outTex",this.gtaoTexture),this.gtaoSetting=e}createResource(){let[e,t]=R.presentationSize;this.gtaoTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.gtaoTexture.name="gtaoTex";let r=new Qe;r.loadOp="load",this.rtFrame=new Ze([this.gtaoTexture],[r])}randomCount=0;randomDirection(){this.randomCount=0;let e=Math.PI*2*this.randomCount/16,t=Math.PI*2/8;for(let r=0;r<8;r++){let i=e+r*t;this.directionsArray[r*2]=Math.sin(i),this.directionsArray[r*2+1]=Math.cos(i)}return this.directionsArray}render(e,t){if(!this.gtaoCompute){this.createResource(),this.createCompute(),this.onResize(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="GTAO";let l=ne.getCameraGroup(e.camera);this.gtaoCompute.setUniformBuffer("globalUniform",l.uniformGPUBuffer)}let r=m.setting.render.postProcessing.gtao;this.directionsBuffer.setFloat32Array("array",this.randomDirection()),this.directionsBuffer.apply();let i=1-.2*(be.frame%2),a=r.maxDistance*i,o=r.maxPixel*i;this.gtaoSetting.setFloat("maxDistance",a),this.gtaoSetting.setFloat("maxPixel",o),this.gtaoSetting.setFloat("darkFactor",r.darkFactor),this.gtaoSetting.setFloat("rayMarchSegment",r.rayMarchSegment);let n=e.camera;this.gtaoSetting.setFloat("cameraNear",n.near),this.gtaoSetting.setFloat("cameraFar",n.far),this.gtaoSetting.setFloat("multiBounce",r.multiBounce?1:0),this.gtaoSetting.setFloat("blendColor",r.blendColor?1:0),this.gtaoSetting.apply(),F.computeCommand(t,[this.gtaoCompute]),F.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=R.presentationSize;this.gtaoTexture.resize(e,t),this.gtaoCompute.workerSizeX=Math.ceil(this.gtaoTexture.width/8),this.gtaoCompute.workerSizeY=Math.ceil(this.gtaoTexture.height/8),this.gtaoCompute.workerSizeZ=1}}class lA extends Et{fogSetting;fogOpTexture;fogCompute;fogUniform;rendererPassState;constructor(){super(),this.fogSetting=m.setting.render.postProcessing.globalFog}createCompute(e){O.register("GlobalFog_shader",cn),this.fogCompute=new ue(cn),this.fogUniform=new ht(20),this.fogCompute.setUniformBuffer("fogUniform",this.fogUniform);let t=se.getGBufferFrame(se.colorPass_GBuffer);this.fogCompute.setSamplerTexture("gBufferTexture",t.getCompressGBufferTexture()),this.fogCompute.setSamplerTexture("inTex",t.getColorTexture()),this._lastSkyTexture=this.getSkyTexture(),this.fogCompute.setSamplerTexture("prefilterMap",this._lastSkyTexture),this.fogCompute.setStorageTexture("outTex",this.fogOpTexture),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="FOG";let r=ne.getLightEntries(e.scene);this.fogCompute.setStorageBuffer("lightBuffer",r.storageGPUBuffer)}uploadSetting(){let e=this.fogUniform,t=this.fogSetting;e.setColor("fogColor",t.fogColor),e.setFloat("fogType",t.fogType),e.setFloat("fogHeightScale",t.fogHeightScale),e.setFloat("start",t.start),e.setFloat("end",t.end),e.setFloat("density",t.density),e.setFloat("ins",t.ins),e.setFloat("falloff",t.falloff),e.setFloat("rayLength",t.rayLength),e.setFloat("scatteringExponent",t.scatteringExponent),e.setFloat("dirHeightLine",t.dirHeightLine),e.setFloat("skyFactor",t.skyFactor),e.setFloat("skyRoughness",t.skyRoughness),e.setFloat("overrideSkyFactor",t.overrideSkyFactor),e.setFloat("isSkyHDR",0),e.apply(),this.fogCompute.setUniformBuffer("fogUniform",this.fogUniform)}rtFrame;createResource(){let[e,t]=R.presentationSize;this.fogOpTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.fogOpTexture.name="fogTex";let r=new Qe;r.loadOp="load",this.rtFrame=new Ze([this.fogOpTexture],[r])}onAttach(e){m.setting.render.postProcessing.globalFog.enable=!0}onDetach(e){m.setting.render.postProcessing.globalFog.enable=!1}set fogType(e){this.fogSetting.fogType=e}get fogType(){return this.fogSetting.fogType}set fogHeightScale(e){this.fogSetting.fogHeightScale=e}get fogHeightScale(){return this.fogSetting.fogHeightScale}set start(e){this.fogSetting.start=e}get start(){return this.fogSetting.start}set end(e){this.fogSetting.end=e}get end(){return this.fogSetting.end}set ins(e){this.fogSetting.ins=e}get ins(){return this.fogSetting.ins}set density(e){this.fogSetting.density=e}get density(){return this.fogSetting.density}set skyRoughness(e){this.fogSetting.skyRoughness=e}get skyRoughness(){return this.fogSetting.skyRoughness}set skyFactor(e){this.fogSetting.skyFactor=e}get skyFactor(){return this.fogSetting.skyFactor}set overrideSkyFactor(e){this.fogSetting.overrideSkyFactor=e}get overrideSkyFactor(){return this.fogSetting.overrideSkyFactor}get fogColor(){return this.fogSetting.fogColor}set fogColor(e){this.fogSetting.fogColor.copyFrom(e)}set falloff(e){this.fogSetting.falloff=e}get falloff(){return this.fogSetting.falloff}set rayLength(e){this.fogSetting.rayLength=e}get rayLength(){return this.fogSetting.rayLength}set scatteringExponent(e){this.fogSetting.scatteringExponent=e}get scatteringExponent(){return this.fogSetting.scatteringExponent}set dirHeightLine(e){this.fogSetting.dirHeightLine=e}get dirHeightLine(){return this.fogSetting.dirHeightLine}_lastSkyTexture;getSkyTexture(){let e=m.res.defaultSky;return G.instance.sky instanceof Bs&&(e=G.instance.sky.map),e}render(e,t){if(!this.fogCompute){this.createResource(),this.createCompute(e),this.onResize();let i=ne.getCameraGroup(e.camera);this.fogCompute.setUniformBuffer("globalUniform",i.uniformGPUBuffer)}let r=this.getSkyTexture();r!=this._lastSkyTexture&&(this._lastSkyTexture=r,this.fogCompute.setSamplerTexture("prefilterMap",this._lastSkyTexture)),this.fogCompute.setUniformFloat("isSkyHDR",r.isHDRTexture?1:0),this.uploadSetting(),F.computeCommand(t,[this.fogCompute]),F.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=R.presentationSize;this.fogOpTexture.resize(e,t),this.fogCompute.workerSizeX=Math.ceil(this.fogOpTexture.width/8),this.fogCompute.workerSizeY=Math.ceil(this.fogOpTexture.height/8),this.fogCompute.workerSizeZ=1}}class hA extends Et{godRayTexture;rendererPassState;godRayCompute;historyGodRayData;godRaySetting;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.godRay.enable=!0,this.createGUI()}Render;onDetach(e){m.setting.render.postProcessing.godRay.enable=!1,this.removeGUI()}get blendColor(){return m.setting.render.postProcessing.godRay.blendColor}set blendColor(e){m.setting.render.postProcessing.godRay.blendColor=e}get rayMarchCount(){return m.setting.render.postProcessing.godRay.rayMarchCount}set rayMarchCount(e){e=ie(e,8,20),m.setting.render.postProcessing.godRay.rayMarchCount=e}get scatteringExponent(){return m.setting.render.postProcessing.godRay.scatteringExponent}set scatteringExponent(e){e=ie(e,1,40),m.setting.render.postProcessing.godRay.scatteringExponent=e}get intensity(){return m.setting.render.postProcessing.godRay.intensity}set intensity(e){e=ie(e,.01,5),m.setting.render.postProcessing.godRay.intensity=e}createGUI(){}removeGUI(){}createCompute(e){this.godRayCompute=new ue(wc);let t=new ht(12);this.godRayCompute.setUniformBuffer("godRayUniform",t),this.historyGodRayData=new ve(4*this.godRayTexture.width*this.godRayTexture.height),this.godRayCompute.setStorageBuffer("historyGodRayData",this.historyGodRayData);let r=se.getGBufferFrame(se.colorPass_GBuffer);this.godRayCompute.setSamplerTexture("gBufferTexture",r.getCompressGBufferTexture()),this.autoSetColorTexture("inTex",this.godRayCompute),this.godRayCompute.setStorageTexture("outTex",this.godRayTexture);let i=m.getRenderJob(e).shadowMapPassRenderer;this.godRayCompute.setSamplerTexture("shadowMap",i.depth2DArrayTexture),this.godRaySetting=t,this.onResize()}createResource(){let e=R.presentationSize,[t,r]=e;this.godRayTexture=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.godRayTexture.name="godRayTexture";let i=new Qe;i.loadOp="load",this.rtFrame=new Ze([this.godRayTexture],[i])}onResize(){let e=R.presentationSize,[t,r]=e;this.godRayTexture.resize(t,r),this.historyGodRayData.resizeBuffer(4*this.godRayTexture.width*this.godRayTexture.height),this.godRayCompute.setStorageBuffer("historyGodRayData",this.historyGodRayData),this.godRayCompute.workerSizeX=Math.ceil(this.godRayTexture.width/8),this.godRayCompute.workerSizeY=Math.ceil(this.godRayTexture.height/8),this.godRayCompute.workerSizeZ=1}render(e,t){if(!this.godRayCompute){this.createResource(),this.createCompute(e);let n=ne.getLightEntries(e.scene);this.godRayCompute.setStorageBuffer("lightBuffer",n.storageGPUBuffer),this.godRayCompute.setStorageBuffer("models",ne.modelMatrixBindGroup.matrixBufferDst),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="GodRay";let l=ne.getCameraGroup(e.camera);this.godRayCompute.setUniformBuffer("globalUniform",l.uniformGPUBuffer)}let r=m.setting.render.postProcessing.godRay;this.godRaySetting.setFloat("intensity",r.intensity),this.godRaySetting.setFloat("rayMarchCount",r.rayMarchCount);let i=R.presentationSize,[a,o]=i;this.godRaySetting.setFloat("viewPortWidth",a),this.godRaySetting.setFloat("viewPortHeight",o),this.godRaySetting.setFloat("blendColor",r.blendColor?1:0),this.godRaySetting.setFloat("scatteringExponent",r.scatteringExponent),this.godRaySetting.apply(),F.computeCommand(t,[this.godRayCompute]),F.lastRenderPassState=this.rendererPassState}}class Kf{indexList;color;count}class qf{SlotCount=8;MaxEntities=16;defaultColor=new P(.2,1,1,1);slots=[];dataDirty=!0;constructor(){let e=m.setting.render.postProcessing.outline.groupCount;this.SlotCount=Math.max(1,Math.min(e,this.SlotCount));for(let t=0;t<this.SlotCount;t++){let r=this.slots[t]=new Kf;r.indexList=new Float32Array(this.MaxEntities),r.color=this.defaultColor.clone(),r.count=0}}clear(){for(let e=0;e<this.SlotCount;e++)this.clearAt(e)}clearAt(e){this.dataDirty=!0;let t=this.slots[e];return t.color.copyFrom(this.defaultColor),t.indexList.fill(-1),t.count=0,this}fillDataAt(e,t,r){this.dataDirty=!0;let i=this.slots[e];if(i){i.indexList.fill(-1);for(let a=0,o=t.length;a<o;a++)i.indexList[a]=t[a];i.count=t.length,i.color.copyFrom(r)}return this}fetchData(e){return e.dirty=this.dataDirty,e.slots=this.slots,this.dataDirty=!1,this}}let nr=new qf;class uA extends Et{outlineTex;lowTex;rendererPassState;calcWeightCompute;outlineCompute;blendCompute;outlineSetting;slotsBuffer;slotsArray;entitiesArray;entitiesBuffer;weightBuffer;lowTexSize;oldOutlineColor;rtFrame;view;constructor(){super()}onAttach(e){this.view=e,m.setting.render.postProcessing.outline.enable=!0}onDetach(e){m.setting.render.postProcessing.outline.enable=!1}set outlinePixel(e){e=ie(e,0,8);let t=m.setting.render.postProcessing.outline;t.outlinePixel!=e&&(t.outlinePixel=e)}get outlinePixel(){return m.setting.render.postProcessing.outline.outlinePixel}set fadeOutlinePixel(e){let t=m.setting.render.postProcessing.outline;e=ie(e,0,8),t.fadeOutlinePixel!=e&&(t.fadeOutlinePixel=e)}get fadeOutlinePixel(){return m.setting.render.postProcessing.outline.fadeOutlinePixel}set strength(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.outline;t.strength!=e&&(t.strength=e)}get strength(){return m.setting.render.postProcessing.outline.strength}set useAddMode(e){m.setting.render.postProcessing.outline.useAddMode=e}get useAddMode(){return m.setting.render.postProcessing.outline.useAddMode}createGUI(){}createCompute(){let e=se.getGBufferFrame(se.colorPass_GBuffer);this.calcWeightCompute=new ue(Mc);let t=ne.getCameraGroup(this.view.camera);this.calcWeightCompute.setUniformBuffer("globalUniform",t.uniformGPUBuffer),this.calcWeightCompute.setStorageBuffer("outlineSetting",this.outlineSetting),this.calcWeightCompute.setStorageBuffer("slotsBuffer",this.slotsBuffer),this.calcWeightCompute.setStorageBuffer("weightBuffer",this.weightBuffer),this.calcWeightCompute.setStorageBuffer("entitiesBuffer",this.entitiesBuffer),this.calcWeightCompute.setSamplerTexture("gBufferTexture",e.getCompressGBufferTexture()),this.calcWeightCompute.workerSizeX=Math.ceil(this.lowTex.width/8),this.calcWeightCompute.workerSizeY=Math.ceil(this.lowTex.height/8),this.calcWeightCompute.workerSizeZ=1,this.outlineCompute=new ue(Nc),this.outlineCompute.setStorageBuffer("outlineSetting",this.outlineSetting),this.outlineCompute.setStorageBuffer("slotsBuffer",this.slotsBuffer),this.outlineCompute.setStorageBuffer("weightBuffer",this.weightBuffer),this.outlineCompute.setStorageBuffer("oldOutlineColor",this.oldOutlineColor),this.outlineCompute.setStorageTexture("lowTex",this.lowTex),this.outlineCompute.workerSizeX=Math.ceil(this.lowTex.width/8),this.outlineCompute.workerSizeY=Math.ceil(this.lowTex.height/8),this.outlineCompute.workerSizeZ=1,this.blendCompute=new ue(Dc),this.blendCompute.setStorageBuffer("outlineSetting",this.outlineSetting),this.autoSetColorTexture("inTex",this.blendCompute),this.blendCompute.setSamplerTexture("lowTex",this.lowTex),this.blendCompute.setStorageTexture("outlineTex",this.outlineTex),this.blendCompute.workerSizeX=Math.ceil(this.outlineTex.width/8),this.blendCompute.workerSizeY=Math.ceil(this.outlineTex.height/8),this.blendCompute.workerSizeZ=1}createResource(){let e=R.presentationSize,t=e[0],r=e[1],i=m.setting.render.postProcessing.outline.textureScale;this.lowTexSize=new K(Math.ceil(t*i),Math.ceil(r*i)),this.lowTex=new Ae(this.lowTexSize.x,this.lowTexSize.y,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.lowTex.name="lowTex";let a=new Qe;a.clearValue=[0,0,0,1],a.loadOp="clear",this.outlineTex=new Ae(t,r,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outlineTex.name="outlineTex";let o=new Qe;o.clearValue=[0,0,0,1],o.loadOp="clear",this.rtFrame=new Ze([this.outlineTex],[o]),this.outlineSetting=new ht(8),this.weightBuffer=new ve(this.lowTexSize.x*this.lowTexSize.y*4,GPUBufferUsage.COPY_SRC),this.oldOutlineColor=new ve(this.lowTexSize.x*this.lowTexSize.y*4,GPUBufferUsage.COPY_SRC),this.slotsArray=new Float32Array(nr.SlotCount*4),this.slotsBuffer=new ve(this.slotsArray.length),this.slotsBuffer.setFloat32Array("slotsArray",this.slotsArray),this.slotsBuffer.apply(),this.entitiesArray=new Float32Array(nr.SlotCount*nr.MaxEntities),this.entitiesBuffer=new ve(this.entitiesArray.length),this.entitiesBuffer.setFloat32Array("entitiesArray",this.entitiesArray),this.slotsBuffer.apply(),this.fetchData||={}}fetchData;fetchOutlineData(){if(nr.fetchData(this.fetchData),this.fetchData.dirty){let e=nr.SlotCount,t=nr.MaxEntities;for(let r=0;r<e;r++){let i=4*r,a=this.fetchData.slots[r];this.slotsArray[i+0]=a.color.r,this.slotsArray[i+1]=a.color.g,this.slotsArray[i+2]=a.color.b,this.slotsArray[i+3]=a.count,i=t*r,this.entitiesArray.set(a.indexList,i)}this.slotsBuffer.setFloat32Array("slotsArray",this.slotsArray),this.slotsBuffer.apply(),this.entitiesBuffer.setFloat32Array("entitiesArray",this.entitiesArray),this.entitiesBuffer.apply()}}computeList;render(e,t){this.calcWeightCompute||(this.createResource(),this.createCompute(),this.createGUI(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null)),this.computeList||=[this.calcWeightCompute,this.outlineCompute,this.blendCompute];let r=m.setting.render.postProcessing.outline;this.outlineSetting.setFloat("strength",r.strength),this.outlineSetting.setFloat("useAddMode",r.useAddMode?1:0),this.outlineSetting.setFloat("outlinePixel",r.outlinePixel),this.outlineSetting.setFloat("fadeOutlinePixel",r.fadeOutlinePixel),this.outlineSetting.setFloat("lowTexWidth",this.lowTexSize.x),this.outlineSetting.setFloat("lowTexHeight",this.lowTexSize.y),this.outlineSetting.apply(),this.fetchOutlineData(),F.computeCommand(t,this.computeList),F.lastRenderPassState=this.rendererPassState}onResize(){let e=R.presentationSize,t=e[0],r=e[1],i=m.setting.render.postProcessing.outline.textureScale;this.lowTexSize=new K(Math.ceil(t*i),Math.ceil(r*i)),this.lowTex.resize(this.lowTexSize.x,this.lowTexSize.y),this.outlineTex.resize(t,r),this.weightBuffer.resizeBuffer(this.lowTexSize.x*this.lowTexSize.y*4),this.oldOutlineColor.resizeBuffer(this.lowTexSize.x*this.lowTexSize.y*4),this.calcWeightCompute.workerSizeX=Math.ceil(this.lowTex.width/8),this.calcWeightCompute.workerSizeY=Math.ceil(this.lowTex.height/8),this.calcWeightCompute.workerSizeZ=1,this.outlineCompute.workerSizeX=Math.ceil(this.lowTex.width/8),this.outlineCompute.workerSizeY=Math.ceil(this.lowTex.height/8),this.outlineCompute.workerSizeZ=1,this.blendCompute.workerSizeX=Math.ceil(this.outlineTex.width/8),this.blendCompute.workerSizeY=Math.ceil(this.outlineTex.height/8),this.blendCompute.workerSizeZ=1}}class cA extends Et{outTexture;newTexture;oldTexture;combineTexture;rendererPassState;ssgiCompute;delayCompute;combineCompute;rtFrame;textureScaleSmallCompute;textureScaleBigCompute;view;colorTexture;posTexture;normalTexture;gBufferTexture;lastPosTexture;downSampleCofe=1;debugChanal="0";updateBuffer;constructor(){super(),this.updateBuffer=new ve(32),this.updateBuffer.setFloat("frameCount",10),this.updateBuffer.setFloat("indirectIns",1.5),this.updateBuffer.setFloat("delay",.02),this.updateBuffer.setFloat("colorIns",1),this.updateBuffer.setFloat("d1",.03),this.updateBuffer.apply()}onAttach(e){this.view=e,e.camera.transform.onPositionChange=e.camera.transform.onPositionChange?ss(e.camera.transform.onPositionChange,(t,r)=>this.onCameraChange(t,r)):(t,r)=>this.onCameraChange(t,r)}onCameraChange(e,t){console.log("a");let r=d.distance(e,t);r=Math.min(.45,r)+.01,this.updateBuffer.setFloat("delay",r)}Render;onDetach(e){}set ins(e){this.updateBuffer.setFloat("indirectIns",e),this.updateBuffer.apply()}get ins(){return this.updateBuffer.getFloat("indirectIns")}set delay(e){this.updateBuffer.setFloat("delay",e),this.updateBuffer.apply()}get delay(){return this.updateBuffer.getFloat("delay")}set colorIns(e){this.updateBuffer.setFloat("colorIns",e),this.updateBuffer.apply()}get colorIns(){return this.updateBuffer.getFloat("colorIns")}set frameCount(e){this.updateBuffer.setFloat("frameCount",e),this.updateBuffer.apply()}get frameCount(){return this.updateBuffer.getFloat("frameCount")}set d1(e){this.updateBuffer.setFloat("d1",e),this.updateBuffer.apply()}get d1(){return this.updateBuffer.getFloat("d1")}createResource(){let e=se.getGBufferFrame("ColorPassGBuffer");this.gBufferTexture=e.getCompressGBufferTexture();let t=R.presentationSize,r=t[0],i=t[1];this.lastPosTexture=new Ae(r,i,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.lastPosTexture.name="lastPosTexture",this.outTexture=new Ae(r,i,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="outTexture";let a=Math.floor(r*this.downSampleCofe),o=Math.floor(i*this.downSampleCofe);this.newTexture=new Ae(a,o,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.newTexture.name="newTexture",this.oldTexture=new Ae(a,o,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.oldTexture.name="oldTexture",this.combineTexture=new Ae(a,o,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.combineTexture.name="combineTexture";let n=new Qe;n.loadOp="load",this.rtFrame=new Ze([this.outTexture],[n])}createCompute(){this.ssgiCompute=new ue(kc),this.delayCompute=new ue(Yc),this.combineCompute=new ue(Zc);let e=ne.getCameraGroup(this.view.camera);this.ssgiCompute.setSamplerTexture("gBufferTexture",this.gBufferTexture),this.ssgiCompute.setSamplerTexture("combineTexture",this.combineTexture),this.ssgiCompute.setSamplerTexture("oldTexture",this.oldTexture),this.ssgiCompute.setStorageTexture("newTexture",this.newTexture),this.ssgiCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.ssgiCompute.setStorageBuffer("updateBuffer",this.updateBuffer),this.autoSetColorTexture("inTex",this.ssgiCompute),this.delayCompute.setSamplerTexture("newTexture",this.newTexture),this.delayCompute.setSamplerTexture("oldTexture",this.oldTexture),this.delayCompute.setStorageTexture("combineTexture",this.combineTexture),this.delayCompute.setStorageBuffer("updateBuffer",this.updateBuffer),this.combineCompute.setSamplerTexture("inputBTexture",this.combineTexture),this.combineCompute.setSamplerTexture("gBufferTexture",this.gBufferTexture),this.combineCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.combineCompute.setStorageTexture("outTexture",this.outTexture),this.combineCompute.setStorageBuffer("updateBuffer",this.updateBuffer),this.textureScaleBigCompute=new Jf,this.textureScaleBigCompute.setInputes(null,[this.combineTexture],[this.outTexture])}render(e,t){}frame=0;compute(e){this.ssgiCompute||(this.createResource(),this.createCompute(),this.onResize(),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="SSGI"),this.frameCount=this.frame,this.frame++;let t=F.beginCommandEncoder();switch(parseInt(this.debugChanal)){case 0:F.copyTexture(t,this.combineTexture,this.oldTexture),F.computeCommand(t,[this.ssgiCompute,this.delayCompute,this.combineCompute]);break;case 1:F.copyTexture(t,this.posTexture,this.lastPosTexture),F.copyTexture(t,this.lastPosTexture,this.outTexture);break;case 2:F.copyTexture(t,this.normalTexture,this.outTexture);break;case 3:F.copyTexture(t,this.posTexture,this.outTexture);break;case 4:F.copyTexture(t,this.colorTexture,this.outTexture);break;case 5:F.copyTexture(t,this.gBufferTexture,this.outTexture);break}F.lastRenderPassState=this.rendererPassState,this.updateBuffer.setFloat("delay",.01)}onResize(){let e=R.presentationSize,t=e[0],r=e[1];this.outTexture.resize(t,r),this.ssgiCompute.workerSizeX=Math.ceil(this.newTexture.width/16),this.ssgiCompute.workerSizeY=Math.ceil(this.newTexture.height/16),this.ssgiCompute.workerSizeZ=1,this.delayCompute.workerSizeX=Math.ceil(this.combineTexture.width/16),this.delayCompute.workerSizeY=Math.ceil(this.combineTexture.height/16),this.delayCompute.workerSizeZ=1,this.combineCompute.workerSizeX=Math.ceil(this.outTexture.width/16),this.combineCompute.workerSizeY=Math.ceil(this.outTexture.height/16),this.combineCompute.workerSizeZ=1}}class fA extends Et{SSR_RayTraceCompute;SSR_IS_Compute;SSR_Blend_Compute;isRetTexture;finalTexture;rendererPassState;ssrUniformBuffer;rayTraceData;ssrColorData;rtFrame;historyPosition;view;onAttach(e){this.view=e,m.setting.render.postProcessing.ssr.enable=!0}onDetach(e){m.setting.render.postProcessing.ssr.enable=!1}reflectionRatio=.5;get fadeEdgeRatio(){return m.setting.render.postProcessing.ssr.fadeEdgeRatio}set fadeEdgeRatio(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.ssr;t.fadeEdgeRatio=e}get rayMarchRatio(){return m.setting.render.postProcessing.ssr.rayMarchRatio}set rayMarchRatio(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.ssr;t.rayMarchRatio=e}get roughnessThreshold(){return m.setting.render.postProcessing.ssr.roughnessThreshold}set roughnessThreshold(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.ssr;t.roughnessThreshold=e}get fadeDistanceMin(){return m.setting.render.postProcessing.ssr.fadeDistanceMin}set fadeDistanceMin(e){e=ie(e,0,1e4);let t=m.setting.render.postProcessing.ssr;t.fadeDistanceMin=e}get fadeDistanceMax(){return m.setting.render.postProcessing.ssr.fadeDistanceMax}set fadeDistanceMax(e){e=ie(e,0,1e4);let t=m.setting.render.postProcessing.ssr;t.fadeDistanceMax=e}get powDotRN(){return m.setting.render.postProcessing.ssr.powDotRN}set powDotRN(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.ssr;t.powDotRN=e}createRayTraceShader(){let e=ne.getCameraGroup(this.view.camera);this.SSR_RayTraceCompute=new ue(zc),this.SSR_RayTraceCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.SSR_RayTraceCompute.setUniformBuffer("ssrUniform",this.ssrUniformBuffer),this.SSR_RayTraceCompute.setStorageBuffer("rayTraceBuffer",this.rayTraceData),this.SSR_RayTraceCompute.setStorageBuffer("historyPosition",this.historyPosition);let r=se.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture();this.SSR_RayTraceCompute.setSamplerTexture("gBufferTexture",r),G.instance.sky instanceof Bs&&this.SSR_RayTraceCompute.setSamplerTexture("prefilterMap",G.instance.sky.map),this.SSR_RayTraceCompute.workerSizeX=Math.ceil(this.isRetTexture.width/8),this.SSR_RayTraceCompute.workerSizeY=Math.ceil(this.isRetTexture.height/8),this.SSR_RayTraceCompute.workerSizeZ=1}createISShader(){this.SSR_IS_Compute=new ue(Oc),this.SSR_IS_Compute.setStorageBuffer("ssrUniform",this.ssrUniformBuffer),this.SSR_IS_Compute.setStorageBuffer("rayTraceBuffer",this.rayTraceData),this.SSR_IS_Compute.setStorageBuffer("ssrColorData",this.ssrColorData),this.SSR_IS_Compute.setStorageBuffer("historyPosition",this.historyPosition),this.SSR_IS_Compute.setSamplerTexture("colorMap",this.getOutTexture()),this.SSR_IS_Compute.setStorageTexture("outTex",this.isRetTexture),this.SSR_IS_Compute.workerSizeX=Math.ceil(this.isRetTexture.width/8),this.SSR_IS_Compute.workerSizeY=Math.ceil(this.isRetTexture.height/8),this.SSR_IS_Compute.workerSizeZ=1}createBlendShader(e){let t=ne.getCameraGroup(this.view.camera);this.SSR_Blend_Compute=new ue(Lc),this.SSR_Blend_Compute.setStorageBuffer("rayTraceBuffer",this.rayTraceData),this.SSR_Blend_Compute.setUniformBuffer("globalUniform",t.uniformGPUBuffer);let i=se.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture();this.SSR_Blend_Compute.setSamplerTexture("gBufferTexture",i),this.SSR_Blend_Compute.setSamplerTexture("colorMap",this.getOutTexture()),this.SSR_Blend_Compute.setSamplerTexture("ssrMap",e),this.SSR_Blend_Compute.setStorageTexture("outTex",this.finalTexture),this.SSR_Blend_Compute.workerSizeX=Math.ceil(this.finalTexture.width/8),this.SSR_Blend_Compute.workerSizeY=Math.ceil(this.finalTexture.height/8),this.SSR_Blend_Compute.workerSizeZ=1}createResource(){let[e,t]=R.presentationSize;this.finalTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),this.finalTexture.name="ssrOutTex";let r=new Qe;r.clearValue=[0,0,0,0],r.loadOp="clear";let i=Math.ceil(e*m.setting.render.postProcessing.ssr.pixelRatio),a=Math.ceil(t*m.setting.render.postProcessing.ssr.pixelRatio);this.isRetTexture=new Ae(i,a,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),this.isRetTexture.name="ssrTextureIn";let o=new Qe;o.clearValue=[0,0,0,0],o.loadOp="clear",this.rtFrame=new Ze([this.finalTexture,this.isRetTexture],[r,o]),this.rayTraceData=new ve(i*a*8,GPUBufferUsage.COPY_SRC),this.ssrColorData=new ve(i*a*4,GPUBufferUsage.COPY_SRC),this.historyPosition=new ve(i*a*4,GPUBufferUsage.COPY_SRC),this.ssrUniformBuffer=new ht(32),this.ssrUniformBuffer.setFloat("ssrBufferSizeX",this.isRetTexture.width),this.ssrUniformBuffer.setFloat("ssrBufferSizeY",this.isRetTexture.height),this.ssrUniformBuffer.setFloat("colorMapSizeX",this.finalTexture.width),this.ssrUniformBuffer.setFloat("colorMapSizeY",this.finalTexture.height),this.ssrUniformBuffer.apply()}render(e,t){if(!this.SSR_RayTraceCompute){this.createResource(),this.createISShader(),this.createRayTraceShader(),this.createBlendShader(this.isRetTexture),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null);let a=ne.getCameraGroup(e.camera);this.SSR_RayTraceCompute.setUniformBuffer("standUniform",a.uniformGPUBuffer)}let r=m.setting.render.postProcessing.ssr;this.ssrUniformBuffer.setFloat("fadeEdgeRatio",r.fadeEdgeRatio),this.ssrUniformBuffer.setFloat("rayMarchRatio",r.rayMarchRatio),this.ssrUniformBuffer.setFloat("fadeDistanceMin",r.fadeDistanceMin),this.ssrUniformBuffer.setFloat("fadeDistanceMax",r.fadeDistanceMax),this.ssrUniformBuffer.setFloat("mixThreshold",r.mixThreshold),this.ssrUniformBuffer.setFloat("roughnessThreshold",r.roughnessThreshold),this.ssrUniformBuffer.setFloat("reflectionRatio",this.reflectionRatio),this.ssrUniformBuffer.setFloat("powDotRN",r.powDotRN),this.ssrUniformBuffer.setFloat("randomSeedX",Math.random()),this.ssrUniformBuffer.setFloat("randomSeedY",Math.random()),this.ssrUniformBuffer.apply();let i=[this.SSR_RayTraceCompute,this.SSR_IS_Compute,this.SSR_Blend_Compute];F.computeCommand(t,i),F.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=R.presentationSize,r=Math.ceil(e*m.setting.render.postProcessing.ssr.pixelRatio),i=Math.ceil(t*m.setting.render.postProcessing.ssr.pixelRatio);this.finalTexture.resize(e,t),this.isRetTexture.resize(r,i),this.rayTraceData.resizeBuffer(r*i*8),this.ssrColorData.resizeBuffer(r*i*4),this.historyPosition.resizeBuffer(r*i*4),this.ssrUniformBuffer.setFloat("ssrBufferSizeX",this.isRetTexture.width),this.ssrUniformBuffer.setFloat("ssrBufferSizeY",this.isRetTexture.height),this.ssrUniformBuffer.setFloat("colorMapSizeX",this.finalTexture.width),this.ssrUniformBuffer.setFloat("colorMapSizeY",this.finalTexture.height),this.SSR_RayTraceCompute.workerSizeX=Math.ceil(this.isRetTexture.width/8),this.SSR_RayTraceCompute.workerSizeY=Math.ceil(this.isRetTexture.height/8),this.SSR_RayTraceCompute.workerSizeZ=1,this.SSR_IS_Compute.workerSizeX=Math.ceil(this.isRetTexture.width/8),this.SSR_IS_Compute.workerSizeY=Math.ceil(this.isRetTexture.height/8),this.SSR_IS_Compute.workerSizeZ=1,this.SSR_Blend_Compute.workerSizeX=Math.ceil(this.finalTexture.width/8),this.SSR_Blend_Compute.workerSizeY=Math.ceil(this.finalTexture.height/8),this.SSR_Blend_Compute.workerSizeZ=1}}class dA{static createSeeds(){let e=20,t=32,r=[new d(0,0,e)],i=0,a=.02;for(let o=1;o<t;o++){let n=new d;r.push(n),i+=1-(1-.618)*o/t,a+=o*.01,n.x=Math.sin(i)*a,n.y=Math.cos(i)*a,n.z=1-o/t,n.multiplyScalar(e)}return r}}class gA extends Et{taaTexture;outTexture;rendererPassState;taaCompute;copyTexCompute;sharpCompute;taaSetting;preColorBuffer;preColorTex;preProjMatrix;preViewMatrix;rtFrame;constructor(){super()}onAttach(e){m.setting.render.postProcessing.taa.enable=!0,e.camera.enableJitterProjection(!0),this.createGUI()}onDetach(e){m.setting.render.postProcessing.taa.enable=!1,e.camera.enableJitterProjection(!1)}get jitterSeedCount(){return m.setting.render.postProcessing.taa.jitterSeedCount}set jitterSeedCount(e){e=ie(e,2,32),e=Math.round(e);let t=m.setting.render.postProcessing.taa;t.jitterSeedCount=e}get blendFactor(){return m.setting.render.postProcessing.taa.blendFactor}set blendFactor(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.taa;t.blendFactor=e}get sharpFactor(){return m.setting.render.postProcessing.taa.sharpFactor}set sharpFactor(e){e=ie(e,.1,.99);let t=m.setting.render.postProcessing.taa;t.sharpFactor=e}get sharpPreBlurFactor(){return m.setting.render.postProcessing.taa.sharpPreBlurFactor}set sharpPreBlurFactor(e){e=ie(e,.1,.99);let t=m.setting.render.postProcessing.taa;t.sharpPreBlurFactor=e}get temporalJitterScale(){return m.setting.render.postProcessing.taa.temporalJitterScale}set temporalJitterScale(e){e=ie(e,0,1);let t=m.setting.render.postProcessing.taa;t.temporalJitterScale=e}createGUI(){}createCompute(e){let t=new ue(Jc),r=new ht(44),i=ne.getCameraGroup(e.camera);t.setUniformBuffer("globalUniform",i.uniformGPUBuffer),t.setUniformBuffer("taaData",r),t.setStorageBuffer("preColorBuffer",this.preColorBuffer);let a=se.getGBufferFrame(se.colorPass_GBuffer);t.setSamplerTexture("preColorTex",this.preColorTex),t.setSamplerTexture("gBufferTexture",a.getCompressGBufferTexture()),this.autoSetColorTexture("inTex",t),t.setStorageTexture("outTex",this.taaTexture),t.workerSizeX=Math.ceil(this.taaTexture.width/8),t.workerSizeY=Math.ceil(this.taaTexture.height/8),t.workerSizeZ=1,this.taaCompute=t,this.taaSetting=r,this.copyTexCompute=new ue(Gc),this.copyTexCompute.setStorageBuffer("preColor",this.preColorBuffer),this.copyTexCompute.setStorageTexture("preColorTex",this.preColorTex),this.copyTexCompute.workerSizeX=Math.ceil(this.taaTexture.width/8),this.copyTexCompute.workerSizeY=Math.ceil(this.taaTexture.height/8),this.copyTexCompute.workerSizeZ=1,this.sharpCompute=new ue(Wc),this.sharpCompute.setUniformBuffer("taaData",r),this.sharpCompute.setSamplerTexture("inTex",this.taaTexture),this.sharpCompute.setStorageTexture("outTex",this.outTexture),this.sharpCompute.workerSizeX=Math.ceil(this.outTexture.width/8),this.sharpCompute.workerSizeY=Math.ceil(this.outTexture.height/8),this.sharpCompute.workerSizeZ=1}createResource(){this.preProjMatrix=new I().identity(),this.preViewMatrix=new I().identity();let[e,t]=R.presentationSize;this.preColorBuffer=new ve(e*t*4,GPUBufferUsage.COPY_SRC),this.preColorTex=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.preColorTex.name="taaTex";let r=new Qe;r.clearValue=[0,0,0,1],r.loadOp="clear",this.taaTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.taaTexture.name="taaTex";let i=new Qe;i.clearValue=[0,0,0,1],i.loadOp="clear",this.outTexture=new Ae(e,t,X.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="sharpTaaTex";let a=new Qe;a.clearValue=[0,0,0,1],a.loadOp="clear",this.rtFrame=new Ze([this.preColorTex,this.taaTexture,this.outTexture],[r,i,a])}render(e,t){this.taaCompute||(this.createResource(),this.createCompute(e),this.rendererPassState=Te.createRendererPassState(this.rtFrame,null));let r=m.setting.render.postProcessing.taa;this.taaSetting.setMatrix("preProjMatrix",this.preProjMatrix),this.taaSetting.setMatrix("preViewMatrix",this.preViewMatrix),this.taaSetting.setFloat("jitterFrameIndex",e.camera.jitterFrameIndex),this.taaSetting.setFloat("blendFactor",r.blendFactor),this.taaSetting.setFloat("sharpFactor",r.sharpFactor),this.taaSetting.setFloat("sharpPreBlurFactor",r.sharpPreBlurFactor),this.taaSetting.setFloat("jitterX",e.camera.jitterX),this.taaSetting.setFloat("jitterY",e.camera.jitterY),this.taaSetting.apply(),F.computeCommand(t,[this.copyTexCompute,this.taaCompute,this.sharpCompute]),F.lastRenderPassState=this.rendererPassState,this.preProjMatrix.copyFrom(e.camera.projectionMatrix),this.preViewMatrix.copyFrom(e.camera.viewMatrix)}onResize(){let[e,t]=R.presentationSize;this.preColorBuffer.resizeBuffer(e*t*4),this.taaTexture.resize(e,t),this.outTexture.resize(e,t),this.preColorTex.resize(e,t),this.taaCompute.workerSizeX=Math.ceil(this.taaTexture.width/8),this.taaCompute.workerSizeY=Math.ceil(this.taaTexture.height/8),this.taaCompute.workerSizeZ=1,this.copyTexCompute.workerSizeX=Math.ceil(this.taaTexture.width/8),this.copyTexCompute.workerSizeY=Math.ceil(this.taaTexture.height/8),this.copyTexCompute.workerSizeZ=1,this.sharpCompute.workerSizeX=Math.ceil(this.outTexture.width/8),this.sharpCompute.workerSizeY=Math.ceil(this.outTexture.height/8),this.sharpCompute.workerSizeZ=1}}class $f{_tempIndexArray=[];setOutline(e,t){this.setOutlineList([e],t?[t]:null)}setOutlineList(e,t){e||=[];let r=nr.defaultColor,i=nr.SlotCount;for(let a=0;a<i;a++){this._tempIndexArray.length=0;let o=e[a],n=(t?t[a]:null)||r;if(o)for(const l of o)this.getEntityIdList(l,this._tempIndexArray);nr.fillDataAt(a,this._tempIndexArray,n)}}clearOutline(){return nr.clear(),this}_rendererList=[];getEntityIdList(e,t){this._rendererList.length=0;let r=e.getComponents(j,this._rendererList);for(const i of r)t.push(i.object3D.transform._worldMatrix.index)}}let pA=new $f;class ed{localPosition=new d;worldPosition=new d;uv=new K;faceIndex;isIn=!1;t=0;u=0;v=0;triangle;v0;v1;v2;pickList;color}class na{static EPS=1e-4;static FLT_MAX=3402823466e29;static distPtTri(e,t,r,i){let a=new d,o=new d,n=new d;i.subtract(t,a),r.subtract(t,o),e.subtract(t,n);let l=ct(a,a),h=ct(a,o),u=ct(a,n),c=ct(o,o),f=ct(o,n),g=1/(l*c-h*h),p=(c*u-h*f)*g,A=(l*f-h*u)*g;if(p>=-na.EPS&&A>=-na.EPS&&p+A<=1+na.EPS){let U=t[1]+a[1]*p+o[1]*A;return Math.abs(U-e[1])}return na.FLT_MAX}static _info=new ed;static IntersectTriangle(e,t,r){let i=t.v1,a=t.v2,o=t.v3,n=a.subtract(i,d.HELP_3),l=o.subtract(i,d.HELP_4),h=e.direction.crossProduct(l,d.HELP_5),u=ct(n,h),c;if(u>0){if(r)return null;c=e.origin.subtract(i,d.HELP_2)}else c=i.subtract(e.origin,d.HELP_2),u=-u;if(u<1e-4)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let f=ct(c,h);if(f<0||f>u)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let g=c.crossProduct(n,d.HELP_1),p=ct(e.direction,g);if(p<0||f+p>u)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let A=ct(l,g),U=1/u;A*=U,f*=U,p*=U,this._info.isIn=!0,this._info.t=A,this._info.u=f,this._info.v=p;let x=1-f-p;return this._u0.copyFrom(t.u1),this._u0.scale(x),this._u1.copyFrom(t.u2),this._u1.scale(f),this._u2.copyFrom(t.u3),this._u2.scale(p),this._info.uv.copyFrom(this._u0),this._info.uv.add(this._u1,this._info.uv),this._info.uv.add(this._u2,this._info.uv),this._info.localPosition.copyFrom(e.direction).multiplyScalar(A),this._info.localPosition.add(e.origin,this._info.localPosition),this._info}static _u0=new K;static _u1=new K;static _u2=new K}class Gs extends Er{static _instance;_maxRetry=3;loadAll(e,t){return new Promise((r,i)=>{let a=e.length,o=[];e.forEach((n,l)=>{let h=new t;this.load(n,t).then(u=>{h.parse(u),o.push(h),a--,a===0&&r(o)})})})}constructor(){if(super(),Gs._instance)throw new Error("LoadManager is singleton class...")}static getInstance(){return this._instance||(this._instance=new Gs)}loadUrls(e,t){return new Promise((r,i)=>{let a=e.length,o=[];e.forEach((n,l)=>{this.load(n,t).then(h=>{o.push(h),a--,a===0&&r(o),a<0&&console.error(`loadUrls ${e} error`)})})})}get maxRetry(){return this._maxRetry}set maxRetry(e){this._maxRetry=e}load(e,t){return new Promise((r,i)=>{t.format})}}function td(s){const e=[1/0,1/0,1/0],t=[-1/0,-1/0,-1/0];for(let r=0;r<s.length;r+=3){const i=s[r+0],a=s[r+1],o=s[r+2];i<e[0]&&(e[0]=i),a<e[1]&&(e[1]=a),o<e[2]&&(e[2]=o),i>t[0]&&(t[0]=i),a>t[1]&&(t[1]=a),o>t[2]&&(t[2]=o)}return{min:e,max:t}}var sa=(s=>(s.PLY="ply",s.SPLAT="splat",s.KSPLAT="ksplat",s.UNKNOWN="unknown",s))(sa||{});function rd(s){if(s.byteLength<16)return"unknown";const e=new Uint8Array(s,0,Math.min(512,s.byteLength));return new TextDecoder("utf-8").decode(e).startsWith("ply")?"ply":"unknown"}function id(s){switch(s){case"char":case"uchar":case"uint8":case"int8":return 1;case"short":case"ushort":case"int16":case"uint16":return 2;case"int":case"uint":case"int32":case"uint32":case"float":case"float32":return 4;case"double":case"float64":return 8;default:return 4}}function et(s,e,t){switch(t){case"char":case"int8":return s.getInt8(e);case"uchar":case"uint8":return s.getUint8(e);case"short":case"int16":return s.getInt16(e,!0);case"ushort":case"uint16":return s.getUint16(e,!0);case"int":case"int32":return s.getInt32(e,!0);case"uint":case"uint32":return s.getUint32(e,!0);case"double":case"float64":return s.getFloat64(e,!0);case"float":case"float32":default:return s.getFloat32(e,!0)}}function ad(s){const e=Math.round(Math.sqrt(s));return Math.max(0,e-1)}function sd(s){const e=new TextDecoder("utf-8").decode(new Uint8Array(s,0,Math.min(4096,s.byteLength)));if(!e.startsWith("ply"))throw new Error("PLY: Unsupported format. Expecting PLY file.");const t=e.indexOf(`end_header
|
|
11485
|
+
`);if(t<0)throw new Error("PLY: Invalid PLY header");const r=e.substring(0,t+11),i=r.split(/\r?\n/);let a="",o=0;const n=[];let l=!1;for(const h of i)if(h.startsWith("format "))a=h.split(/\s+/)[1];else if(h.startsWith("element ")){const u=h.split(/\s+/);l=u[1]==="vertex",l&&(o=parseInt(u[2]))}else if(l&&h.startsWith("property ")){const u=h.split(/\s+/),c=u[1],f=u[2];n.push({name:f,type:c})}if(a!=="binary_little_endian")throw new Error("PLY: Only binary_little_endian PLY is supported");return{format:a,vertexCount:o,properties:n,headerByteLength:r.length}}function od(s){const e=sd(s),{vertexCount:t,properties:r,headerByteLength:i}=e,a=new DataView(s,i),o=C=>r.find(_=>_.name===C)!=null,n=C=>r.findIndex(_=>_.name===C),l=new Float32Array(t*3),h=o("scale_0")?new Float32Array(t*3):void 0,u=o("rot_0")?new Float32Array(t*4):void 0,c=o("opacity")?new Float32Array(t):void 0,f=[n("f_dc_0"),n("f_dc_1"),n("f_dc_2")],g=[];for(let C=0;C<r.length;C++)r[C].name.startsWith("f_rest_")&&g.push(C);const p=f[0]>=0&&f[1]>=0&&f[2]>=0;let A,U=0;if(p){const C=1+g.length/3;U=ad(C),A=new Float32Array(t*C*3)}const x=[];let B=0;for(const C of r)x.push(B),B+=id(C.type);let S=0;for(let C=0;C<t;C++){const _=S,y=n("x"),b=n("y"),w=n("z");if(y<0||b<0||w<0)throw new Error("PLY: Missing x/y/z for vertex");if(l[C*3+0]=et(a,_+x[y],r[y].type),l[C*3+1]=et(a,_+x[b],r[b].type),l[C*3+2]=et(a,_+x[w],r[w].type),h){const Q=n("scale_0"),E=n("scale_1"),M=n("scale_2");h[C*3+0]=et(a,_+x[Q],r[Q].type),h[C*3+1]=et(a,_+x[E],r[E].type),h[C*3+2]=et(a,_+x[M],r[M].type)}if(u){const Q=n("rot_0"),E=n("rot_1"),M=n("rot_2"),z=n("rot_3"),Y=et(a,_+x[Q],r[Q].type),ee=et(a,_+x[E],r[E].type),oe=et(a,_+x[M],r[M].type),te=et(a,_+x[z],r[z].type);u[C*4+0]=ee,u[C*4+1]=oe,u[C*4+2]=te,u[C*4+3]=Y}if(c){const Q=n("opacity");c[C]=et(a,_+x[Q],r[Q].type)}if(p&&A){const Q=1+g.length/3,E=C*Q*3;A[E+0]=et(a,_+x[f[0]],r[f[0]].type),A[E+Q+0]=et(a,_+x[f[1]],r[f[1]].type),A[E+2*Q+0]=et(a,_+x[f[2]],r[f[2]].type);let M=1,z=1,Y=1;for(let ee=0;ee<g.length;ee+=3){const oe=g[ee+0],te=g[ee+1],ge=g[ee+2];A[E+M]=et(a,_+x[oe],r[oe].type),A[E+Q+z]=et(a,_+x[te],r[te].type),A[E+2*Q+Y]=et(a,_+x[ge],r[ge].type),M++,z++,Y++}}S+=B}return{vertexCount:t,position:l,scale:h,rotation:u,opacity:c,sh:p&&A?{order:U,coeffs:A}:void 0}}class mA extends st{static format=Ge.BIN;async parseBuffer(e){const t=rd(e);let r;switch(t){case sa.PLY:{const i=od(e);r={count:i.vertexCount,position:i.position,rotation:i.rotation,scale:i.scale,opacity:i.opacity,sh:i.sh},r.bbox=td(i.position);break}case sa.SPLAT:throw new Error("SPLAT format is not yet supported");case sa.KSPLAT:throw new Error("KSPLAT format is not yet supported");case sa.UNKNOWN:default:throw new Error("Unknown or unsupported Gaussian Splatting file format")}return this.data=r,r}verification(){return!!this.data&&this.data.count>0}}var Fs=(s=>(s.Point="Point",s.LineString="LineString",s.MultiPolygon="MultiPolygon",s))(Fs||{});class AA extends st{static format=Ge.JSON;json;async parseString(e){this.json=e,this.data=JSON.parse(e)}}class UA{static getPath(e){let t=[];for(let r=0;r<e.features.length;r++){const i=e.features[r];switch(i.geometry.type){case Fs.LineString:break;case Fs.MultiPolygon:let a=[];for(let o=0;o<i.geometry.coordinates.length;o++){const n=i.geometry.coordinates[o];for(const l of n)for(const h of l){let u=new d(h[0],0,h[1]);a.push(u)}}t.push(a);break}}return t}}class xA{name;defines;doubleSided;baseColorFactor;emissiveFactor;metallicFactor;roughnessFactor;alphaCutoff;enableBlend;baseColorTexture;metallicRoughnessTexture;normalTexture;occlusionTexture;emissiveTexture;extensions;baseMapOffsetSize;normalMapOffsetSize;emissiveMapOffsetSize;roughnessMapOffsetSize;metallicMapOffsetSize;aoMapOffsetSize}class BA{}class vA{}class Un{boneName;bonePath;parentBoneName;boneID;parentBoneID;instanceID;parentInstanceID;t;q;s;formBytes(e){this.boneName=e.readUTF(),this.bonePath=e.readUTF(),this.parentBoneName=e.readUTF(),this.boneID=e.readInt32(),this.parentBoneID=e.readInt32(),this.instanceID=e.readUTF(),this.parentInstanceID=e.readUTF(),this.t=e.readVector3(),this.q=e.readQuaternion(),this.s=e.readVector3()}}class xn{name;count;boneData;boneMap;formBytes(e){this.boneData=[],this.boneMap=new Map,this.name=e.readUTF(),this.count=e.readInt32();for(let t=0;t<this.count;t++){let r=new Un;r.formBytes(e.readBytesArray()),this.boneData[t]=r,this.boneMap.set(r.boneName,r)}}}class nd extends st{static format=Ge.BIN;static parser(e,t){let r=e.readInt32();for(let i=0;i<r;i++){let a=new xn;a.formBytes(e.readBytesArray()),m.res.addObj(a.name,a)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}V.position,V.normal,V.color,V.TANGENT,V.uv,V.TEXCOORD_1,V.TEXCOORD_2,V.TEXCOORD_2,V.TEXCOORD_4,V.TEXCOORD_5,V.TEXCOORD_6,V.TEXCOORD_7,V.joints0,V.weights0;var L=(s=>(s[s.single=0]="single",s[s.boolean=1]="boolean",s[s.int=2]="int",s[s.int16=3]="int16",s[s.int32=4]="int32",s[s.float=5]="float",s[s.long=6]="long",s[s.uint=7]="uint",s[s.uint32=8]="uint32",s[s.uint64=9]="uint64",s[s.double=10]="double",s[s.string=11]="string",s[s.singleArray=12]="singleArray",s[s.stringArray=13]="stringArray",s[s.floatArray=14]="floatArray",s[s.vector2=15]="vector2",s[s.vector3=16]="vector3",s[s.vector4=17]="vector4",s[s.color=18]="color",s[s.color32=19]="color32",s[s.animationCurve=20]="animationCurve",s[s.quaternion=21]="quaternion",s[s.matrix4x4=22]="matrix4x4",s[s.mesh=23]="mesh",s[s.texture=24]="texture",s[s.material=25]="material",s[s.materials=26]="materials",s[s.skeleton=27]="skeleton",s[s.animClip=28]="animClip",s[s.vector2Int=29]="vector2Int",s[s.int32List=30]="int32List",s[s.colorList=31]="colorList",s[s.color32List=32]="color32List",s))(L||{});class ys{static GetMaterial(e){let t=e,r=t.split("/");t=r[r.length-1],r=t.split("."),t=r[r.length-1];let i=Gn(t);if(i){let a=new yt;return a.shader=new i,a}else throw new Error("not found shader, shader name is "+t)}static applyMaterialTexture(e,t){for(let r=0;r<t.length;r++){const i=t[r];i.property in e?e[i.property]=i.texture:i.property in e.shader?e.shader[i.property]=i.texture:e.setTexture(i.property,i.texture)}}static applyMaterialProperties(e,t){for(let r=0;r<t.length;r++){const i=t[r],a=i.key;switch(i.type){case L.color:case L.color32:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformColor(a,o)}break;case L.single:case L.float:case L.int:case L.int16:case L.int32:case L.uint:case L.uint32:case L.uint64:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformFloat(a,o)}break;case L.singleArray:{let o=i.getValue()[0];a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformFloat(a,o)}break;case L.vector2:case L.vector2Int:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformVector2(a,o)}break;case L.vector3:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformVector3(a,o)}break;case L.vector4:{let o=i.getValue();a in e?e[a]=o:a in e.shader?e.shader[a]=o:e.setUniformVector4(a,o)}break}}}}class Rr{static parser(e){switch(e.readInt32()){case L.single:return{t:L.single,v:e.readFloat32()};case L.boolean:return{t:L.boolean,v:e.readBoolean()};case L.int:return{t:L.int,v:e.readInt32()};case L.int16:return{t:L.int16,v:e.readInt16()};case L.int32:return{t:L.int32,v:e.readInt32()};case L.float:return{t:L.float,v:e.readFloat32()};case L.long:return{t:L.long,v:e.readFloat64()};case L.uint:return{t:L.uint,v:e.readUnit32()};case L.uint32:return{t:L.uint32,v:e.readUnit32()};case L.uint64:return{t:L.uint64,v:e.readUnit32()};case L.double:return{t:L.double,v:e.readFloat64()};case L.string:return{t:L.string,v:e.readUTF()};case L.singleArray:return{t:L.singleArray,v:e.readFloatArray()};case L.stringArray:return{t:L.stringArray,v:e.readStringArray()};case L.floatArray:return{t:L.floatArray,v:e.readFloatArray()};case L.vector2:return{t:L.vector2,v:e.readVector2()};case L.vector3:return{t:L.vector3,v:e.readVector3()};case L.vector4:return{t:L.vector4,v:e.readVector4()};case L.color:return{t:L.color,v:e.readColor()};case L.color32:return{t:L.color32,v:e.readColor()};case L.animationCurve:return{t:L.animationCurve,v:null};case L.quaternion:return{t:L.quaternion,v:e.readQuaternion()};case L.matrix4x4:return{t:L.matrix4x4,v:null};case L.mesh:{let n=e.readUTF(),l=m.res.getGeometry(n);return{t:L.mesh,v:l}}case L.texture:{let n=e.readUTF(),l=m.res.getTexture(n);return{t:L.texture,v:l}}case L.material:{let n=e.readUTF(),l=m.res.getMat(n);return{t:L.material,v:l}}case L.materials:{let n=e.readStringArray(),l=[];for(let h=0;h<n.length;h++){const u=n[h];let c=m.res.getMat(u);l.push(c)}return{t:L.materials,v:l}}case L.skeleton:break;case L.animClip:{let n=[],l=e.readInt32();for(let h=0;h<l;h++){let u=new Sn;u.formBytes(e),n.push(u)}return{t:L.animClip,v:n}}case L.vector2Int:return{t:L.vector2Int,v:e.readVector2int()};case L.int32List:return{t:L.int32List,v:e.readInt32List()};case L.colorList:let r=e.readInt32(),i=[];for(let n=0;n<r;n++){const l=Rr.parser(e).v;i.push(l)}return{t:L.colorList,v:i};case L.color32List:let a=e.readInt32(),o=[];for(let n=0;n<a;n++){const l=Rr.parser(e).v;o.push(l)}return{t:L.color32List,v:o}}}}class Bn{key;type;_data;getValue(){return this._data}formBytes(e){this.key=e.readUTF();let{t,v:r}=Rr.parser(e);this.type=t,this._data=r}}class ld{property;name;texture;texelSize;wrapModeU;wrapModeV;wrapModeW;wrapMode;anisoLevel;dimension;filterMode}class hd extends st{static format=Ge.TEXT;static parserMaterial(e,t){let r=e.readInt32();for(let i=0;i<r;i++){let a=e.readBytesArray(),o=a.readUTF(),n=a.readUTF();a.readUTF();let l=a.readStringArray();a.readVector4(),a.readVector4();let h=a.readUTF(),u=[],c=[],f=a.readInt32();for(let A=0;A<f;A++){let U=new Bn;U.formBytes(a),u.push(U)}let g=a.readInt32();for(let A=0;A<g;A++){let U=a.readBytesArray(),x=new ld;x.property=U.readUTF(),x.name=U.readUTF(),x.texture=m.res.getTexture(x.name),x.texelSize=U.readVector2(),x.wrapModeU=U.readUnit32(),x.wrapModeV=U.readUnit32(),x.wrapModeW=U.readUnit32(),x.wrapMode=U.readUnit32(),x.anisoLevel=U.readUnit32(),x.dimension=U.readUnit32(),x.filterMode=U.readUnit32(),c.push(x)}let p=ys.GetMaterial(h);p.name=o;for(let A=0;A<l.length;A++){const U=l[A];p.shader.setDefine(U,!0)}ys.applyMaterialTexture(p,c),ys.applyMaterialProperties(p,u),m.res.addMat(n,p)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class vn{shapeName;shapeIndex;frameCount;blendPositionList=new Float32Array;blendNormalList=new Float32Array;formBytes(e){let t=e.readBytesArray();this.shapeName=t.readUTF(),this.shapeIndex=t.readInt32(),this.frameCount=t.readInt32();let r=t.readInt32();this.blendPositionList=t.readFloat32Array(r*3);let i=t.readInt32();this.blendNormalList=t.readFloat32Array(i*3)}}class Cn{vertexCount;shapeNames;shapeIndexs;blendCount;blendShapePropertyDatas;blendShapeMap;formBytes(e){this.blendShapeMap=new Map,this.blendShapePropertyDatas=[];let t=e.readBytesArray();this.vertexCount=t.readInt32(),this.shapeNames=t.readStringArray(),this.shapeIndexs=t.readIntArray(),this.blendCount=t.readInt32();for(let r=0;r<this.blendCount;r++){let i=new vn;i.formBytes(t),this.blendShapePropertyDatas.push(i),this.blendShapeMap.set(i.shapeName,i)}return e}}class ud{name;meshName;meshID;vertexCount;vertexStrip;vertexBuffer;indices;attributes;bones;bindPose;blendShapeData}class cd extends st{static format=Ge.BIN;async parseBuffer(e){}static parserMeshs(e,t){let r=e.readInt32();for(let i=0;i<r;i++){let a=new ud,o=e.readBytesArray();a.meshName=o.readUTF(),a.meshID=o.readUTF(),o.readFloat32()>0,o.readFloat32()>0,o.readFloat32()>0;let n=o.readFloat32()>0,l=o.readFloat32()>0;n&&(a.bones=o.readStringArray(),a.bindPose=o.readMatrix44Array()),l&&(a.blendShapeData=new Cn,a.blendShapeData.formBytes(o));let h=o.readBytesArray(),u=o.readBytesArray(),c=h.readInt32(),f=0,g=[];for(let B=0;B<c;B++)g[B]={},g[B].att=CA[h.readUTF()],g[B].dim=h.readInt32(),f+=g[B].dim,g[B].format=h.readUTF();a.vertexCount=h.readInt32(),a.vertexBuffer=u.getFloat32Array();let p=o.readInt32Array(),A=[],U=o.readInt32();for(let B=0;B<U;B++){let S=o.readInt32(),C=o.readInt32(),_=o.readInt32(),y=o.readInt32(),b=o.readInt32(),w=o.readInt32();o.readVector3(),o.readVector3();let Q={indexStart:C,indexCount:_,vertexStart:y,vertexCount:w,firstStart:b,topology:S,index:B};A.push(Q)}p.length>65535?a.indices=new Uint32Array(p):a.indices=new Uint16Array(p);let x=new Ne;if(x.vertexDim=f,x.geometryType=ft.compose_bin,x.setIndices(a.indices),x.setAttribute(V.all,a.vertexBuffer),n&&(x.skinNames=a.bones,x.bindPose=a.bindPose),l){x.blendShapeData=a.blendShapeData,x.morphTargetsRelative=!0,x.morphTargetDictionary={};for(let B=0;B<a.blendShapeData.blendCount;B++){x.setAttribute("a_morphPositions_"+B,a.blendShapeData.blendShapePropertyDatas[B].blendPositionList),x.setAttribute("a_morphNormals_"+B,a.blendShapeData.blendShapePropertyDatas[B].blendNormalList);for(let S=0;S<a.blendShapeData.blendCount;S++){let C=a.blendShapeData.shapeNames[S],_=a.blendShapeData.shapeIndexs[S];x.morphTargetDictionary[C]=_}}}for(let B=0;B<g.length;B++){const S=g[B].att;x.setAttribute(S,null)}for(let B=0;B<A.length;B++){const S=A[B];x.addSubGeometry(S)}x.name=a.meshName,m.res.addGeometry(a.meshID,x)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}let CA={Position:V.position,Normal:V.normal,Color:V.color,Tangent:V.TANGENT,TexCoord0:V.uv,TexCoord1:V.TEXCOORD_1,TexCoord2:V.TEXCOORD_2,TexCoord3:V.TEXCOORD_2,TexCoord4:V.TEXCOORD_4,TexCoord5:V.TEXCOORD_5,TexCoord6:V.TEXCOORD_6,TexCoord7:V.vIndex,BlendIndices:V.joints0,BlendWeight:V.weights0};class Ws extends DataView{get buffer(){return super.buffer}get byteOffset(){return super.byteOffset}get byteLength(){return super.byteLength}getInt16(e,t){return super.getInt16(e,t)}getInt32(e,t){return super.getInt32(e,t)}getFloat32(e,t){return super.getFloat32(e,t)}getFloat64(e,t){return super.getFloat64(e,t)}getUint8(e){return super.getUint8(e)}getUint32(e,t){return super.getUint32(e,t)}getInt8(e){return super.getInt8(e)}getUint16(e,t){return super.getUint16(e,t)}position=0;littleEndian=!0;constructor(e,t,r){super(e,t,r),this.position=0,this.position+=this.byteOffset}readUTF(){let e=this.readInt32(),t=e%4;t>0&&t<4&&(t=4-t);let r="",i=new Int8Array(this.buffer,this.position,e);return this.position+=e*Int8Array.BYTES_PER_ELEMENT,r+=String.fromCharCode.apply(null,i),this.position+=t*Int8Array.BYTES_PER_ELEMENT,r}readStringArray(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readUTF());return e}readByte(){let e=this.buffer[this.position];return this.position+=1,e}readBoolean(){let e=this.readInt32();return this.position+=4,e==1}readBytes(e){let t=new DataView(this.buffer,this.position,e);return this.position+=e,t.buffer}readBytesArray(){let e=this.readInt32(),t=new Ws(this.buffer.slice(this.position,this.position+e));return this.position+=e,t}readUnit8(){let e=this.getUint8(this.position);return this.position+=Uint8Array.BYTES_PER_ELEMENT,e}readUnit16(){let e=this.getUint16(this.position);return this.position+=Uint16Array.BYTES_PER_ELEMENT,e}readUnit32(){let e=this.getUint32(this.position);return this.position+=Uint32Array.BYTES_PER_ELEMENT,e}readInt8(){let e=this.getInt8(this.position);return this.position+=Int8Array.BYTES_PER_ELEMENT,e}readInt16(){let e=this.getInt16(this.position,this.littleEndian);return this.position+=Int16Array.BYTES_PER_ELEMENT,e}readInt32(){let e=this.getInt32(this.position,this.littleEndian);return this.position+=Int32Array.BYTES_PER_ELEMENT,e}readFloat32(){let e=this.getFloat32(this.position,this.littleEndian);return this.position+=Float32Array.BYTES_PER_ELEMENT,e}readFloat64(){let e=this.getFloat64(this.position,this.littleEndian);return this.position+=Float64Array.BYTES_PER_ELEMENT,e}readInt32Array(){let e=this.readInt32(),t=new Int32Array(this.buffer,this.position,e);return t=t.slice(0,e),this.position+=t.byteLength,t}readInt32List(){let e=this.readInt32(),t=[];for(let r=0;r<e;r++)t.push(this.readInt32());return t}readFloatArray(){let e=this.readInt32(),t=[];for(let r=0;r<e;r++){let i=this.readFloat32();t.push(i)}return t}readIntArray(){let e=this.readInt32(),t=[];for(let r=0;r<e;r++){let i=this.readInt32();t.push(i)}return t}readVector2int(){let e=new K;return e.x=this.readInt32(),e.y=this.readInt32(),e}readVector2(){let e=new K;return e.x=this.readFloat32(),e.y=this.readFloat32(),e}readVector3(){let e=new d;return e.x=this.readFloat32(),e.y=this.readFloat32(),e.z=this.readFloat32(),e}readVector3Array(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readVector3());return e}readVector4(){let e=new $;return e.x=this.readFloat32(),e.y=this.readFloat32(),e.z=this.readFloat32(),e.w=this.readFloat32(),e}readVector4Array(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readVector4());return e}readColor(){let e=new P;return e.r=this.readFloat32(),e.g=this.readFloat32(),e.b=this.readFloat32(),e.a=this.readFloat32(),e}readColorArray(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readColor());return e}readQuaternion(){let e=new Z;return e.x=this.readFloat32(),e.y=this.readFloat32(),e.z=this.readFloat32(),e.w=this.readFloat32(),e}readQuaternionArray(){let e=[],t=this.readInt32();for(let r=0;r<t;r++)e.push(this.readQuaternion());return e}readMatrix44(){let e=new I,t=e.rawData;return t[0]=this.readFloat32(),t[1]=this.readFloat32(),t[2]=this.readFloat32(),t[3]=this.readFloat32(),t[4]=this.readFloat32(),t[5]=this.readFloat32(),t[6]=this.readFloat32(),t[7]=this.readFloat32(),t[8]=this.readFloat32(),t[9]=this.readFloat32(),t[10]=this.readFloat32(),t[11]=this.readFloat32(),t[12]=this.readFloat32(),t[13]=this.readFloat32(),t[14]=this.readFloat32(),t[15]=this.readFloat32(),e}readMatrix44Array(){let e=this.readInt32(),t=[];for(let r=0;r<e;r++){let i=this.readMatrix44();t.push(i)}return t}readFloat32Array(e){let t=new DataView(this.buffer),r=new Float32Array(e);for(let i=0;i<e;i++)r[i]=t.getFloat32(this.position+i*Float32Array.BYTES_PER_ELEMENT,this.littleEndian);return this.position+=e*Float32Array.BYTES_PER_ELEMENT,r}getFloat32Array(){let e=new Float32Array(this.buffer,this.byteOffset,this.byteLength/Float32Array.BYTES_PER_ELEMENT);return e=e.slice(0,this.byteLength),e}}class fd extends st{static format=Ge.TEXT;static async parserTexture(e,t,r){let i=e.readInt32(),a=[];for(let n=0;n<i;n++){let l=e.readUTF();dd.useWebp?(l=l.replace("png","webp"),l=l.replace("jpb","webp"),a.push(t.baseUrl+"webp/"+l)):a.push(t.baseUrl+l)}let o=await m.res.loadBitmapTextures(a,m.setting.loader.numConcurrent,r,!0);for(const n of o)m.res.addTexture(n.name,n)}verification(){if(this.data)return!0;throw new Error("verify failed.")}}var SA=Object.getOwnPropertyDescriptor,_A=(s,e,t,r)=>{for(var i=r>1?void 0:r?SA(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let bs=class extends mt{constructor(){super(),O.register("PBRLitSSSShader",tf);let s=new Oe("PBRLitSSSShader","PBRLitSSSShader");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);let e=s.shaderState;e.acceptShadow=!0,e.castShadow=!0,e.receiveEnv=!0,e.acceptGI=!0,e.useLight=!0,this.setDefine("USE_BRDF",!0),this.setDefine("USE_AO_R",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefine("USE_CUSTOMUNIFORM",!0),this.setDefault(),this.computes=[new Yf(this)]}setDefault(){this.setUniformFloat("shadowBias",35e-5),this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformColor("emissiveColor",new P(1,1,1)),this.setUniformVector4("materialF0",new $(.04,.04,.04,1)),this.setUniformColor("specularColor",new P(.04,.04,.04)),this.setUniformFloat("envIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("roughness",1),this.setUniformFloat("metallic",0),this.setUniformFloat("ao",1),this.setUniformFloat("roughness_min",0),this.setUniformFloat("roughness_max",1),this.setUniformFloat("metallic_min",0),this.setUniformFloat("metallic_max",1),this.setUniformFloat("emissiveIntensity",0),this.setUniformFloat("alphaCutoff",0),this.setUniformFloat("ior",1.5),this.setUniformFloat("clearcoatFactor",0),this.setUniformFloat("clearcoatRoughnessFactor",0),this.setUniformColor("clearcoatColor",new P(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this.setUniformColor("skinColor",new P(1,0,0)),this.setUniformFloat("skinPower",3.4),this.setUniformFloat("skinColorIns",.5),this.setUniformFloat("curveFactor",1)}set _MainTex(s){this.setTexture("baseMap",s)}set _BumpMap(s){this.setTexture("normalMap",s)}set _SSSMap(s){this.setTexture("sssMap",s)}set _MaskTex(s){this.setTexture("maskMap",s)}set _UVTransform(s){this.setUniformVector4("transformUV1",s)}set _Metallic(s){this.setUniformFloat("metallic",s)}set _Roughness(s){this.setUniformFloat("roughness",s)}set _MainColor(s){this.setUniformColor("baseColor",s)}set _AlphaCutoff(s){this.setUniformFloat("alphaCutoff",s)}set _DoubleSidedEnable(s){let e=this.getDefaultColorShader();e.shaderState.cullMode=s?Jt.none:e.shaderState.cullMode}set _SkinColor(s){this.setUniformColor("skinColor",s)}set _SkinPower(s){this.setUniformFloat("skinPower",s)}set _SkinColorIns(s){this.setUniformFloat("skinColorIns",s)}set curveFactor(s){this.setUniformFloat("curveFactor",s)}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=ae.NONE:e.blendMode=ae.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};bs=_A([yi(bs,"LitSSSShader")],bs);var FA=Object.getOwnPropertyDescriptor,yA=(s,e,t,r)=>{for(var i=r>1?void 0:r?FA(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Qs=class extends mt{constructor(){super();let s=new Oe("PBRLItShader","PBRLItShader");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);let e=s.shaderState;e.acceptShadow=!0,e.castShadow=!0,e.receiveEnv=!0,e.acceptGI=!0,e.useLight=!0,this.setDefine("USE_BRDF",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformFloat("shadowBias",35e-5),this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformColor("emissiveColor",new P(0,0,0)),this.setUniformVector4("materialF0",new $(.04,.04,.04,1)),this.setUniformColor("specularColor",new P(.04,.04,.04)),this.setUniformFloat("envIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("roughness",1),this.setUniformFloat("metallic",0),this.setUniformFloat("ao",1),this.setUniformFloat("roughness_min",0),this.setUniformFloat("roughness_max",1),this.setUniformFloat("metallic_min",0),this.setUniformFloat("metallic_max",1),this.setUniformFloat("emissiveIntensity",0),this.setUniformFloat("alphaCutoff",0),this.setUniformFloat("ior",1.5),this.setUniformFloat("clearcoatFactor",0),this.setUniformFloat("clearcoatRoughnessFactor",0),this.setUniformColor("clearcoatColor",new P(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this._MainTex=m.res.grayTexture,this._BumpMap=m.res.normalTexture,this._MaskTex=m.res.maskTexture}set _MainTex(s){this.setTexture("baseMap",s)}set _BumpMap(s){this.setTexture("normalMap",s)}set _MaskTex(s){this.setTexture("maskMap",s)}set _UVTransform(s){this.setUniformVector4("transformUV1",s)}set _Metallic(s){this.setUniformFloat("metallic",s)}set _Roughness(s){this.setUniformFloat("roughness",s)}set _MainColor(s){this.setUniformColor("baseColor",s)}set _AlphaCutoff(s){this.setUniformFloat("alphaCutoff",s)}set _DoubleSidedEnable(s){let e=this.getDefaultColorShader();e.shaderState.cullMode=s?Jt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=ae.NONE:e.blendMode=ae.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};Qs=yA([yi(Qs,"LitShader")],Qs);class Js{comName;data;static parser(e){let t=e.readBytesArray(),r=new Js;r.comName=t.readUTF(),r.data=[];let i=t.readInt32();for(let a=0;a<i;a++){let o=new Bn;o.formBytes(t),r.data.push(o)}return r}}class rs{name;parentName;position;rotation;scale;comDatas;child;static parser(e){let t=e.readBytesArray(),r=new rs;r.name=t.readUTF(),r.parentName=t.readUTF(),r.position=t.readVector3(),r.rotation=t.readQuaternion(),r.scale=t.readVector3(),r.comDatas=[],r.child=[];let i=t.readInt32();for(let o=0;o<i;o++){const n=Js.parser(t);r.comDatas.push(n)}let a=t.readInt32();for(let o=0;o<a;o++){const n=rs.parser(t);r.child.push(n)}return r}}class dd extends st{static useWebp=!0;static format=Ge.BIN;avatarDic;nodeData;async parseBuffer(e){this.avatarDic={};let t=new Ws(e,0);await fd.parserTexture(t,this,this.loaderFunctions),nd.parser(t,this),cd.parserMeshs(t,this),hd.parserMaterial(t,this),this.nodeData=this.parserPrefabNode(t),this.data=this.data=this.parserNodeTree(this.nodeData)}parserPrefabNode(e){return rs.parser(e)}parserNodeTree(e){let t=new q;if(t.localPosition=d.serialize(e.position),t.localQuaternion=Z.serialize(e.rotation),t.localScale=d.serialize(e.scale),t.name=e.name,e.comDatas)for(let r=0;r<e.comDatas.length;r++){const i=e.comDatas[r];let a=null,o=zn(i.comName);if(o){a=t.getOrAddComponent(o);for(let n=0;n<i.data.length;n++){const l=i.data[n];l.key in a&&(a[l.key]=l.getValue())}}}if(e.child&&e.child.length>0)for(let r=0;r<e.child.length;r++){let i=this.parserNodeTree(e.child[r]);t.addChild(i)}return t}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class bA{static getNumber(e){return parseFloat(e)}static getInt(e){return parseInt(e)}static getBoolean(e){return e=="true"}static getNumberArray(e){let t=e.replaceAll("[","");t=t.replaceAll("]","");let r=t.split(",");for(let i=0;i<r.length;i++)parseFloat(r[i]);return t}static getStringArray(e){let t=e.replaceAll("[","");t=t.replaceAll("]","");let r=t.split(","),i=[];for(let a=0;a<r.length;a++){const o=r[a];i.push(o)}return i}static getVector2(e){}static getVector3(e){}static getVector4(e){}static getQuaternion(e){}static getColor(e){}}var QA=Object.getOwnPropertyDescriptor,RA=(s,e,t,r)=>{for(var i=r>1?void 0:r?QA(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let Ea=class extends mt{constructor(){super();let s=new Oe("UnLit","UnLit");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);let e=s.shaderState;e.acceptShadow=!1,e.castShadow=!1,e.receiveEnv=!1,e.acceptGI=!1,e.useLight=!1,this.setDefine("USE_BRDF",!0),this.setDefine("USE_AO_R",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformFloat("alphaCutoff",0)}set _MainTex(s){this.setTexture("baseMap",s)}set _BumpMap(s){this.setTexture("normalMap",s)}set _MaskTex(s){this.setTexture("maskMap",s)}set _UVTransform(s){this.setUniformVector4("transformUV1",s)}set _Metallic(s){this.setUniformFloat("metallic",s)}set _Roughness(s){this.setUniformFloat("roughness",s)}set _MainColor(s){this.setUniformColor("baseColor",s)}set _AlphaCutoff(s){this.setUniformFloat("alphaCutoff",s)}set _DoubleSidedEnable(s){let e=this.getDefaultColorShader();e.shaderState.cullMode=s?Jt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=ae.NONE:e.blendMode=ae.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};Ea=RA([yi(Ea,"UnLitShader")],Ea);var IA=Object.getOwnPropertyDescriptor,EA=(s,e,t,r)=>{for(var i=r>1?void 0:r?IA(e,t):e,a=s.length-1,o;a>=0;a--)(o=s[a])&&(i=o(i)||i);return i};let wa=class extends mt{constructor(){super(),O.register("VertexAttributeIndexShader",qc),O.register("UnLitTextureArray",rf);let s=new Oe("UnLitTextureArray","UnLitTextureArray");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);let e=s.shaderState;e.acceptShadow=!1,e.castShadow=!1,e.receiveEnv=!1,e.acceptGI=!1,e.useLight=!1,this.setDefine("USE_BRDF",!0),this.setDefine("USE_AO_R",!0),this.setDefine("USE_ROUGHNESS_G",!0),this.setDefine("USE_METALLIC_B",!0),this.setDefine("USE_ALPHA_A",!0),this.setDefault()}setDefault(){this.setUniformVector4("transformUV1",new $(0,0,1,1)),this.setUniformVector4("transformUV2",new $(0,0,1,1)),this.setUniformColor("baseColor",new P),this.setUniformFloat("alphaCutoff",0)}set _MainTex(s){this.setTexture("baseMap",s)}set _BumpMap(s){this.setTexture("normalMap",s)}set _MaskTex(s){this.setTexture("maskMap",s)}set _UVTransform(s){this.setUniformVector4("transformUV1",s)}set _Metallic(s){this.setUniformFloat("metallic",s)}set _Roughness(s){this.setUniformFloat("roughness",s)}set _MainColor(s){this.setUniformColor("baseColor",s)}set _AlphaCutoff(s){this.setUniformFloat("alphaCutoff",s)}set _DoubleSidedEnable(s){let e=this.getDefaultColorShader();e.shaderState.cullMode=s?Jt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=ae.NONE:e.blendMode=ae.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};wa=EA([yi(wa,"UnLitTexArrayShader")],wa);class wA{asset;extras;geometricError;properties;refine;root}class TA{boundingVolume;children;geometricError;transform}class DA{boundingVolume;geometricError;refine;content;contents}class MA{uri;group;metadata}class NA{class;properties}class En{group;_modelList;_tileSet;_rootPath;constructor(){this.group=new q}async loadTileSet(e,t){this._modelList=[],this._rootPath=e;let r=e+"/"+t;if(this._tileSet=await m.res.loadJSON(r),this._tileSet.root.transform){let n=new I;for(let l=0;l<16;l++)n.rawData[l]=this._tileSet.root.transform[l]}let i=new I;switch((this._tileSet.asset&&this._tileSet.asset.gltfUpAxis||"y").toLowerCase()){case"x":i.makeRotationAxis(d.Y_AXIS,-Math.PI/2);break;case"y":i.makeRotationAxis(d.X_AXIS,Math.PI/2);break;case"z":i.identity();break}let o=i.clone();o.invert(),this.applyTransform(this.group.transform,o);for(let n of this._tileSet.root.children){let l=[];if(n.content&&n.content.uri&&l.push(n.content.uri),n.contents)for(let h of n.contents)l.push(h.uri);for(let h of l){let u=this._rootPath+"/"+h,c={onProgress:g=>this.onLoadProgress(g),onComplete:g=>this.onComplete(g)},f;if(u.endsWith(".glb"))f=await m.res.loadGltf(u,c),this.applyTransform(f.transform,i);else if(u.endsWith("tileset.json")){let g=u.replace("/tileset.json",""),p=new En;await p.loadTileSet(g,"tileset.json"),f=p.group}else u.endsWith(".i3dm")?f=await m.res.loadI3DM(u,c,i):u.endsWith(".b3dm")&&(f=await m.res.loadB3DM(u,c,i));f&&(this._modelList.push(f),this.group.addChild(f))}}}onLoadProgress(e){}onComplete(e){}applyTransform(e,t){let r=t.decompose(ir.QUATERNION);e.localRotQuat.copyFrom(r[1]),e.localRotQuat=e.localRotQuat,e.localPosition.copyFrom(r[0]),e.localPosition=e.localPosition,e.localScale.copyFrom(r[2]),e.localScale=e.localScale}}class VA extends yt{static count=0;constructor(){super(),O.register("ColorLitShader",$c),this.shader=new mt;let e=new Oe("ColorLitShader","ColorLitShader");e.passType=H.COLOR,this.shader.addRenderPass(e),e.setDefine("USE_BRDF",!0),e.setShaderEntry("VertMain","FragMain"),e.setUniformColor("baseColor",new P),e.setUniformColor("emissiveColor",new P),e.setUniformFloat("envIntensity",1),e.setUniformFloat("normalScale",1),e.setUniformFloat("roughness",0),e.setUniformFloat("metallic",0),e.setUniformFloat("ao",1),e.setUniformFloat("alphaCutoff",0);let t=e.shaderState;t.acceptShadow=!0,t.receiveEnv=!0,t.acceptGI=!0,t.useLight=!0,e.setTexture("normalMap",m.res.normalTexture),e.setTexture("emissiveMap",m.res.blackTexture)}clone(){return null}debug(){}}class PA extends yt{constructor(){super();let e=new Oe("LambertShader","LambertShader");e.setShaderEntry("VertMain","FragMain"),e.passType=H.COLOR,e.setUniformVector4("transformUV1",new $(0,0,1,1)),e.setUniformVector4("transformUV2",new $(0,0,1,1)),e.setUniformColor("baseColor",new P(1,1,1,1)),e.setUniformFloat("alphaCutoff",.5);let t=e.shaderState;t.acceptShadow=!1,t.castShadow=!1,t.receiveEnv=!1,t.acceptGI=!1,t.useLight=!1;let r=new mt;r.addRenderPass(e),this.shader=r,this.baseMap=m.res.grayTexture}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set envMap(e){}set shadowMap(e){}}function kA(s,e){}class LA extends yt{constructor(){super(),this.shader=new wa,this.baseMap=m.res.whiteTexture}set baseMap(e){this.shader.setTexture("baseMap",e)}get baseMap(){return this.shader.getTexture("baseMap")}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set shadowMap(e){}}class Sn{clipName;loopTime;startTime;stopTime;sampleRate;useSkeletonPos;useSkeletonScale;positionCurves=new Map;rotationCurves=new Map;scaleCurves=new Map;floatCurves=new Map;formBytes(e){if(this.clipName=e.readUTF(),this.loopTime=!e.readInt32(),this.startTime=e.readFloat32(),this.stopTime=e.readFloat32(),this.sampleRate=e.readInt32(),this.useSkeletonPos=e.readInt32()>0,this.useSkeletonScale=e.readInt32()>0,this.useSkeletonPos){let i=e.readInt32();for(let a=0;a<i;a++){let o=new ni;o.formBytes(e),this.positionCurves.set(o.path,o)}}let t=e.readInt32();for(let i=0;i<t;i++){let a=new ni;a.formBytes(e),this.rotationCurves.set(a.path,a)}if(this.useSkeletonScale){let i=e.readInt32();for(let a=0;a<i;a++){let o=new ni;o.formBytes(e),this.scaleCurves.set(o.path,o)}}let r=e.readInt32();for(let i=0;i<r;i++){let a=new ni;a.formBytes(e),this.floatCurves.set(a.attribute,a)}}}class ni{path;attribute;propertys;preInfinity;postInfinity;rotationOrder;m_curves;k=0;_cacheValue;_kValue;constructor(e=1){this.k=e,this.m_curves=[],this.check()}check(){for(let e=0;e<this.k;e++)this.m_curves[e]||=new _a;switch(this.k){case 1:this._cacheValue=0;break;case 2:this._cacheValue=new K;break;case 3:this._cacheValue=new d;break;case 4:this._cacheValue=new $;break}}get totalTime(){return this.m_curves[0].totalTime}addKeyFrame(e){for(let t=0;t<this.k;t++)this.m_curves[t].addKeyFrame(e.getK(t))}removeKeyFrame(e){for(let t=0;t<this.k;t++)this.m_curves[t].removeKeyFrame(e.getK(t))}getValue(e){switch(this.k){case 1:this._cacheValue=this.m_curves[0].getValue(e);break;case 2:this._cacheValue.x=this.m_curves[0].getValue(e),this._cacheValue.y=this.m_curves[1].getValue(e);break;case 3:this._cacheValue.x=this.m_curves[0].getValue(e),this._cacheValue.y=this.m_curves[1].getValue(e),this._cacheValue.z=this.m_curves[2].getValue(e);break;case 4:const t=this.m_curves[0].getCurveFramesExtent(e),r=t.lhsIndex,i=t.rhsIndex;e=t.time;let a=this.m_curves[0].getKey(r),o=this.m_curves[0].getKey(i);e%=this.m_curves[0].totalTime;let n=(e-a.time)/(o.time-a.time);Z.HELP_0.set(this.m_curves[0].getKey(r).value,this.m_curves[1].getKey(r).value,this.m_curves[2].getKey(r).value,this.m_curves[3].getKey(r).value),Z.HELP_1.set(this.m_curves[0].getKey(i).value,this.m_curves[1].getKey(i).value,this.m_curves[2].getKey(i).value,this.m_curves[3].getKey(i).value),Z.HELP_2.slerp(Z.HELP_0,Z.HELP_1,n),this._cacheValue.x=Z.HELP_2.x,this._cacheValue.y=Z.HELP_2.y,this._cacheValue.z=Z.HELP_2.z,this._cacheValue.w=Z.HELP_2.w;break}return this._cacheValue}getKeyCount(){return this.m_curves[0].getKeyCount()}getKey(e){let t=[];for(let r=0;r<this.k;r++)t.push(this.m_curves[r].getKey(e));return t}formBytes(e){this.path=e.readUTF(),this.k=e.readInt32(),this.check(),this.attribute=e.readUTF(),this.propertys=this.attribute.split("."),this.preInfinity=e.readInt32(),this.postInfinity=e.readInt32(),this.rotationOrder=e.readInt32();let t=e.readInt32();for(let r=0;r<t;r++){let i=new Ma(0);i.formBytes(e),this.addKeyFrame(i)}}}class OA extends Map{negtive;constructor(e){if(super(e),this.negtive=new Map,e)for(let t of e)this.negtive.set(t[1],t[0])}delete(e){if(this.has(e)){let t=this.get(e);return this.negtive.delete(t),super.delete(e)}return!1}getKey(e){return this.negtive.get(e)}deleteValue(e){let t=this.negtive.get(e);return t&&this.delete(t),this.negtive.delete(e)}set(e,t){return super.set(e,t),this.negtive.set(t,e),this}clear(){this.negtive.clear(),super.clear()}}class zA{colorArray;constructor(e){this.colorArray=e}getColor(e){let t=e*this.colorArray.length,r=Math.floor(t),i=Math.min(r+1,this.colorArray.length-1),a=this.colorArray[r],o=this.colorArray[i];return P.lerp(t-r,a,o)}}class Rs{controlVertices;constructor(e){this.setControlVertices(e)}setControlVertices(e){e.length==4&&(this.controlVertices=e.concat())}getPoint(e){if(!(e>=0&&e<=1))return d.ZERO;let t=1-e,r=t*t*t,i=3*e*t*t,a=3*e*e*t,o=e*e*e;return this.controlVertices[0].mul(r).add(this.controlVertices[1].mul(i)).add(this.controlVertices[2].mul(a)).add(this.controlVertices[3].mul(o))}getTangent(e){if(!(e>=0&&e<=1))return d.ZERO;let t=this.controlVertices,r=t[0].add(t[1].add(t[0]).mul(e)),i=t[1].add(t[2].add(t[1]).mul(e)),a=t[2].add(t[3].add(t[2]).mul(e)),o=r.add(i.subtract(r).mul(e));return i.add(a.subtract(i).mul(e)).subtract(o)}getClosestParam(e,t=1e-6){return this.getClosestParamRec(e,0,1,t)}getClosestParamRec(e,t,r,i){let a=(t+r)/2;if(r-t<i)return a;let o=(t+a)/2,n=(a+r)/2,l=this.getPoint(o),h=this.getPoint(n),u=l.subtract(e).lengthSquared,c=h.subtract(e).lengthSquared;return u<c?r=a:t=a,this.getClosestParamRec(e,t,r,i)}}var gd=(s=>(s[s.Open=0]="Open",s[s.Closed=1]="Closed",s))(gd||{});class GA{type=0;numCurveSegments=0;numControlVertices=0;controlVertices=[];constructor(e,t=0){this.setControlVertices(e,t)}getPathType(){return this.type}isClosed(){return this.type==1}isValid(){return this.numCurveSegments>0}clear(){this.controlVertices.length=0,this.type=0,this.numCurveSegments=0,this.numControlVertices=0}computeApproxLength(){if(!this.isValid())return 0;let e=this.numCurveSegments+1;if(e<2)return 0;let t=0,r=this.controlVertices;for(let i=1;i<e;i++){let a=r[(i-1)*3],o=r[i*3];t+=a.subtract(o).lengthSquared}return t==0?0:t}computeApproxParamPerUnitLength(){let e=this.computeApproxLength();return this.numCurveSegments/e}computeApproxNormParamPerUnitLength(){return 1/this.computeApproxLength()}interpolatePoints(e,t){let r=e.length;r<2&&console.error("point count must great 1"),this.clear(),this.type=t;let i=this.controlVertices;switch(t){case 0:{this.numCurveSegments=r-1,this.numControlVertices=3*r-2,i.length=this.numControlVertices;for(let n=0;n<r;n++)i[n*3]=e[n];let a=e[1].subtract(e[0]).mul(.25);i[1]=e[0].add(a);let o=e[r-2].subtract(e[r-1]).mul(.25);i[this.numControlVertices-2]=e[r-1].add(o);for(let n=1;n<this.numCurveSegments;n++){let l=e[n-1].subtract(e[n]),h=e[n+1].subtract(e[n]),u=l.lengthSquared,c=h.lengthSquared;if(u>0&&c>0){let f=(u+c)/8,g=h.div(c).subtract(l.div(u));g.normalize(),g=g.mul(f),i[n*3-1]=e[n].subtract(g),i[n*3+1]=e[n].add(g)}else i[n*3-1]=e[n],i[n*3+1]=e[n]}break}case 1:{this.numCurveSegments=r,this.numControlVertices=3*r+1,i.length=this.numControlVertices;for(let a=0;a<r;a++)i[a*3]=e[a];i[this.numControlVertices-1]=e[0];for(let a=1;a<=this.numCurveSegments;a++){let o=a-1,n=(a+1)%this.numCurveSegments,l=a%this.numCurveSegments,h=e[o].subtract(e[l]),u=e[n].subtract(e[l]),c=h.lengthSquared,f=u.lengthSquared,g=3*a-1,p=(3*a+1)%(this.numControlVertices-1);if(c>0&&f>0){let A=(c+f)/8,U=u.div(f).subtract(h.div(c));U.normalize(),U=U.mul(A),i[g]=e[l].subtract(U),i[p]=e[l].add(U)}else i[g]=e[l],i[p]=e[l]}break}}}setControlVertices(e,t){let r=e.length;r<=0||t==0&&r<4||t==1&&r<7||(r-1)%3==0&&(this.clear(),this.type=t,this.numControlVertices=r,this.numCurveSegments=(r-1)/3,this.controlVertices=e)}getPoint(e){if(this.type==1){for(;e<0;)e+=this.numCurveSegments;for(;e>this.numCurveSegments;)e-=this.numCurveSegments}else e=bt.clampf(e,0,this.numCurveSegments);if(!(e>=0)&&e<=this.numCurveSegments)return;let t=Math.floor(e);t>=this.numCurveSegments&&(t=this.numCurveSegments-1);let r=[],i=this.controlVertices;return r[0]=i[3*t+0],r[1]=i[3*t+1],r[2]=i[3*t+2],r[3]=i[3*t+3],new Rs(r).getPoint(e-t)}getPointNorm(e){return this.getPoint(e*this.numCurveSegments)}getTangent(e){if(this.type==1){for(;e<0;)e+=this.numCurveSegments;for(;e>this.numCurveSegments;)e-=this.numCurveSegments}else e=bt.clampf(e,0,this.numCurveSegments);if(!(e>=0)&&e<=this.numCurveSegments)return;let t=Math.floor(e);t>=this.numCurveSegments&&(t=this.numCurveSegments-1);let r=this.controlVertices,i=[];return i[0]=r[3*t+0],i[1]=r[3*t+1],i[2]=r[3*t+2],i[3]=r[3*t+3],new Rs(i).getTangent(e-t)}getTangentNorm(e){return this.getTangent(e*this.numCurveSegments)}computeClosestParam(e,t){let r=Number.MAX_SAFE_INTEGER,i=0,a=[],o=new Rs(a);for(let n=0;n<this.controlVertices.length-1;n+=3){for(let c=0;c<4;c++)a[c]=this.controlVertices[n+c];o.setControlVertices(a);let l=o.getClosestParam(e,t),u=o.getPoint(l).subtract(e).lengthSquared;u<r&&(r=u,i=n/3+l)}return i}computeClosestNormParam(e,t){return this.computeClosestParam(e,t*this.numCurveSegments)}}class WA extends Map{valueList;keyList;isChange=!0;constructor(e,t,r){if(super(e),t&&(this.keyList=[]),r&&(this.valueList=[]),e)for(let i of e)this.valueList?.push(i[1]),this.keyList?.push(i[0])}delete(e){if(this.has(e)){let t=this.get(e);return this.valueList&&this.deleteValue(t),this.keyList&&this.deleteKey(e),this.isChange=!0,super.delete(e)}return!1}deleteValue(e){let t=this.valueList.indexOf(e);return t>=0&&this.valueList.splice(t,1),this}deleteKey(e){let t=this.keyList.indexOf(e);return t>=0&&this.keyList.splice(t,1),this}set(e,t){return this.delete(e),this.keyList?.push(e),this.valueList?.push(t),super.set(e,t),this.isChange=!0,this}clear(){this.valueList&&(this.valueList.length=0),this.keyList&&(this.keyList.length=0),this.isChange=!0,super.clear()}}var pd=(s=>(s[s.kParticleSystemClampVelocityCurveId=322376503]="kParticleSystemClampVelocityCurveId",s[s.kParticleSystemForceCurveId=306581307]="kParticleSystemForceCurveId",s[s.kParticleSystemRotationCurveId=1793934638]="kParticleSystemRotationCurveId",s[s.kParticleSystemRotationBySpeedCurveId=3737431713]="kParticleSystemRotationBySpeedCurveId",s[s.kParticleSystemStartSpeedCurveId=2527743459]="kParticleSystemStartSpeedCurveId",s[s.kParticleSystemSizeCurveId=2368504881]="kParticleSystemSizeCurveId",s[s.kParticleSystemSizeBySpeedCurveId=4085612399]="kParticleSystemSizeBySpeedCurveId",s[s.kParticleSystemVelocityCurveId=3774601268]="kParticleSystemVelocityCurveId",s[s.kParticleSystemUVCurveId=326370691]="kParticleSystemUVCurveId",s[s.kParticleSystemColorGradientId=1494990940]="kParticleSystemColorGradientId",s[s.kParticleSystemColorByVelocityGradientId=1089181156]="kParticleSystemColorByVelocityGradientId",s[s.kParticleSystemMeshSelectionId=3159510623]="kParticleSystemMeshSelectionId",s[s.kParticleSystemUVRowSelectionId=2941263940]="kParticleSystemUVRowSelectionId",s))(pd||{});const JA=3.141592653589793;class ZA{}function md(s,e,t){let r=.3333333333333333,i=.5,a=s*r,o=a*a,l=o*a-a*e*i+t*i,h=-o+e*r,u=h*h*h,c=u+l*l;if(c>=0){let p=Math.sqrt(c)-l;return p=p>0?Math.pow(p,r):-Math.pow(-p,r),-a-h/p+p}let f=Math.sqrt(-u),g=Math.acos(-l/f);return f=Math.pow(f,r),f=f-h/f,g=-a+f*Math.cos(g*r),g}function Is(s,e,t,r){let i=1e-5;if(Math.abs(s)<i)return Math.abs(e)>i?(r.r0=-t/e,1):0;let a=e*e-4*s*t;if(a<0)return 0;let o=.5/s,n=Math.sqrt(a);return r.r0=(n-e)*o,r.r1=(-n-e)*o,2}function Ad(s,e,t,r,i){let a=0;if(Math.abs(e)>=1e-4){let o=t/e,n=r/e,l=i/e;s[0]=md(o,n,l),a++;let h=e,u=t+e*s[0],c=r+t*s[0]+e*s[0]*s[0];a+=Is(h,u,c,{r0:s[1],r1:s[2]})}else a+=Is(t,r,i,{r0:s[1],r1:s[2]});return a}class yr{coeff=[];static EvalSegment(e,t){return e*(e*(e*t[0]+t[1])+t[2])+t[3]}}class zr{static kMaxNumSegments=8;segments=[];integrationCache=[];doubleIntegrationCache=[];times=[];segmentCount;constructor(){this.segments[zr.kMaxNumSegments]=new yr,this.integrationCache[zr.kMaxNumSegments]=0,this.doubleIntegrationCache[zr.kMaxNumSegments]=0,this.times[zr.kMaxNumSegments]=0}calculateMinMax(e,t){e.x=Math.min(e.x,t),e.y=Math.max(e.y,t)}findMinMaxDoubleIntegrated(){let e=K.ZERO.clone(),t=20,r=1/t,i=r;for(let a=0;a<t;a++)this.calculateMinMax(e,this.evaluateDoubleIntegrated(i)),i+=r;return e}findMinMaxIntegrated(){let e=K.ZERO.clone(),t=[],r=[];for(let i=0;i<this.segmentCount;i++){let a=4*this.segments[i].coeff[0],o=3*this.segments[i].coeff[1],n=2*this.segments[i].coeff[2],l=1*this.segments[i].coeff[3],h=[],u=Ad(h,a,o,n,l);for(let c=0;c<u;c++){let f=h[c]+t[i];f>=t[i]&&f<r[i]&&this.calculateMinMax(e,this.evaluateIntegrated(f))}this.calculateMinMax(e,this.evaluateIntegrated(r[i])),this.times[i]}return e}generateIntegrationCache(e){e.integrationCache[0]=0;let t=e.times[0],r=0;for(let i=1;i<e.segmentCount;i++){let a=e.segments[i-1].coeff;_n(a);let o=t-r;e.integrationCache[i]=e.integrationCache[i-1]+yr.EvalSegment(o,a)*o,r=t,t=e.times[i]}}generateDoubleIntegrationCache(e){let t=0,r=0;for(let i=0;i<e.segmentCount;i++){e.doubleIntegrationCache[i]=t;let a=e.times[i]-r;a=Math.max(a,0),t+=yr.EvalSegment(a,e.segments[i].coeff)*a*a+e.integrationCache[i]*a,r=e.times[i]}}integrate(){this.generateIntegrationCache(this);for(let e=0;e<this.segmentCount;e++)_n(this.segments[e].coeff)}doubleIntegrate(){this.generateIntegrationCache(this);for(let e=0;e<this.segmentCount;e++)Ud(this.segments[e].coeff);this.generateDoubleIntegrationCache(this)}static isValidCurve(e){let t=e.getKeyCount(),r=t-1;return e.getKey(0).time!=0&&r++,e.getKey(t-1).time!=1&&r++,r<=zr.kMaxNumSegments}evaluateDoubleIntegrated(e){let t=0;for(let r=0;r<this.segmentCount;r++){if(e<=this.times[r]){let i=e-t;return this.doubleIntegrationCache[r]+this.integrationCache[r]*i+yr.EvalSegment(i,this.segments[r].coeff)*i*i}t=this.times[r]}return 1}evaluateIntegrated(e){let t=0;for(let r=0;r<this.segmentCount;r++){if(e<=this.times[r]){let i=e-t;return this.integrationCache[r]+yr.EvalSegment(i,this.segments[r].coeff)*i}t=this.times[r]}return 1}evaluate(e){let t=0;for(let r=0;r<this.segmentCount;r++){if(e<=this.times[r])return yr.EvalSegment(e-t,this.segments[r].coeff);t=this.times[r]}return 1}buildCurve(e,t){let r=e.getKeyCount();this.segmentCount=1;let i=1.01;if(this.segments.length=0,this.integrationCache.length=0,this.doubleIntegrationCache.length=0,this.times.length=0,this.times[0]=i,r!=0)if(r==1)this.segments[0]=new yr,this.segments[0].coeff[3]=e.getKey(0).value*t;else{this.segmentCount=r-1;let a=0;e.getKey(0).time!=0&&(this.segments[0].coeff[3]=e.getKey(0).value,this.times[0]=e.getKey(0).time,a=1);for(let o=0;o<this.segmentCount;o++){let n;e.calculateCacheData(n,o,o+1,0),this.segments[o+a].coeff=n.coeff.concat(),this.times[o+a]=e.getKey(o+1).time}this.segmentCount+=a,e.getKey(r-1).time!=1&&(this.segments[this.segmentCount].coeff[3]=e.getKey(r-1).value,this.segmentCount++),this.times[this.segmentCount-1]=i;for(let o=0;o<this.segmentCount;o++)this.segments[o].coeff[0]*=t,this.segments[o].coeff[1]*=t,this.segments[o].coeff[2]*=t,this.segments[o].coeff[3]*=t}return!0}}function Ud(s){s[0]/=20,s[1]/=12,s[2]/=6,s[3]/=2}function _n(s){s[0]/=4,s[1]/=3,s[2]/=2,s[3]/=1}var xd=(s=>(s[s.kEMScalar=0]="kEMScalar",s[s.kEMOptimized=1]="kEMOptimized",s[s.kEMOptimizedMinMax=2]="kEMOptimizedMinMax",s[s.kEMSlow=3]="kEMSlow",s))(xd||{}),Bd=(s=>(s[s.kMMCScalar=0]="kMMCScalar",s[s.kMMCCurve=1]="kMMCCurve",s[s.kMMCTwoCurves=2]="kMMCTwoCurves",s[s.kMMCTwoConstants=3]="kMMCTwoConstants",s))(Bd||{});class YA{max;min}class XA{max;min;integrate(){this.max.integrate(),this.min.integrate()}doubleIntegrate(){this.max.doubleIntegrate(),this.min.doubleIntegrate()}findMinMaxIntegrated(){return null}findMinMaxDoubleIntegrated(){return null}}class vd{minMaxState;minCurve;maxCurve;_scalar=1;_minScalar;constructor(e=1){this._scalar=e,this.minMaxState=0,this.minCurve=new _a,this.maxCurve=new _a}setScalar(e){this._scalar=e}getScalar(){return this._scalar}static evaluateSlow(e,t,r){let i=e.maxCurve.getValue(t)*e.getScalar();return e.minMaxState==2?bi(e.minCurve.getValue(t)*e.getScalar(),i,r):i}static evaluate(e,t,r=1){if(e.minMaxState==0)return e.getScalar();let i=e.maxCurve.getValue(t)*e.getScalar();return e.minMaxState==1?bi(e.minCurve.getValue(t)*e.getScalar(),i,r):e.minMaxState==3?bi(e._minScalar,e._scalar,r):e.minMaxState==2?bi(e.minCurve.getValue(t)*e.getScalar(),i,1*Math.random()):this.evaluateSlow(e,t,1)}unSerialized(e){this.minMaxState=e.minMaxState,this._scalar=e.scalar,this._minScalar=e.minScalar,this.maxCurve.unSerialized(e.maxCurve),this.minCurve.unSerialized(e.minCurve)}}class HA{value=0;mode=0;spread=0;speed=new vd;unSerialized(e){this.value=e.value,this.mode=e.mode,this.spread=e.spread,this.speed.unSerialized(e.speed)}}function jA(s,e){let t=zr.isValidCurve(s.max);return e!=2&&e!=3?t:t&&zr.isValidCurve(s.min)}function KA(s,e,t,r){s.max.buildCurve(e.max,t),r!=2&&r!=3?s.min.buildCurve(e.max,t):s.min.buildCurve(e.min,t)}function qA(s,e){let t=e.getKeyCount();if(t!=0)if(t==1)Ta(s,e.getKey(0).value);else{let r=t-1;Ta(s,e.getKey(0).value);for(let i=0;i<r;i++){let a=new fn;e.calculateCacheData(a,i,i+1,0);let o=3*a.coeff[0],n=2*a.coeff[1],l=1*a.coeff[2],h=e.getKey(i).time,u=e.getKey(i+1).time,c=[],f=Is(o,n,l,{r0:c[0],r1:c[1]});for(let g=0;g<f;g++)c[g]>=0&&c[g]+h<u&&Ta(s,yr.EvalSegment(c[g],a.coeff));Ta(s,yr.EvalSegment(u-h,a.coeff))}}}function Ta(s,e){s.x=Math.min(s.x,e),s.y=Math.max(s.y,e)}class Ei{static BACK=0;static FRONT=1;static IN=0;static OUT=1;static INTERSECT=2}class Cd{a;b;c;d;static ALIGN_ANY=0;static ALIGN_XY_AXIS=1;static ALIGN_YZ_AXIS=2;static ALIGN_XZ_AXIS=3;constructor(e=0,t=0,r=0,i=0){this.a=e,this.b=t,this.c=r,this.d=i}setTo(e=0,t=0,r=0,i=0){this.a=e,this.b=t,this.c=r,this.d=i}fromPoints(e,t,r){var i=t.x-e.x,a=t.y-e.y,o=t.z-e.z,n=r.x-e.x,l=r.y-e.y,h=r.z-e.z;this.a=a*h-o*l,this.b=o*n-i*h,this.c=i*l-a*n,this.d=-(this.a*e.x+this.b*e.y+this.c*e.z)}fromNormalAndPoint(e,t){this.a=e.x,this.b=e.y,this.c=e.z,this.d=-(this.a*t.x+this.b*t.y+this.c*t.z)}normalize(){var e=Math.sqrt(this.a*this.a+this.b*this.b+this.c*this.c);if(e>0){var t=1/e;this.a*=t,this.b*=t,this.c*=t,this.d*=t}return e}distance(e){return this.a*e.x+this.b*e.y+this.c*e.z+this.d}classifyPoint(e,t=.01){var r=this.distance(e);return r<-t?Ei.BACK:r>t?Ei.FRONT:Ei.INTERSECT}toString(){return"Plane3D [a:"+this.a+", b:"+this.b+", c:"+this.c+", d:"+this.d+"]"}}function $A(s,e){return Math.random()*e+Math.random()*s+(e-s)*Math.random()}function e0(s,e,t){let r=t*Math.random();return Math.random()*e*r+Math.random()*s*r+(e-s)*Math.random()*r}function Sd(s,e,t){let r=0,i=0;for(;r===0;)r=Math.random();for(;i===0;)i=Math.random();let a=Math.sqrt(-2*Math.log(r))*Math.cos(2*Math.PI*i);return a=a/10+.5,(a>1||a<0)&&(a=Sd(s,e,t)),a=Math.pow(a,t),a*=e-s,a+=s,a}function lr(s){return s>0?Math.floor(s):Math.floor(s)-1}let le=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180];function Fn(s,e){let t=s&15,r=1+(t&7);return t&8&&(r=-r),r*e}function Es(s,e,t){let r=s&7,i=r<4?e:t,a=r<4?t:e;return(r&1?-i:i)+(r&2?-2*a:2*a)}function Da(s,e,t,r){let i=s&15,a=i<8?e:t,o=i<4?t:i==12||i==14?e:r;return(i&1?-a:a)+(i&2?-o:o)}function oa(s,e,t,r,i){let a=s&31,o=a<24?e:t,n=a<16?t:r,l=a<8?r:i;return(a&1?-o:o)+(a&2?-n:n)+(a&4?-l:l)}let Lt=[[0,1,2,3],[0,1,3,2],[0,0,0,0],[0,2,3,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,3,0],[0,2,1,3],[0,0,0,0],[0,3,1,2],[0,3,2,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,3,2,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,0,3],[0,0,0,0],[1,3,0,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,3,0,1],[2,3,1,0],[1,0,2,3],[1,0,3,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,3,1],[0,0,0,0],[2,1,3,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,1,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,0,1,2],[3,0,2,1],[0,0,0,0],[3,1,2,0],[2,1,0,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,1,0,2],[0,0,0,0],[3,2,0,1],[3,2,1,0]];function t0(s){let e=lr(s),t=e+1,r=s-e,i=r-1,a,o,n=1-r*r;n*=n,a=n*n*Fn(le[e&255],r);let l=1-i*i;return l*=l,o=l*l*Fn(le[t&255],i),.25*(a+o)}function r0(s,e){const t=.366025403,r=.211324865;let i,a,o,n=(s+e)*t,l=s+n,h=e+n,u=lr(l),c=lr(h),f=(u+c)*r,g=u-f,p=c-f,A=s-g,U=e-p,x,B;A>U?(x=1,B=0):(x=0,B=1);let S=A-x+r,C=U-B+r,_=A-1+2*r,y=U-1+2*r,b=u&255,w=c&255,Q=.5-A*A-U*U;Q<0?i=0:(Q*=Q,i=Q*Q*Es(le[b+le[w]],A,U));let E=.5-S*S-C*C;E<0?a=0:(E*=E,a=E*E*Es(le[b+x+le[w+B]],S,C));let M=.5-_*_-y*y;return M<0?o=0:(M*=M,o=M*M*Es(le[b+1+le[w+1]],_,y)),40*(i+a+o)}function i0(s,e,t){const r=.333333333,i=.166666667;let a,o,n,l,h=(s+e+t)*r,u=s+h,c=e+h,f=t+h,g=lr(u),p=lr(c),A=lr(f),U=(g+p+A)*i,x=g-U,B=p-U,S=A-U,C=s-x,_=e-B,y=t-S,b,w,Q,E,M,z;C>=_?_>=y?(b=1,w=0,Q=0,E=1,M=1,z=0):C>=y?(b=1,w=0,Q=0,E=1,M=0,z=1):(b=0,w=0,Q=1,E=1,M=0,z=1):_<y?(b=0,w=0,Q=1,E=0,M=1,z=1):C<y?(b=0,w=1,Q=0,E=0,M=1,z=1):(b=0,w=1,Q=0,E=1,M=1,z=0);let Y=C-b+i,ee=_-w+i,oe=y-Q+i,te=C-E+2*i,ge=_-M+2*i,Ce=y-z+2*i,J=C-1+3*i,ce=_-1+3*i,he=y-1+3*i,Ue=g&255,xe=p&255,Ve=A&255,Ie=.6-C*C-_*_-y*y;Ie<0?a=0:(Ie*=Ie,a=Ie*Ie*Da(le[Ue+le[xe+le[Ve]]],C,_,y));let Fe=.6-Y*Y-ee*ee-oe*oe;Fe<0?o=0:(Fe*=Fe,o=Fe*Fe*Da(le[Ue+b+le[xe+w+le[Ve+Q]]],Y,ee,oe));let Me=.6-te*te-ge*ge-Ce*Ce;Me<0?n=0:(Me*=Me,n=Me*Me*Da(le[Ue+E+le[xe+M+le[Ve+z]]],te,ge,Ce));let nt=.6-J*J-ce*ce-he*he;return nt<0?l=0:(nt*=nt,l=nt*nt*Da(le[Ue+1+le[xe+1+le[Ve+1]]],J,ce,he)),32*(a+o+n+l)}function a0(s,e,t,r){const i=.309016994,a=.138196601;let o,n,l,h,u,c=(s+e+t+r)*i,f=s+c,g=e+c,p=t+c,A=r+c,U=lr(f),x=lr(g),B=lr(p),S=lr(A),C=(U+x+B+S)*a,_=U-C,y=x-C,b=B-C,w=S-C,Q=s-_,E=e-y,M=t-b,z=r-w,Y=Q>E?32:0,ee=Q>M?16:0,oe=E>M?8:0,te=Q>z?4:0,ge=E>z?2:0,Ce=M>z?1:0,J=Y+ee+oe+te+ge+Ce,ce,he,Ue,xe,Ve,Ie,Fe,Me,nt,pr,Mt,Qt;ce=Lt[J][0]>=3?1:0,he=Lt[J][1]>=3?1:0,Ue=Lt[J][2]>=3?1:0,xe=Lt[J][3]>=3?1:0,Ve=Lt[J][0]>=2?1:0,Ie=Lt[J][1]>=2?1:0,Fe=Lt[J][2]>=2?1:0,Me=Lt[J][3]>=2?1:0,nt=Lt[J][0]>=1?1:0,pr=Lt[J][1]>=1?1:0,Mt=Lt[J][2]>=1?1:0,Qt=Lt[J][3]>=1?1:0;let Rt=Q-ce+a,Nt=E-he+a,St=M-Ue+a,mr=z-xe+a,Ar=Q-Ve+2*a,Ur=E-Ie+2*a,xr=M-Fe+2*a,gi=z-Me+2*a,Wr=Q-nt+3*a,Br=E-pr+3*a,pi=M-Mt+3*a,Jr=z-Qt+3*a,mi=Q-1+4*a,vr=E-1+4*a,Ai=M-1+4*a,Ui=z-1+4*a,zt=U&255,xi=x&255,Bi=B&255,Zr=S&255,vi=.6-Q*Q-E*E-M*M-z*z;vi<0?o=0:(vi*=vi,o=vi*vi*oa(le[zt+le[xi+le[Bi+le[Zr]]]],Q,E,M,z));let Ci=.6-Rt*Rt-Nt*Nt-St*St-mr*mr;Ci<0?n=0:(Ci*=Ci,n=Ci*Ci*oa(le[zt+ce+le[xi+he+le[Bi+Ue+le[Zr+xe]]]],Rt,Nt,St,mr));let Si=.6-Ar*Ar-Ur*Ur-xr*xr-gi*gi;Si<0?l=0:(Si*=Si,l=Si*Si*oa(le[zt+Ve+le[xi+Ie+le[Bi+Fe+le[Zr+Me]]]],Ar,Ur,xr,gi));let _i=.6-Wr*Wr-Br*Br-pi*pi-Jr*Jr;_i<0?h=0:(_i*=_i,h=_i*_i*oa(le[zt+nt+le[xi+pr+le[Bi+Mt+le[Zr+Qt]]]],Wr,Br,pi,Jr));let Fi=.6-mi*mi-vr*vr-Ai*Ai-Ui*Ui;return Fi<0?u=0:(Fi*=Fi,u=Fi*Fi*oa(le[zt+1+le[xi+1+le[Bi+1+le[Zr+1]]]],mi,vr,Ai,Ui)),27*(o+n+l+h+u)}class wn extends K{static uv_0=new wn;u=0;v=0;constructor(e=0,t=0){super(e,t),this.u=e,this.v=t}length(){return 0}static getUVSheet(e,t,r){let i=Math.floor(e%(t*r)),a=Math.floor(i/t),o=i%t;return new $(a/t,o/r,1/t,1/r)}}class Ma{serializedVersion="2";time;tangentMode=0;weightedMode=0;propertyKeyFrame;constructor(e=0){this.time=e,this.propertyKeyFrame={}}getK(e){return this.propertyKeyFrame[e]}split(e,t,r){switch(e){case L.single:{let i=this.getKeyFrame(0);i[r]=t}break;case L.float:{let i=this.getKeyFrame(0);i[r]=t}break;case L.vector2:{let i=t,a=this.getKeyFrame(0);a[r]=i.x;let o=this.getKeyFrame(1);o[r]=i.y}break;case L.vector3:{let i=t,a=this.getKeyFrame(0);a[r]=i.x;let o=this.getKeyFrame(1);o[r]=i.y;let n=this.getKeyFrame(2);n[r]=i.z}break;case L.vector4:{let i=t,a=this.getKeyFrame(0);a[r]=i.x;let o=this.getKeyFrame(1);o[r]=i.y;let n=this.getKeyFrame(2);n[r]=i.z;let l=this.getKeyFrame(3);l[r]=i.w}break;case L.quaternion:{let i=t,a=this.getKeyFrame(0);a[r]=i.x;let o=this.getKeyFrame(1);o[r]=i.y;let n=this.getKeyFrame(2);n[r]=i.z;let l=this.getKeyFrame(3);l[r]=i.w}break}}getKeyFrame(e){let t=this.propertyKeyFrame[e];return t||(t=new vs,t.time=this.time,t.tangentMode=this.tangentMode,t.weightedMode=this.weightedMode,this.propertyKeyFrame[e]=t),t}formBytes(e){this.time=e.readFloat32();{let{t,v:r}=Rr.parser(e);this.split(t,r,"value")}{let{t,v:r}=Rr.parser(e);this.split(t,r,"inSlope")}{let{t,v:r}=Rr.parser(e);this.split(t,r,"outSlope")}this.tangentMode=e.readInt32(),this.weightedMode=e.readInt32();{let{t,v:r}=Rr.parser(e);this.split(t,r,"inWeight")}{let{t,v:r}=Rr.parser(e);this.split(t,r,"outWeight")}}}class s0{static sub(e,t){switch(e.constructor.name){case"number":return e-t;case"Vector2":{let i=e,a=t;return new K(i.x-a.x,i.y-a.y)}case"Vector3":{let i=e,a=t;return new d(i.x-a.x,i.y-a.y,i.z-a.z)}case"Vector4":{let i=e,a=t;return new $(i.x-a.x,i.y-a.y,i.z-a.z,i.w-a.w)}case"Quaternion":{let i=e,a=t;return new Z(i.x-a.x,i.y-a.y,i.z-a.z,i.w-a.w)}}}}class Na{_keys=new Array;_values=new Array;getIndexByKey(e){return this._keys.indexOf(e)}getValueByKey(e){var t=this.getIndexByKey(e);return t>-1?this._values[t]:null}put(e,t){if(e==null)return null;var r=this.remove(e);return this._keys.push(e),this._values.push(t),r}remove(e){var t=this._keys.indexOf(e),r;return t>-1&&(r=this._values[t],this._keys.splice(t,1),this._values.splice(t,1)),r}getValues(){return this._values}getKeys(){return this._keys}clear(){this._values.length=0,this._keys.length=0}}class li{static WalkAble=1}class Va{static SetConst(e){this.EPSILON=e,this.POWER_EPSILON=e*e}static EPSILON=.1;static POWER_EPSILON=this.EPSILON*this.EPSILON}class xt extends d{static CALC_VECTOR3D1=new d;static CALC_VECTOR3D2=new d;static CALC_VECTOR3D3=new d;static CALC_VECTOR3D4=new d;static CALC_VECTOR3D5=new d;_pointId=0;constructor(e,t,r,i){super(t,r,i,0),this._pointId=e}get id(){return this._pointId}static equalPoint(e,t){return(e.x-t.x)*(e.x-t.x)+(e.y-t.y)*(e.y-t.y)+(e.z-t.z)*(e.z-t.z)<Va.POWER_EPSILON}static calcDistance(e,t){return xt.CALC_VECTOR3D3.setTo(e.x-t.x,e.y-t.y,e.z-t.z),xt.CALC_VECTOR3D3.length}}class _d{_openedList;_closedList;_endNode;_startNode;_triangleChannel;_navMesh;_findIndex=0;constructor(){this._openedList=new Array,this._closedList=new Array}findPath(e,t,r){return this._findIndex++,this._navMesh=e,this._startNode=t,this._endNode=r,this._openedList.length=0,this._closedList.length=0,this._startNode&&this._endNode?(this._startNode.gg=0,this._startNode.h=0,this._startNode.f=0,this._startNode.parent=null,this.search()):!1}search(){for(var e=this._startNode,t=[],r;e!=this._endNode;){t=e.getNeibourTriangles(t,li.WalkAble,li.WalkAble);for(r of t)if(r.closeId!=this._findIndex&&!(r==e||!r.walkAble)){var i=e.gg+xt.calcDistance(r,e)*r.costMultiplier,a=xt.calcDistance(r,this._endNode),o=i+a;r.openId==this._findIndex?r.f>o&&(r.f=o,r.gg=i,r.h=a,r.parent=e):(r.f=o,r.gg=i,r.h=a,r.parent=e,r.openId=this._findIndex,this._openedList.push(r))}if(e.closeId=this._findIndex,this._closedList.push(e),this._openedList.length==0)return!1;this._openedList.sort(function(n,l){return n.f-l.f}),e=this._openedList.shift()}return this.buildPath(),!0}buildPath(){this._triangleChannel=[];var e=this._endNode;for(this._triangleChannel.push(e);e!=this._startNode;)e=e.parent,this._triangleChannel.unshift(e)}get channel(){return this._triangleChannel}}class ur extends xt{_ownerPoint;_ownerEdge;radius=0;constructor(e,t){super(e.id,0,0,0),this._ownerEdge=t,this._ownerPoint=e}get ownerPoint(){return this._ownerPoint}get ownerEdge(){return this._ownerEdge}scalePoint(e=.7){var t=new ur(this._ownerPoint,this._ownerEdge);return t.copyFrom(this),t.decrementBy(this._ownerPoint),t.scaleBy(e),t.radius=t.length,t.incrementBy(this._ownerPoint),t}}class fr{_edgeMask=0;_edgeSize=0;_pointA;_pointB;_triangleOwners;_centerPoint;_edgeDirA2B;crossPoint;fatPointA;fatPointB;static CALC_FAT_VECTOR=new d;constructor(e,t){if(this._pointA=e,this._pointB=t,e.id>=t.id)throw new Error("edge point order error!!!");this._triangleOwners=new Array,this._centerPoint=new d,this._edgeMask=li.WalkAble,xt.CALC_VECTOR3D1.setTo(e.x-t.x,e.y-t.y,e.z-t.z),this._edgeSize=xt.CALC_VECTOR3D1.length,this._centerPoint.setTo((e.x+t.x)/2,(e.y+t.y)/2,(e.z+t.z)/2)}get size(){return this._edgeSize}get triangleOwners(){return this._triangleOwners}get centerPoint(){return this._centerPoint}initFatPoints(e){this._edgeDirA2B=this._pointB.subtract(this._pointA),this._edgeDirA2B.normalize(),this.fatPointA=this.fatPointA||new ur(this._pointA,this),this.fatPointB=this.fatPointB||new ur(this._pointB,this),this.fatPointA.radius!=e&&(fr.CALC_FAT_VECTOR.copyFrom(this._edgeDirA2B),fr.CALC_FAT_VECTOR.scaleBy(e),fr.CALC_FAT_VECTOR.incrementBy(this._pointA),this.fatPointA.copyFrom(fr.CALC_FAT_VECTOR),this.fatPointA.radius=e),this.fatPointB.radius!=e&&(fr.CALC_FAT_VECTOR.copyFrom(this._edgeDirA2B),fr.CALC_FAT_VECTOR.scaleBy(-e),fr.CALC_FAT_VECTOR.incrementBy(this._pointB),this.fatPointB.copyFrom(fr.CALC_FAT_VECTOR),this.fatPointB.radius=e)}getFatPoint(e){return e==this._pointA?this.fatPointA:this.fatPointB}getAnotherFatPoint(e){return e==this._pointA?this.fatPointB:this.fatPointA}getAnotherPoint(e){return e==this._pointA?this._pointB:this._pointA}containsPoint(e){return xt.equalPoint(e,this._pointA)?this._pointA:xt.equalPoint(e,this._pointB)?this._pointB:null}addTriangleOwners(e){if(e.edges.indexOf(this)==-1)throw new Error("the edge is not belong triangle!!!");this._triangleOwners.indexOf(e)==-1&&this._triangleOwners.push(e)}getPublicPoint(e){return this._pointA==e._pointA||this._pointA==e._pointB?this._pointA:this._pointB==e._pointA||this._pointB==e._pointB?this._pointB:null}getEqualPoint(e){return xt.equalPoint(e,this._pointA)?this._pointA:xt.equalPoint(e,this._pointB)?this._pointB:null}get pointA(){return this._pointA}get pointB(){return this._pointB}get walkAble(){return(this._edgeMask&li.WalkAble)==li.WalkAble}testMask(e){return(this._edgeMask&e)==e}}class re{endPoint;curPoint;rayA;rayB;rayAPoint;rayBPoint;static RAY_1=new d;static RAY_2=new d;static TEST_RAY=new d;static TEST_RAY_1=new d;static TEST_RAY_2=new d;static CALC_CROSS_POINT=new d;static CALC_CROSS_TEST=new d;cornerPoint;cornerEdge;continuePass(e,t,r){this.resetData(),this.curPoint=e,this.endPoint=t,this.cornerEdge=r}passEdge(e,t,r,i){if((this.rayA==null||this.rayB==null)&&(this.rayA=re.RAY_1,this.rayB=re.RAY_2,this.rayAPoint=e.pointA,this.rayBPoint=e.pointB,this.rayA.setTo(this.rayAPoint.x-this.curPoint.x,0,this.rayAPoint.z-this.curPoint.z),this.rayB.setTo(this.rayBPoint.x-this.curPoint.x,0,this.rayBPoint.z-this.curPoint.z)),i)return this.checkEndPoint(r);if(re.TEST_RAY.setTo(r.x-this.curPoint.x,0,r.z-this.curPoint.z),this.isPointAtCenter(re.TEST_RAY,this.rayA,this.rayB)){this.hasCrossPoint(t.pointA,t.pointB,this.rayAPoint,this.rayA)?(this.rayB.copyFrom(re.TEST_RAY),r instanceof xt?this.rayBPoint=r:this.rayBPoint=null):(this.rayA.copyFrom(re.TEST_RAY),r instanceof xt?this.rayAPoint=r:this.rayAPoint=null);var a=t.getAnotherPoint(r);re.TEST_RAY.setTo(a.x-this.curPoint.x,0,a.z-this.curPoint.z),(a==this.rayAPoint||a==this.rayBPoint||this.isPointAtCenter(re.TEST_RAY,this.rayA,this.rayB))&&(this.cornerEdge=t)}else{var o;if(re.TEST_RAY_1.copyFrom(t.pointA),re.TEST_RAY_1.decrementBy(this.curPoint),re.TEST_RAY_2.copyFrom(t.pointB),re.TEST_RAY_2.decrementBy(this.curPoint),re.TEST_RAY_1.y=0,re.TEST_RAY_2.y=0,this.isPointAtCenter(this.rayA,re.TEST_RAY_1,re.TEST_RAY_2)||this.isPointAtCenter(this.rayB,re.TEST_RAY_1,re.TEST_RAY_2)?o=!1:o=!0,o)return this.isPointAtCenter(this.rayA,re.TEST_RAY,this.rayB)?this.cornerPoint=this.rayAPoint:this.cornerPoint=this.rayBPoint,this.cornerEdge.crossPoint=this.cornerPoint,!1}return!0}checkEndPoint(e){return re.TEST_RAY.setTo(e.x-this.curPoint.x,0,e.z-this.curPoint.z),this.isPointAtCenter(re.TEST_RAY,this.rayA,this.rayB)?!0:(this.isPointAtCenter(this.rayA,re.TEST_RAY,this.rayB)?this.cornerPoint=this.rayAPoint:this.cornerPoint=this.rayBPoint,this.cornerEdge.crossPoint=this.cornerPoint,!1)}calcCrossEdge(e,t,r){return this.calcCrossPoint(e.fatPointA,e.fatPointB,t,r)}calcCrossPoint(e,t,r,i){re.CALC_CROSS_POINT.copyFrom(t),re.CALC_CROSS_POINT.decrementBy(e);let a=re.CALC_CROSS_POINT.x*i.z-i.x*re.CALC_CROSS_POINT.z;var o=0;return a!=0&&(o=((e.z-r.z)*i.x-(e.x-r.x)*i.z)/a),o>1?o=1:o<0&&(o=0),re.CALC_CROSS_POINT.scaleBy(o),re.CALC_CROSS_POINT.incrementBy(e),re.CALC_CROSS_POINT.clone()}calcCrossPointOut(e,t,r,i){re.CALC_CROSS_POINT.copyFrom(t),re.CALC_CROSS_POINT.decrementBy(e);var a=((e.z-r.z)*i.x-(e.x-r.x)*i.z)/(re.CALC_CROSS_POINT.x*i.z-i.x*re.CALC_CROSS_POINT.z);return a<=1&&a>=0?null:(re.CALC_CROSS_POINT.scaleBy(a),re.CALC_CROSS_POINT.incrementBy(e),re.CALC_CROSS_POINT.clone())}hasCrossPoint(e,t,r,i){re.CALC_CROSS_TEST.copyFrom(t),re.CALC_CROSS_TEST.decrementBy(e);var a=((e.z-r.z)*i.x-(e.x-r.x)*i.z)/(re.CALC_CROSS_TEST.x*i.z-i.x*re.CALC_CROSS_TEST.z);return a<=1&&a>=0}isPointAtCenter(e,t,r){var i=t.crossProduct(e);if(i.length==0&&e.length<t.length)return!0;var a=r.crossProduct(e);return a.length==0&&e.length<r.length?!0:(i.normalize(),a.normalize(),i.incrementBy(a),i.length<.01)}resetData(){this.cornerEdge=null,this.cornerPoint=null,this.curPoint=null,this.rayA=this.rayB=null,this.rayAPoint=this.rayBPoint=null,re.RAY_1.setTo(0,0,0),re.RAY_2.setTo(0,0,0)}}class Or{_aiRadius=0;_router;_result;_tempPublicEdgeList=new Array;_tempSamePlaneList=new Array;static CROSS_TEST_DIRECTION=new d;constructor(){this._router=new re}searchPath(e,t,r,i=0){return i<=0&&(i=1),this._aiRadius=i*1.5,this.searchEnable(e,t,r)?(this.search(e,t,r),!0):!1}get path(){return this._result}searchEnable(e,t,r){return!(e==null||t==null||r==null||r[0].plane.classifyPoint(e,Va.EPSILON)!=Ei.INTERSECT||r[r.length-1].plane.classifyPoint(t,Va.EPSILON)!=Ei.INTERSECT)}search(e,t,r){this._tempPublicEdgeList.length=0,this._tempSamePlaneList.length=0;var i=0,a=r.length-1,o,n,l,h;for(i=0;i<a;i++)n=r[i].getPublicEdge(r[i+1]),n.crossPoint=null,n.initFatPoints(this._aiRadius),this._tempPublicEdgeList.push(n),o=r[i],h=o.plane,o=r[i+1],l=o.getEdgeAgainstPoint(n),this._tempSamePlaneList.push(h.classifyPoint(l,Va.EPSILON)==Ei.INTERSECT);this._router.continuePass(e,t,this._tempPublicEdgeList[0]),a=this._tempPublicEdgeList.length;var u,c,f,g;for(i=0;i<a;i++)n=this._tempPublicEdgeList[i],o=r[i+1],g=i==a-1,g?l=t:l=o.getEdgeAgainstPoint(n),f=this._router.passEdge(n,this._tempPublicEdgeList[i+1],l,g),f||(u=this._router.cornerPoint,c=this._router.cornerEdge,i=this._tempPublicEdgeList.indexOf(c),this._router.continuePass(u,t,this._tempPublicEdgeList[i+1]));this.pushAllPathPoint2(e,t),this._result.length>=3&&(this.optimusTerminusFat(),this.optimusByRadius());let p=[];for(let A of this._result)p.push(new d().copyFrom(A));this._result=p}optimusTerminusFat(){var e,t,r;r=this._result[1],r instanceof ur&&(e=r),r=this._result[this._result.length-2],r instanceof ur&&(t=r),e&&(this._result[1]=e.scalePoint()),t&&e!=t&&(this._result[this._result.length-2]=t.scalePoint())}pushAllPathPoint2(e,t){var r=this._tempPublicEdgeList.length,i,a;this._result=new Array,this._result.push(e);for(var o=e,n,l,h,u=0;u<r;u++)if(i=this._tempPublicEdgeList[u],l=null,i.crossPoint)l=this.getFatPoint(i,i.crossPoint),l?this._result.push(l):this._result.push(i.crossPoint),o=i.crossPoint;else{a=null,n=null;for(var c=u+1;c<r&&(a=this._tempPublicEdgeList[c],n=a.crossPoint,!n);c++);n==null&&(n=t),l=this.getFatPoint(i,n),l?this._result.push(l):(n==o?h=n.clone():(Or.CROSS_TEST_DIRECTION.setTo(n.x-o.x,0,n.z-o.z),h=this._router.calcCrossEdge(i,o,Or.CROSS_TEST_DIRECTION)),this._result.push(h))}this._result.push(t)}optimusByRadius(){var e=new Array;e.length=this._result.length;var t=this._result.length-2,r,i,a,o,n,l,h,u,c,f,g,p,A;for(A=0;A<t;A++)h=u=c=null,o=n=l=null,g=!1,p=null,r=this._result[A],i=this._result[A+1],a=this._result[A+2],r instanceof ur&&(o=r),i instanceof ur&&(n=i),a instanceof ur&&(l=a),o&&(h=o.ownerPoint),n&&(u=n.ownerPoint),l&&(c=l.ownerPoint),h&&u&&h==u&&u!=c&&(g=!0),c&&u&&c==u&&h!=u&&(g=!0),g&&(Or.CROSS_TEST_DIRECTION.copyFrom(r),Or.CROSS_TEST_DIRECTION.decrementBy(a),f=n.ownerEdge,g=this._router.hasCrossPoint(f.pointA,f.pointB,a,Or.CROSS_TEST_DIRECTION),g&&(p=this._router.calcCrossPointOut(u,i,a,Or.CROSS_TEST_DIRECTION)),p&&(e[A+1]=p))}getFatPoint(e,t){if(e==null)return null;var r;t instanceof ur&&(r=t);var i;return r?i=r.ownerPoint:i=e.getEqualPoint(t),i==null?null:(r=e.getFatPoint(i),r)}}class Fd extends d{_id=0;_plane;_points=new Array;_edges=new Array;_neibourTriangles=new Na;_pointAgainstEdge=new Na;_edgeAgainstPoint=new Na;_mask=0;_aabbBox;f=0;gg=0;h=0;parent;costMultiplier=1;openId=0;closeId=0;get aabb(){return this._aabbBox}initAABB(){this._aabbBox=new Ct,this._aabbBox.addPoint(this._points[0]),this._aabbBox.addPoint(this._points[1]),this._aabbBox.addPoint(this._points[2])}calcGlobalQuadAABB(){}get isTriangle(){return!0}constructor(e,t,r,i){super(0,0,0,0),this._id=e,this._mask=li.WalkAble,this._edges.push(t,r,i);var a;for(a of this._edges)this._points.indexOf(a.pointA)==-1&&this._points.push(a.pointA),this._points.indexOf(a.pointB)==-1&&this._points.push(a.pointB);this.x=(this._points[0].x+this._points[1].x+this._points[2].x)/3,this.y=(this._points[0].y+this._points[1].y+this._points[2].y)/3,this.z=(this._points[0].z+this._points[1].z+this._points[2].z)/3,this._plane=new Cd,this._plane.fromPoints(this._points[0],this._points[1],this._points[2]),this._plane.normalize(),this.genarateAgainstData(),this.initAABB()}genarateAgainstData(){var e,t;for(e of this._edges)for(t of this._points)e.pointA!=t&&e.pointB!=t&&(this._edgeAgainstPoint.put(e,t),this._pointAgainstEdge.put(t,e))}get id(){return this._id}get plane(){return this._plane}get points(){return this._points}addNeibour(e,t){if(this._edges.indexOf(e)>=0)this._neibourTriangles.put(e,t);else throw new Error("the edge is not in triangle!!!")}getNeibourTriangles(e=null,t=1,r=1){e=e||new Array,e.length=0;var i,a,o=this._neibourTriangles.getKeys(),n;for(n of o)a=n,a.testMask(t)&&(i=this._neibourTriangles.getValueByKey(a),i.testMask(r)&&e.push(i));return e}getEdges(e=null,t=1){e=e||new Array,e.length=0;var r;for(r of this._edges)r.testMask(t)&&e.push(r);return e}get walkAble(){return this.testMask(li.WalkAble)}get edges(){return this._edges}testMask(e){return(this._mask&e)==e}getEdgeAgainstPoint(e){return this._edgeAgainstPoint.getValueByKey(e)}getPointAgainstEdge(e){return this._pointAgainstEdge.getValueByKey(e)}getPublicEdge(e){if(e&&e!=this){var t=this._neibourTriangles.getKeys(),r;for(r of t)if(this._neibourTriangles.getValueByKey(r)==e)return r}return null}loopPublicEdge(e){var t,r;if(e&&e!=this){for(t of this._edges)for(r of e._edges)if(t==r)return t}return null}randomPoint(){var e=this._points[2].subtract(this._points[0]);e.scaleBy(Math.random()),e.incrementBy(this._points[0]);var t=this._points[1].subtract(e);return t.scaleBy(Math.random()),t.incrementBy(e),t}}class o0{_nav3dPoints;_nav3dEdges;_nav3dTriangles;_path;_edgesDict;_nav3dAstar;_nav3dFunnel;_terrainQuad;_triangleList;get edges(){return this._nav3dEdges}get points(){return this._nav3dPoints}get path(){return this._path}get triangles(){return this._nav3dTriangles}constructor(e,t){this._nav3dPoints=new Array,this._nav3dEdges=new Array,this._nav3dTriangles=new Array,this._edgesDict=new Na,this.initPoints(e),this.initEdgesAndTriangles(t),this.createConnections(),this._nav3dAstar=new _d,this._nav3dFunnel=new Or,this._terrainQuad=new Wf(8,128),this._terrainQuad.createQuadTree(this._nav3dTriangles)}getTriangleAtPoint(e,t=5){return this._terrainQuad.getTriangleAtPoint(e,t)}findPath(e,t,r=5){this._path=null,this._triangleList=null;var i=this.getTriangleAtPoint(e,10),a=this.getTriangleAtPoint(t,10),o=this._nav3dAstar.findPath(this,i,a);return o?(this._triangleList=this._nav3dAstar.channel,o=this._nav3dFunnel.searchPath(e,t,this._triangleList,r),this._path=this._nav3dFunnel.path,o):!1}initPoints(e){for(var t,r,i=e.length,a=0;a<i;a++)t=e[a],r=new xt(a,t.x,t.y,t.z),this._nav3dPoints.push(r)}initEdgesAndTriangles(e){for(var t,r,i,a,o,n=e.length,l=0;l<n;l++)t=e[l],r=this.tryCreateEdge(t[0],t[1]),i=this.tryCreateEdge(t[1],t[2]),a=this.tryCreateEdge(t[2],t[0]),!(r==null||i==null||a==null)&&(o=new Fd(l,r,i,a),this._nav3dTriangles.push(o))}tryCreateEdge(e,t){if(e==t)throw new Error("edge point index error!!!");if(e>t){var r=e;e=t,t=r}var i=this._edgesDict.getValueByKey(e+"_"+t);return i==null&&(i=new fr(this._nav3dPoints[e],this._nav3dPoints[t]),this._nav3dEdges.push(i),this._edgesDict.put(e+"_"+t,i)),i}createConnections(){for(var e=this._nav3dTriangles.length,t=this._nav3dTriangles.length,r,i,a,o,n=0;n<e;n++){r=this._nav3dTriangles[n];for(a of r.edges)a.addTriangleOwners(r);for(var l=0;l<t;l++)i=this._nav3dTriangles[l],r!=i&&(o=r.loopPublicEdge(i),o&&(r.addNeibour(o,i),i.addNeibour(o,r)))}}}class Tn{x;y;setTo(e,t){this.x=e,this.y=t}equals(e,t){return e==this.x&&t==this.y}equalPoint(e){return this.equals(e.x,e.y)}get length(){return Math.sqrt(this.x*this.x+this.y*this.y)}clone(){var e=new Tn;return e.setTo(this.x,this.y),e}normalize(){var e=length;e!=0&&this.setTo(this.x/e,this.y/e)}}class br extends Ne{width;height;depth;constructor(e=1,t=1,r=1){super(),this.width=e,this.height=t,this.depth=r,this.initVertex()}initVertex(){let e=this.width/2,t=this.height/2,r=this.depth/2;this.bounds=new Re(d.ZERO.clone(),new d(this.width,this.height,this.depth));let i=new Float32Array([-e,t,r,e,t,r,e,t,-r,-e,t,-r,-e,t,r,e,t,-r,e,-t,r,-e,-t,r,-e,-t,-r,e,-t,-r,e,-t,r,-e,-t,-r,-e,-t,r,-e,t,r,-e,t,-r,-e,-t,-r,-e,-t,r,-e,t,-r,e,t,r,e,-t,r,e,-t,-r,e,t,-r,e,t,r,e,-t,-r,e,t,r,-e,t,r,-e,-t,r,-e,-t,r,e,-t,r,e,t,r,e,-t,-r,-e,-t,-r,-e,t,-r,e,t,-r,e,-t,-r,-e,t,-r]),a=new Float32Array([0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1]),o=new Float32Array([1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0]),n=[0,2,1,3,5,4,6,8,7,9,11,10,12,14,13,15,17,16,18,20,19,21,23,22,24,26,25,27,29,28,30,32,31,33,35,34],l=new Uint16Array(n.reverse());this.setIndices(l),this.setAttribute(V.position,i),this.setAttribute(V.normal,a),this.setAttribute(V.uv,o),this.setAttribute(V.TEXCOORD_1,o),this.addSubGeometry({indexStart:0,indexCount:n.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class yd extends Ne{radiusTop;radiusBottom;height;radialSegments;heightSegments;openEnded;thetaStart;thetaLength;constructor(e=1,t=1,r=1,i=8,a=8,o=!1,n=0,l=Math.PI*2){super(),this.radiusTop=e,this.radiusBottom=t,this.height=r,this.radialSegments=i,this.heightSegments=a,this.openEnded=o,this.thetaStart=n,this.thetaLength=l,this.instanceID=It(),this.buildGeometry()}addGroup(e,t,r){this.addSubGeometry({indexStart:e,indexCount:t,vertexStart:e,vertexCount:0,firstStart:0,index:r,topology:0})}buildGeometry(){const e=this;this.radialSegments=Math.floor(this.radialSegments),this.heightSegments=Math.floor(this.heightSegments);const t=[],r=[],i=[],a=[];let o=0;const n=[],l=this.height/2;let h=0;p(),this.openEnded===!1&&(this.radiusTop>0&&A(!0),this.radiusBottom>0&&A(!1));let u=new Float32Array(t),c=new Float32Array(r),f=new Float32Array(i),g=new Uint16Array(a);this.setAttribute(V.position,u),this.setAttribute(V.normal,c),this.setAttribute(V.uv,f),this.setAttribute(V.TEXCOORD_1,f),this.setIndices(g);function p(){const U=new d,x=new d;let B=0;const S=(e.radiusBottom-e.radiusTop)/e.height;for(let C=0;C<=e.heightSegments;C++){const _=[],y=C/e.heightSegments,b=y*(e.radiusBottom-e.radiusTop)+e.radiusTop;for(let w=0;w<=e.radialSegments;w++){const Q=w/e.radialSegments;let E=Q*e.thetaLength+e.thetaStart;w==e.radialSegments&&Math.abs(e.thetaLength-e.thetaStart)==Math.PI*2&&(E=0);const M=Math.sin(E),z=Math.cos(E);x.x=b*M,x.y=-y*e.height+l,x.z=b*z,t.push(x.x,x.y,x.z),U.set(M,S,z).normalize(),r.push(U.x,U.y,U.z),i.push(Q,1-y),_.push(o++)}n.push(_)}for(let C=0;C<e.radialSegments;C++)for(let _=0;_<e.heightSegments;_++){const y=n[_][C],b=n[_+1][C],w=n[_+1][C+1],Q=n[_][C+1];a.push(y,b,Q),a.push(b,w,Q),B+=6}e.addGroup(h,B,0),h+=B}function A(U){const x=o,B=new K,S=new d;let C=0;const _=U===!0?e.radiusTop:e.radiusBottom,y=U===!0?1:-1;for(let w=1;w<=e.radialSegments;w++)t.push(0,l*y,0),r.push(0,y,0),i.push(.5,.5),o++;const b=o;for(let w=0;w<=e.radialSegments;w++){const E=w/e.radialSegments*e.thetaLength+e.thetaStart,M=Math.cos(E),z=Math.sin(E);S.x=_*z,S.y=l*y,S.z=_*M,t.push(S.x,S.y,S.z),r.push(0,y,0),B.x=M*.5+.5,B.y=z*.5*y+.5,i.push(B.x,B.y),o++}for(let w=0;w<e.radialSegments;w++){const Q=x+w,E=b+w;U===!0?a.push(E,E+1,Q):a.push(E+1,E,Q),C+=3}e.addGroup(h,C,U===!0?1:2),h+=C}}}class bd extends Ne{radius;tube;radialSegments;tubularSegments;constructor(e=.4,t=.1,r=32,i=32){super(),this.radius=e,this.tube=t,this.radialSegments=r,this.tubularSegments=i,this.initVertex()}initVertex(){const e=2*Math.PI,t=this.radius,r=this.tube,i=this.radialSegments,a=this.tubularSegments;this.bounds=new Re(d.ZERO.clone(),new d(t*2,r*2,t*2));var o=(i+1)*(a+1);let n=new Float32Array(o*3),l=new Float32Array(o*3),h=new Float32Array(o*2),u=new Uint16Array(i*a*2*3),c=0,f=0,g=0,p=0;for(let A=0;A<=i;A++)for(let U=0;U<=a;U++){const x=U/a,B=A/i,S=x*e,C=B*Math.PI*2;if(n[c++]=(t+r*Math.cos(C))*Math.sin(S),n[c++]=r*Math.sin(C),n[c++]=(t+r*Math.cos(C))*Math.cos(S),l[f++]=Math.sin(S)*Math.cos(C),l[f++]=Math.sin(C),l[f++]=Math.cos(S)*Math.cos(C),h[g++]=x,h[g++]=B,U<a&&A<i){const _=a+1,y=_*A+U,b=_*(A+1)+U,w=_*(A+1)+U+1,Q=_*A+U+1;u[p++]=y,u[p++]=Q,u[p++]=b,u[p++]=Q,u[p++]=w,u[p++]=b}}this.setIndices(u),this.setAttribute(V.position,n),this.setAttribute(V.normal,l),this.setAttribute(V.uv,h),this.setAttribute(V.TEXCOORD_1,h),this.addSubGeometry({indexStart:0,indexCount:u.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class n0 extends Ne{segment;row=0;constructor(e){super(),this.segment=e,this.buildGeometry()}buildGeometry(){this.row=this.segment+1;let e=new Uint32Array(this.segment*6),t=new Float32Array(this.row*3*2),r=new Float32Array(this.row*3*2),i=new Float32Array(this.row*2*2);for(let a=0;a<this.row;a++){t[a*3*2+0]=0,t[a*3*2+1]=0,t[a*3*2+2]=0,t[a*3*2+3]=0,t[a*3*2+4]=0,t[a*3*2+5]=0,r[a*3*2+0]=0,r[a*3*2+1]=0,r[a*3*2+2]=1,r[a*3*2+3]=0,r[a*3*2+4]=0,r[a*3*2+5]=1,i[a*2*2+0]=0,i[a*2*2+1]=a/this.segment,i[a*2*2+2]=1,i[a*2*2+3]=a/this.segment;let o=a*2,n=o,l=o+1,h=o+2,u=o+3;e[a*6+0]=n,e[a*6+1]=l,e[a*6+2]=h,e[a*6+3]=l,e[a*6+4]=u,e[a*6+5]=h}this.setIndices(e),this.setAttribute(V.position,t),this.setAttribute(V.normal,r),this.setAttribute(V.uv,i),this.setAttribute(V.TEXCOORD_1,i),this.addSubGeometry({indexStart:0,indexCount:e.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class l0 extends Ne{faceCount=0;constructor(e){super(),this.faceCount=e,this.buildGeometry()}buildGeometry(){let e=new Uint32Array(this.faceCount*3),t=new Float32Array(this.faceCount*3*3),r=new Float32Array(this.faceCount*3*3),i=new Float32Array(this.faceCount*3*2),a=new Float32Array(this.faceCount*3*1);for(let o=0;o<this.faceCount;o++){let n=o*3+0,l=o*3+1,h=o*3+2;e[n]=n,e[l]=l,e[h]=h}this.setIndices(e),this.setAttribute(V.position,t),this.setAttribute(V.normal,r),this.setAttribute(V.uv,i),this.setAttribute(V.TEXCOORD_1,i),this.setAttribute(V.vIndex,a),this.addSubGeometry({indexStart:0,indexCount:e.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class h0 extends $e{create(e,t,r,i=!0){let a=R.device;const o=e*4*4;this.format=X.rgba32float,this.createTextureDescriptor(e,t,1,this.format);const l=a.createBuffer({size:r.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});a.queue.writeBuffer(l,0,r);const h=F.beginCommandEncoder();h.copyBufferToTexture({buffer:l,bytesPerRow:o},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(h),i&&(this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="unfilterable-float"),this.gpuSampler=a.createSampler({})}fromBuffer(e,t,r){let i=R.device;const a=e*4*4;this.format=X.rgba32float,this.mipmapCount=1,this.createTextureDescriptor(e,t,this.mipmapCount,this.format);const o=F.beginCommandEncoder();return o.copyBufferToTexture({buffer:r,bytesPerRow:a},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),F.endCommandEncoder(o),this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="unfilterable-float",this.gpuSampler=i.createSampler({}),this}}class u0 extends Us{_internalTexture;_minSize=32;_skyColor;constructor(e){super(),this._skyColor=e,this._internalTexture=new Co;let t=[];return m.res.fillColor(t,this._minSize,this._minSize,this.color.r,this.color.g,this.color.b,this.color.a),this._internalTexture.create(this._minSize,this._minSize,t,!1),this.createFromTexture(this._minSize,this._internalTexture),this}changeColor(e){return this._skyColor=e,m.res.fillColor(this._internalTexture.floatArray,this._minSize,this._minSize,this.color.r,this.color.g,this.color.b,this.color.a),this._internalTexture.updateTexture(this._minSize,this._minSize,this._internalTexture.floatArray,!1),this._faceData.uploadTexture(0,this._internalTexture),this}get color(){return this._skyColor}set color(e){this.changeColor(e)}}class c0 extends q{length=100;thickness=.1;constructor(e,t=.1){super(),this.length=e,this.thickness=t,this.init()}init(){let e=new q,t=new q,r=new q,i=new br(2,2,2),a=new br(2,2,2),o=new br(2,2,2),n=new pt;n.baseColor=new P(1,0,0);let l=new pt;l.baseColor=new P(0,1,0);let h=new pt;h.baseColor=new P(0,0,1);let u=e.addComponent(j),c=t.addComponent(j),f=r.addComponent(j);u.geometry=i,u.material=n,u.castShadow=!1,c.geometry=a,c.material=l,c.castShadow=!1,f.geometry=o,f.material=h,f.castShadow=!1,e.localScale=new d(this.length,this.thickness,this.thickness),e.x=this.length,t.localScale=new d(this.thickness,this.length,this.thickness),t.y=this.length,r.localScale=new d(this.thickness,this.thickness,this.length),r.z=this.length,this.addChild(e),this.addChild(t),this.addChild(r)}}class f0{static merge(e,t,r){}static mergeNumber(e,t,r){let i=r||new Ne,a=e.getAttribute(V.position).data.length/3,o=new Float32Array(a*t);for(const u of e.vertexAttributeMap){let c=u[1].attribute;if(c==V.indices)continue;let f=e.getAttribute(c).data,g=f.length,p=new Float32Array(g*t);for(let A=0;A<t;A++){p.set(f,g*A);for(let U=0;U<a;U++)o[a*A+U]=A}i.setAttribute(c,p)}i.setAttribute(V.vIndex,o);let n=e.getAttribute(V.indices).data,l=n.length,h=new Uint32Array(n.length*t);for(let u=0;u<t;u++)for(let c=0;c<l;c++){let f=u*a,g=u*l;const p=n[c]+f;h[g+c]=p}return i.setIndices(h),i.addSubGeometry({indexStart:0,indexCount:h.length,vertexStart:0,index:0,vertexCount:0,firstStart:0,topology:0}),i}static generateNormal(){}static generateTangent(){}static packUV(){}}class d0 extends q{size=100;divisions=10;constructor(e=100,t=10){super(),this.size=e,this.divisions=t,this.buildGeometry(),this.addAxis()}buildGeometry(){const e=[],t=[],r=this.size/this.divisions,i=this.size/2,a=this.divisions/2;for(let h=0,u=-i;h<=this.divisions;h++,u+=r)h!==a&&(e.push(-i,0,u,i,0,u),e.push(u,0,-i,u,0,i));for(let h=0;h<e.length/3;h+=2)t.push(h,h+1);let o=new Ne;o.setIndices(t.length>Uint16Array.length?new Uint32Array(t):new Uint16Array(t)),o.setAttribute(V.position,new Float32Array(e)),o.addSubGeometry({indexStart:0,indexCount:t.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let n=new pt;n.topology="line-list",n.baseColor=new P(1,1,1,.15),n.blendMode=ae.ADD,n.castReflection=!1;let l=this.addComponent(j);l.geometry=o,l.material=n}addAxis(){const e=this.size/2;let t=new Float32Array([-e,0,0,e,0,0]),r=new Uint16Array([0,1,2,3]),i=new Ne;i.setIndices(r),i.setAttribute(V.position,t),i.addSubGeometry({indexStart:0,indexCount:r.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});{let a=new q,o=a.addComponent(j);o.geometry=i;let n=o.material=new pt;n.baseColor=new P(1,0,0,.5),n.blendMode=ae.ADD,n.castReflection=!1,n.topology="line-list",this.addChild(a)}{let a=new q;a.rotationY=90;let o=a.addComponent(j);o.geometry=i;let n=o.material=new pt;n.baseColor=new P(0,1,0,.5),n.blendMode=ae.ADD,n.castReflection=!1,n.topology="line-list",this.addChild(a)}}}class g0{static color_temperature_to_rgb(e){e<1e3?e=1e3:e>4e4&&(e=4e4);let t=e/100,r=this.get_red(t),i=this.get_green(t),a=this.get_blue(t);return new P(r/255,i/255,a/255,1)}static get_red(e){if(e<=66)return 255;let t=329.698727446*Math.pow(e-60,-.1332047592);return this.bound(t)}static get_green(e){let t=0;return e<=66?t=99.4708025861*Math.log(e)-161.1195681661:t=288.1221695283*Math.pow(e-60,-.0755148492),this.bound(t)}static get_blue(e){let t=0;return e>=66?255:e<=19?0:(t=138.5177312231*Math.log(e-10)-305.0447927307,this.bound(t))}static bound(e,t=0,r=255){let i=Math.max(e,t);return Math.min(i,r)}}class p0{static boxGeo;static planeGeo;static sphere;static material;static materialMap;static initHeap(){this.boxGeo||(this.boxGeo=new br),this.planeGeo||(this.planeGeo=new Qi(1,1,1,1,d.UP)),this.sphere||(this.sphere=new Ri(1,35,35)),this.material||(this.material=new Qr),this.materialMap||(this.materialMap=new Map)}static get CubeMesh(){return this.initHeap(),this.boxGeo}static get SphereMesh(){return this.initHeap(),this.sphere}static GetCube(){this.initHeap();let e=new q,t=e.addComponent(j);return t.geometry=this.boxGeo,t.material=this.material.clone(),t.castShadow=!0,e}static GetMaterial(e){let t=this.materialMap.get(e);return t||(t=new Qr,t.baseMap=e,this.materialMap.set(e,t)),t.clone()}static GetPlane(e){this.initHeap();let t=new q,r=t.addComponent(j);r.geometry=this.planeGeo;let i=this.GetMaterial(e);return i.blendMode=ae.ADD,i.castShadow=!1,r.material=i,r.castGI=!1,r.castReflection=!1,t}static GetSingleCube(e,t,r,i,a,o){this.initHeap();let n=new Qr;n.roughness=.5,n.metallic=.1,n.baseColor=new P(i,a,o,1);let l=new q,h=l.addComponent(j);return h.castGI=!0,h.geometry=new br(e,t,r),h.material=n,l}static GetSingleSphere(e,t,r,i){this.initHeap();let a=new Qr;a.baseColor=new P(t,r,i,1);let o=new q,n=o.addComponent(j);return n.castGI=!0,n.geometry=new Ri(e,20,20),n.material=a,o}static get Sphere(){this.initHeap();let e=new q,t=e.addComponent(j);return t.geometry=this.sphere,t.material=this.material,e}static GetSingleCube2(e,t=10){this.initHeap();let r=new q,i=r.addComponent(j);return i.castShadow=!1,i.geometry=new br(t,t,t),i.material=e,r}static GetPointLight(e,t,r,i,a,o,n=1,l=!0){let h=new q,u=h.addComponent(ji);u.lightColor=new P(i,a,o,1),u.intensity=n,u.range=r,u.at=8,u.radius=0,u.castShadow=l,h.localPosition=e,h.localRotation=t;let c=this.GetSingleSphere(.1,1,1,1);return h.addChild(c),u}}var T=(s=>(s[s.X=0]="X",s[s.Y=1]="Y",s[s.Z=2]="Z",s[s.XY=3]="XY",s[s.XZ=4]="XZ",s[s.YZ=5]="YZ",s[s.XYZ=6]="XYZ",s[s.MAX=7]="MAX",s[s.NONE=8]="NONE",s))(T||{}),qt=(s=>(s[s.Local=0]="Local",s[s.Global=1]="Global",s))(qt||{});class ws extends Pe{mAxis;mAxisColor;mContainer;mAxisMaterial;mAxisCollider;constructor(){super(),this._enable=!1,this.mAxis=new Array(T.MAX),this.mAxisColor=new Array(T.MAX),this.mAxisMaterial=new Array(T.MAX),this.mAxisCollider=new Array(T.MAX)}get target(){return this.object3D.target}get mX(){return this.object3D.mXObj}get mY(){return this.object3D.mYObj}get mZ(){return this.object3D.mZObj}get transformSpaceMode(){return this.object3D.transformSpaceMode}init(e){this.mContainer=new q;let t=new pt;t.baseColor=new P(1,0,0),t.depthCompare=rt.always,this.mAxisColor[T.X]=t.baseColor,this.mAxisMaterial[T.X]=t;let r=new pt;r.baseColor=new P(0,1,0),r.depthCompare=rt.always,this.mAxisColor[T.Y]=r.baseColor,this.mAxisMaterial[T.Y]=r;let i=new pt;i.baseColor=new P(0,0,1),i.depthCompare=rt.always,this.mAxisColor[T.Z]=i.baseColor,this.mAxisMaterial[T.Z]=i;let a=this.createCustomAxis(T.X),o=this.createCustomAxis(T.Y),n=this.createCustomAxis(T.Z);this.mContainer.addChild(this.mAxis[T.X]=a),this.mContainer.addChild(this.mAxis[T.Y]=o),this.mContainer.addChild(this.mAxis[T.Z]=n),this.mAxisCollider[T.X]=a.getComponent(Kt),this.mAxisCollider[T.Y]=o.getComponent(Kt),this.mAxisCollider[T.Z]=n.getComponent(Kt)}start(){}onEnable(e){this.object3D.addChild(this.mContainer),this.reset()}onDisable(e){this.object3D.removeChild(this.mContainer)}reset(){switch(this.transformSpaceMode){case qt.Local:{let t=I.help_matrix_0.copyFrom(this.mX.transform.worldMatrix).decompose();this.object3D.scaleX=1,this.object3D.scaleY=1,this.object3D.scaleZ=1,this.object3D.rotationX=t[1].x,this.object3D.rotationY=t[1].y,this.object3D.rotationZ=t[1].z,this.object3D.x=t[0].x,this.object3D.y=t[0].y,this.object3D.z=t[0].z}break;case qt.Global:{this.object3D.scaleX=1,this.object3D.scaleY=1,this.object3D.scaleZ=1,this.object3D.rotationX=0,this.object3D.rotationY=0,this.object3D.rotationZ=0;const e=this.mX.transform.worldPosition;this.object3D.x=e.x,this.object3D.y=e.y,this.object3D.z=e.z}break}}pickAxis(){let r=this.object3D.transform.scene3D.view.camera.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY),i,a;for(let o=0;o<=T.MAX;o++){let n=this.mAxisCollider[o];if(n&&(i=n.rayPick(r),i&&(!a||a.distance>i.distance||o==T.XYZ)&&(a={axis:o,obj:n.object3D,distance:i.distance,intersectPoint:i.intersectPoint},o==T.XYZ)))break}return a}currentAxis=T.NONE;beginPoint=new d;beginMousePos=new d;currentPoint=new d;onMouseDown(e){if(e.mouseCode!=_s.MOUSE_LEFT)return;let t=this.pickAxis();if(!t)return;this.currentAxis=t.axis,e.stopImmediatePropagation();const i=this.object3D.transform.scene3D.view.camera;let a=i.worldToScreenPoint(this.mX.transform.worldPosition),o=i.screenPointToWorld(m.inputSystem.mouseX,m.inputSystem.mouseY,a.z);this.beginPoint.copyFrom(o),this.beginMousePos.x=m.inputSystem.mouseX,this.beginMousePos.y=m.inputSystem.mouseY}lastMoveObj;lastMoveAxis;onMouseMove(e){if(this.currentAxis==T.NONE){let t=this.lastMoveObj.getComponent(j).material;this.lastMoveObj&&"baseColor"in t&&(t.baseColor=this.mAxisColor[this.lastMoveAxis],this.lastMoveObj=null,this.lastMoveAxis==T.XYZ&&(this.mAxis[T.X].getComponent(j).material.setUniformColor("baseColor",this.mAxisColor[T.X]),this.mAxis[T.Y].getComponent(j).material.setUniformColor("baseColor",this.mAxisColor[T.Y]),this.mAxis[T.Z].getComponent(j).material.setUniformColor("baseColor",this.mAxisColor[T.Z])),this.lastMoveAxis=T.NONE);let r=this.pickAxis();if(!r)return;t.setUniformColor("baseColor",new P(1,1,1)),this.lastMoveObj=r.obj,this.lastMoveAxis=r.axis,this.lastMoveAxis==T.XYZ&&(this.mAxis[T.X].getComponent(j).material.setUniformColor("baseColor",new P(1,1,1)),this.mAxis[T.Y].getComponent(j).material.setUniformColor("baseColor",new P(1,1,1)),this.mAxis[T.Z].getComponent(j).material.setUniformColor("baseColor",new P(1,1,1)))}else{const r=this.object3D.transform.scene3D.view.camera;let i=r.worldToScreenPoint(this.mX.transform.worldPosition),a=r.screenPointToWorld(m.inputSystem.mouseX,m.inputSystem.mouseY,i.z);this.currentPoint.copyFrom(a);let o=a.subtract(this.beginPoint);d.HELP_0.set(m.inputSystem.mouseX,m.inputSystem.mouseY,0);let n=d.distance(d.HELP_0,this.beginMousePos);switch(this.beginMousePos.copyFrom(d.HELP_0),this.transformSpaceMode){case qt.Local:this.applyLocalTransform(this.currentAxis,o,n);break;case qt.Global:this.applyGlobalTransform(this.currentAxis,o,n);break}this.beginPoint.copyFrom(a),this.reset()}}onMouseUp(e){e.mouseCode==_s.MOUSE_LEFT&&(this.currentAxis=T.NONE,this.reset())}onUpdate(e){let r=d.distance(e.camera.transform.worldPosition,this.object3D.transform.worldPosition)/100;if(this.mContainer.scaleX=this.mContainer.scaleY=this.mContainer.scaleZ=r,this.mX){const i=this.mX.transform.worldPosition;this.object3D.x=i.x,this.object3D.y=i.y,this.object3D.z=i.z}}applyLocalTransform(e,t,r){console.warn("not imp")}applyGlobalTransform(e,t,r){console.warn("not imp")}createCustomAxis(e){return this.createAxis(e)}createAxis(e){let t=0,r=0,i=0;switch(e){case T.X:t=1;break;case T.Y:r=1;break;case T.Z:i=1;break}let a=.4+t*20,o=.4+r*20,n=.4+i*20,l=new q;l.x=a*.5,l.y=o*.5,l.z=n*.5;let h=l.addComponent(j);h.geometry=new br(a,o,n),h.material=this.mAxisMaterial[e];let u=l.addComponent(Kt),c=new ra;return c.setFromCenterAndSize(new d(0,0,0),new d(a+1,o+1,n+1)),u.shape=c,l}}class Qd extends ws{init(e){super.init(e);let t=new pt;t.doubleSide=!0,t.baseColor=new P(.9,.9,.9),t.depthCompare=rt.always,this.mAxisColor[T.XYZ]=t.baseColor,this.mAxisMaterial[T.XYZ]=t;let r=new q,i=r.addComponent(j);i.geometry=new br(2,2,2),i.material=this.mAxisMaterial[T.XYZ];let a=r.addComponent(Kt),o=new ra;o.setFromCenterAndSize(new d(0,0,0),new d(2,2,2)),a.shape=o,this.mContainer.addChild(this.mAxis[T.XYZ]=r),this.mAxisCollider[T.XYZ]=r.getComponent(Kt)}applyLocalTransform(e,t,r){switch(this.currentAxis){case T.XYZ:{let i=0;Math.abs(t.x)>Math.abs(t.y)?Math.abs(t.x)>Math.abs(t.z)?i=t.x:i=t.z:i=t.y,this.mX.scaleX+=i,this.mX.scaleY+=i,this.mX.scaleZ+=i}break;default:this.mX.transform.worldMatrix.transformVector(t,t),(this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ)&&(this.mX.scaleX=Math.abs(this.mX.scaleX+t.x)),(this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ)&&(this.mX.scaleY=Math.abs(this.mX.scaleY+t.y)),(this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ)&&(this.mX.scaleZ=Math.abs(this.mX.scaleZ+t.z));break}}applyGlobalTransform(e,t,r){let i=d.HELP_0;i.set(0,0,0),(this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ)&&(i.x=t.x),(this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ)&&(i.y=t.y),(this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ)&&(i.z=t.z),this.mX.transform.worldMatrix.transformVector(i,d.HELP_1),this.mX.scaleX+=d.HELP_1.x,this.mX.scaleY+=d.HELP_1.y,this.mX.scaleZ+=d.HELP_1.z}createCustomAxis(e){let t=super.createAxis(e),r=this.createBox(e);return t.addChild(r),t}createBox(e){let t=0,r=0,i=0,a=new q;switch(e){case T.X:t=1,a.rotationZ=-90;break;case T.Y:r=1;break;case T.Z:i=1,a.rotationX=90;break}let o=.2+t*20,n=.2+r*20,l=.2+i*20;a.x=o*.5,a.y=n*.5,a.z=l*.5;let h=a.addComponent(j);return h.geometry=new br(2,2,2),h.material=this.mAxisMaterial[e],a}}var tt=(s=>(s[s.Scale=0]="Scale",s[s.Rotation=1]="Rotation",s[s.Translation=2]="Translation",s[s.NONE=3]="NONE",s))(tt||{});class Rd extends ws{applyLocalTransform(e,t,r){if(this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ,this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ){I.help_matrix_0.copyFrom(this.mX.transform.worldMatrix),I.help_matrix_1.identity(),I.help_matrix_1.createByRotation(1,d.Y_AXIS),I.help_matrix_2.multiplyMatrices(I.help_matrix_1,I.help_matrix_0),I.help_matrix_2.invert(),I.help_matrix_1.multiplyMatrices(I.help_matrix_2,I.help_matrix_0);let i=I.help_matrix_1.decompose();this.mX.rotationX+=i[1].x,this.mY.rotationY+=i[1].y,this.mZ.rotationZ+=i[1].z}this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ}getAngle(){const t=this.object3D.transform.scene3D.view.camera,r=this.mZ.transform.worldPosition;if(t.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY),this.currentAxis==T.X){let i=t.worldToScreenPoint(r);d.HELP_1.set(i.x,i.y,0),d.HELP_2.set(m.inputSystem.mouseX,m.inputSystem.mouseY,0);let a=d.HELP_2.subtract(d.HELP_1),o=d.getAngle(d.X_AXIS,a);return a.y>0&&(o=360-o),t.transform.worldPosition.x-r.x>0&&(o=360-o),o}if(this.currentAxis==T.Y){let i=t.worldToScreenPoint(r);d.HELP_1.set(i.x,i.y,0),d.HELP_2.set(m.inputSystem.mouseX,m.inputSystem.mouseY,0);let a=d.HELP_2.subtract(d.HELP_1),o=d.getAngle(d.X_AXIS,a);return a.y>0&&(o=360-o),t.transform.worldPosition.y-r.y>0&&(o=360-o),o}if(this.currentAxis==T.Z){let i=t.worldToScreenPoint(r);d.HELP_1.set(i.x,i.y,0),d.HELP_2.set(m.inputSystem.mouseX,m.inputSystem.mouseY,0);let a=d.HELP_2.subtract(d.HELP_1),o=d.getAngle(d.X_AXIS,a);return a.y>0&&(o=360-o),t.transform.worldPosition.z-r.z>0&&(o=360-o),o}return 0}mLastAngle=0;applyGlobalTransform(e,t,r){if(this.currentAxis==T.X||this.currentAxis==T.Y||this.currentAxis==T.Z){let i=this.getAngle();switch(I.help_matrix_0.identity(),this.currentAxis){case T.X:I.help_matrix_0.createByRotation(this.mLastAngle-i,d.X_AXIS);break;case T.Y:I.help_matrix_0.createByRotation(this.mLastAngle-i,d.Y_AXIS);break;case T.Z:I.help_matrix_0.createByRotation(this.mLastAngle-i,d.Z_AXIS);break}I.help_matrix_1.copyFrom(this.mX.transform.worldMatrix),I.help_matrix_1.append(I.help_matrix_0),this.mX.parent&&(I.help_matrix_2.copyFrom(this.mX.parent.worldMatrix),I.help_matrix_2.invert(),I.help_matrix_1.multiply(I.help_matrix_2));let o=I.help_matrix_1.decompose(ir.QUATERNION)[1];Z.HELP_0.set(o.x,o.y,o.z,o.w),this.mLastAngle=i,this.mX.transform.localRotQuat=Z.HELP_0}}onMouseDown(e){super.onMouseDown(e),this.currentAxis!=T.NONE&&(this.mAxis[T.X].getComponent(j).enable=!1,this.mAxis[T.Y].getComponent(j).enable=!1,this.mAxis[T.Z].getComponent(j).enable=!1,this.mAxis[this.currentAxis].getComponent(j).enable=!0,this.mLastAngle=this.getAngle())}onMouseUp(e){super.onMouseUp(e),this.currentAxis==T.NONE&&(this.mAxis[T.X].getComponent(j).enable=!0,this.mAxis[T.Y].getComponent(j).enable=!0,this.mAxis[T.Z].getComponent(j).enable=!0)}createCustomAxis(e){return this.createAxis(e)}createAxis(e){let t=new q;switch(e){case T.X:t.rotationZ=90;break;case T.Y:break;case T.Z:t.rotationX=90;break}let r=t.addComponent(j);r.geometry=new bd(20,.4),r.material=this.mAxisMaterial[e];let i=t.addComponent(Kt),a=new ra;return a.setFromCenterAndSize(new d,new d(40,.4,40)),i.shape=a,t}pickAxis(){let r=this.object3D.transform.scene3D.view.camera.screenPointToRay(m.inputSystem.mouseX,m.inputSystem.mouseY),i,a;for(let o=0;o<=T.MAX;o++){let n=this.mAxisCollider[o];if(n&&(i=n.rayPick(r),i)){let l=d.distance(i.intersectPoint,n.shape.center);if(l>20+.8||l<20-.8)continue;(!a||a.distance>i.distance)&&(a={axis:o,obj:n.object3D,distance:i.distance,intersectPoint:i.intersectPoint})}}return a}}class Id extends ws{init(e){super.init(e);let t=new pt;t.doubleSide=!0,t.baseColor=new P(0,0,1),t.depthCompare=rt.always,this.mAxisColor[T.XY]=t.baseColor,this.mAxisMaterial[T.XY]=t;let r=new pt;r.doubleSide=!0,r.baseColor=new P(0,1,0),r.depthCompare=rt.always,this.mAxisColor[T.XZ]=r.baseColor,this.mAxisMaterial[T.XZ]=r;let i=new pt;i.doubleSide=!0,i.baseColor=new P(1,0,0),i.depthCompare=rt.always,this.mAxisColor[T.YZ]=i.baseColor,this.mAxisMaterial[T.YZ]=i;let a=this.createPlane(T.XY),o=this.createPlane(T.XZ),n=this.createPlane(T.YZ);this.mContainer.addChild(this.mAxis[T.XY]=a),this.mContainer.addChild(this.mAxis[T.XZ]=o),this.mContainer.addChild(this.mAxis[T.YZ]=n),this.mAxisCollider[T.XY]=a.getComponent(Kt),this.mAxisCollider[T.XZ]=o.getComponent(Kt),this.mAxisCollider[T.YZ]=n.getComponent(Kt)}applyLocalTransform(e,t,r){I.help_matrix_0.copyFrom(this.mX.transform.worldMatrix).invert(),I.help_matrix_0.transformVector(t,d.HELP_0),this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ||(d.HELP_0.x=0),this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ||(d.HELP_0.y=0),this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ||(d.HELP_0.z=0),this.mX.transform.worldMatrix.transformVector(d.HELP_0,d.HELP_1),this.mX.x+=d.HELP_1.x,this.mX.y+=d.HELP_1.y,this.mX.z+=d.HELP_1.z}applyGlobalTransform(e,t,r){I.help_matrix_0.identity(),(this.currentAxis==T.X||this.currentAxis==T.XY||this.currentAxis==T.XZ)&&I.help_matrix_0.appendTranslation(t.x,0,0),(this.currentAxis==T.Y||this.currentAxis==T.XY||this.currentAxis==T.YZ)&&I.help_matrix_0.appendTranslation(0,t.y,0),(this.currentAxis==T.Z||this.currentAxis==T.XZ||this.currentAxis==T.YZ)&&I.help_matrix_0.appendTranslation(0,0,t.z),I.help_matrix_1.copyFrom(this.mX.transform.worldMatrix),I.help_matrix_1.append(I.help_matrix_0),this.mX.parent&&(I.help_matrix_2.copyFrom(this.mX.parent.worldMatrix),I.help_matrix_2.invert(),I.help_matrix_1.multiply(I.help_matrix_2));let i=I.help_matrix_1.decompose(ir.QUATERNION);this.mX.transform.localPosition=i[0],console.log(this.target.localPosition)}createCustomAxis(e){let t=super.createAxis(e),r=this.createArrows(e);return t.addChild(r),t}createArrows(e){let t=0,r=0,i=0,a=new q;switch(e){case T.X:t=1,a.rotationZ=-90;break;case T.Y:r=1,a.rotationY=-90;break;case T.Z:i=1,a.rotationX=90;break}let o=.2+t*20,n=.2+r*20,l=.2+i*20;a.x=o*.5,a.y=n*.5,a.z=l*.5;let h=a.addComponent(j);return h.geometry=new yd(0,1,4),h.material=this.mAxisMaterial[e],a}createPlane(e){let t=new q,r=t.addComponent(j);r.material=this.mAxisMaterial[e];let i=t.addComponent(Kt),a=new ra;switch(i.shape=a,e){case T.XY:r.geometry=new Qi(4,4,1,1,d.Z_AXIS),t.x=8,t.y=8,a.setFromCenterAndSize(new d(0,0,0),new d(4,4,.1));break;case T.XZ:r.geometry=new Qi(4,4,1,1,d.Y_AXIS),t.x=8,t.z=8,a.setFromCenterAndSize(new d(0,0,0),new d(4,.1,4));break;case T.YZ:r.geometry=new Qi(4,4,1,1,d.X_AXIS),t.y=8,t.z=8,a.setFromCenterAndSize(new d(0,0,0),new d(.1,4,4));break}return t}}class Dn extends q{static _instance;static get instance(){return this._instance||(this._instance=new Dn),this._instance}mTarget;mTransformMode=tt.NONE;mTransformSpaceType=qt.Global;mControllers;mXObj;mYObj;mZObj;constructor(){super(),this.mControllers=[null,null,null],this.mControllers[tt.Scale]=this.addComponent(Qd),this.mControllers[tt.Rotation]=this.addComponent(Rd),this.mControllers[tt.Translation]=this.addComponent(Id),this.mControllers[tt.Scale].enable=!1,this.mControllers[tt.Rotation].enable=!1,this.mControllers[tt.Translation].enable=!1,this.mXObj=new q,this.mYObj=new q,this.mZObj=new q,this.mXObj.addChild(this.mYObj),this.mYObj.addChild(this.mZObj)}get transformMode(){return this.mTransformMode}get transformSpaceMode(){return this.mTransformSpaceType}active(e){e.addChild(this),e.addChild(this.mXObj)}unActive(e){e.removeChild(this)}get target(){return this.mTarget}selectObject(e,t,r){this.mTarget!=e&&(e?this.activate():this.unactivate(),this.mTarget=e,this.mXObj.localPosition=e.transform.worldPosition.clone()),t!=null&&this.selectTransformMode(t),r!=null&&this.selectTransformSpaceMode(r)}selectTransformMode(e){this.mTransformMode!=e&&(this.mTransformMode!=tt.NONE&&(this.mControllers[this.mTransformMode].enable=!1),this.mTransformMode=e,this.mTransformMode!=tt.NONE&&(this.mControllers[this.mTransformMode].enable=!0))}selectTransformSpaceMode(e){this.mTransformSpaceType!=e&&(this.mTransformSpaceType=e,this.mTransformMode!=tt.NONE&&this.mControllers[this.mTransformMode].reset())}activate(){m.inputSystem.addEventListener(Cr.KEY_DOWN,this.onKeyDown,this),m.inputSystem.addEventListener(k.POINTER_DOWN,this.onMouseDown,this,null,99999),m.inputSystem.addEventListener(k.POINTER_MOVE,this.onMouseMove,this,null,99999),m.inputSystem.addEventListener(k.POINTER_UP,this.onMouseUp,this,null,99999)}unactivate(){m.inputSystem.removeEventListener(Cr.KEY_DOWN,this.onKeyDown,this),m.inputSystem.removeEventListener(k.POINTER_DOWN,this.onMouseDown,this),m.inputSystem.removeEventListener(k.POINTER_MOVE,this.onMouseMove,this),m.inputSystem.removeEventListener(k.POINTER_UP,this.onMouseUp,this)}onKeyDown(e){switch(e.keyCode){case ke.Key_R:this.selectTransformMode(tt.Scale),this.selectTransformSpaceMode(qt.Local);break;case ke.Key_E:this.selectTransformMode(tt.Rotation),this.selectTransformSpaceMode(qt.Global);break;case ke.Key_W:this.selectTransformMode(tt.Translation),this.selectTransformSpaceMode(qt.Global);break;case ke.Key_A:this.selectTransformSpaceMode(qt.Local);break;case ke.Key_S:this.selectTransformSpaceMode(qt.Global);break}}onMouseDown(e){this.mTransformMode!=tt.NONE&&this.mControllers[this.mTransformMode].onMouseDown(e)}onMouseMove(e){this.mTransformMode!=tt.NONE&&this.mControllers[this.mTransformMode].onMouseMove(e)}onMouseUp(e){this.mTransformMode!=tt.NONE&&this.mControllers[this.mTransformMode].onMouseUp(e)}}const m0=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{Su as AccelerateDecelerateInterpolator,vu as AccelerateInterpolator,_a as AnimationCurve,ni as AnimationCurveT,ki as AnimationMonitor,Nr as AnimatorComponent,cm as AnimatorEventKeyframe,yu as AnticipateInterpolator,qa as AnticipateOvershootInterpolator,Ld as ArrayHas,Od as ArrayItemIndex,pc as AtlasParser,im as AtmosphericComponent,of as AtmosphericScatteringSky,sf as AtmosphericScatteringSkySetting,af as AtmosphericScatteringSky_shader,gf as AttributeAnimCurve,c0 as AxisObject,kr as B3DMLoader,ec as B3DMLoaderBase,en as B3DMParseUtil,tc as B3DMParser,lc as BRDFLUT,hc as BRDFLUTGenerate,ml as BRDF_frag,Ko as BatchTable,OA as BiMap,Wa as BillboardComponent,ii as BillboardType,Gl as BitUtil,Mr as BitmapTexture2D,hh as BitmapTexture2DArray,Jo as BitmapTextureCube,nh as Blend,lh as BlendFactor,ae as BlendMode,Cn as BlendShapeData,vn as BlendShapePropertyData,aA as BloomPost,Ju as BlurEffectCreatorBlur_cs,Wu as BlurEffectCreatorSample_cs,Zu as BlurTexture2DBufferCreator,Ot as BounceInterpolator,So as BoundUtil,Re as BoundingBox,Ga as BoundingSphere,ra as BoxColliderShape,br as BoxGeometry,ol as BrdfLut_frag,Ul as BsDF_frag,Al as BxDF_frag,Cl as BxdfDebug_frag,Ws as BytesArray,qe as CEvent,Er as CEventDispatcher,as as CEventListener,Yr as CResizeEvent,Zt as CSM,Zi as Camera3D,Bm as CameraControllerBase,He as CameraType,je as CameraUtil,Vm as CapsuleColliderShape,Sh as CastPointShadowMaterialPass,Ch as CastShadowMaterialPass,xl as Clearcoat_frag,jh as ClusterBoundsSource_cs,dt as ClusterConfig,Xn as ClusterDebug_frag,Il as ClusterLight,Hh as ClusterLightingBuffer,qh as ClusterLightingRender,Kh as ClusterLighting_cs,bh as CollectInfo,Kt as ColliderComponent,Ke as ColliderShape,ta as ColliderShapeType,P as Color,zA as ColorGradient,VA as ColorLitMaterial,$c as ColorLitShader,Xp as ColorPassFragmentOutput,Xh as ColorPassRenderer,os as ColorUtil,Js as ComData,Zc as Combine_cs,al as Common_frag,sl as Common_vert,Pe as ComponentBase,Se as ComponentCollect,Hi as ComputeGPUBuffer,ue as ComputeShader,On as Context3D,Ro as CubeCamera,Yu as CubeMapFaceEnum,$s as CubeSky_Shader,Rs as CubicBezierCurve,GA as CubicBezierPath,gd as CubicBezierType,bu as CycleInterpolator,yd as CylinderGeometry,du as DDGIIrradianceComputePass,ts as DDGIIrradianceGPUBufferReader,Lh as DDGIIrradianceVolume,fu as DDGIIrradiance_shader,Au as DDGILightingPass,mu as DDGILighting_shader,pu as DDGIMultiBouncePass,Uu as DDGIProbeRenderer,it as DEGREES_TO_RADIANS,Cu as DecelerateInterpolator,Yc as Denoising_cs,ru as Depth2DTextureArray,eu as DepthCubeArrayTexture,_h as DepthMaterialPass,sA as DepthOfFieldPost,Ic as DepthOfView_cs,Ua as DirectLight,Na as DoubleArray,zi as EditorInspector,m as Engine3D,kh as Entity,Qh as EntityBatchCollect,G as EntityCollect,nl as EnvMap_frag,Dt as ErpImage2CubeMap,Xu as ErpImage2CubeMapCreateCube_cs,Hu as ErpImage2CubeMapRgbe2rgba_cs,zm as ExtrudeGeometry,lr as FASTFLOOR,Io as FXAAPost,hu as FXAAShader,hl as FastMathShader,As as FeatureTable,gt as FileLoader,vm as FirstPersonCameraController,Co as Float16ArrayTexture,h0 as Float32ArrayTexture,Cm as FlyCameraController,fc as FontChar,uc as FontInfo,cc as FontPage,Lr as FontParser,Bu as ForwardRenderJob,ro as FragmentOutput,cl as FragmentVarying,fn as FrameCache,sh as Frustum,oh as FrustumCSM,Yp as FrustumCulling_cs,Sl as FullQuad_vert_wgsl,se as GBufferFrame,vh as GBufferPass,oA as GBufferPost,Wl as GBufferStand,io as GBuffer_pass,Go as GILighting,Vf as GIProbeMaterial,An as GIProbeMaterialType,ef as GIProbeShader,Eo as GIRenderCompleteEvent,fs as GIRenderStartEvent,Ou as GLBChunk,Lu as GLBHeader,Wo as GLBParser,uh as GLSLLexer,ua as GLSLLexerToken,ch as GLSLPreprocessor,ph as GLSLSyntax,ac as GLTFBinaryExtension,xA as GLTFMaterial,Ut as GLTFParser,gs as GLTFSubParser,Iu as GLTFSubParserCamera,ku as GLTFSubParserConverter,wu as GLTFSubParserMaterial,Eu as GLTFSubParserMesh,zo as GLTFSubParserSkeleton,Tu as GLTFSubParserSkin,Yt as GLTFType,qg as GLTF_Accessors,ds as GLTF_Info,Xg as GLTF_Light,Kg as GLTF_Mesh,Hg as GLTF_Node,jg as GLTF_Primitives,Yg as GLTF_Scene,Pt as GPUAddressMode,zd as GPUBlendFactor,wr as GPUBufferBase,tr as GPUBufferType,rt as GPUCompareFunction,F as GPUContext,Jt as GPUCullMode,Kr as GPUFilterMode,qs as GPUPrimitiveTopology,X as GPUTextureFormat,ha as GPUVertexFormat,Jd as GPUVertexStepMode,sa as GSplatFormat,Th as GSplatMaterial,da as GSplatRenderer,wh as GSplat_FS,Eh as GSplat_VS,nA as GTAOPost,Ec as GTAO_cs,gc as GUIAtlasTexture,Ja as GUICanvas,Ii as GUIConfig,Bf as GUIGeometry,Cf as GUIGeometryRebuild,pn as GUIMaterial,xu as GUIPassRenderer,yf as GUIPick,Rf as GUIPickHelper,Ir as GUIQuad,Je as GUIQuadAttrEnum,Sf as GUIRenderer,gn as GUIShader,jt as GUISpace,Ki as GUISprite,fi as GUITexture,mA as GaussianSplatParser,Ql as GenerayRandomDir,AA as GeoJsonParser,UA as GeoJsonUtil,Fs as GeoType,Ne as GeometryBase,Nh as GeometryIndicesBuffer,f0 as GeometryUtil,Dh as GeometryVertexBuffer,ft as GeometryVertexType,zn as GetComponentClass,js as GetCountInstanceID,eg as GetRepeat,Gn as GetShader,Hp as GlassShader,ne as GlobalBindGroup,fo as GlobalBindGroupLayout,lA as GlobalFog,cn as GlobalFog_shader,Em as GlobalIlluminationComponent,eo as GlobalUniform,_o as GlobalUniformGroup,hA as GodRayPost,wc as GodRay_cs,d0 as GridObject,Yo as HDRTexture,ms as HDRTextureCube,El as Hair_frag,jp as Hair_shader_op,Kp as Hair_shader_tr,us as HaltonSeq,wf as Horizontal,Sm as HoverCameraController,cr as I3DMLoader,sc as I3DMLoaderBase,nc as I3DMParser,qu as IBLEnvMapCreator,Ku as IBLEnvMapCreator_cs,gr as IESProfiles,dl as IESProfiles_frag,Jm as IKDTreeUserData,ea as ImageType,Mh as IndicesGPUBuffer,il as Inline_vert,Ln as InputSystem,wm as InstanceDrawComponent,ll as InstanceUniform,oc as InstancedMesh,ci as Interpolator,wo as InterpolatorEnum,jf as IrradianceDataReaderCompleteEvent,rl as IrradianceVolumeData_frag,pl as Irradiance_frag,Pd as IsEditorInspector,Xs as IsNonSerialize,Du as Joint,Oo as JointPose,Fu as JumperInterpolator,Ym as KDTreeEntity,hi as KDTreeNode,Of as KDTreeRange,zf as KDTreeSpace,Ha as KDTreeUUID,Lo as KHR_draco_mesh_compression,BA as KHR_lights_punctual,Nu as KHR_materials_clearcoat,Vu as KHR_materials_emissive_strength,vA as KHR_materials_ior,Pu as KHR_materials_unlit,Sc as KMZParser,Bn as KV,g0 as KelvinUtil,ke as KeyCode,Cr as KeyEvent,vs as Keyframe,Ma as KeyframeT,Us as LDRTextureCube,PA as LambertMaterial,Tl as Lambert_shader,Cs as Light,Aa as LightBase,hs as LightData,Oh as LightEntries,Xe as LightType,Hn as LightingFunction_frag,ot as Line,bf as LineClassification,_u as LinearInterpolator,Qr as LitMaterial,bs as LitSSSShader,Qs as LitShader,Bl as Lit_shader,Li as LoaderBase,Xm as LoaderEvent,Gs as LoaderManager,Hd as MAX_VALUE,jd as MIN_VALUE,yt as Material,xh as MaterialDataUniformGPUBuffer,ys as MaterialUtilities,jn as MathShader,bt as MathUtil,Ti as Matrix3,I as Matrix4,Wh as MatrixBindGroup,Gh as MatrixGPUBuffer,Rl as MatrixShader,Xr as MemoryDO,Jn as MemoryInfo,Km as MergeRGBACreator,Tc as MergeRGBA_cs,zs as MeshColliderShape,Ss as MeshFilter,j as MeshRenderer,YA as MinMaxAnimationCurves,vd as MinMaxCurve,Bd as MinMaxCurveState,XA as MinMaxPolyCurves,tA as MorePassParser,Xf as MorePassShader,gm as MorphTargetBlender,Zh as MorphTargetData,pm as MorphTargetFrame,Af as MorphTargetTransformKey,Vt as MorphTarget_shader,_s as MouseCode,gu as MultiBouncePass_cs,_d as Navi3DAstar,Va as Navi3DConst,fr as Navi3DEdge,Or as Navi3DFunnel,li as Navi3DMaskType,o0 as Navi3DMesh,xt as Navi3DPoint,Tn as Navi3DPoint2D,ur as Navi3DPointFat,re as Navi3DRouter,Fd as Navi3DTriangle,Ys as NonSerialize,ul as NormalMap_frag,Mu as OAnimationEvent,Gu as OBJParser,q as Object3D,Hm as Object3DEvent,Dn as Object3DTransformTools,p0 as Object3DUtil,pf as ObjectAnimClip,Qo as OcclusionSystem,ui as Octree,Ih as OctreeEntity,_m as OrbitController,WA as OrderMap,ir as Orientation3D,Dc as OutLineBlendColor_cs,Mc as OutlineCalcOutline_cs,qp as OutlinePass,uA as OutlinePost,qf as OutlinePostData,$f as OutlinePostManager,Kf as OutlinePostSlot,Nc as Outline_cs,Qu as OvershootInterpolator,vl as PBRLItShader,tf as PBRLitSSSShader,st as ParserBase,Ge as ParserFormat,xd as ParticleSystemCurveEvalMode,pd as ParticleSystemRandomnessIds,ca as PassGenerate,Hf as PassShader,H as PassType,Kn as PhysicMaterialUniform_frag,Pf as PickCompute,kf as PickFire,lt as PickGUIEvent3D,ed as PickResult,Vc as Picker_cs,ao as PingPong,Ao as PipelinePool,Cd as Plane3D,Ei as PlaneClassification,Qi as PlaneGeometry,Qf as PointClassification,ji as PointLight,tu as PointLightShadowRenderer,$h as PointShadowCubeCamera,k as PointerEvent3D,yr as Polynomial,zr as PolynomialCurve,ZA as Polynomials,_f as PoolNode,Et as PostBase,Fc as PostProcessingComponent,ou as PostRenderer,au as PreDepthPassRenderer,nu as PreFilteredEnvironment_cs,Lp as PreFilteredEnvironment_cs2,Pc as PreIntegratedLut,Yf as PreIntegratedLutCompute,xn as PrefabAvatarData,nd as PrefabAvatarParser,Un as PrefabBoneData,hd as PrefabMaterialParser,ud as PrefabMeshData,cd as PrefabMeshParser,rs as PrefabNode,dd as PrefabParser,bA as PrefabStringUtil,ld as PrefabTextureData,fd as PrefabTextureParser,rr as Preprocessor,Nf as Probe,qm as ProbeEntries,cu as ProbeGBufferFrame,Ye as ProfilerUtil,um as PropertyAnimClip,mf as PropertyAnimTag,yn as PropertyAnimation,Sn as PropertyAnimationClip,df as PropertyAnimationClipState,ya as PropertyAnimationEvent,Fa as PropertyHelp,Ct as QuadAABB,Ml as QuadGlsl_fs,Dl as QuadGlsl_vs,Wf as QuadRoot,ga as QuadShader,Gf as QuadTree,di as QuadTreeCell,Zd as Quad_depth2dArray_frag_wgsl,yl as Quad_depth2d_frag_wgsl,bl as Quad_depthCube_frag_wgsl,Fl as Quad_frag_wgsl,_l as Quad_vert_wgsl,Z as Quaternion,Wi as RADIANS_TO_DEGREES,ju as RGBEErrorCode,Xo as RGBEHeader,Ho as RGBEParser,Qe as RTDescriptor,Ze as RTFrame,Sr as RTResourceConfig,vt as RTResourceMap,ka as Rand,tg as RandomSeed,$t as Ray,na as RayCastMeshDetail,Yi as Reader,ja as Rect,me as Reference,lf as Reflection,Zl as ReflectionCG,zh as ReflectionEntries,uf as ReflectionMaterial,lu as ReflectionRenderer,hf as ReflectionShader,Jl as ReflectionShader_shader,Wt as RegisterComponent,yi as RegisterShader,bo as RenderContext,fa as RenderLayer,Uo as RenderLayerUtil,ei as RenderNode,Rh as RenderShaderCollect,Zf as RenderShaderCompute,Oe as RenderShaderPass,At as RenderTexture,_r as RendererBase,uu as RendererJob,su as RendererMap,Be as RendererMask,Gt as RendererMaskUtil,Yh as RendererPassState,so as RepeatSE,_c as Res,Rd as RotationControlComponents,Yl as SHCommon_frag,Ka as SN_ArrayConstant,$r as SN_BinaryOperation,wg as SN_Break,hr as SN_CodeBlock,Pr as SN_Constant,Ms as SN_Continue,ze as SN_Declaration,Tg as SN_Discard,Eg as SN_DoWhileLoop,de as SN_Expression,Ni as SN_ForLoop,Ts as SN_Function,Ds as SN_FunctionArgs,Mi as SN_FunctionCall,wi as SN_IFBranch,Tr as SN_Identifier,Pi as SN_IndexOperation,za as SN_Layout,dh as SN_ParenExpression,Ns as SN_Precision,La as SN_Return,Oa as SN_SelectOperation,Vr as SN_Struct,gh as SN_TernaryOperation,Xi as SN_UnaryOperation,Vi as SN_WhileLoop,Op as SSAO_cs,kc as SSGI2_cs,cA as SSGIPost,fA as SSRPost,Lc as SSR_BlendColor_cs,dA as SSR_IS_Kernel,Oc as SSR_IS_cs,zc as SSR_RayTrace_cs,Qd as ScaleControlComponents,km as Scene3D,mt as Shader,mo as ShaderAttributeInfo,mh as ShaderConverter,Ah as ShaderConverterResult,O as ShaderLib,Ks as ShaderPassBase,Bt as ShaderReflection,ar as ShaderStage,Uh as ShaderState,po as ShaderUniformInfo,Dr as ShaderUtil,fl as ShadingInput,wt as ShadowLightsCollect,iu as ShadowMapPassRenderer,gl as ShadowMapping_frag,mm as Skeleton,Vs as SkeletonAnimationClip,ff as SkeletonAnimationClipState,ai as SkeletonAnimationComponent,Am as SkeletonAnimationCompute,Gi as SkeletonAnimation_shader,Um as SkeletonBlendComputeArgs,ma as SkeletonPose,xm as SkeletonTransformComputeArgs,Ia as SkinnedMeshRenderer,oi as SkinnedMeshRenderer2,Bh as SkyGBufferPass,Nl as SkyGBuffer_pass,nf as SkyMaterial,Bs as SkyRenderer,Sa as SkyShader,u0 as SolidColorSky,Pm as SphereColliderShape,Ri as SphereGeometry,cf as SphereReflection,xa as SpotLight,zu as StandShader,_e as StatementNode,ve as StorageGPUBuffer,Ft as StringUtil,la as Struct,$m as StructStorageGPUBuffer,Vh as SubGeometry,Gc as TAACopyTex_cs,gA as TAAPost,Wc as TAASharpTex_cs,Jc as TAA_cs,Xc as TestComputeLoadBuffer,If as TextAnchor,Df as TextFieldLayout,Tf as TextFieldLine,$e as Texture,ps as TextureCube,jo as TextureCubeFaceData,Ps as TextureCubeStdCreator,Zo as TextureCubeUtils,eA as TextureMipmapCompute,dr as TextureMipmapGenerator,Jf as TextureScaleCompute,ym as ThirdPersonCameraController,wA as TileSet,DA as TileSetChild,MA as TileSetChildContent,NA as TileSetChildContentMetaData,TA as TileSetRoot,En as TilesRenderer,be as Time,v as TokenType,bd as TorusGeometry,kn as TouchData,n0 as TrailGeometry,Tt as Transform,T as TransformAxisEnum,ws as TransformControllerBaseComponent,tt as TransformMode,qt as TransformSpaceMode,Id as TranslationControlComponents,go as TranslatorContext,l0 as TriGeometry,Ya as Triangle,bn as UIButton,Mf as UIButtonTransition,mn as UIComponentBase,jm as UIEvent,Di as UIImage,Qn as UIImageGroup,Os as UIInteractive,Le as UIInteractiveStyle,Za as UIPanel,Ra as UIRenderAble,Rn as UIShadow,In as UITextField,Gr as UITransform,It as UUID,wn as UV,vo as Uint32ArrayTexture,Bo as Uint8ArrayTexture,wl as UnLit,pt as UnLitMaterial,qn as UnLitMaterialUniform_frag,Ea as UnLitShader,LA as UnLitTexArrayMaterial,wa as UnLitTexArrayShader,rf as UnLitTextureArray,$n as UnLit_frag,ht as UniformGPUBuffer,Hr as UniformNode,ut as UniformType,L as ValueEnumType,s0 as ValueOp,Rr as ValueParser,HA as ValueSpread,K as Vector2,d as Vector3,ba as Vector3Ex,$ as Vector4,Wm as VertexAttribute,qc as VertexAttributeIndexShader,V as VertexAttributeName,jr as VertexAttributeSize,Lf as VertexAttributeStride,el as VertexAttributes_vert,Gm as VertexBufferLayout,Yn as VertexFormat,cs as VertexGPUBuffer,Ef as Vertical,tl as VideoUniform_frag,Lm as View3D,ks as ViewPanel,yo as ViewQuad,Ae as VirtualTexture,fh as WGSLTranslator,es as WayLines3D,$a as WayPoint3D,Te as WebGPUDescriptorCreator,to as WorldMatrixUniform,Ls as WorldPanel,ia as WrapMode,si as WrapTimeMode,iA as ZCullingCompute,Kc as ZPassShader_cs,zl as ZPassShader_fs,Ol as ZPassShader_vs,Fh as ZSorterUtil,ah as append,$u as arrayToString,Gd as blendComponent,KA as buildCurves,id as byteSizeOfType,qA as calculateCurveRangesValue,Ta as calculateMinMax,Pl as castPointShadowMap_vert,ie as clamp,Sg as clampRepeat,td as computeAABBFromPositions,gg as cos,Bg as crossProduct,md as cubicPolynomialRoot,Ad as cubicPolynomialRootsGeneric,jA as curvesSupportProcedural,cg as deg2Rad,rd as detectGSplatFormat,Ll as directionShadowCastMap_frag,ct as dot,Ud as doubleIntegrateSegment,Qc as downSample,rh as fastInvSqrt,th as floorfToIntPos,qi as fonts,vg as generateRandom,Cg as generateRandom3,Kl as getFloatFromInt,up as getGLTypeFromTypedArray,hp as getGLTypeFromTypedArrayType,pg as getGlobalRandomSeed,cp as getTypedArray,ko as getTypedArrayTypeFromGLType,Fn as grad1,Es as grad2,Da as grad3,oa as grad4,ad as inferSHOrder,_n as integrateSegment,rA as irradianceDataReader,JA as kPI,bi as lerp,$d as lerpByte,qd as lerpColor,Kd as lerpVector3,no as magnitude,Bp as makeAloneSprite,dc as makeGUISprite,ls as makeMatrix44,co as matrixMultiply,bg as matrixRotate,yg as matrixRotateY,ss as mergeFunctions,ih as multiplyMatrices4x4REF,Sd as normal_distribution,xg as normalizeFast,jl as normalizeSafe,Ug as normalizedToByte,Ag as normalizedToWord,nr as outlinePostData,pA as outlinePostManager,od as parsePlyGaussianSplat,sd as parsePlyHeader,le as perm,Rc as post,Is as quadraticPolynomialRootsGeneric,fg as rad2Deg,Ji as random01,ug as randomBarycentricCoord,hg as randomPointBetweenEllipsoid,ng as randomPointBetweenSphere,sg as randomPointInsideCube,og as randomPointInsideEllipsoid,lg as randomPointInsideUnitCircle,$l as randomPointInsideUnitSphere,ig as randomQuaternion,ag as randomQuaternionUniformDistribution,eh as randomSeed,ns as randomUnitVector,ql as randomUnitVector2,at as rangedRandomFloat,rg as rangedRandomInt,et as readByType,qo as readMagicBytes,kA as registerMaterial,uo as repeat,Fg as rotMatrix,Xd as rotateVectorByQuat,lo as roundfToIntPos,oo as scale,kl as shadowCastMap_frag,Vl as shadowCastMap_vert,Lt as simplex,dg as sin,t0 as snoise1,r0 as snoise2,i0 as snoise3,a0 as snoise4,ho as sqrMagnitude,Hl as sqrtImpl,Wd as stencilStateFace,mg as swap,Hc as textureCompress,bc as threshold,ti as toHalfFloat,Zp as tw,$A as uniform_real_distribution,e0 as uniform_real_distribution2,un as upSample,R as webGPUContext,yh as zSorterUtil};
|
|
11486
11486
|
//# sourceMappingURL=rings.es.js.map
|