@rings-webgpu/core 1.0.47 → 1.0.48

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 CHANGED
@@ -5666,7 +5666,7 @@ struct InstanceData {
5666
5666
  `,""),c=c.replaceAll(" "," "),this.parserAttribute(c,t)}else{var n=r.split(":")[1];n=n.replaceAll(" ",""),n=n.replaceAll(" ",""),n=n.replaceAll(")",""),n=e.split(`struct ${n}`)[1];let l=n.indexOf("{"),c=n.indexOf("}");n=n.slice(l,c),i=n.split("@");for(let f=1;f<i.length;f++){let h=i[f].replace(/\s*$/g,"");h=h.replaceAll(`
5667
5667
  `,""),h=h.split(",")[0],h=h.replaceAll(" "," "),this.parserAttribute(h,t)}}return t}static parserVertex(e,t){let a=[],i=t.split(`fn ${e}(`)[1].split("->")[0],n=i.split("@");if(n&&n.length>1)for(let l=1;l<n.length;l++){let f=n[l].replace(/\s*$/g,"");f=f.replaceAll(",",""),f=f.replaceAll(`
5668
5668
  `,""),f=f.replaceAll(" "," "),this.parserAttribute(f,a)}else{var o=i.split(":")[1];o=o.replaceAll(" ",""),o=o.replaceAll(" ",""),o=o.replaceAll(")",""),o=t.split(`struct ${o}`)[1];let c=o.indexOf("{"),f=o.indexOf("}");o=o.slice(c,f),n=o.split("@");for(let d=1;d<n.length;d++){let u=n[d].replace(/\s*$/g,"");u=u.replaceAll(`
5669
- `,""),u=u.split(",")[0],u=u.replaceAll(" "," "),this.parserAttribute(u,a)}}return a}static parserAttribute(e,t){let a={name:"",group:0,location:0,type:"",valueType:"",value:0,size:0,format:"float32"};if(e.indexOf("builtin")!=-1){a.type="builtin";var r=e.match(/\((.+?)\)/g)[0];r=e.match(/\((.+?)\)/g)[0],r=r.replace("(",""),r=r.replaceAll(")",""),a.location=parseInt(r);let i=e.split(":");a.name=i[0].split(" ")[1],a.name=a.name.replaceAll(" "," "),a.name=a.name.replaceAll(" ",""),a.valueType=i[1],a.valueType=a.valueType.replaceAll(" "," "),a.valueType=a.valueType.replaceAll(" ",""),a.valueType=a.valueType.replaceAll("\r",""),a.valueType=a.valueType.replaceAll(")",""),a.valueType=a.valueType.replaceAll(")",""),a.size=dr[a.valueType],t.push(a)}else if(e.indexOf("location")!=-1){a.type="location";var r=e.match(/\((.+?)\)/g)[0];r=e.match(/\((.+?)\)/g)[0],r=r.replace("(",""),r=r.replaceAll(")",""),a.location=parseInt(r);let n=e.split(":");a.name=n[0].split(" ")[1],a.name=a.name.replaceAll(" "," "),a.name=a.name.replaceAll(" ",""),a.valueType=n[1],a.valueType=a.valueType.replaceAll(" "," "),a.valueType=a.valueType.replaceAll(" ",""),a.valueType=a.valueType.replaceAll("\r",""),a.valueType=a.valueType.replaceAll(")",""),a.valueType=a.valueType.replaceAll(")",""),a.size=dr[a.valueType],t.push(a)}a.format=Ql[dr[a.valueType]]}}class Fe extends Cn{entryPoint="CsMain";workerSizeX=1;workerSizeY=0;workerSizeZ=0;_computePipeline;_csShaderModule;_destCS;_sourceCS;_storageTextureDic;_sampleTextureDic;_groupsShaderReflectionVarInfos;_groupCache={};constructor(e){super(),this._sourceCS=e,Mt.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,a,r){let i=this._bufferDic.get(t);if(i){let n={binding:a,resource:{buffer:i.buffer,offset:0,size:i.memory.shareDataBuffer.byteLength}};r.push(n)}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,a=!1){if(!this.bindGroups[e]||a){const r=t[e];let i=[];for(let o=0;o<r.length;++o){const l=r[o];if(l)switch(l.varType){case"uniform":case"storage-read":case"storage-read_write":this.createBufferBindGroup(e,l.varName,l.binding,i),this._groupCache[l.varName]={groupIndex:e,infos:t};break;case"var":if(l.dataType=="sampler"){let c=l.varName.replace("Sampler",""),f=this._sampleTextureDic.get(c);if(f){let d={binding:l.binding,resource:f.gpuSampler};i.push(d)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType=="sampler_comparison"){let c=l.varName.replace("Sampler",""),f=this._sampleTextureDic.get(c);if(f){let d={binding:l.binding,resource:f.gpuSampler_comparison};i.push(d)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType.indexOf("texture_storage")!=-1){let c=this._storageTextureDic.get(l.varName);if(c){let f={binding:l.binding,resource:c.getGPUView()};i.push(f),ke.getInstance().attached(c,this)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType.indexOf("texture")!=-1){let c=this._sampleTextureDic.get(l.varName);if(c){let f={binding:l.binding,resource:c.getGPUView()};i.push(f),ke.getInstance().attached(c,this)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}break;default:console.error("unprocessed type:",l.varType);break}}let n=I.device.createBindGroup({layout:this._computePipeline.getBindGroupLayout(e),entries:i});this.bindGroups[e]=n}}genComputePipeline(){this.preCompileShader(this._sourceCS),this.genReflection(),this._computePipeline=I.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 a=e.groups[t];this._groupsShaderReflectionVarInfos[t]=a,this.genGroups(t,this._groupsShaderReflectionVarInfos)}I.addEventListener(lr.RESIZE,t=>{for(let a=0;a<e.groups.length;++a){let r=e.groups[a];this._groupsShaderReflectionVarInfos[a]=r,this.genGroups(a,this._groupsShaderReflectionVarInfos,!0)}},this)}preCompileShader(e){for(const t in this.constValues)if(Object.prototype.hasOwnProperty.call(this.constValues,t)){const a=this.constValues[t];e=e.replaceAll(`&${t}`,a.toString())}this._destCS=_a.parseComputeShader(e,this.defineValue)}compileShader(){let e=I.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+=Mt.genComputeShaderVariant(this);let e=Mt.poolGetReflection(this.shaderVariant);e?this.shaderReflection=e:(Mt.getShaderReflection2(this._destCS,this),Mt.combineShaderReflectionVarInfo(this.shaderReflection,this.shaderReflection.cs_variables))}}var fe=(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))(fe||{});class dt{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 a in fe)parseInt(a)>=0||(t[a]={vertexCount:0,indicesCount:0,instanceCount:0,triCount:0,drawCount:0,pipelineCount:0});this.viewMap.set(e,t)}for(const a in fe)parseInt(a)>=0||(t[a].vertexCount=0,t[a].indicesCount=0,t[a].triCount=0,t[a].instanceCount=0,t[a].drawCount=0,t[a].pipelineCount=0)}static viewCount(e){return this.startView(e),this.viewMap.get(e)}static viewCount_vertex(e,t,a){this.viewMap.get(e)[t].vertexCount+=a}static viewCount_indices(e,t,a){this.viewMap.get(e)[t].indicesCount+=a}static viewCount_tri(e,t,a){this.viewMap.get(e)[t].triCount+=a}static viewCount_instance(e,t,a){this.viewMap.get(e)[t].instanceCount+=a}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 a=this.profilerLabelMap.get(e);if(a&&(a.count++,t!="")){let r=a.child.get(t);r||(r={lable:t,start:0,end:0,total:0,count:0}),r.start=performance.now(),r.end=performance.now(),r.count=0,a.child.set(t,r)}}static countEnd(e,t){let a=this.profilerLabelMap.get(e);if(a&&t!=""){let r=a.child.get(t);r||(r={lable:t,start:0,end:0,total:0,count:0}),r.end=performance.now(),r.total=r.end-r.start,r.count++}}static print(e){let t=this.profilerLabelMap.get(e);t&&console.log("performance",e,t.total+" ms")}}var Hu=(()=>{var s=import.meta.url;return(async function(e={}){var t=e,a,r;t.ready=new Promise((V,L)=>{a=V,r=L});var i=Object.assign({},t),n=[],o="./this.program",l=(V,L)=>{throw L},c=typeof window=="object",f=typeof importScripts=="function",d=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",h="";function u(V){return t.locateFile?t.locateFile(V,h):h+V}var m,g;if(d){const{createRequire:V}=await Promise.resolve().then(()=>Km);var p=V(import.meta.url),A=p("fs"),D=p("path");f?h=D.dirname(h)+"/":h=p("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)),m=(L,te)=>(L=ge(L)?new URL(L):D.normalize(L),A.readFileSync(L,te?void 0:"utf8")),g=L=>{var te=m(L,!0);return te.buffer||(te=new Uint8Array(te)),te},!t.thisProgram&&process.argv.length>1&&(o=process.argv[1].replace(/\\/g,"/")),n=process.argv.slice(2),l=(L,te)=>{throw process.exitCode=L,te}}else(c||f)&&(f?h=self.location.href:typeof document<"u"&&document.currentScript&&(h=document.currentScript.src),s&&(h=s),h.startsWith("blob:")?h="":h=h.substr(0,h.replace(/[?#].*/,"").lastIndexOf("/")+1),m=V=>{var L=new XMLHttpRequest;return L.open("GET",V,!1),L.send(null),L.responseText},f&&(g=V=>{var L=new XMLHttpRequest;return L.open("GET",V,!1),L.responseType="arraybuffer",L.send(null),new Uint8Array(L.response)}));var B=t.print||console.log.bind(console),v=t.printErr||console.error.bind(console);Object.assign(t,i),i=null,t.arguments&&(n=t.arguments),t.thisProgram&&(o=t.thisProgram),t.quit&&(l=t.quit);var U;t.wasmBinary&&(U=t.wasmBinary);function y(V){if(typeof d<"u"&&d){var L=Buffer.from(V,"base64");return new Uint8Array(L.buffer,L.byteOffset,L.length)}for(var te=atob(V),Ee=new Uint8Array(te.length),Ye=0;Ye<te.length;++Ye)Ee[Ye]=te.charCodeAt(Ye);return Ee}function S(V){if(le(V))return y(V.slice(ie.length))}var F,C=!1,w,E,Q,T;function j(){var V=F.buffer;t.HEAP8=E=new Int8Array(V),t.HEAP16=new Int16Array(V),t.HEAPU8=Q=new Uint8Array(V),t.HEAPU16=new Uint16Array(V),t.HEAP32=new Int32Array(V),t.HEAPU32=T=new Uint32Array(V),t.HEAPF32=new Float32Array(V),t.HEAPF64=new Float64Array(V)}var ue=[],ee=[],N=[],M=[];function O(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)K(t.preRun.shift());ft(ue)}function W(){ft(ee)}function ae(){ft(N)}function z(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)re(t.postRun.shift());ft(M)}function K(V){ue.unshift(V)}function $(V){ee.unshift(V)}function re(V){M.unshift(V)}var ce=0,Ae=null;function Qe(V){ce++,t.monitorRunDependencies?.(ce)}function Ve(V){if(ce--,t.monitorRunDependencies?.(ce),ce==0&&Ae){var L=Ae;Ae=null,L()}}function H(V){t.onAbort?.(V),V="Aborted("+V+")",v(V),C=!0,w=1,V+=". Build with -sASSERTIONS for more info.";var L=new WebAssembly.RuntimeError(V);throw r(L),L}var ie="data:application/octet-stream;base64,",le=V=>V.startsWith(ie),ge=V=>V.startsWith("file://"),Ie;Ie="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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",le(Ie)||(Ie=u(Ie));function me(V){if(V==Ie&&U)return new Uint8Array(U);var L=S(V);if(L)return L;if(g)return g(V);throw"both async and sync fetching of the wasm failed"}function ye(V){return Promise.resolve().then(()=>me(V))}function Se(V,L,te){return ye(V).then(Ee=>WebAssembly.instantiate(Ee,L)).then(te,Ee=>{v(`failed to asynchronously prepare wasm: ${Ee}`),H(Ee)})}function Me(V,L,te,Ee){return Se(L,te,Ee)}function Ze(){var V={a:Vu};function L(Ee,Ye){return Ot=Ee.exports,F=Ot.f,j(),$(Ot.g),Ve(),Ot}Qe();function te(Ee){L(Ee.instance)}if(t.instantiateWasm)try{return t.instantiateWasm(V,L)}catch(Ee){v(`Module.instantiateWasm callback failed with error: ${Ee}`),r(Ee)}return Me(U,Ie,V,te).catch(r),{}}function $e(V){this.name="ExitStatus",this.message=`Program terminated with exit(${V})`,this.status=V}var ft=V=>{for(;V.length>0;)V.shift()(t)};t.noExitRuntime;class Za{constructor(L){this.excPtr=L,this.ptr=L-24}set_type(L){T[this.ptr+4>>2]=L}get_type(){return T[this.ptr+4>>2]}set_destructor(L){T[this.ptr+8>>2]=L}get_destructor(){return T[this.ptr+8>>2]}set_caught(L){L=L?1:0,E[this.ptr+12]=L}get_caught(){return E[this.ptr+12]!=0}set_rethrown(L){L=L?1:0,E[this.ptr+13]=L}get_rethrown(){return E[this.ptr+13]!=0}init(L,te){this.set_adjusted_ptr(0),this.set_type(L),this.set_destructor(te)}set_adjusted_ptr(L){T[this.ptr+16>>2]=L}get_adjusted_ptr(){return T[this.ptr+16>>2]}get_exception_ptr(){var L=xl(this.get_type());if(L)return T[this.excPtr>>2];var te=this.get_adjusted_ptr();return te!==0?te:this.excPtr}}var ga=0,Qa=(V,L,te)=>{var Ee=new Za(V);throw Ee.init(L,te),ga=V,ga},Ht=()=>{H("")},Ta=(V,L,te)=>Q.copyWithin(V,L,L+te),Ma=()=>2147483648,Vt=V=>{var L=F.buffer,te=(V-L.byteLength+65535)/65536;try{return F.grow(te),j(),1}catch{}},pa=V=>{var L=Q.length;V>>>=0;var te=Ma();if(V>te)return!1;for(var Ee=(Aa,Kr)=>Aa+(Kr-Aa%Kr)%Kr,Ye=1;Ye<=4;Ye*=2){var st=L*(1+.2/Ye);st=Math.min(st,V+100663296);var Xe=Math.min(te,Ee(Math.max(V,st),65536)),ze=Vt(Xe);if(ze)return!0}return!1},ma=[null,[],[]],ia=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,Ir=(V,L,te)=>{for(var Ee=L+te,Ye=L;V[Ye]&&!(Ye>=Ee);)++Ye;if(Ye-L>16&&V.buffer&&ia)return ia.decode(V.subarray(L,Ye));for(var st="";L<Ye;){var Xe=V[L++];if(!(Xe&128)){st+=String.fromCharCode(Xe);continue}var ze=V[L++]&63;if((Xe&224)==192){st+=String.fromCharCode((Xe&31)<<6|ze);continue}var Aa=V[L++]&63;if((Xe&240)==224?Xe=(Xe&15)<<12|ze<<6|Aa:Xe=(Xe&7)<<18|ze<<12|Aa<<6|V[L++]&63,Xe<65536)st+=String.fromCharCode(Xe);else{var Kr=Xe-65536;st+=String.fromCharCode(55296|Kr>>10,56320|Kr&1023)}}return st},Rr=(V,L)=>{var te=ma[V];L===0||L===10?((V===1?B:v)(Ir(te,0)),te.length=0):te.push(L)},Qr=(V,L,te,Ee)=>{for(var Ye=0,st=0;st<te;st++){var Xe=T[L>>2],ze=T[L+4>>2];L+=8;for(var Aa=0;Aa<ze;Aa++)Rr(V,Q[Xe+Aa]);Ye+=ze}return T[Ee>>2]=Ye,0},Tr=V=>{w=V,l(V,new $e(V))},Mr=(V,L)=>{w=V,Tr(V)},Qu=V=>{if(V instanceof $e||V=="unwind")return w;l(1,V)},Tu=V=>{for(var L=0,te=0;te<V.length;++te){var Ee=V.charCodeAt(te);Ee<=127?L++:Ee<=2047?L+=2:Ee>=55296&&Ee<=57343?(L+=4,++te):L+=3}return L},Mu=(V,L,te,Ee)=>{if(!(Ee>0))return 0;for(var Ye=te,st=te+Ee-1,Xe=0;Xe<V.length;++Xe){var ze=V.charCodeAt(Xe);if(ze>=55296&&ze<=57343){var Aa=V.charCodeAt(++Xe);ze=65536+((ze&1023)<<10)|Aa&1023}if(ze<=127){if(te>=st)break;L[te++]=ze}else if(ze<=2047){if(te+1>=st)break;L[te++]=192|ze>>6,L[te++]=128|ze&63}else if(ze<=65535){if(te+2>=st)break;L[te++]=224|ze>>12,L[te++]=128|ze>>6&63,L[te++]=128|ze&63}else{if(te+3>=st)break;L[te++]=240|ze>>18,L[te++]=128|ze>>12&63,L[te++]=128|ze>>6&63,L[te++]=128|ze&63}}return L[te]=0,te-Ye},Nu=(V,L,te)=>Mu(V,Q,L,te),Pu=V=>{var L=Tu(V)+1,te=Bn(L);return Nu(V,te,L),te},Vu={b:Qa,c:Ht,e:Ta,d:pa,a:Qr},Ot=Ze();t._initialize=(V,L,te)=>(t._initialize=Ot.h)(V,L,te),t._allocMatrix=V=>(t._allocMatrix=Ot.i)(V),t._getMatrixBufferPtr=()=>(t._getMatrixBufferPtr=Ot.j)(),t._getSRTPtr=()=>(t._getSRTPtr=Ot.k)(),t._getInfoPtr=()=>(t._getInfoPtr=Ot.l)(),t._getContinuedSRTPtr=()=>(t._getContinuedSRTPtr=Ot.m)(),t._printMatrix=V=>(t._printMatrix=Ot.n)(V),t._updateAllMatrixContinueTransform=(V,L,te)=>(t._updateAllMatrixContinueTransform=Ot.o)(V,L,te);var vl=t._main=(V,L)=>(vl=t._main=Ot.p)(V,L),Bn=V=>(Bn=Ot.r)(V),xl=V=>(xl=Ot.s)(V),Us;Ae=function V(){Us||Ul(),Us||(Ae=V)};function Ou(V=[]){var L=vl;V.unshift(o);var te=V.length,Ee=Bn((te+1)*4),Ye=Ee;V.forEach(Xe=>{T[Ye>>2]=Pu(Xe),Ye+=4}),T[Ye>>2]=0;try{var st=L(te,Ee);return Mr(st,!0),st}catch(Xe){return Qu(Xe)}}function Ul(V=n){if(ce>0||(O(),ce>0))return;function L(){Us||(Us=!0,t.calledRun=!0,!C&&(W(),ae(),a(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),yl&&Ou(V),z()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),L()},1)):L()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();var yl=!0;return t.noInitialRun&&(yl=!1),Ul(),e.ready})})();function ur(s,e,t){return _.setting.doublePrecision?new Float64Array(s,e,t):new Float32Array(s,e,t)}class Re{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 Hu(),this.useDoublePrecision=t,this.wasm._initialize(e,t,0),this.allocMatrix(e)}static allocMatrix(e){e>R.maxCount&&console.error(`The maximum allocation size is exceeded! current:${e}, limit:${R.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=ur(this.wasm.HEAPF64.buffer,this.matrixBufferPtr,16*e),this.matrixSRTBuffer=ur(this.wasm.HEAPF64.buffer,this.matrixSRTBufferPtr,9*e),this.matrixContinuedSRTBuffer=ur(this.wasm.HEAPF64.buffer,this.matrixContinuedSRTBufferPtr,9*e),R.blockBytes=R.block*8):(this.matrixBuffer=ur(this.wasm.HEAPF32.buffer,this.matrixBufferPtr,16*e),this.matrixSRTBuffer=ur(this.wasm.HEAPF32.buffer,this.matrixSRTBufferPtr,9*e),this.matrixContinuedSRTBuffer=ur(this.wasm.HEAPF32.buffer,this.matrixContinuedSRTBufferPtr,9*e),R.blockBytes=R.block*4),this.matrixStateBuffer=new Int32Array(this.wasm.HEAP32.buffer,this.matrixStateBufferPtr,Re.stateStruct*e),R.allocMatrix(e)}static updateAllContinueTransform(e,t,a){this.wasm._updateAllMatrixContinueTransform(e,t,a)}static setParent(e,t,a){this.matrixStateBuffer[e*Re.stateStruct+2]=t>=0?t:-1,this.matrixStateBuffer[e*Re.stateStruct+3]=a}static setTranslate(e,t,a,r){this.matrixSRTBuffer[e*9+6]=t,this.matrixSRTBuffer[e*9+7]=a,this.matrixSRTBuffer[e*9+8]=r}static setRotation(e,t,a,r){this.matrixSRTBuffer[e*9+3]=t%360,this.matrixSRTBuffer[e*9+4]=a%360,this.matrixSRTBuffer[e*9+5]=r%360}static setScale(e,t,a,r){this.matrixSRTBuffer[e*9+0]=t,this.matrixSRTBuffer[e*9+1]=a,this.matrixSRTBuffer[e*9+2]=r}static setContinueTranslate(e,t,a,r){(t!=0||a!=0||r!=0)&&(this.matrixContinuedSRTBuffer[e*9+6]=t,this.matrixContinuedSRTBuffer[e*9+7]=a,this.matrixContinuedSRTBuffer[e*9+8]=r,this.matrixStateBuffer[e*Re.stateStruct+1]=1)}static setContinueRotation(e,t,a,r){(t!=0||a!=0||r!=0)&&(this.matrixContinuedSRTBuffer[e*9+3]=t,this.matrixContinuedSRTBuffer[e*9+4]=a,this.matrixContinuedSRTBuffer[e*9+5]=r,this.matrixStateBuffer[e*Re.stateStruct+1]=1)}static setContinueScale(e,t,a,r){(t!=0||a!=0||r!=0)&&(this.matrixContinuedSRTBuffer[e*9+0]=t,this.matrixContinuedSRTBuffer[e*9+1]=a,this.matrixContinuedSRTBuffer[e*9+2]=r,this.matrixStateBuffer[e*Re.stateStruct+1]=1)}}class oa{static AXIS_ANGLE="axisAngle";static EULER_ANGLES="eulerAngles";static QUATERNION="quaternion"}class se{static HELP_0=new se(0,0,0,1);static HELP_1=new se(0,0,0,1);static HELP_2=new se(0,0,0,1);static _zero=new se(0,0,0,1);static CALCULATION_QUATERNION=new se;x=0;y=0;z=0;w=1;constructor(e=0,t=0,a=0,r=1){this.x=e,this.y=t,this.z=a,this.w=r}static identity(){return se._zero}static quaternionToMatrix(e,t){let a=e.x*2,r=e.y*2,i=e.z*2,n=e.x*a,o=e.y*r,l=e.z*i,c=e.x*r,f=e.x*i,d=e.y*i,h=e.w*a,u=e.w*r,m=e.w*i;t.rawData[0]=1-(o+l),t.rawData[1]=c+m,t.rawData[2]=f-u,t.rawData[3]=0,t.rawData[4]=c-m,t.rawData[5]=1-(n+l),t.rawData[6]=d+h,t.rawData[7]=0,t.rawData[8]=f+u,t.rawData[9]=d-h,t.rawData[10]=1-(n+o),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,a=0,r=1){return this.x=e,this.y=t,this.z=a,this.w=r,this}divide(e){return e instanceof se?new se(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 a=e.w,r=e.x,i=e.y,n=e.z,o=t.w,l=t.x,c=t.y,f=t.z;this.w=a*o-r*l-i*c-n*f,this.x=a*l+r*o+i*f-n*c,this.y=a*c-r*f+i*o+n*l,this.z=a*f+r*c-i*l+n*o}multiplyVector(e,t=null){t||=new se;var a=e.x,r=e.y,i=e.z;return t.w=-this.x*a-this.y*r-this.z*i,t.x=this.w*a+this.y*i-this.z*r,t.y=this.w*r-this.x*i+this.z*a,t.z=this.w*i+this.x*r-this.y*a,t}fromAxisAngle(e,t){t*=Math.PI/180;var a=t*.5,r=Math.sin(a);this.w=Math.cos(a),this.x=e.x*r,this.y=e.y*r,this.z=e.z*r,this.normalize()}toAxisAngle(e){var t=this.x*this.x+this.y*this.y+this.z*this.z,a=0;return t>0?(a=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):(a=0,e.x=1,e.y=0,e.z=0),a}slerp(e,t,a){var r=e.w,i=e.x,n=e.y,o=e.z,l=t.w,c=t.x,f=t.y,d=t.z,h=r*l+i*c+n*f+o*d;if(h<0&&(h=-h,l=-l,c=-c,f=-f,d=-d),h<.95){var u=Math.acos(h),m=1/Math.sin(u),g=Math.sin(u*(1-a))*m,p=Math.sin(u*a)*m;this.w=r*g+l*p,this.x=i*g+c*p,this.y=n*g+f*p,this.z=o*g+d*p}else{this.w=r+a*(l-r),this.x=i+a*(c-i),this.y=n+a*(f-n),this.z=o+a*(d-o);var A=1/Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z);this.w*=A,this.x*=A,this.y*=A,this.z*=A}}lerp(e,t,a){var r=e.w,i=e.x,n=e.y,o=e.z,l=t.w,c=t.x,f=t.y,d=t.z,h;r*l+i*c+n*f+o*d<0&&(l=-l,c=-c,f=-f,d=-d),this.w=r+a*(l-r),this.x=i+a*(c-i),this.y=n+a*(f-n),this.z=o+a*(d-o),h=1/Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z),this.w*=h,this.x*=h,this.y*=h,this.z*=h}fromEulerAngles(e,t,a){e*=_t,t*=_t,a*=_t;var r=e*.5,i=t*.5,n=a*.5,o=Math.cos(r),l=Math.sin(r),c=Math.cos(i),f=Math.sin(i),d=Math.cos(n),h=Math.sin(n);return this.w=o*c*d+l*f*h,this.x=l*c*d-o*f*h,this.y=o*f*d+l*c*h,this.z=o*c*h-l*f*d,this}setFromRotationMatrix(e){const t=e.rawData,a=t[0],r=t[4],i=t[8],n=t[1],o=t[5],l=t[9],c=t[2],f=t[6],d=t[10],h=a+o+d;if(h>0){const u=.5/Math.sqrt(h+1);this.w=.25/u,this.x=(f-l)*u,this.y=(i-c)*u,this.z=(n-r)*u}else if(a>o&&a>d){const u=2*Math.sqrt(1+a-o-d);this.w=(f-l)/u,this.x=.25*u,this.y=(r+n)/u,this.z=(i+c)/u}else if(o>d){const u=2*Math.sqrt(1+o-a-d);this.w=(i-c)/u,this.x=(r+n)/u,this.y=.25*u,this.z=(l+f)/u}else{const u=2*Math.sqrt(1+d-a-o);this.w=(n-r)/u,this.x=(i+c)/u,this.y=(l+f)/u,this.z=.25*u}return this}getEulerAngles(e){var t,a,r,i,n,o,l,c;return e||=new b,i=this.x,n=this.y,o=this.z,l=this.w,c=2*(l*n-i*o),c<=-.99999?(t=2*Math.atan2(i,l),a=-Math.PI/2,r=0):c>=.99999?(t=2*Math.atan2(i,l),a=Math.PI/2,r=0):(t=Math.atan2(2*(l*i+n*o),1-2*(i*i+n*n)),a=Math.asin(c),r=Math.atan2(2*(l*o+i*n),1-2*(n*n+o*o))),e.set(t,a,r).scaleBy(ei)}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(oa.QUATERNION)[1];this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w}inverse(e=null){e||=new se;var t=this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z;if(t>0){var a=1/t;e.w=this.w*a,e.x=-this.x*a,e.y=-this.y*a,e.z=-this.z*a}return e}clone(){return new se(this.x,this.y,this.z,this.w)}transformVector(e,t=null){var a,r,i,n,o=e.x,l=e.y,c=e.z;return t||=new b,n=-this.x*o-this.y*l-this.z*c,a=this.w*o+this.y*c-this.z*l,r=this.w*l-this.x*c+this.z*o,i=this.w*c+this.x*l-this.y*o,t.x=-n*this.x+a*this.w-r*this.z+i*this.y,t.y=-n*this.y+a*this.z+r*this.w-i*this.x,t.z=-n*this.z-a*this.y+r*this.x+i*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,a){let r=a||new se;return r.x=e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,r.y=e.w*t.y+e.y*t.w+e.z*t.x-e.x*t.z,r.z=e.w*t.z+e.z*t.w+e.x*t.y-e.y*t.x,r.w=e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,r}clampf(e,t,a){if(t>a){var r=t;t=a,a=r}return e<t?t:e<a?e:a}static serialize(e){return new se(e.x,e.y,e.z,e.w)}}function Ku(s,e,t){let a=s.x*2,r=s.y*2,i=s.z*2,n=s.x*a,o=s.y*r,l=s.z*i,c=s.x*r,f=s.x*i,d=s.y*i,h=s.w*a,u=s.w*r,m=s.w*i,g=t||new b;return g.x=(1-(o+l))*e.x+(c-m)*e.y+(f+u)*e.z,g.y=(c+m)*e.x+(1-(n+l))*e.y+(d-h)*e.z,g.z=(f-u)*e.x+(d+h)*e.y+(1-(n+o))*e.z,g}class ns{_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 ns;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 Oc(this.get())}getSignedFloat(){return this.getFloat()*2-1}}let ei=180/Math.PI,_t=Math.PI/180,qu=2147483647,$u=-2147483647;function Be(s,e,t){return Math.max(e,Math.min(t,s))}class zt{static gaussFunction(e,t,a,r){let i=Math.pow(e-a,2),n=2*Math.pow(r,2),o=-1*(i/n),l=Math.pow(Math.E,o);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,a=Math.exp(-t),r=Math.exp(-2*t),i=(1-a)*(1-a)/(1+2*t*a-r),n=i,o=i*(t-1)*a,l=i*(t+1)*a,c=-i*r,f=2*a,d=-r,h=(n+o)/(1-f-d),u=(l+c)/(1-f-d);return new Float32Array([n,o,l,c,f,d,h,u])}static clampf(e,t,a){if(t>a){let r=t;t=a,a=r}return e<t?t:e<a?e:a}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(),a=360*Math.random()*_t,r=Math.cos(a)*t,i=Math.sin(a)*t;return{x:r,z:i}}static getRandDirXYZ(e){let t=e*Math.random(),a=360*Math.random()*_t,r=Math.cos(a)*t,i=Math.tan(a)*t,n=Math.sin(a)*t;return new b(r,i,n)}static getCycleXYZ(e){let t=e*Math.random(),a=360*Math.random()*_t,r=Math.cos(a)*t,i=e*Math.random()-e*.5,n=Math.sin(a)*t;return new b(r,i,n)}static angle(e,t){let a=de.HELP_0,r=de.HELP_1;return a.set(e.x,e.z),r.set(t.x,t.z),Math.acos((a.x*r.x+a.y*r.y)/(a.abs()*r.abs()))}static angle_360(e,t){let a=b.HELP_0;return e.crossProduct(t,a),a.z>0?zt.angle(e,t):360-zt.angle(e,t)}getRotationY(e){return zt.normalizeAngle(Math.atan2(e.z,e.x)*ei)}static fromToRotation(e,t,a=null){a||=new se;let r=R.help_matrix_2;return R.fromToRotation(e,t,r),a.fromMatrix(r),a}static getEularDir_yUp(e){let t=se.HELP_0;return t.fromEulerAngles(0,e,0),t.transformVector(b.Z_AXIS,b.HELP_5),b.HELP_5}static transformVector(e,t,a=null){a||=new b;let r=e.rawData,i=r[0],n=r[1],o=r[2],l=r[3],c=r[4],f=r[5],d=r[6],h=r[7],u=r[8],m=r[9],g=r[10],p=r[11],A=r[12],D=r[13],B=r[14],v=r[15],U=t.x,y=t.y,S=t.z;return a.x=i*U+c*y+u*S+A,a.y=n*U+f*y+m*S+D,a.z=o*U+d*y+g*S+B,a.w=l*U+h*y+p*S+v,a}}let Nr=function(s,e,t){return s*(1-t)+e*t};function e2(s,e,t){let a=new b,r=s.x,i=s.y,n=s.z,o=s.w,l=e.x,c=e.y,f=e.z,d=e.w;return a.x=(l-r)*t+r,a.y=(c-i)*t+i,a.z=(f-n)*t+n,a.w=(d-o)*t+o,a}function t2(s,e,t){let a=new J;return a.r=(1-t)*s.r+t*e.r,a.g=(1-t)*s.g+t*e.g,a.b=(1-t)*s.b+t*e.b,a.a=(1-t)*s.a+t*e.a,a}function a2(s,e,t){return s+((e-s)*t>>8)&255}let In=function(s,e,t){let a=t-e;return Math.floor(s/a)%2==0?s%a+e:t-s%a+e},Rn=function(s,e,t){let a=t-e;return s%a+e},r2=function(s,e){let t=0;for(let a in s)a==e&&t++;return t};class i2{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 kt(s,e){return s instanceof b&&e instanceof b||s instanceof se&&e instanceof se?s.x*e.x+s.y*e.y+s.z*e.z:s.x*e.x+s.y*e.y}function Qn(s,e){return new b(s.x*e.x,s.y*e.y,s.z*e.z)}function Pc(s){return Math.sqrt(s)}function Tn(s){return Pc(kt(s,s))}function Vc(s,e){if(Tn(s)>b.EPSILON)return s.divide(Tn(s));if(s instanceof de)return new de;if(s instanceof b)return new b;if(s instanceof se)return new se}function Oc(s){return(s&8388607)*(1/8388607)}function ti(s){return s.getFloat()}function Bt(s,e,t){let a=s.getFloat();return a=e*a+(1-a)*t,a}function s2(s,e,t){let a;if(e<t){a=t-e;let r=s.get()%a;return r+=e,r}else if(e>t){a=e-t;let r=s.get()%a;return r=e-r,r}else return e}function ks(s){let e=Bt(s,-1,1),t=Bt(s,0,2*Math.PI),a=Math.sqrt(1-e*e),r=a*Math.cos(t),i=a*Math.sin(t);return new b(r,i,e)}function Lc(s){let e=Bt(s,0,2*Math.PI),t=Math.cos(e),a=Math.sin(e);return new de(t,a)}function n2(s){let e=new se;return e.x=Bt(s,-1,1),e.y=Bt(s,-1,1),e.z=Bt(s,-1,1),e.w=Bt(s,-1,1),e=Vc(e),kt(e,se.identity())<0?-e:e}function o2(s){const e=2*Math.PI;let t=Bt(s,0,1),a=Bt(s,0,e),r=Bt(s,0,e),i=Math.sqrt(1-t),n=Math.sqrt(t),o=new se(i*Math.sin(a),i*Math.cos(a),n*Math.sin(r),n*Math.cos(r));return kt(o,se.identity())<0?-o:o}function l2(s,e){return new b(Bt(s,-e.x,e.x),Bt(s,-e.y,e.y),Bt(s,-e.z,e.z))}function Gc(s){let e=ks(s);return e.scaleBy(Math.pow(ti(s),1/3)),e}function c2(s,e){return Qn(Gc(s),e)}function f2(s,e,t){let a=ks(s),r=Math.pow(Bt(s,0,1),1/3);return a.scaleBy(e+(t-e)*r),a}function d2(s){let e=Lc(s);return e.multiply(Math.pow(Bt(s,0,1),1/2),e),e}function h2(s,e,t){let a=Qn(ks(s),e),r=Math.pow(Bt(s,t,1),1/3);return a.scaleBy(r),a}function u2(s){let e=s.getFloat(),t=s.getFloat();e+t>1&&(e=1-e,t=1-t);let a=1-e-t;return new b(e,t,a)}function b2(s){return s/360*2*Math.PI}function g2(s){return 180*s/Math.PI}function p2(s){return Math.sin(s)}function m2(s){return Math.cos(s)}let zc=4919;function A2(){return++zc}function D2(s,e,t){let a=s[e],r=s[t];s[e]=r,s[t]=a}function Wc(s){return Math.floor(s)}function Mn(s){return Wc(s+.5)}function _2(s){return s=Math.max(s,0),s=Math.min(s,1),Mn(s*65535)}function B2(s){return s=Math.max(s,0),s=Math.min(s,1),Mn(s*255)}function Jc(s){return Math.abs(s)==0?s:1/Math.sqrt(s)}function v2(s){let e=Nn(s);return s.scaleBy(Jc(e))}function x2(s,e){return s.crossProduct(e)}function Nn(s){return kt(s,s)}function U2(s){let e=new ns(s);return ti(e)}function y2(s,e){let t=new ns(e);s.x=ti(t),s.y=ti(t),s.z=ti(t)}function C2(s,e,t){return s<e?t:s>t?e:s}function Pn(s,e){return s-Math.floor(s/e)*e}const S2=1e-6;class R{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 b(0,0,0);static _one=new b(1,1,1);static _prs=[new b,new b,new b];index=0;offset=0;rawData;_position;static allocMatrix(e){this.allocCount=e,R.dynamicMatrixBytes=Re.matrixBuffer,R.buffer=R.dynamicMatrixBytes.buffer,R.wasmMatrixPtr=Re.matrixBufferPtr,this.dynamicGlobalMatrixRef||=[],this.dynamicGlobalMatrixRef.forEach(t=>{t.offset=R.wasmMatrixPtr+t.index*R.blockBytes,t.rawData=ur(R.dynamicMatrixBytes.buffer,t.offset,16)}),R.help_matrix_0||=new R,R.help_matrix_1||=new R,R.help_matrix_2||=new R,R.helpMatrix||=new R,R.helpMatrix2||=new R,R._getEulerMatrix||=new R,R._getEulerMatrix.identity()}static fromToRotation(e,t,a){return a||=new R,a.transformDir(e,t),a}static fromArray(e){if(e.length!==16)throw new Error("Array must contain exactly 16 elements");const t=new R;for(let a=0;a<16;a++)t.rawData[a]=e[a];return t}static getAxisRotation(e,t,a,r){let i=new R,n=r*(Math.PI/180),o=Math.cos(n),l=Math.sin(n),c=1-o,f,d;return i.rawData[0]=o+e*e*c,i.rawData[5]=o+t*t*c,i.rawData[10]=o+a*a*c,f=e*t*c,d=a*l,i.rawData[1]=f+d,i.rawData[4]=f-d,f=e*a*c,d=t*l,i.rawData[8]=f+d,i.rawData[2]=f-d,f=t*a*c,d=e*l,i.rawData[9]=f-d,i.rawData[6]=f+d,i}static sanitizeEuler(e){R.makePositive(e)}static makePositive(e){let t=-1e-4,a=Math.PI*2-1e-4;e.x<t?e.x+=2*Math.PI:e.x>a&&(e.x-=2*Math.PI),e.y<t?e.y+=2*Math.PI:e.y>a&&(e.y-=2*Math.PI),e.z<t?e.z+=2*Math.PI:e.z>a&&(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)),R.sanitizeEuler(t),!0):(t.x=Math.PI*.5,t.y=Math.atan2(e.get(0,1),e.get(0,0)),t.z=0,R.sanitizeEuler(t),!1):(t.x=-Math.PI*.5,t.y=Math.atan2(-e.get(0,1),e.get(0,0)),t.z=0,R.sanitizeEuler(t),!1)}static matrixMultiply(e,t,a){R.wasm.Matrix_Multiply(e.index,t.index,a.index)}static matrixAppend(e,t,a){R.wasm.Matrix_Append(e.index,t.index,a.index)}static matrixRotateY(e,t){R.wasm.Matrix_Append(e,t.index)}static matrixRotate(e,t,a){R.wasm.Matrix_Rotate(e,t,a.index)}constructor(e=!1){if(R.useCount>=R.allocCount){let t=R.allocCount+R.allocOnceCount;Re.allocMatrix(t)}this.index=R.useCount,this.offset=R.wasmMatrixPtr+this.index*R.blockBytes,R.dynamicGlobalMatrixRef[this.index]=this,R.useCount++,this.rawData=ur(R.dynamicMatrixBytes.buffer,this.offset,16),this._position=new b,this.identity()}lookAt(e,t,a=b.Y_AXIS){let r=this.rawData,i=t.subtract(e,b.HELP_0);i.length===0&&(i.z=1),i.normalize();let n=a.crossProduct(i,b.HELP_1);n.length===0&&(Math.abs(a.z)===1?i.x+=1e-4:i.z-=1e-4,i.normalize(),n=a.crossProduct(i,b.HELP_1)),n.normalize();let o=i.crossProduct(n,b.HELP_2);r[0]=n.x,r[1]=o.x,r[2]=i.x,r[3]=0,r[4]=n.y,r[5]=o.y,r[6]=i.y,r[7]=0,r[8]=n.z,r[9]=o.z,r[10]=i.z,r[11]=0,r[12]=-n.dotProduct(e),r[13]=-o.dotProduct(e),r[14]=-i.dotProduct(e),r[15]=1}static floatArray=new Float64Array(16).fill(0);multiply(e){let t=this.rawData,a=e.rawData,r=R.floatArray;r[0]=t[0]*a[0]+t[1]*a[4]+t[2]*a[8]+t[3]*a[12],r[1]=t[0]*a[1]+t[1]*a[5]+t[2]*a[9]+t[3]*a[13],r[2]=t[0]*a[2]+t[1]*a[6]+t[2]*a[10]+t[3]*a[14],r[3]=t[0]*a[3]+t[1]*a[7]+t[2]*a[11]+t[3]*a[15],r[4]=t[4]*a[0]+t[5]*a[4]+t[6]*a[8]+t[7]*a[12],r[5]=t[4]*a[1]+t[5]*a[5]+t[6]*a[9]+t[7]*a[13],r[6]=t[4]*a[2]+t[5]*a[6]+t[6]*a[10]+t[7]*a[14],r[7]=t[4]*a[3]+t[5]*a[7]+t[6]*a[11]+t[7]*a[15],r[8]=t[8]*a[0]+t[9]*a[4]+t[10]*a[8]+t[11]*a[12],r[9]=t[8]*a[1]+t[9]*a[5]+t[10]*a[9]+t[11]*a[13],r[10]=t[8]*a[2]+t[9]*a[6]+t[10]*a[10]+t[11]*a[14],r[11]=t[8]*a[3]+t[9]*a[7]+t[10]*a[11]+t[11]*a[15],r[12]=t[12]*a[0]+t[13]*a[4]+t[14]*a[8]+t[15]*a[12],r[13]=t[12]*a[1]+t[13]*a[5]+t[14]*a[9]+t[15]*a[13],r[14]=t[12]*a[2]+t[13]*a[6]+t[14]*a[10]+t[15]*a[14],r[15]=t[12]*a[3]+t[13]*a[7]+t[14]*a[11]+t[15]*a[15],t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=r[3],t[4]=r[4],t[5]=r[5],t[6]=r[6],t[7]=r[7],t[8]=r[8],t[9]=r[9],t[10]=r[10],t[11]=r[11],t[12]=r[12],t[13]=r[13],t[14]=r[14],t[15]=r[15]}multiplyMatrices(e,t){const a=e.rawData,r=t.rawData,i=this.rawData,n=a[0],o=a[4],l=a[8],c=a[12],f=a[1],d=a[5],h=a[9],u=a[13],m=a[2],g=a[6],p=a[10],A=a[14],D=a[3],B=a[7],v=a[11],U=a[15],y=r[0],S=r[4],F=r[8],C=r[12],w=r[1],E=r[5],Q=r[9],T=r[13],j=r[2],ue=r[6],ee=r[10],N=r[14],M=r[3],O=r[7],W=r[11],ae=r[15];return i[0]=n*y+o*w+l*j+c*M,i[4]=n*S+o*E+l*ue+c*O,i[8]=n*F+o*Q+l*ee+c*W,i[12]=n*C+o*T+l*N+c*ae,i[1]=f*y+d*w+h*j+u*M,i[5]=f*S+d*E+h*ue+u*O,i[9]=f*F+d*Q+h*ee+u*W,i[13]=f*C+d*T+h*N+u*ae,i[2]=m*y+g*w+p*j+A*M,i[6]=m*S+g*E+p*ue+A*O,i[10]=m*F+g*Q+p*ee+A*W,i[14]=m*C+g*T+p*N+A*ae,i[3]=D*y+B*w+v*j+U*M,i[7]=D*S+B*E+v*ue+U*O,i[11]=D*F+B*Q+v*ee+U*W,i[15]=D*C+B*T+v*N+U*ae,this}multiplyPoint3(e,t){t||=new b;let a=this.rawData;return t.x=a[0]*e.x+a[4]*e.y+a[8]*e.z+a[12],t.y=a[1]*e.x+a[5]*e.y+a[9]*e.z+a[13],t.z=a[2]*e.x+a[6]*e.y+a[10]*e.z+a[14],t}multiplyVector4(e,t){t||=new b;let a=this.rawData,r=e.x,i=e.y,n=e.z,o=a[3]*r+a[7]*i+a[11]*n+a[15];return o=o||1,t.x=(a[0]*r+a[4]*i+a[8]*n+a[12])/o,t.y=(a[1]*r+a[5]*i+a[9]*n+a[13])/o,t.z=(a[2]*r+a[6]*i+a[10]*n+a[14])/o,t.w=1,t}transformVector4(e,t){let a=this.rawData;t||=new b;let r=e.x,i=e.y,n=e.z,o=e.w;return t.x=r*a[0]+i*a[4]+n*a[8]+o*a[12],t.y=r*a[1]+i*a[5]+n*a[9]+o*a[13],t.z=r*a[2]+i*a[6]+n*a[10]+o*a[14],t.w=r*a[3]+i*a[7]+n*a[11]+o*a[15],t}perspectiveMultiplyPoint3(e,t){let a=b.HELP_2,r,i=this.rawData;if(a.x=i[0]*e.x+i[4]*e.y+i[8]*e.z+i[12],a.y=i[1]*e.x+i[5]*e.y+i[9]*e.z+i[13],a.z=i[2]*e.x+i[6]*e.y+i[10]*e.z+i[14],r=i[3]*e.x+i[7]*e.y+i[11]*e.z+i[15],Math.abs(r)>1e-7){let n=1/r;return t.x=a.x*n,t.y=a.y*n,t.z=a.z*n,!0}else return t.x=0,t.y=0,t.z=0,!1}perspective(e,t,a,r){let i=this.rawData,n=e*_t/2,o=Math.cos(n)/Math.sin(n);i[0]=-o/t,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=o,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=r/(r-a),i[11]=1,i[12]=0,i[13]=0,i[14]=-a*r/(r-a),i[15]=0}perspective3(e,t,a,r){let i=Math.tan(e*Math.PI/360)*a,n=i*t;this.frustum(-n,n,-i,i,a,r)}frustum(e,t,a,r,i,n){let o=this.rawData;o[0]=-2*i/(t-e),o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=2*i/(r-a),o[6]=0,o[7]=0,o[8]=(t+e)/(t-e),o[9]=(r+a)/(r-a),o[10]=n/(n-i),o[11]=1,o[12]=0,o[13]=0,o[14]=-n*i/(n-i),o[15]=0}ortho(e,t,a,r){let i=this.rawData;return i[0]=2/e,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=2/t,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=1/(r-a),i[11]=0,i[12]=0,i[13]=0,i[14]=a/(a-r),i[15]=1,this}orthoZO(e,t,a,r,i,n){let o=this.rawData,l=1/(e-t),c=1/(a-r),f=1/(i-n);return o[0]=-2*l,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=-2*c,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=f,o[11]=0,o[12]=(e+t)*l,o[13]=(r+a)*c,o[14]=i*f,o[15]=1,this}orthoOffCenter(e,t,a,r,i,n){let o=this.rawData;o[0]=2/(t-e),o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=2/(r-a),o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1/(n-i),o[11]=0,o[12]=(e+t)/(e-t),o[13]=(r+a)/(a-r),o[14]=i/(i-n),o[15]=1}transformDir(e,t){let a=this.rawData,r=1e-6,i=b.ZERO;t.crossProduct(e,i);let n=t.dotProduct(e);if(n>1-r)this.identity();else if(n<-1+r){let o=b.HELP_1,l=b.HELP_2,c=0,f,d,h,u,m,g,p,A,D,B,v,U,y,S,F,C,w,E;l.x=0,l.y=e.z,l.z=-e.y,l.dotProduct(l)<r&&(l.x=-e.z,l.y=0,l.z=e.x),c=1/Math.sqrt(l.dotProduct(l)),l.x*=c,l.y*=c,l.z*=c,l.crossProduct(e,o),f=-e.x*e.x,d=-e.y*e.y,h=-e.z*e.z,u=-e.x*e.y,m=-e.x*e.z,g=-e.y*e.z,p=o.x*o.x,A=o.y*o.y,D=o.z*o.z,B=o.x*o.y,v=o.x*o.z,U=o.y*o.z,y=-l.x*l.x,S=-l.y*l.y,F=-l.z*l.z,C=-l.x*l.y,w=-l.x*l.z,E=-l.y*l.z,a[0]=f+p+y,a[1]=u+B+C,a[2]=m+v+w,a[4]=a[1],a[5]=d+A+S,a[6]=g+U+E,a[8]=a[2],a[9]=a[6],a[10]=h+D+F,a[3]=0,a[7]=0,a[11]=0,a[15]=1}else{let o,l,c,f,d,h=i.dotProduct(i),u=(1-n)/h;o=u*i.x,l=u*i.z,c=o*i.y,f=o*i.z,d=l*i.y,a[0]=n+o*i.x,a[1]=c-i.z,a[2]=f+i.y,a[4]=c+i.z,a[5]=n+u*i.y*i.y,a[6]=d-i.x,a[8]=f-i.y,a[9]=d+i.x,a[10]=n+l*i.z,a[3]=0,a[7]=0,a[11]=0,a[15]=1}return this}append(e){let t=this.rawData,a=t[0],r=t[4],i=t[8],n=t[12],o=t[1],l=t[5],c=t[9],f=t[13],d=t[2],h=t[6],u=t[10],m=t[14],g=t[3],p=t[7],A=t[11],D=t[15];t[0]=a*e.rawData[0]+o*e.rawData[4]+d*e.rawData[8]+g*e.rawData[12],t[1]=a*e.rawData[1]+o*e.rawData[5]+d*e.rawData[9]+g*e.rawData[13],t[2]=a*e.rawData[2]+o*e.rawData[6]+d*e.rawData[10]+g*e.rawData[14],t[3]=a*e.rawData[3]+o*e.rawData[7]+d*e.rawData[11]+g*e.rawData[15],t[4]=r*e.rawData[0]+l*e.rawData[4]+h*e.rawData[8]+p*e.rawData[12],t[5]=r*e.rawData[1]+l*e.rawData[5]+h*e.rawData[9]+p*e.rawData[13],t[6]=r*e.rawData[2]+l*e.rawData[6]+h*e.rawData[10]+p*e.rawData[14],t[7]=r*e.rawData[3]+l*e.rawData[7]+h*e.rawData[11]+p*e.rawData[15],t[8]=i*e.rawData[0]+c*e.rawData[4]+u*e.rawData[8]+A*e.rawData[12],t[9]=i*e.rawData[1]+c*e.rawData[5]+u*e.rawData[9]+A*e.rawData[13],t[10]=i*e.rawData[2]+c*e.rawData[6]+u*e.rawData[10]+A*e.rawData[14],t[11]=i*e.rawData[3]+c*e.rawData[7]+u*e.rawData[11]+A*e.rawData[15],t[12]=n*e.rawData[0]+f*e.rawData[4]+m*e.rawData[8]+D*e.rawData[12],t[13]=n*e.rawData[1]+f*e.rawData[5]+m*e.rawData[9]+D*e.rawData[13],t[14]=n*e.rawData[2]+f*e.rawData[6]+m*e.rawData[10]+D*e.rawData[14],t[15]=n*e.rawData[3]+f*e.rawData[7]+m*e.rawData[11]+D*e.rawData[15]}add(e){let t=this.rawData,a=t[0],r=t[4],i=t[8],n=t[12],o=t[1],l=t[5],c=t[9],f=t[13],d=t[2],h=t[6],u=t[10],m=t[14],g=t[3],p=t[7],A=t[11],D=t[15],B=e.rawData[0],v=e.rawData[4],U=e.rawData[8],y=e.rawData[12],S=e.rawData[1],F=e.rawData[5],C=e.rawData[9],w=e.rawData[13],E=e.rawData[2],Q=e.rawData[6],T=e.rawData[10],j=e.rawData[14],ue=e.rawData[3],ee=e.rawData[7],N=e.rawData[11],M=e.rawData[15];return t[0]=a+B,t[1]=o+S,t[2]=d+E,t[3]=g+ue,t[4]=r+v,t[5]=l+F,t[6]=h+Q,t[7]=p+ee,t[8]=i+U,t[9]=c+C,t[10]=u+T,t[11]=A+N,t[12]=n+y,t[13]=f+w,t[14]=m+j,t[15]=D+M,this}sub(e){let t=this.rawData,a=t[0],r=t[4],i=t[8],n=t[12],o=t[1],l=t[5],c=t[9],f=t[13],d=t[2],h=t[6],u=t[10],m=t[14],g=t[3],p=t[7],A=t[11],D=t[15],B=e.rawData[0],v=e.rawData[4],U=e.rawData[8],y=e.rawData[12],S=e.rawData[1],F=e.rawData[5],C=e.rawData[9],w=e.rawData[13],E=e.rawData[2],Q=e.rawData[6],T=e.rawData[10],j=e.rawData[14],ue=e.rawData[3],ee=e.rawData[7],N=e.rawData[11],M=e.rawData[15];return t[0]=a-B,t[1]=o-S,t[2]=d-E,t[3]=g-ue,t[4]=r-v,t[5]=l-F,t[6]=h-Q,t[7]=p-ee,t[8]=i-U,t[9]=c-C,t[10]=u-T,t[11]=A-N,t[12]=n-y,t[13]=f-w,t[14]=m-j,t[15]=D-M,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 a=R.getAxisRotation(t.x,t.y,t.z,e);this.append(a)}createByRotation(e,t){let a=R.helpMatrix,r,i,n=e*_t;return r=Math.sin(n),i=Math.cos(n),t.x==1&&(a.rawData[0]=1,a.rawData[1]=0,a.rawData[2]=0,a.rawData[3]=0,a.rawData[4]=0,a.rawData[5]=i,a.rawData[6]=r,a.rawData[7]=0,a.rawData[8]=0,a.rawData[9]=-r,a.rawData[10]=i,a.rawData[11]=0,a.rawData[12]=0,a.rawData[13]=0,a.rawData[14]=0,a.rawData[15]=1),t.y==1&&(a.rawData[0]=i,a.rawData[1]=0,a.rawData[2]=-r,a.rawData[3]=0,a.rawData[4]=0,a.rawData[5]=1,a.rawData[6]=0,a.rawData[7]=0,a.rawData[8]=r,a.rawData[9]=0,a.rawData[10]=i,a.rawData[11]=0,a.rawData[12]=0,a.rawData[13]=0,a.rawData[14]=0,a.rawData[15]=1),t.z==1&&(a.rawData[0]=i,a.rawData[1]=r,a.rawData[2]=0,a.rawData[3]=0,a.rawData[4]=-r,a.rawData[5]=i,a.rawData[6]=0,a.rawData[7]=0,a.rawData[8]=0,a.rawData[9]=0,a.rawData[10]=1,a.rawData[11]=0,a.rawData[12]=0,a.rawData[13]=0,a.rawData[14]=0,a.rawData[15]=1),this.append(a),this}appendScale(e,t,a){R.helpMatrix.createByScale(e,t,a),this.append(R.helpMatrix)}createByScale(e,t,a){let r=this.rawData;r[0]=e,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=t,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[10]=a,r[11]=0,r[12]=0,r[13]=0,r[14]=0,r[15]=1}appendTranslation(e,t,a){let r=this.rawData;r[12]+=e,r[13]+=t,r[14]+=a}clone(){let e=new R;return e.copyFrom(this),e}copyRowFrom(e,t){let a=this.rawData;switch(e){case 0:a[0]=t.x,a[1]=t.y,a[2]=t.z,a[3]=t.w;break;case 1:a[4]=t.x,a[5]=t.y,a[6]=t.z,a[7]=t.w;break;case 2:a[8]=t.x,a[9]=t.y,a[10]=t.z,a[11]=t.w;break;case 3:a[12]=t.x,a[13]=t.y,a[14]=t.z,a[15]=t.w;break}}copyRowTo(e,t){let a=this.rawData;switch(e){case 0:t.x=a[0],t.y=a[1],t.z=a[2],t.w=a[3];break;case 1:t.x=a[4],t.y=a[5],t.z=a[6],t.w=a[7];break;case 2:t.x=a[8],t.y=a[9],t.z=a[10],t.w=a[11];break;case 3:t.x=a[12],t.y=a[13],t.z=a[14],t.w=a[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,a=!1){let r=this.rawData;e[0+t]=r[0],e[1+t]=r[1],e[2+t]=r[2],e[3+t]=r[3],e[4+t]=r[4],e[5+t]=r[5],e[6+t]=r[6],e[7+t]=r[7],e[8+t]=r[8],e[9+t]=r[9],e[10+t]=r[10],e[11+t]=r[11],e[12+t]=r[12],e[13+t]=r[13],e[14+t]=r[14],e[15+t]=r[15]}copyColFrom(e,t){let a=this.rawData;switch(e){case 0:a[0]=t.x,a[4]=t.y,a[8]=t.z,a[12]=t.w;break;case 1:a[1]=t.x,a[5]=t.y,a[9]=t.z,a[13]=t.w;break;case 2:a[2]=t.x,a[6]=t.y,a[10]=t.z,a[14]=t.w;break;case 3:a[3]=t.x,a[7]=t.y,a[11]=t.z,a[15]=t.w;break}}copyColTo(e,t){let a=this.rawData;switch(e){case 0:t.x=a[0],t.y=a[4],t.z=a[8],t.w=a[12];break;case 1:t.x=a[1],t.y=a[5],t.z=a[9],t.w=a[13];break;case 2:t.x=a[2],t.y=a[6],t.z=a[10],t.w=a[14];break;case 3:t.x=a[3],t.y=a[7],t.z=a[11],t.w=a[15];break}}copyToMatrix3D(e){e.rawData=this.rawData.slice(0)}makeRotationFromQuaternion(e){return this.compose(R._zero,e,R._one),this}static decomposeRawData=new Float64Array(16).fill(0);decompose(e="eulerAngles",t){let a=se.CALCULATION_QUATERNION,r=t||R._prs;this.copyRawDataTo(R.decomposeRawData);let i=R.decomposeRawData,n=r[0];n.x=i[12],n.y=i[13],n.z=i[14],i[12]=0,i[13]=0,i[14]=0;let o=r[2];o.x=Math.sqrt(i[0]*i[0]+i[1]*i[1]+i[2]*i[2]),o.y=Math.sqrt(i[4]*i[4]+i[5]*i[5]+i[6]*i[6]),o.z=Math.sqrt(i[8]*i[8]+i[9]*i[9]+i[10]*i[10]),i[0]*(i[5]*i[10]-i[6]*i[9])-i[1]*(i[4]*i[10]-i[6]*i[8])+i[2]*(i[4]*i[9]-i[5]*i[8])<0&&(o.z=-o.z),i[0]/=o.x,i[1]/=o.x,i[2]/=o.x,i[4]/=o.y,i[5]/=o.y,i[6]/=o.y,i[8]/=o.z,i[9]/=o.z,i[10]/=o.z;let l=r[1],c;switch(e){case oa.AXIS_ANGLE:l.w=Math.acos((i[0]+i[5]+i[10]-1)/2);let f=Math.sqrt((i[6]-i[9])*(i[6]-i[9])+(i[8]-i[2])*(i[8]-i[2])+(i[1]-i[4])*(i[1]-i[4]));l.x=(i[6]-i[9])/f,l.y=(i[8]-i[2])/f,l.z=(i[1]-i[4])/f;break;case oa.QUATERNION:c=i[0]+i[5]+i[10],c>0?(l.w=Math.sqrt(1+c)/2,l.x=(i[6]-i[9])/(4*l.w),l.y=(i[8]-i[2])/(4*l.w),l.z=(i[1]-i[4])/(4*l.w)):i[0]>i[5]&&i[0]>i[10]?(l.x=Math.sqrt(1+i[0]-i[5]-i[10])/2,l.w=(i[6]-i[9])/(4*l.x),l.y=(i[1]+i[4])/(4*l.x),l.z=(i[8]+i[2])/(4*l.x)):i[5]>i[10]?(l.y=Math.sqrt(1+i[5]-i[0]-i[10])/2,l.x=(i[1]+i[4])/(4*l.y),l.w=(i[8]-i[2])/(4*l.y),l.z=(i[6]+i[9])/(4*l.y)):(l.z=Math.sqrt(1+i[10]-i[0]-i[5])/2,l.x=(i[8]+i[2])/(4*l.z),l.y=(i[6]+i[9])/(4*l.z),l.w=(i[1]-i[4])/(4*l.z));break;case oa.EULER_ANGLES:c=i[0]+i[5]+i[10],c>0?(a.w=Math.sqrt(1+c)/2,a.x=(i[6]-i[9])/(4*a.w),a.y=(i[8]-i[2])/(4*a.w),a.z=(i[1]-i[4])/(4*a.w)):i[0]>i[5]&&i[0]>i[10]?(a.x=Math.sqrt(1+i[0]-i[5]-i[10])/2,a.w=(i[6]-i[9])/(4*a.x),a.y=(i[1]+i[4])/(4*a.x),a.z=(i[8]+i[2])/(4*a.x)):i[5]>i[10]?(l.y=Math.sqrt(1+i[5]-i[0]-i[10])/2,a.x=(i[1]+i[4])/(4*a.y),a.w=(i[8]-i[2])/(4*a.y),a.z=(i[6]+i[9])/(4*a.y)):(a.z=Math.sqrt(1+i[10]-i[0]-i[5])/2,a.x=(i[8]+i[2])/(4*a.z),a.y=(i[6]+i[9])/(4*a.z),a.w=(i[1]-i[4])/(4*a.z)),a.getEulerAngles(l);break}return r[0]=n,r[1]=l,r[2]=o,r}static getEuler(e,t,a=!0,r){return e||=new b,R._getEulerMatrix.makeRotationFromQuaternion(t).makeEuler(e,a,r),e}compose(e,t,a){const r=this.rawData,i=t.x,n=t.y,o=t.z,l=t.w,c=i+i,f=n+n,d=o+o,h=i*c,u=i*f,m=i*d,g=n*f,p=n*d,A=o*d,D=l*c,B=l*f,v=l*d,U=a.x,y=a.y,S=a.z;return r[0]=(1-(g+A))*U,r[1]=(u+v)*U,r[2]=(m-B)*U,r[3]=0,r[4]=(u-v)*y,r[5]=(1-(h+A))*y,r[6]=(p+D)*y,r[7]=0,r[8]=(m+B)*S,r[9]=(p-D)*S,r[10]=(1-(h+g))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}deltaTransformVector(e,t){t||=new b;let a=this.rawData,r=e.x,i=e.y,n=e.z;return t.x=r*a[0]+i*a[4]+n*a[8],t.y=r*a[1]+i*a[5]+n*a[9],t.z=r*a[2]+i*a[6]+n*a[10],t.w=r*a[3]+i*a[7]+n*a[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],a=e[8]*e[6]-e[4]*e[10],r=e[4]*e[9]-e[8]*e[5],i=e[9]*e[2]-e[1]*e[10],n=e[0]*e[10]-e[8]*e[2],o=e[8]*e[1]-e[0]*e[9],l=e[1]*e[6]-e[5]*e[2],c=e[4]*e[2]-e[0]*e[6],f=e[0]*e[5]-e[4]*e[1],d=e[0]*t+e[4]*i+e[8]*l;if(Math.abs(d)>1e-11){let h=1/d;e[0]=h*t,e[4]=h*a,e[8]=h*r,e[1]=h*i,e[5]=h*n,e[9]=h*o,e[2]=h*l,e[6]=h*c,e[10]=h*f}}invert(){let e=this.determinant,t=Math.abs(e)>1e-11,a=this.rawData;if(t){e=1/e;let r=a[0],i=a[4],n=a[8],o=a[12],l=a[1],c=a[5],f=a[9],d=a[13],h=a[2],u=a[6],m=a[10],g=a[14],p=a[3],A=a[7],D=a[11],B=a[15];a[0]=e*(c*(m*B-g*D)-f*(u*B-g*A)+d*(u*D-m*A)),a[1]=-e*(l*(m*B-g*D)-f*(h*B-g*p)+d*(h*D-m*p)),a[2]=e*(l*(u*B-g*A)-c*(h*B-g*p)+d*(h*A-u*p)),a[3]=-e*(l*(u*D-m*A)-c*(h*D-m*p)+f*(h*A-u*p)),a[4]=-e*(i*(m*B-g*D)-n*(u*B-g*A)+o*(u*D-m*A)),a[5]=e*(r*(m*B-g*D)-n*(h*B-g*p)+o*(h*D-m*p)),a[6]=-e*(r*(u*B-g*A)-i*(h*B-g*p)+o*(h*A-u*p)),a[7]=e*(r*(u*D-m*A)-i*(h*D-m*p)+n*(h*A-u*p)),a[8]=e*(i*(f*B-d*D)-n*(c*B-d*A)+o*(c*D-f*A)),a[9]=-e*(r*(f*B-d*D)-n*(l*B-d*p)+o*(l*D-f*p)),a[10]=e*(r*(c*B-d*A)-i*(l*B-d*p)+o*(l*A-c*p)),a[11]=-e*(r*(c*D-f*A)-i*(l*D-f*p)+n*(l*A-c*p)),a[12]=-e*(i*(f*g-d*m)-n*(c*g-d*u)+o*(c*m-f*u)),a[13]=e*(r*(f*g-d*m)-n*(l*g-d*h)+o*(l*m-f*h)),a[14]=-e*(r*(c*g-d*u)-i*(l*g-d*h)+o*(l*u-c*h)),a[15]=e*(r*(c*m-f*u)-i*(l*m-f*h)+n*(l*u-c*h))}return t}transformPoint(e,t){let a=this.rawData;t||=new b;let r=e.x,i=e.y,n=e.z;return t.x=r*a[0]+i*a[4]+n*a[8]+a[12],t.y=r*a[1]+i*a[5]+n*a[9]+a[13],t.z=r*a[2]+i*a[6]+n*a[10]+a[14],t}transformVector(e,t){let a=this.rawData;t||=new b;let r=e.x,i=e.y,n=e.z;return t.x=r*a[0]+i*a[4]+n*a[8],t.y=r*a[1]+i*a[5]+n*a[9],t.z=r*a[2]+i*a[6]+n*a[10],t}transpose(){let e=this.rawData;for(let t=0;t<R.helpMatrix.rawData.length;t++)R.helpMatrix.rawData[t]=e[t];e[1]=R.helpMatrix.rawData[4],e[2]=R.helpMatrix.rawData[8],e[3]=R.helpMatrix.rawData[12],e[4]=R.helpMatrix.rawData[1],e[6]=R.helpMatrix.rawData[9],e[7]=R.helpMatrix.rawData[13],e[8]=R.helpMatrix.rawData[2],e[9]=R.helpMatrix.rawData[6],e[11]=R.helpMatrix.rawData[14],e[12]=R.helpMatrix.rawData[3],e[13]=R.helpMatrix.rawData[7],e[14]=R.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 b;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 b(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,a){this.copyFrom(t).sub(e).mult(a).add(e)}get(e,t){return this.rawData[e+t*4]}set(e,t,a){this.rawData[e+t*4]=a}getMaxScaleOnAxis(){let e=this.rawData,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],a=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,a,r))}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),a=this.get(1,0)*e.x+this.get(1,1)*e.y+this.get(1,2)*e.z+this.get(1,3),r=this.get(2,0)*e.x+this.get(2,1)*e.y+this.get(2,2)*e.z+this.get(2,3),i=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,a),this.set(2,3,r),this.set(3,3,i),this}setTRInverse(e,t){t=t.inverse(),se.quaternionToMatrix(t,this),this.translate(new b(-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,a){return this.setElements(e.x,t.x,a.x,0,e.y,t.y,a.y,0,e.z,t.z,a.z,0,0,0,0,1),this}makeRotationAxis(e,t){const a=Math.cos(t),r=Math.sin(t),i=1-a,n=e.x,o=e.y,l=e.z,c=i*n,f=i*o;return this.setElements(c*n+a,c*o-r*l,c*l+r*o,0,c*o+r*l,f*o+a,f*l-r*n,0,c*l-r*o,f*l+r*n,i*l*l+a,0,0,0,0,1),this}static transpose(e,t){t||=new R;let a=e.rawData,r=t.rawData;return r[0]=a[0],r[1]=a[4],r[2]=a[8],r[3]=a[12],r[4]=a[1],r[5]=a[5],r[6]=a[9],r[7]=a[13],r[8]=a[2],r[9]=a[6],r[10]=a[10],r[11]=a[14],r[12]=a[3],r[13]=a[7],r[14]=a[11],r[15]=a[15],t}static inverse(e,t){t||=new R;let a=e.rawData,r=t.rawData;r[0]=a[5]*a[10]*a[15]-a[5]*a[14]*a[11]-a[6]*a[9]*a[15]+a[6]*a[13]*a[11]+a[7]*a[9]*a[14]-a[7]*a[13]*a[10],r[1]=-a[1]*a[10]*a[15]+a[1]*a[14]*a[11]+a[2]*a[9]*a[15]-a[2]*a[13]*a[11]-a[3]*a[9]*a[14]+a[3]*a[13]*a[10],r[2]=a[1]*a[6]*a[15]-a[1]*a[14]*a[7]-a[2]*a[5]*a[15]+a[2]*a[13]*a[7]+a[3]*a[5]*a[14]-a[3]*a[13]*a[6],r[3]=-a[1]*a[6]*a[11]+a[1]*a[10]*a[7]+a[2]*a[5]*a[11]-a[2]*a[9]*a[7]-a[3]*a[5]*a[10]+a[3]*a[9]*a[6],r[4]=-a[4]*a[10]*a[15]+a[4]*a[14]*a[11]+a[6]*a[8]*a[15]-a[6]*a[12]*a[11]-a[7]*a[8]*a[14]+a[7]*a[12]*a[10],r[5]=a[0]*a[10]*a[15]-a[0]*a[14]*a[11]-a[2]*a[8]*a[15]+a[2]*a[12]*a[11]+a[3]*a[8]*a[14]-a[3]*a[12]*a[10],r[6]=-a[0]*a[6]*a[15]+a[0]*a[14]*a[7]+a[2]*a[4]*a[15]-a[2]*a[12]*a[7]-a[3]*a[4]*a[14]+a[3]*a[12]*a[6],r[7]=a[0]*a[6]*a[11]-a[0]*a[10]*a[7]-a[2]*a[4]*a[11]+a[2]*a[8]*a[7]+a[3]*a[4]*a[10]-a[3]*a[8]*a[6],r[8]=a[4]*a[9]*a[15]-a[4]*a[13]*a[11]-a[5]*a[8]*a[15]+a[5]*a[12]*a[11]+a[7]*a[8]*a[13]-a[7]*a[12]*a[9],r[9]=-a[0]*a[9]*a[15]+a[0]*a[13]*a[11]+a[1]*a[8]*a[15]-a[1]*a[12]*a[11]-a[3]*a[8]*a[13]+a[3]*a[12]*a[9],r[10]=a[0]*a[5]*a[15]-a[0]*a[13]*a[7]-a[1]*a[4]*a[15]+a[1]*a[12]*a[7]+a[3]*a[4]*a[13]-a[3]*a[12]*a[5],r[11]=-a[0]*a[5]*a[11]+a[0]*a[9]*a[7]+a[1]*a[4]*a[11]-a[1]*a[8]*a[7]-a[3]*a[4]*a[9]+a[3]*a[8]*a[5],r[12]=-a[4]*a[9]*a[14]+a[4]*a[13]*a[10]+a[5]*a[8]*a[14]-a[5]*a[12]*a[10]-a[6]*a[8]*a[13]+a[6]*a[12]*a[9],r[13]=a[0]*a[9]*a[14]-a[0]*a[13]*a[10]-a[1]*a[8]*a[14]+a[1]*a[12]*a[10]+a[2]*a[8]*a[13]-a[2]*a[12]*a[9],r[14]=-a[0]*a[5]*a[14]+a[0]*a[13]*a[6]+a[1]*a[4]*a[14]-a[1]*a[12]*a[6]-a[2]*a[4]*a[13]+a[2]*a[12]*a[5],r[15]=a[0]*a[5]*a[10]-a[0]*a[9]*a[6]-a[1]*a[4]*a[10]+a[1]*a[8]*a[6]+a[2]*a[4]*a[9]-a[2]*a[8]*a[5];let i=a[0]*r[0]+a[1]*r[4]+a[2]*r[8]+a[3]*r[12];for(let n=0;n<16;n++)r[n]/=i;return t}makeEuler(e,t,a="XYZ"){const r=this.rawData,i=r[0],n=r[4],o=r[8],l=r[1],c=r[5],f=r[9],d=r[2],h=r[6],u=r[10];switch(a){case"XYZ":e.y=Math.asin(Be(o,-1,1)),Math.abs(o)<.9999999?(e.x=Math.atan2(-f,u),e.z=Math.atan2(-n,i)):(e.x=Math.atan2(h,c),e.z=0);break;case"YXZ":e.x=Math.asin(-Be(f,-1,1)),Math.abs(f)<.9999999?(e.y=Math.atan2(o,u),e.z=Math.atan2(l,c)):(e.y=Math.atan2(-d,i),e.z=0);break;case"ZXY":e.x=Math.asin(Be(h,-1,1)),Math.abs(h)<.9999999?(e.y=Math.atan2(-d,u),e.z=Math.atan2(-n,c)):(e.y=0,e.z=Math.atan2(l,i));break;case"ZYX":e.y=Math.asin(-Be(d,-1,1)),Math.abs(d)<.9999999?(e.x=Math.atan2(h,u),e.z=Math.atan2(l,i)):(e.x=0,e.z=Math.atan2(-n,c));break;case"YZX":e.z=Math.asin(Be(l,-1,1)),Math.abs(l)<.9999999?(e.x=Math.atan2(-f,c),e.y=Math.atan2(-d,i)):(e.x=0,e.y=Math.atan2(o,u));break;case"XZY":e.z=Math.asin(-Be(n,-1,1)),Math.abs(n)<.9999999?(e.x=Math.atan2(h,c),e.y=Math.atan2(o,i)):(e.x=Math.atan2(-f,u),e.y=0);break}return t&&e.multiplyScalar(ei),e}setElements(e,t,a,r,i,n,o,l,c,f,d,h,u,m,g,p){const A=this.rawData;return A[0]=e,A[4]=t,A[8]=a,A[12]=r,A[1]=i,A[5]=n,A[9]=o,A[13]=l,A[2]=c,A[6]=f,A[10]=d,A[14]=h,A[3]=u,A[7]=m,A[11]=g,A[15]=p,this}makeMatrix44ByQuaternion(e,t,a){this.identity(),se.quaternionToMatrix(a,this),this.appendTranslation(e.x,e.y,e.z),this.appendScale(t.x,t.y,t.z)}}function jc(s,e,t){for(let a=0;a<4;a++)t.rawData[a]=s.rawData[a]*e.rawData[0]+s.rawData[a+4]*e.rawData[1]+s.rawData[a+8]*e.rawData[2]+s.rawData[a+12]*e.rawData[3],t.rawData[a+4]=s.rawData[a]*e.rawData[4]+s.rawData[a+4]*e.rawData[5]+s.rawData[a+8]*e.rawData[6]+s.rawData[a+12]*e.rawData[7],t.rawData[a+8]=s.rawData[a]*e.rawData[8]+s.rawData[a+4]*e.rawData[9]+s.rawData[a+8]*e.rawData[10]+s.rawData[a+12]*e.rawData[11],t.rawData[a+12]=s.rawData[a]*e.rawData[12]+s.rawData[a+4]*e.rawData[13]+s.rawData[a+8]*e.rawData[14]+s.rawData[a+12]*e.rawData[15]}function Es(s,e,t,a){let r=a.rawData,i=s.x*_t,n=s.y*_t,o=s.z*_t,l=0,c=i*.5,f=n*.5,d=o*.5,h=Math.cos(c),u=Math.sin(c),m=Math.cos(f),g=Math.sin(f),p=Math.cos(d),A=Math.sin(d);l=h*m*p+u*g*A,i=u*m*p-h*g*A,n=h*g*p+u*m*A,o=h*m*A-u*g*p;let D=i+i,B=n+n,v=o+o,U=i*D,y=i*B,S=i*v,F=n*B,C=n*v,w=o*v,E=l*D,Q=l*B,T=l*v,j=t.x,ue=t.y,ee=t.z;r[0]=(1-(F+w))*j,r[1]=(y+T)*j,r[2]=(S-Q)*j,r[3]=0,r[4]=(y-T)*ue,r[5]=(1-(U+w))*ue,r[6]=(C+E)*ue,r[7]=0,r[8]=(S+Q)*ee,r[9]=(C-E)*ee,r[10]=(1-(U+F))*ee,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1}function Zc(s,e,t){let a=s.rawData,r=t.rawData,i=a[0],n=a[4],o=a[8],l=a[12],c=a[1],f=a[5],d=a[9],h=a[13],u=a[2],m=a[6],g=a[10],p=a[14],A=a[3],D=a[7],B=a[11],v=a[15];r[0]=i*e.rawData[0]+c*e.rawData[4]+u*e.rawData[8]+A*e.rawData[12],r[1]=i*e.rawData[1]+c*e.rawData[5]+u*e.rawData[9]+A*e.rawData[13],r[2]=i*e.rawData[2]+c*e.rawData[6]+u*e.rawData[10]+A*e.rawData[14],r[3]=i*e.rawData[3]+c*e.rawData[7]+u*e.rawData[11]+A*e.rawData[15],r[4]=n*e.rawData[0]+f*e.rawData[4]+m*e.rawData[8]+D*e.rawData[12],r[5]=n*e.rawData[1]+f*e.rawData[5]+m*e.rawData[9]+D*e.rawData[13],r[6]=n*e.rawData[2]+f*e.rawData[6]+m*e.rawData[10]+D*e.rawData[14],r[7]=n*e.rawData[3]+f*e.rawData[7]+m*e.rawData[11]+D*e.rawData[15],r[8]=o*e.rawData[0]+d*e.rawData[4]+g*e.rawData[8]+B*e.rawData[12],r[9]=o*e.rawData[1]+d*e.rawData[5]+g*e.rawData[9]+B*e.rawData[13],r[10]=o*e.rawData[2]+d*e.rawData[6]+g*e.rawData[10]+B*e.rawData[14],r[11]=o*e.rawData[3]+d*e.rawData[7]+g*e.rawData[11]+B*e.rawData[15],r[12]=l*e.rawData[0]+h*e.rawData[4]+p*e.rawData[8]+v*e.rawData[12],r[13]=l*e.rawData[1]+h*e.rawData[5]+p*e.rawData[9]+v*e.rawData[13],r[14]=l*e.rawData[2]+h*e.rawData[6]+p*e.rawData[10]+v*e.rawData[14],r[15]=l*e.rawData[3]+h*e.rawData[7]+p*e.rawData[11]+v*e.rawData[15]}function F2(s,e){let t=e.x,a=e.y,r=e.z,i=e.w,n=s.rawData,o=2*t*a,l=2*t*r,c=2*t*i,f=2*a*r,d=2*a*i,h=2*r*i,u=t*t,m=a*a,g=r*r,p=i*i;return n[0]=u-m-g+p,n[4]=o-h,n[8]=l+d,n[12]=0,n[1]=o+h,n[5]=-u+m-g+p,n[9]=f-c,n[13]=0,n[2]=l-d,n[6]=f+c,n[10]=-u-m+g+p,n[14]=0,n[3]=0,n[7]=0,n[11]=0,n[15]=1,s}function k2(s,e){let t=e.rawData,a=Math.sin(s),r=Math.cos(s);return t[0]=r,t[1]=0,t[2]=-a,t[3]=0,t[8]=a,t[9]=0,t[10]=r,t[11]=0,t}function E2(s,e,t){let a=e.x,r=e.y,i=e.z,n=Math.hypot(a,r,i),o,l,c,f,d,h,u,m,g,p,A,D;if(n<S2)return null;n=1/n,a*=n,r*=n,i*=n,o=Math.sin(s),l=Math.cos(s),c=1-l,f=a*a*c+l,d=r*a*c+i*o,h=i*a*c-r*o,u=a*r*c-i*o,m=r*r*c+l,g=i*r*c+a*o,p=a*i*c+r*o,A=r*i*c-a*o,D=i*i*c+l;let B=t.rawData;return B[0]=f,B[1]=d,B[2]=h,B[3]=0,B[4]=u,B[5]=m,B[6]=g,B[7]=0,B[8]=p,B[9]=A,B[10]=D,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function Vn(s,e,t){let a=s.rawData,r=a[0],i=a[1],n=a[2],o=a[3],l=a[4],c=a[5],f=a[6],d=a[7],h=a[8],u=a[9],m=a[10],g=a[11],p=a[12],A=a[13],D=a[14],B=a[15],v=e.rawData,U=t.rawData,y=v[0],S=v[1],F=v[2],C=v[3];return U[0]=y*r+S*l+F*h+C*p,U[1]=y*i+S*c+F*u+C*A,U[2]=y*n+S*f+F*m+C*D,U[3]=y*o+S*d+F*g+C*B,y=v[4],S=v[5],F=v[6],C=v[7],U[4]=y*r+S*l+F*h+C*p,U[5]=y*i+S*c+F*u+C*A,U[6]=y*n+S*f+F*m+C*D,U[7]=y*o+S*d+F*g+C*B,y=v[8],S=v[9],F=v[10],C=v[11],U[8]=y*r+S*l+F*h+C*p,U[9]=y*i+S*c+F*u+C*A,U[10]=y*n+S*f+F*m+C*D,U[11]=y*o+S*d+F*g+C*B,y=v[12],S=v[13],F=v[14],C=v[15],U[12]=y*r+S*l+F*h+C*p,U[13]=y*i+S*c+F*u+C*A,U[14]=y*n+S*f+F*m+C*D,U[15]=y*o+S*d+F*g+C*B,U}var ht=(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))(ht||{});class ws extends xi{static lightSize=24;index=-1;lightType=-1;radius=.001;linear=8;lightPosition=new b;lightMatrixIndex=-1;direction=new b;quadratic=.032;lightColor=new J(1,1,1,1);intensity=1;innerAngle=0;outerAngle=1;range=100;castShadowIndex=-1;lightTangent=b.FORWARD;iesIndex=-1}class Oe{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,a){this.init();let r=this.componentsUpdateList.get(e);r||(r=new Map,this.componentsUpdateList.set(e,r)),r.set(t,a)}static unBindUpdate(e,t){this.init();let a=this.componentsUpdateList.get(e);a&&a.delete(t)}static bindLateUpdate(e,t,a){this.init();let r=this.componentsLateUpdateList.get(e);r||(r=new Map,this.componentsLateUpdateList.set(e,r)),r.set(t,a)}static unBindLateUpdate(e,t){this.init();let a=this.componentsLateUpdateList.get(e);a&&a.delete(t)}static bindBeforeUpdate(e,t,a){this.init();let r=this.componentsBeforeUpdateList.get(e);r||(r=new Map,this.componentsBeforeUpdateList.set(e,r)),r.set(t,a)}static unBindBeforeUpdate(e,t){this.init();let a=this.componentsBeforeUpdateList.get(e);a&&a.delete(t)}static bindCompute(e,t,a){this.init();let r=this.componentsComputeList.get(e);r||(r=new Map,this.componentsComputeList.set(e,r)),r.set(t,a)}static unBindCompute(e,t){this.init();let a=this.componentsComputeList.get(e);a&&a.delete(t)}static bindGraphic(e,t,a){this.init();let r=this.graphicComponent.get(e);r||(r=new Map,this.graphicComponent.set(e,r)),r.set(t,a)}static unBindGraphic(e,t){this.init();let a=this.graphicComponent.get(e);a&&a.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 a=Oe.waitStartComponent.get(e);if(a){let r=a.indexOf(t);r!=-1&&a.splice(r)}}static bindEnablePick(e,t,a){this.init();let r=this.componentsEnablePickerList.get(e);r||(r=new Map,this.componentsEnablePickerList.set(e,r)),r.set(t,a)}static unBindEnablePick(e,t){this.init();let a=this.componentsEnablePickerList.get(e);a&&a.delete(t)}}class et{object3D=null;_eventDispatcher;get eventDispatcher(){return this._eventDispatcher||=new Ya,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?Oe.bindUpdate(this.transform.view3D,this,e):Oe.unBindUpdate(this.transform.view3D,this)}_onLateUpdate(e){e!=null?Oe.bindLateUpdate(this.transform.view3D,this,e):Oe.unBindLateUpdate(this.transform.view3D,this)}_onBeforeUpdate(e){e!=null?Oe.bindBeforeUpdate(this.transform.view3D,this,e):Oe.unBindBeforeUpdate(this.transform.view3D,this)}_onCompute(e){e!=null?Oe.bindCompute(this.transform.view3D,this,e):Oe.unBindCompute(this.transform.view3D,this)}_onGraphic(e){e!=null?Oe.bindGraphic(this.transform.view3D,this,e):Oe.unBindGraphic(this.transform.view3D,this)}beforeDestroy(e){Oe.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 Is{value=0;inv_base=0;static get(e,t){let a=0,r=1/t;for(;e>0;)a+=e%t*r,e/=t,r/=t;return a}getBase(e,t){let a=this.inv_base=1/t;for(;e>0;)this.value+=a*(e%t),e/=t,a*=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,a;do a=t,t*=this.inv_base;while(t>=e);this.value+=a+t-1}}get(){return this.value}}class ba{origin=new b;length=Number.MAX_VALUE;static _rayl=1e9;static _smallnum=1e-8;_vector=new b;_dir=new b;constructor(e,t){this.origin.copyFrom(e||new b),this._dir.copyFrom(t||new b),this._dir.normalize()}get direction(){return this._dir}set direction(e){this._dir.copyFrom(e),this._dir.normalize()}clone(){return new ba(this.origin,this.direction)}intersectBox(e,t){let a=this.direction,r=this.origin,i,n,o,l,c,f;const d=1/a.x,h=1/a.y,u=1/a.z,m=e.min,g=e.max;return i=((d>=0?m.x:g.x)-r.x)*d,n=((d>=0?g.x:m.x)-r.x)*d,o=((h>=0?m.y:g.y)-r.y)*h,l=((h>=0?g.y:m.y)-r.y)*h,i>l||o>n||(o>i&&(i=o),l<n&&(n=l),c=((u>=0?m.z:g.z)-r.z)*u,f=((u>=0?g.z:m.z)-r.z)*u,i>f||c>n)||(c>i&&(i=c),f<n&&(n=f),n<0)?null:(t||=new b,this.pointAt(i>=0?i:n,t))}pointAt(e,t){return t||=new b,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,a=e.subtract(this.origin),r=kt(a,t),i=kt(t,t),n=r/i,o=this.getPoint(n);return Nn(e.subtract(o))}applyMatrix(e){this.origin=e.transformPoint(this.origin),this._dir=e.transformVector(this._dir)}_v0=new b;_v1=new b;_v2=new b;pointInTriangle(e,t,a,r){let i=this._v0,n=this._v1,o=this._v2;r.subtract(t,i),a.subtract(t,n),e.subtract(t,o);let l=b.dot(i,i),c=b.dot(i,n),f=b.dot(i,o),d=b.dot(n,n),h=b.dot(n,o),u=1/(l*d-c*c),m=(d*f-c*h)*u,g=(l*h-c*f)*u;return m>=0&&g>=0&&m+g<1}_E1=new b;_E2=new b;_P=new b;_T=new b;_Q=new b;intersectTriangle(e,t,a){let r=a.v1,i=a.v2,n=a.v3;i.subtract(r,this._E1),n.subtract(r,this._E2),t.crossProduct(this._E2,this._P);let o=this._E1.dotProduct(this._P);if(o>0?e.subtract(r,this._T):(r.subtract(e,this._T),o=-o),o<1e-4||(a.u=this._T.dotProduct(this._P),a.u<0||a.u>o)||(this._T.crossProduct(this._E1,this._Q),a.v=t.dotProduct(this._Q),a.v<0||a.u+a.v>o))return null;let l=new b;a.t0=a.t=this._E2.dotProduct(this._Q);let c=1/o;return a.t*=c,a.u*=c,a.v*=c,l.x=e.x+a.t*t.x,l.y=e.y+a.t*t.y,l.z=e.z+a.t*t.z,l}intersectSphere(e,t,a,r){let i=e.subtract(a),n=b.dot(t,t),o=2*b.dot(i,t),l=b.dot(i,i)-r*r,c=o*o-4*n*l,f=b.HELP_3;if(c<0)return null;{let d=(-o-Math.sqrt(c))/(n*2);return d<0?null:(f.x=e.x+d*t.x,f.y=e.y+d*t.y,f.z=e.z+d*t.z,f)}}intersectionSegment(e,t,a){const r=this.origin,i=b.HELP_0,n=b.HELP_1,o=b.HELP_2,l=b.HELP_3;t.subtract(e,i),this._dir.scaleToRef(ba._rayl,o),r.add(o,n),e.subtract(r,l);var c=b.dot(i,i),f=b.dot(i,o),d=b.dot(o,o),h=b.dot(i,l),u=b.dot(o,l),m=c*d-f*f,g,p,A=m,D,B,v=m;m<ba._smallnum?(p=0,A=1,B=u,v=d):(p=f*u-d*h,B=c*u-f*h,p<0?(p=0,B=u,v=d):p>A&&(p=A,B=u+f,v=d)),B<0?(B=0,-h<0?p=0:-h>c?p=A:(p=-h,A=c)):B>v&&(B=v,-h+f<0?p=0:-h+f>c?p=A:(p=-h+f,A=c)),g=Math.abs(p)<ba._smallnum?0:p/A,D=Math.abs(B)<ba._smallnum?0:B/v;const U=b.HELP_4;o.scaleToRef(D,U);const y=b.HELP_5;i.scaleToRef(g,y),y.add(l,y);const S=b.HELP_6;y.subtract(U,S);var F=D>0&&D<=this._dir.length&&S.lengthSquared<a*a;if(F){let C=new b;return C.copyFrom(t.subtract(e)),C.scaleBy(g),C.add(e,C),{out:C,length:y.length}}return{out:null,length:-1}}get_vec(e,t){let a=b.HELP_1;return a.x=e.x-t.x,a.y=e.y-t.y,a.z=e.z-t.z,a}}class ps{x;y;w;h;constructor(e=0,t=0,a=0,r=0){this.x=e,this.y=t,this.w=a,this.h=r}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,a,r,i,n){return!(e<a||e>i||t<r||t>n)}clone(){return new ps(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,a,r){return!(this.x!=e||this.y!=t||this.width!=a||this.height!=r)}equalInnerArea(e){var t=this.x,a=this.y,r=this.x+this.width,i=this.y+this.height,n=e.x,o=e.y,l=e.x+e.width,c=e.y+e.height;return Math.max(t,n)<=Math.min(r,l)&&Math.max(a,o)<=Math.min(i,c)}innerArea(e,t){t=t||new ps;var a=this.x,r=this.y,i=this.x+this.width,n=this.y+this.height,o=e.x,l=e.y,c=e.x+e.width,f=e.y+e.height,d=Math.max(r,l),h=Math.min(n,f),u=Math.max(a,o),m=Math.min(c,i);return d>=0&&h>=0&&h-d>=0&&m-u>0?(t.x=u,t.y=d,t.width=m-u,t.height=h-d):(t.x=0,t.y=0,t.width=0,t.height=0),t}setTo(e,t,a,r){this.x=e,this.y=t,this.width=a,this.height=r}}class Ce{center;extents;max;min;size;static maxVector3=new b(1,1,1).multiplyScalar(Number.MAX_VALUE*.1);static minVector3=new b(1,1,1).multiplyScalar(-Number.MAX_VALUE*.1);constructor(e,t){e||=b.ZERO.clone(),t||=b.ZERO.clone(),this.setFromCenterAndSize(e,t)}makeEmpty(){return this.setFromMinMax(Ce.maxVector3,Ce.minVector3),this}setFromMinMax(e,t){return this.init(),this.min.copyFrom(e),this.max.copyFrom(t),this.max.subtract(this.min,this.size),this.extents.copyFrom(this.size).multiplyScalar(.5),this.min.add(this.max,this.center).multiplyScalar(.5),this}init(){return this.min||=new b,this.max||=new b,this.size||=new b,this.center||=new b,this.extents||=new b,this}setFromCenterAndSize(e,t){return this.init(),this.center.copyFrom(e),this.size.copyFrom(t),this.extents.copyFrom(this.size).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=this.max.x-this.min.x,this.size.y=this.max.y-this.min.y,this.size.z=this.max.z-this.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.min.x+this.extents.x,this.center.y=this.min.y+this.extents.y,this.center.z=this.min.z+this.extents.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),this.size.x=this.max.x-this.min.x,this.size.y=this.max.y-this.min.y,this.size.z=this.max.z-this.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.min.x+this.extents.x,this.center.y=this.min.y+this.extents.y,this.center.z=this.min.z+this.extents.z}static fromPoints(e){for(var t=new Ce(new b,new b),a=0;a<e.length;a++)t.expandByPoint(e[a]);return t}calculateTransform(e){}clone(){var e=new Ce(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,a=this.max;return t.x<=e.min.x&&t.y<=e.min.y&&t.z<=e.min.z&&a.x>=e.max.x&&a.y>=e.max.y&&a.z>=e.max.z}updateBound(){}destroy(e){this.center=null,this.extents=null,this.min=null,this.max=null,this.size=null}}class On{planes;corners;boundingBox=new Ce;constructor(){this.planes=[],this.corners=[];for(var e=0;e<6;e++)this.planes[e]=new b;for(var e=0;e<8;e++)this.corners[e]=new b}updateBoundBox(e){this.boundingBox.makeEmpty();let t=this.boundingBox.min,a=this.boundingBox.max,r=0;for(let i=0;i<2;++i)for(let n=0;n<2;++n)for(let o=0;o<2;++o){let l=this.corners[r];r++,l.set(2*i-1,2*n-1,o,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),a.x=Math.max(l.x,a.x),a.y=Math.max(l.y,a.y),a.z=Math.max(l.z,a.z)}return this.boundingBox.setFromMinMax(t,a),this}setFrustumCorners(e){let t=0;for(let a=0;a<2;++a)for(let r=0;r<2;++r)for(let i=0;i<2;++i){let n=this.corners[t];n.set(2*a-1,2*r-1,i,1),e.transformVector4(n,n),n.div(n.w,n),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 a=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/=a,this.planes[0].y/=a,this.planes[0].z/=a,this.planes[0].w/=a,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],a=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/=a,this.planes[1].y/=a,this.planes[1].z/=a,this.planes[1].w/=a,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],a=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/=a,this.planes[2].y/=a,this.planes[2].z/=a,this.planes[2].w/=a,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],a=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/=a,this.planes[3].y/=a,this.planes[3].z/=a,this.planes[3].w/=a,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],a=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/=a,this.planes[4].y/=a,this.planes[4].z/=a,this.planes[4].w/=a,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],a=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/=a,this.planes[5].y/=a,this.planes[5].z/=a,this.planes[5].w/=a}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,a=0,r,i=e.transform.worldPosition,n=t.radius,o=t.center.x+i.x,l=t.center.y+i.y,c=t.center.z+i.z;for(let f of this.planes){if(r=f.x*o+f.y*l+f.z*c+f.w,r<=-n)return 0;r>n&&a++}return a===6?2:1}containsBox(e){let t=0,a,i=Math.max(e.size.x,e.size.y,e.size.z)*2,n=e.center.x,o=e.center.y,l=e.center.z;for(let c of this.planes){if(a=c.x*n+c.y*o+c.z*l+c.w,a<=-i)return 0;a>i&&t++}return t===6?2:1}containsBox2(e){let t=0,a,r=1.74*Math.max(e.extents.x,e.extents.y,e.extents.z);for(let i of this.planes){if(a=i.x*e.center.x+i.y*e.center.y+i.z*e.center.z+i.w,a<=-r)return 0;a>r&&t++}return t===6?2:1}containsBoxPrecise(e){const t=[new b(e.min.x,e.min.y,e.min.z),new b(e.max.x,e.min.y,e.min.z),new b(e.min.x,e.max.y,e.min.z),new b(e.max.x,e.max.y,e.min.z),new b(e.min.x,e.min.y,e.max.z),new b(e.max.x,e.min.y,e.max.z),new b(e.min.x,e.max.y,e.max.z),new b(e.max.x,e.max.y,e.max.z)];let a=0;for(let r=0;r<6;r++){const i=this.planes[r];let n=-1/0,o=1/0;for(let l=0;l<8;l++){const c=t[l],f=i.x*c.x+i.y*c.y+i.z*c.z+i.w;n=Math.max(n,f),o=Math.min(o,f)}if(n<0)return 0;o>0&&a++}return a===6?2:1}}var ot=(s=>(s[s.ortho=0]="ortho",s[s.perspective=1]="perspective",s[s.shadow=2]="shadow",s))(ot||{});class w2{corners;index;constructor(e){this.index=e,this.corners=[];for(let t=0;t<4;t++)this.corners.push(new b)}}class I2{bound;twoSections;name;color;shadowCamera;index;constructor(e,t,a){this.bound=new Ce,this.shadowCamera=gt.createCamera3DObject(null,"csmShadowCamera_"+a),this.shadowCamera.isShadowCamera=!0,this.shadowCamera.orthoOffCenter(100,-100,100,-100,1,1e4),this.twoSections=[e,t],this.index=a,a==0?this.color=new J(1,0,0,1):a==1?this.color=new J(0,1,0,1):a==2?this.color=new J(0,0,1,1):a==3&&(this.color=new J(0,1,1,1)),this.name="child_"+a}updateBound(){this.bound.makeEmpty();let e=this.bound.min,t=this.bound.max;for(let a of this.twoSections)for(let r of a.corners)e.x=Math.min(r.x,e.x),e.y=Math.min(r.y,e.y),e.z=Math.min(r.z,e.z),t.x=Math.max(r.x,t.x),t.y=Math.max(r.y,t.y),t.z=Math.max(r.z,t.z);return this.bound.setFromMinMax(e,t),this}}class Yc{sections;children;name;constructor(e){this.sections=[];let t=e+1;for(let a=0;a<t;a++)this.sections.push(new w2(a));this.children=[];for(let a=0;a<e;a++)this.children.push(new I2(this.sections[a],this.sections[a+1],a))}update(e,t,a,r,i){let n=this.sections.length-1;for(let o=0;o<=n;++o){let l=this.sections[o],c=0,f=this.logSplit(a,r,o,this.sections.length);{let h=(f-a)/r;h=h**i.csmScatteringExp,f=(r-a)*h+a}f*=i.csmAreaScale;let d=(e.rawData[10]*f+e.rawData[14])/f;for(let h=0;h<2;++h)for(let u=0;u<2;++u){let m=l.corners[c];c++,m.set(2*h-1,2*u-1,d,1),t.transformVector4(m,m),m.div(m.w,m)}}for(let o of this.children)o.updateBound();return this}squareSplit(e,t,a,r){return(a/(r-1))**4*(t-e)+e}uniformSplit(e,t,a,r){return a/(r-1)*(t-e)+e}logSplit(e,t,a,r){return e*(t/e)**(a/(r-1))}}class ai extends et{fov=60;name;aspect=1;near=1;far=5e3;left=-100;right=100;top=100;bottom=-100;frustumSize=100;viewPort=new ps;frustum;sh=new Float32Array(36);isShadowCamera=!1;_projectionMatrixInv=new R;_projectionMatrix=new R;_viewMatrix=new R;_viewMatrixInv=new R;_unprojection=new R;_pvMatrixInv=new R;_pvMatrix=new R;_halfw;_halfh;_ray;_enableCSM=!1;mainCamera;get projectionMatrix(){return this._projectionMatrix}lookTarget;type=ot.perspective;csm;cubeShadowCameras=[];get enableCSM(){return this._enableCSM}set enableCSM(e){e&&!this.csm&&(this.csm=new Yc(na.Cascades)),this._enableCSM=e}constructor(){super()}init(){super.init(),this._ray=new ba,this.frustum=new On,this.lookTarget=new b(0,0,0),this.viewPort.x=0,this.viewPort.y=0,this.viewPort.w=I.presentationSize[0],this.viewPort.h=I.presentationSize[1],this.updateProjection(),I.addEventListener(lr.RESIZE,this.updateProjection,this)}updateProjection(){this.aspect=I.aspect,this.type==ot.perspective?this.perspective(this.fov,this.aspect,this.near,this.far):this.type==ot.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,a=this.far-this.near;return t/a-_.setting.shadow.shadowBias*.01}getShadowWorldExtents(){let e=_.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,a=this.csm.children[0].shadowCamera;return(a.far-a.near)/t}getCSMShadowWorldExtents(e){return Math.round(this.csm.children[e].bound.extents.length)}perspective(e,t,a,r){this.fov=e,this.aspect=t,this.near=Math.max(.001,a),this.far=r,this._projectionMatrix.perspective(this.fov,this.aspect,this.near,this.far),this.type=ot.perspective}ortho(e,t,a){this.frustumSize=e;let r=e*.5*this.aspect,i=e*.5,n=-r/2,o=r/2,l=i/2,c=-i/2;this.orthoOffCenter(n,o,c,l,t,a)}orthoOffCenter(e,t,a,r,i,n){this.near=i,this.far=n,this.left=e,this.right=t,this.top=r,this.bottom=a,this.type=ot.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 b(0,0,0,1)),this._halfw=this.viewPort.width*.5,this._halfh=this.viewPort.height*.5,zt.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 b),this._halfw=this.viewPort.width*.5,this._halfh=this.viewPort.height*.5;let a=e.x,r=e.y;return t.x=a/this.viewPort.width-.25,t.y=r/this.viewPort.height-.25,this.unProject(t.x,t.y,e.z,t),t}get pvMatrix(){return Vn(this._projectionMatrix,this.viewMatrix,this._pvMatrix),this._pvMatrix}get pvMatrix2(){Vn(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=R.helpMatrix;return e.identity(),e.copyFrom(this.projectionMatrixInv),e.multiply(this.vMatrixInv),e}get ndcToView(){let e=R.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,a,r){return r||(r=new b),r.x=e,r.y=-t,r.z=a,r.w=1,r.x*=a,r.y*=a,this._unprojection.copyFrom(this._projectionMatrix),this._unprojection.invert(),zt.transformVector(this._unprojection,r,r),r.z=a,r}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 a=this._ray,r=gt.UnProjection(e,t,.01,this),i=gt.UnProjection(e,t,1,this);return i=i.subtract(r).normalize(),a.origin.copyFrom(r),a.direction=i,a}screenPointToWorld(e,t,a){return gt.UnProjection(e,t,a,this)}worldToScreenPoint(e,t){return gt.Projection(e,this,t)}lookAt(e,t,a=b.Y_AXIS){this.transform.lookAt(e,t,a),t&&this.lookTarget.copyFrom(t)}onUpdate(){this._useJitterProjection&&this.getJitteredProjectionMatrix(),this.frustum.update(this.pvMatrix),this.frustum.updateBoundBox(this.pvMatrixInv);let e=_.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 Is,this._jitterOffsetList=[];for(let t=0;t<32;t++){let a=this.generateRandomOffset();this._jitterOffsetList.push(a)}this._jitterOffsetList.reverse()}generateRandomOffset(){let e=new de(Is.get((this._sampleIndex&1023)+1,2)-.5,Is.get((this._sampleIndex&1023)+1,3)-.5);return++this._sampleIndex>=32&&(this._sampleIndex=0),e}getJitteredProjectionMatrix(){let e=_.setting.render.postProcessing.taa,t=this._projectionMatrix,a=e.temporalJitterScale,r=this._jitterFrameIndex%e.jitterSeedCount,i=this._jitterOffsetList[r].x*a,n=this._jitterOffsetList[r].y*a,o=t.get(0,2),l=t.get(1,2);this._jitterX=i/this.viewPort.width,this._jitterY=n/this.viewPort.height,o+=this._jitterX,l+=this._jitterY,t.set(0,2,o),t.set(1,2,l),this._jitterFrameIndex++}getWorldDirection(e){e||=new b;const t=this.transform._worldMatrix.rawData;return e.set(-t[8],-t[9],-t[10]).normalize()}}class Yt extends et{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 mt(Yt.POSITION_ONCHANGE);eventRotationChange=new mt(Yt.ROTATION_ONCHANGE);eventScaleChange=new mt(Yt.SCALE_ONCHANGE);eventLocalChange=new mt(Yt.LOCAL_ONCHANGE);onPositionChange;onRotationChange;onScaleChange;_scene3d;_parent;_localPos;_localRot;_localRotQuat;_localScale;_localDetailPos;_localDetailRot;_localDetailScale;index;index2;_forward=new b;_back=new b;_right=new b;_left=new b;_up=new b;_down=new b;_worldMatrix;_targetPos;static=!1;depthOrder=0;get localChange(){return Re.matrixStateBuffer[this.index2]!=0}set localChange(e){Re.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,Re.setParent(this.index,e?e.worldMatrix.index:-1,this.depthOrder),this.localChange=!0,this.object3D){let a=e?e.scene3D:null;a?(this._scene3d=a,this.object3D.components.forEach(r=>{Oe.appendWaitStart(r)})):this.object3D.components.forEach(r=>{r.__stop()});for(let r of this.object3D.entityChildren)r.transform.parent=e?this:null;this.object3D.components.forEach(r=>{r.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 R(!0),this.index=this._worldMatrix.index,this.index2=this._worldMatrix.index*Re.stateStruct,this._localPos=new b,this._localRot=new b,this._localRotQuat=new se,this._localScale=new b(1,1,1),Re.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),Re.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),Re.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,a=e.length;for(t=0;t<a;t++)e[t].transform.notifyLocalChange()}this.eventDispatcher.dispatchEvent(this.eventLocalChange)}get up(){return this.worldMatrix.transformVector(b.UP,this._up),this._up}set up(e){this._up.copyFrom(e),zt.fromToRotation(b.UP,this._up,se.HELP_0),this.transform.localRotQuat=se.HELP_0}get down(){return this.worldMatrix.transformVector(b.DOWN,this._down),this._down}set down(e){this._down.copyFrom(e),zt.fromToRotation(b.DOWN,this._down,se.HELP_0),this.transform.localRotQuat=se.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get forward(){return this.worldMatrix.transformVector(b.FORWARD,this._forward),this._forward}set forward(e){this._forward.copyFrom(e),zt.fromToRotation(b.FORWARD,this._forward,se.HELP_0),this.transform.localRotQuat=se.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get back(){return this.worldMatrix.transformVector(b.BACK,this._back),this._back}set back(e){this._back.copyFrom(e),zt.fromToRotation(b.BACK,this._back,se.HELP_0),this.transform.localRotQuat=se.HELP_0}get left(){return this.worldMatrix.transformVector(b.neg_X_AXIS,this._left),this._left}set left(e){this._left.copyFrom(e),zt.fromToRotation(b.LEFT,this._left,se.HELP_0),this.transform.localRotQuat=se.HELP_0}get right(){return this.worldMatrix.transformVector(b.X_AXIS,this._right),this._right}set right(e){this._right.copyFrom(e),zt.fromToRotation(b.RIGHT,this._right,se.HELP_0),this.transform.localRotQuat=se.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),Re.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?(Es(this._localRot,this._localPos,this._localScale,this._worldMatrix),Zc(this._worldMatrix,this.parent.worldMatrix,this._worldMatrix)):Es(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=b.UP){this.lookAt(this.transform.worldPosition,e,t)}lookAt(e,t,a=b.UP){this._targetPos||=new b,this._targetPos.copyFrom(t),this.localPosition=e,R.helpMatrix.lookAt(e,t,a),R.helpMatrix.invert();var r=R.helpMatrix.decompose(oa.QUATERNION);this.localRotQuat=se.CALCULATION_QUATERNION.copyFrom(r[1])}decomposeFromMatrix(e,t="eulerAngles"){let a=e.decompose(t),r=this.transform;return r.localRotQuat.copyFrom(a[1]),r.localRotQuat=r.localRotQuat,r.localPosition.copyFrom(a[0]),r.localPosition=r.localPosition,r.localScale.copyFrom(a[2]),r.localScale=r.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,Re.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,Re.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,Re.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,Re.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,Re.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,Re.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,Re.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,Re.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,Re.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),Re.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),Re.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){Re.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,Re.setContinueScale(this.index,e.x,e.y,e.z)}get localDetailRot(){return this._localDetailRot}set localDetailRot(e){this._localDetailRot=e,Re.setContinueRotation(this.index,e.x,e.y,e.z)}get localDetailPos(){return this._localDetailPos}set localDetailPos(e){this._localDetailPos=e,Re.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 la{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 G=(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))(G||{}),De=(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))(De||{}),Xc=(s=>(s[s.src_a=0]="src_a",s[s.dest_a=1]="dest_a",s))(Xc||{});class Hc{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 Ia{static mipmapShader=`
5669
+ `,""),u=u.split(",")[0],u=u.replaceAll(" "," "),this.parserAttribute(u,a)}}return a}static parserAttribute(e,t){let a={name:"",group:0,location:0,type:"",valueType:"",value:0,size:0,format:"float32"};if(e.indexOf("builtin")!=-1){a.type="builtin";var r=e.match(/\((.+?)\)/g)[0];r=e.match(/\((.+?)\)/g)[0],r=r.replace("(",""),r=r.replaceAll(")",""),a.location=parseInt(r);let i=e.split(":");a.name=i[0].split(" ")[1],a.name=a.name.replaceAll(" "," "),a.name=a.name.replaceAll(" ",""),a.valueType=i[1],a.valueType=a.valueType.replaceAll(" "," "),a.valueType=a.valueType.replaceAll(" ",""),a.valueType=a.valueType.replaceAll("\r",""),a.valueType=a.valueType.replaceAll(")",""),a.valueType=a.valueType.replaceAll(")",""),a.size=dr[a.valueType],t.push(a)}else if(e.indexOf("location")!=-1){a.type="location";var r=e.match(/\((.+?)\)/g)[0];r=e.match(/\((.+?)\)/g)[0],r=r.replace("(",""),r=r.replaceAll(")",""),a.location=parseInt(r);let n=e.split(":");a.name=n[0].split(" ")[1],a.name=a.name.replaceAll(" "," "),a.name=a.name.replaceAll(" ",""),a.valueType=n[1],a.valueType=a.valueType.replaceAll(" "," "),a.valueType=a.valueType.replaceAll(" ",""),a.valueType=a.valueType.replaceAll("\r",""),a.valueType=a.valueType.replaceAll(")",""),a.valueType=a.valueType.replaceAll(")",""),a.size=dr[a.valueType],t.push(a)}a.format=Ql[dr[a.valueType]]}}class Fe extends Cn{entryPoint="CsMain";workerSizeX=1;workerSizeY=0;workerSizeZ=0;_computePipeline;_csShaderModule;_destCS;_sourceCS;_storageTextureDic;_sampleTextureDic;_groupsShaderReflectionVarInfos;_groupCache={};constructor(e){super(),this._sourceCS=e,Mt.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,a,r){let i=this._bufferDic.get(t);if(i){let n={binding:a,resource:{buffer:i.buffer,offset:0,size:i.memory.shareDataBuffer.byteLength}};r.push(n)}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,a=!1){if(!this.bindGroups[e]||a){const r=t[e];let i=[];for(let o=0;o<r.length;++o){const l=r[o];if(l)switch(l.varType){case"uniform":case"storage-read":case"storage-read_write":this.createBufferBindGroup(e,l.varName,l.binding,i),this._groupCache[l.varName]={groupIndex:e,infos:t};break;case"var":if(l.dataType=="sampler"){let c=l.varName.replace("Sampler",""),f=this._sampleTextureDic.get(c);if(f){let d={binding:l.binding,resource:f.gpuSampler};i.push(d)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType=="sampler_comparison"){let c=l.varName.replace("Sampler",""),f=this._sampleTextureDic.get(c);if(f){let d={binding:l.binding,resource:f.gpuSampler_comparison};i.push(d)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType.indexOf("texture_storage")!=-1){let c=this._storageTextureDic.get(l.varName);if(c){let f={binding:l.binding,resource:c.getGPUView()};i.push(f),ke.getInstance().attached(c,this)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}else if(l.dataType.indexOf("texture")!=-1){let c=this._sampleTextureDic.get(l.varName);if(c){let f={binding:l.binding,resource:c.getGPUView()};i.push(f),ke.getInstance().attached(c,this)}else console.error(`ComputeShader(${this.instanceID})`,`texture ${l.varName} is missing! `)}break;default:console.error("unprocessed type:",l.varType);break}}let n=I.device.createBindGroup({layout:this._computePipeline.getBindGroupLayout(e),entries:i});this.bindGroups[e]=n}}genComputePipeline(){this.preCompileShader(this._sourceCS),this.genReflection(),this._computePipeline=I.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 a=e.groups[t];this._groupsShaderReflectionVarInfos[t]=a,this.genGroups(t,this._groupsShaderReflectionVarInfos)}I.addEventListener(lr.RESIZE,t=>{for(let a=0;a<e.groups.length;++a){let r=e.groups[a];this._groupsShaderReflectionVarInfos[a]=r,this.genGroups(a,this._groupsShaderReflectionVarInfos,!0)}},this)}preCompileShader(e){for(const t in this.constValues)if(Object.prototype.hasOwnProperty.call(this.constValues,t)){const a=this.constValues[t];e=e.replaceAll(`&${t}`,a.toString())}this._destCS=_a.parseComputeShader(e,this.defineValue)}compileShader(){let e=I.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+=Mt.genComputeShaderVariant(this);let e=Mt.poolGetReflection(this.shaderVariant);e?this.shaderReflection=e:(Mt.getShaderReflection2(this._destCS,this),Mt.combineShaderReflectionVarInfo(this.shaderReflection,this.shaderReflection.cs_variables))}}var fe=(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))(fe||{});class dt{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 a in fe)parseInt(a)>=0||(t[a]={vertexCount:0,indicesCount:0,instanceCount:0,triCount:0,drawCount:0,pipelineCount:0});this.viewMap.set(e,t)}for(const a in fe)parseInt(a)>=0||(t[a].vertexCount=0,t[a].indicesCount=0,t[a].triCount=0,t[a].instanceCount=0,t[a].drawCount=0,t[a].pipelineCount=0)}static viewCount(e){return this.startView(e),this.viewMap.get(e)}static viewCount_vertex(e,t,a){this.viewMap.get(e)[t].vertexCount+=a}static viewCount_indices(e,t,a){this.viewMap.get(e)[t].indicesCount+=a}static viewCount_tri(e,t,a){this.viewMap.get(e)[t].triCount+=a}static viewCount_instance(e,t,a){this.viewMap.get(e)[t].instanceCount+=a}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 a=this.profilerLabelMap.get(e);if(a&&(a.count++,t!="")){let r=a.child.get(t);r||(r={lable:t,start:0,end:0,total:0,count:0}),r.start=performance.now(),r.end=performance.now(),r.count=0,a.child.set(t,r)}}static countEnd(e,t){let a=this.profilerLabelMap.get(e);if(a&&t!=""){let r=a.child.get(t);r||(r={lable:t,start:0,end:0,total:0,count:0}),r.end=performance.now(),r.total=r.end-r.start,r.count++}}static print(e){let t=this.profilerLabelMap.get(e);t&&console.log("performance",e,t.total+" ms")}}var Hu=(()=>{var s=import.meta.url;return(async function(e={}){var t=e,a,r;t.ready=new Promise((V,L)=>{a=V,r=L});var i=Object.assign({},t),n=[],o="./this.program",l=(V,L)=>{throw L},c=typeof window=="object",f=typeof importScripts=="function",d=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",h="";function u(V){return t.locateFile?t.locateFile(V,h):h+V}var m,g;if(d){const{createRequire:V}=await Promise.resolve().then(()=>Km);var p=V(import.meta.url),A=p("fs"),D=p("path");f?h=D.dirname(h)+"/":h=p("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)),m=(L,te)=>(L=ge(L)?new URL(L):D.normalize(L),A.readFileSync(L,te?void 0:"utf8")),g=L=>{var te=m(L,!0);return te.buffer||(te=new Uint8Array(te)),te},!t.thisProgram&&process.argv.length>1&&(o=process.argv[1].replace(/\\/g,"/")),n=process.argv.slice(2),l=(L,te)=>{throw process.exitCode=L,te}}else(c||f)&&(f?h=self.location.href:typeof document<"u"&&document.currentScript&&(h=document.currentScript.src),s&&(h=s),h.startsWith("blob:")?h="":h=h.substr(0,h.replace(/[?#].*/,"").lastIndexOf("/")+1),m=V=>{var L=new XMLHttpRequest;return L.open("GET",V,!1),L.send(null),L.responseText},f&&(g=V=>{var L=new XMLHttpRequest;return L.open("GET",V,!1),L.responseType="arraybuffer",L.send(null),new Uint8Array(L.response)}));var B=t.print||console.log.bind(console),v=t.printErr||console.error.bind(console);Object.assign(t,i),i=null,t.arguments&&(n=t.arguments),t.thisProgram&&(o=t.thisProgram),t.quit&&(l=t.quit);var x;t.wasmBinary&&(x=t.wasmBinary);function y(V){if(typeof d<"u"&&d){var L=Buffer.from(V,"base64");return new Uint8Array(L.buffer,L.byteOffset,L.length)}for(var te=atob(V),Ee=new Uint8Array(te.length),Ye=0;Ye<te.length;++Ye)Ee[Ye]=te.charCodeAt(Ye);return Ee}function S(V){if(le(V))return y(V.slice(ie.length))}var F,C=!1,w,E,Q,T;function j(){var V=F.buffer;t.HEAP8=E=new Int8Array(V),t.HEAP16=new Int16Array(V),t.HEAPU8=Q=new Uint8Array(V),t.HEAPU16=new Uint16Array(V),t.HEAP32=new Int32Array(V),t.HEAPU32=T=new Uint32Array(V),t.HEAPF32=new Float32Array(V),t.HEAPF64=new Float64Array(V)}var ue=[],ee=[],N=[],M=[];function O(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)K(t.preRun.shift());ft(ue)}function W(){ft(ee)}function ae(){ft(N)}function z(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)re(t.postRun.shift());ft(M)}function K(V){ue.unshift(V)}function $(V){ee.unshift(V)}function re(V){M.unshift(V)}var ce=0,Ae=null;function Qe(V){ce++,t.monitorRunDependencies?.(ce)}function Ve(V){if(ce--,t.monitorRunDependencies?.(ce),ce==0&&Ae){var L=Ae;Ae=null,L()}}function H(V){t.onAbort?.(V),V="Aborted("+V+")",v(V),C=!0,w=1,V+=". Build with -sASSERTIONS for more info.";var L=new WebAssembly.RuntimeError(V);throw r(L),L}var ie="data:application/octet-stream;base64,",le=V=>V.startsWith(ie),ge=V=>V.startsWith("file://"),Ie;Ie="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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",le(Ie)||(Ie=u(Ie));function me(V){if(V==Ie&&x)return new Uint8Array(x);var L=S(V);if(L)return L;if(g)return g(V);throw"both async and sync fetching of the wasm failed"}function ye(V){return Promise.resolve().then(()=>me(V))}function Se(V,L,te){return ye(V).then(Ee=>WebAssembly.instantiate(Ee,L)).then(te,Ee=>{v(`failed to asynchronously prepare wasm: ${Ee}`),H(Ee)})}function Me(V,L,te,Ee){return Se(L,te,Ee)}function Ze(){var V={a:Vu};function L(Ee,Ye){return Ot=Ee.exports,F=Ot.f,j(),$(Ot.g),Ve(),Ot}Qe();function te(Ee){L(Ee.instance)}if(t.instantiateWasm)try{return t.instantiateWasm(V,L)}catch(Ee){v(`Module.instantiateWasm callback failed with error: ${Ee}`),r(Ee)}return Me(x,Ie,V,te).catch(r),{}}function $e(V){this.name="ExitStatus",this.message=`Program terminated with exit(${V})`,this.status=V}var ft=V=>{for(;V.length>0;)V.shift()(t)};t.noExitRuntime;class Za{constructor(L){this.excPtr=L,this.ptr=L-24}set_type(L){T[this.ptr+4>>2]=L}get_type(){return T[this.ptr+4>>2]}set_destructor(L){T[this.ptr+8>>2]=L}get_destructor(){return T[this.ptr+8>>2]}set_caught(L){L=L?1:0,E[this.ptr+12]=L}get_caught(){return E[this.ptr+12]!=0}set_rethrown(L){L=L?1:0,E[this.ptr+13]=L}get_rethrown(){return E[this.ptr+13]!=0}init(L,te){this.set_adjusted_ptr(0),this.set_type(L),this.set_destructor(te)}set_adjusted_ptr(L){T[this.ptr+16>>2]=L}get_adjusted_ptr(){return T[this.ptr+16>>2]}get_exception_ptr(){var L=xl(this.get_type());if(L)return T[this.excPtr>>2];var te=this.get_adjusted_ptr();return te!==0?te:this.excPtr}}var ga=0,Qa=(V,L,te)=>{var Ee=new Za(V);throw Ee.init(L,te),ga=V,ga},Ht=()=>{H("")},Ta=(V,L,te)=>Q.copyWithin(V,L,L+te),Ma=()=>2147483648,Vt=V=>{var L=F.buffer,te=(V-L.byteLength+65535)/65536;try{return F.grow(te),j(),1}catch{}},pa=V=>{var L=Q.length;V>>>=0;var te=Ma();if(V>te)return!1;for(var Ee=(Aa,Kr)=>Aa+(Kr-Aa%Kr)%Kr,Ye=1;Ye<=4;Ye*=2){var st=L*(1+.2/Ye);st=Math.min(st,V+100663296);var Xe=Math.min(te,Ee(Math.max(V,st),65536)),ze=Vt(Xe);if(ze)return!0}return!1},ma=[null,[],[]],ia=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0,Ir=(V,L,te)=>{for(var Ee=L+te,Ye=L;V[Ye]&&!(Ye>=Ee);)++Ye;if(Ye-L>16&&V.buffer&&ia)return ia.decode(V.subarray(L,Ye));for(var st="";L<Ye;){var Xe=V[L++];if(!(Xe&128)){st+=String.fromCharCode(Xe);continue}var ze=V[L++]&63;if((Xe&224)==192){st+=String.fromCharCode((Xe&31)<<6|ze);continue}var Aa=V[L++]&63;if((Xe&240)==224?Xe=(Xe&15)<<12|ze<<6|Aa:Xe=(Xe&7)<<18|ze<<12|Aa<<6|V[L++]&63,Xe<65536)st+=String.fromCharCode(Xe);else{var Kr=Xe-65536;st+=String.fromCharCode(55296|Kr>>10,56320|Kr&1023)}}return st},Rr=(V,L)=>{var te=ma[V];L===0||L===10?((V===1?B:v)(Ir(te,0)),te.length=0):te.push(L)},Qr=(V,L,te,Ee)=>{for(var Ye=0,st=0;st<te;st++){var Xe=T[L>>2],ze=T[L+4>>2];L+=8;for(var Aa=0;Aa<ze;Aa++)Rr(V,Q[Xe+Aa]);Ye+=ze}return T[Ee>>2]=Ye,0},Tr=V=>{w=V,l(V,new $e(V))},Mr=(V,L)=>{w=V,Tr(V)},Qu=V=>{if(V instanceof $e||V=="unwind")return w;l(1,V)},Tu=V=>{for(var L=0,te=0;te<V.length;++te){var Ee=V.charCodeAt(te);Ee<=127?L++:Ee<=2047?L+=2:Ee>=55296&&Ee<=57343?(L+=4,++te):L+=3}return L},Mu=(V,L,te,Ee)=>{if(!(Ee>0))return 0;for(var Ye=te,st=te+Ee-1,Xe=0;Xe<V.length;++Xe){var ze=V.charCodeAt(Xe);if(ze>=55296&&ze<=57343){var Aa=V.charCodeAt(++Xe);ze=65536+((ze&1023)<<10)|Aa&1023}if(ze<=127){if(te>=st)break;L[te++]=ze}else if(ze<=2047){if(te+1>=st)break;L[te++]=192|ze>>6,L[te++]=128|ze&63}else if(ze<=65535){if(te+2>=st)break;L[te++]=224|ze>>12,L[te++]=128|ze>>6&63,L[te++]=128|ze&63}else{if(te+3>=st)break;L[te++]=240|ze>>18,L[te++]=128|ze>>12&63,L[te++]=128|ze>>6&63,L[te++]=128|ze&63}}return L[te]=0,te-Ye},Nu=(V,L,te)=>Mu(V,Q,L,te),Pu=V=>{var L=Tu(V)+1,te=Bn(L);return Nu(V,te,L),te},Vu={b:Qa,c:Ht,e:Ta,d:pa,a:Qr},Ot=Ze();t._initialize=(V,L,te)=>(t._initialize=Ot.h)(V,L,te),t._allocMatrix=V=>(t._allocMatrix=Ot.i)(V),t._getMatrixBufferPtr=()=>(t._getMatrixBufferPtr=Ot.j)(),t._getSRTPtr=()=>(t._getSRTPtr=Ot.k)(),t._getInfoPtr=()=>(t._getInfoPtr=Ot.l)(),t._getContinuedSRTPtr=()=>(t._getContinuedSRTPtr=Ot.m)(),t._printMatrix=V=>(t._printMatrix=Ot.n)(V),t._updateAllMatrixContinueTransform=(V,L,te)=>(t._updateAllMatrixContinueTransform=Ot.o)(V,L,te);var vl=t._main=(V,L)=>(vl=t._main=Ot.p)(V,L),Bn=V=>(Bn=Ot.r)(V),xl=V=>(xl=Ot.s)(V),Us;Ae=function V(){Us||Ul(),Us||(Ae=V)};function Ou(V=[]){var L=vl;V.unshift(o);var te=V.length,Ee=Bn((te+1)*4),Ye=Ee;V.forEach(Xe=>{T[Ye>>2]=Pu(Xe),Ye+=4}),T[Ye>>2]=0;try{var st=L(te,Ee);return Mr(st,!0),st}catch(Xe){return Qu(Xe)}}function Ul(V=n){if(ce>0||(O(),ce>0))return;function L(){Us||(Us=!0,t.calledRun=!0,!C&&(W(),ae(),a(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),yl&&Ou(V),z()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),L()},1)):L()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();var yl=!0;return t.noInitialRun&&(yl=!1),Ul(),e.ready})})();function ur(s,e,t){return _.setting.doublePrecision?new Float64Array(s,e,t):new Float32Array(s,e,t)}class Re{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 Hu(),this.useDoublePrecision=t,this.wasm._initialize(e,t,0),this.allocMatrix(e)}static allocMatrix(e){e>R.maxCount&&console.error(`The maximum allocation size is exceeded! current:${e}, limit:${R.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=ur(this.wasm.HEAPF64.buffer,this.matrixBufferPtr,16*e),this.matrixSRTBuffer=ur(this.wasm.HEAPF64.buffer,this.matrixSRTBufferPtr,9*e),this.matrixContinuedSRTBuffer=ur(this.wasm.HEAPF64.buffer,this.matrixContinuedSRTBufferPtr,9*e),R.blockBytes=R.block*8):(this.matrixBuffer=ur(this.wasm.HEAPF32.buffer,this.matrixBufferPtr,16*e),this.matrixSRTBuffer=ur(this.wasm.HEAPF32.buffer,this.matrixSRTBufferPtr,9*e),this.matrixContinuedSRTBuffer=ur(this.wasm.HEAPF32.buffer,this.matrixContinuedSRTBufferPtr,9*e),R.blockBytes=R.block*4),this.matrixStateBuffer=new Int32Array(this.wasm.HEAP32.buffer,this.matrixStateBufferPtr,Re.stateStruct*e),R.allocMatrix(e)}static updateAllContinueTransform(e,t,a){this.wasm._updateAllMatrixContinueTransform(e,t,a)}static setParent(e,t,a){this.matrixStateBuffer[e*Re.stateStruct+2]=t>=0?t:-1,this.matrixStateBuffer[e*Re.stateStruct+3]=a}static setTranslate(e,t,a,r){this.matrixSRTBuffer[e*9+6]=t,this.matrixSRTBuffer[e*9+7]=a,this.matrixSRTBuffer[e*9+8]=r}static setRotation(e,t,a,r){this.matrixSRTBuffer[e*9+3]=t%360,this.matrixSRTBuffer[e*9+4]=a%360,this.matrixSRTBuffer[e*9+5]=r%360}static setScale(e,t,a,r){this.matrixSRTBuffer[e*9+0]=t,this.matrixSRTBuffer[e*9+1]=a,this.matrixSRTBuffer[e*9+2]=r}static setContinueTranslate(e,t,a,r){(t!=0||a!=0||r!=0)&&(this.matrixContinuedSRTBuffer[e*9+6]=t,this.matrixContinuedSRTBuffer[e*9+7]=a,this.matrixContinuedSRTBuffer[e*9+8]=r,this.matrixStateBuffer[e*Re.stateStruct+1]=1)}static setContinueRotation(e,t,a,r){(t!=0||a!=0||r!=0)&&(this.matrixContinuedSRTBuffer[e*9+3]=t,this.matrixContinuedSRTBuffer[e*9+4]=a,this.matrixContinuedSRTBuffer[e*9+5]=r,this.matrixStateBuffer[e*Re.stateStruct+1]=1)}static setContinueScale(e,t,a,r){(t!=0||a!=0||r!=0)&&(this.matrixContinuedSRTBuffer[e*9+0]=t,this.matrixContinuedSRTBuffer[e*9+1]=a,this.matrixContinuedSRTBuffer[e*9+2]=r,this.matrixStateBuffer[e*Re.stateStruct+1]=1)}}class oa{static AXIS_ANGLE="axisAngle";static EULER_ANGLES="eulerAngles";static QUATERNION="quaternion"}class se{static HELP_0=new se(0,0,0,1);static HELP_1=new se(0,0,0,1);static HELP_2=new se(0,0,0,1);static _zero=new se(0,0,0,1);static CALCULATION_QUATERNION=new se;x=0;y=0;z=0;w=1;constructor(e=0,t=0,a=0,r=1){this.x=e,this.y=t,this.z=a,this.w=r}static identity(){return se._zero}static quaternionToMatrix(e,t){let a=e.x*2,r=e.y*2,i=e.z*2,n=e.x*a,o=e.y*r,l=e.z*i,c=e.x*r,f=e.x*i,d=e.y*i,h=e.w*a,u=e.w*r,m=e.w*i;t.rawData[0]=1-(o+l),t.rawData[1]=c+m,t.rawData[2]=f-u,t.rawData[3]=0,t.rawData[4]=c-m,t.rawData[5]=1-(n+l),t.rawData[6]=d+h,t.rawData[7]=0,t.rawData[8]=f+u,t.rawData[9]=d-h,t.rawData[10]=1-(n+o),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,a=0,r=1){return this.x=e,this.y=t,this.z=a,this.w=r,this}divide(e){return e instanceof se?new se(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 a=e.w,r=e.x,i=e.y,n=e.z,o=t.w,l=t.x,c=t.y,f=t.z;this.w=a*o-r*l-i*c-n*f,this.x=a*l+r*o+i*f-n*c,this.y=a*c-r*f+i*o+n*l,this.z=a*f+r*c-i*l+n*o}multiplyVector(e,t=null){t||=new se;var a=e.x,r=e.y,i=e.z;return t.w=-this.x*a-this.y*r-this.z*i,t.x=this.w*a+this.y*i-this.z*r,t.y=this.w*r-this.x*i+this.z*a,t.z=this.w*i+this.x*r-this.y*a,t}fromAxisAngle(e,t){t*=Math.PI/180;var a=t*.5,r=Math.sin(a);this.w=Math.cos(a),this.x=e.x*r,this.y=e.y*r,this.z=e.z*r,this.normalize()}toAxisAngle(e){var t=this.x*this.x+this.y*this.y+this.z*this.z,a=0;return t>0?(a=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):(a=0,e.x=1,e.y=0,e.z=0),a}slerp(e,t,a){var r=e.w,i=e.x,n=e.y,o=e.z,l=t.w,c=t.x,f=t.y,d=t.z,h=r*l+i*c+n*f+o*d;if(h<0&&(h=-h,l=-l,c=-c,f=-f,d=-d),h<.95){var u=Math.acos(h),m=1/Math.sin(u),g=Math.sin(u*(1-a))*m,p=Math.sin(u*a)*m;this.w=r*g+l*p,this.x=i*g+c*p,this.y=n*g+f*p,this.z=o*g+d*p}else{this.w=r+a*(l-r),this.x=i+a*(c-i),this.y=n+a*(f-n),this.z=o+a*(d-o);var A=1/Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z);this.w*=A,this.x*=A,this.y*=A,this.z*=A}}lerp(e,t,a){var r=e.w,i=e.x,n=e.y,o=e.z,l=t.w,c=t.x,f=t.y,d=t.z,h;r*l+i*c+n*f+o*d<0&&(l=-l,c=-c,f=-f,d=-d),this.w=r+a*(l-r),this.x=i+a*(c-i),this.y=n+a*(f-n),this.z=o+a*(d-o),h=1/Math.sqrt(this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z),this.w*=h,this.x*=h,this.y*=h,this.z*=h}fromEulerAngles(e,t,a){e*=_t,t*=_t,a*=_t;var r=e*.5,i=t*.5,n=a*.5,o=Math.cos(r),l=Math.sin(r),c=Math.cos(i),f=Math.sin(i),d=Math.cos(n),h=Math.sin(n);return this.w=o*c*d+l*f*h,this.x=l*c*d-o*f*h,this.y=o*f*d+l*c*h,this.z=o*c*h-l*f*d,this}setFromRotationMatrix(e){const t=e.rawData,a=t[0],r=t[4],i=t[8],n=t[1],o=t[5],l=t[9],c=t[2],f=t[6],d=t[10],h=a+o+d;if(h>0){const u=.5/Math.sqrt(h+1);this.w=.25/u,this.x=(f-l)*u,this.y=(i-c)*u,this.z=(n-r)*u}else if(a>o&&a>d){const u=2*Math.sqrt(1+a-o-d);this.w=(f-l)/u,this.x=.25*u,this.y=(r+n)/u,this.z=(i+c)/u}else if(o>d){const u=2*Math.sqrt(1+o-a-d);this.w=(i-c)/u,this.x=(r+n)/u,this.y=.25*u,this.z=(l+f)/u}else{const u=2*Math.sqrt(1+d-a-o);this.w=(n-r)/u,this.x=(i+c)/u,this.y=(l+f)/u,this.z=.25*u}return this}getEulerAngles(e){var t,a,r,i,n,o,l,c;return e||=new b,i=this.x,n=this.y,o=this.z,l=this.w,c=2*(l*n-i*o),c<=-.99999?(t=2*Math.atan2(i,l),a=-Math.PI/2,r=0):c>=.99999?(t=2*Math.atan2(i,l),a=Math.PI/2,r=0):(t=Math.atan2(2*(l*i+n*o),1-2*(i*i+n*n)),a=Math.asin(c),r=Math.atan2(2*(l*o+i*n),1-2*(n*n+o*o))),e.set(t,a,r).scaleBy(ei)}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(oa.QUATERNION)[1];this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w}inverse(e=null){e||=new se;var t=this.w*this.w+this.x*this.x+this.y*this.y+this.z*this.z;if(t>0){var a=1/t;e.w=this.w*a,e.x=-this.x*a,e.y=-this.y*a,e.z=-this.z*a}return e}clone(){return new se(this.x,this.y,this.z,this.w)}transformVector(e,t=null){var a,r,i,n,o=e.x,l=e.y,c=e.z;return t||=new b,n=-this.x*o-this.y*l-this.z*c,a=this.w*o+this.y*c-this.z*l,r=this.w*l-this.x*c+this.z*o,i=this.w*c+this.x*l-this.y*o,t.x=-n*this.x+a*this.w-r*this.z+i*this.y,t.y=-n*this.y+a*this.z+r*this.w-i*this.x,t.z=-n*this.z-a*this.y+r*this.x+i*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,a){let r=a||new se;return r.x=e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,r.y=e.w*t.y+e.y*t.w+e.z*t.x-e.x*t.z,r.z=e.w*t.z+e.z*t.w+e.x*t.y-e.y*t.x,r.w=e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,r}clampf(e,t,a){if(t>a){var r=t;t=a,a=r}return e<t?t:e<a?e:a}static serialize(e){return new se(e.x,e.y,e.z,e.w)}}function Ku(s,e,t){let a=s.x*2,r=s.y*2,i=s.z*2,n=s.x*a,o=s.y*r,l=s.z*i,c=s.x*r,f=s.x*i,d=s.y*i,h=s.w*a,u=s.w*r,m=s.w*i,g=t||new b;return g.x=(1-(o+l))*e.x+(c-m)*e.y+(f+u)*e.z,g.y=(c+m)*e.x+(1-(n+l))*e.y+(d-h)*e.z,g.z=(f-u)*e.x+(d+h)*e.y+(1-(n+o))*e.z,g}class ns{_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 ns;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 Oc(this.get())}getSignedFloat(){return this.getFloat()*2-1}}let ei=180/Math.PI,_t=Math.PI/180,qu=2147483647,$u=-2147483647;function Be(s,e,t){return Math.max(e,Math.min(t,s))}class zt{static gaussFunction(e,t,a,r){let i=Math.pow(e-a,2),n=2*Math.pow(r,2),o=-1*(i/n),l=Math.pow(Math.E,o);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,a=Math.exp(-t),r=Math.exp(-2*t),i=(1-a)*(1-a)/(1+2*t*a-r),n=i,o=i*(t-1)*a,l=i*(t+1)*a,c=-i*r,f=2*a,d=-r,h=(n+o)/(1-f-d),u=(l+c)/(1-f-d);return new Float32Array([n,o,l,c,f,d,h,u])}static clampf(e,t,a){if(t>a){let r=t;t=a,a=r}return e<t?t:e<a?e:a}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(),a=360*Math.random()*_t,r=Math.cos(a)*t,i=Math.sin(a)*t;return{x:r,z:i}}static getRandDirXYZ(e){let t=e*Math.random(),a=360*Math.random()*_t,r=Math.cos(a)*t,i=Math.tan(a)*t,n=Math.sin(a)*t;return new b(r,i,n)}static getCycleXYZ(e){let t=e*Math.random(),a=360*Math.random()*_t,r=Math.cos(a)*t,i=e*Math.random()-e*.5,n=Math.sin(a)*t;return new b(r,i,n)}static angle(e,t){let a=de.HELP_0,r=de.HELP_1;return a.set(e.x,e.z),r.set(t.x,t.z),Math.acos((a.x*r.x+a.y*r.y)/(a.abs()*r.abs()))}static angle_360(e,t){let a=b.HELP_0;return e.crossProduct(t,a),a.z>0?zt.angle(e,t):360-zt.angle(e,t)}getRotationY(e){return zt.normalizeAngle(Math.atan2(e.z,e.x)*ei)}static fromToRotation(e,t,a=null){a||=new se;let r=R.help_matrix_2;return R.fromToRotation(e,t,r),a.fromMatrix(r),a}static getEularDir_yUp(e){let t=se.HELP_0;return t.fromEulerAngles(0,e,0),t.transformVector(b.Z_AXIS,b.HELP_5),b.HELP_5}static transformVector(e,t,a=null){a||=new b;let r=e.rawData,i=r[0],n=r[1],o=r[2],l=r[3],c=r[4],f=r[5],d=r[6],h=r[7],u=r[8],m=r[9],g=r[10],p=r[11],A=r[12],D=r[13],B=r[14],v=r[15],x=t.x,y=t.y,S=t.z;return a.x=i*x+c*y+u*S+A,a.y=n*x+f*y+m*S+D,a.z=o*x+d*y+g*S+B,a.w=l*x+h*y+p*S+v,a}}let Nr=function(s,e,t){return s*(1-t)+e*t};function e2(s,e,t){let a=new b,r=s.x,i=s.y,n=s.z,o=s.w,l=e.x,c=e.y,f=e.z,d=e.w;return a.x=(l-r)*t+r,a.y=(c-i)*t+i,a.z=(f-n)*t+n,a.w=(d-o)*t+o,a}function t2(s,e,t){let a=new J;return a.r=(1-t)*s.r+t*e.r,a.g=(1-t)*s.g+t*e.g,a.b=(1-t)*s.b+t*e.b,a.a=(1-t)*s.a+t*e.a,a}function a2(s,e,t){return s+((e-s)*t>>8)&255}let In=function(s,e,t){let a=t-e;return Math.floor(s/a)%2==0?s%a+e:t-s%a+e},Rn=function(s,e,t){let a=t-e;return s%a+e},r2=function(s,e){let t=0;for(let a in s)a==e&&t++;return t};class i2{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 kt(s,e){return s instanceof b&&e instanceof b||s instanceof se&&e instanceof se?s.x*e.x+s.y*e.y+s.z*e.z:s.x*e.x+s.y*e.y}function Qn(s,e){return new b(s.x*e.x,s.y*e.y,s.z*e.z)}function Pc(s){return Math.sqrt(s)}function Tn(s){return Pc(kt(s,s))}function Vc(s,e){if(Tn(s)>b.EPSILON)return s.divide(Tn(s));if(s instanceof de)return new de;if(s instanceof b)return new b;if(s instanceof se)return new se}function Oc(s){return(s&8388607)*(1/8388607)}function ti(s){return s.getFloat()}function Bt(s,e,t){let a=s.getFloat();return a=e*a+(1-a)*t,a}function s2(s,e,t){let a;if(e<t){a=t-e;let r=s.get()%a;return r+=e,r}else if(e>t){a=e-t;let r=s.get()%a;return r=e-r,r}else return e}function ks(s){let e=Bt(s,-1,1),t=Bt(s,0,2*Math.PI),a=Math.sqrt(1-e*e),r=a*Math.cos(t),i=a*Math.sin(t);return new b(r,i,e)}function Lc(s){let e=Bt(s,0,2*Math.PI),t=Math.cos(e),a=Math.sin(e);return new de(t,a)}function n2(s){let e=new se;return e.x=Bt(s,-1,1),e.y=Bt(s,-1,1),e.z=Bt(s,-1,1),e.w=Bt(s,-1,1),e=Vc(e),kt(e,se.identity())<0?-e:e}function o2(s){const e=2*Math.PI;let t=Bt(s,0,1),a=Bt(s,0,e),r=Bt(s,0,e),i=Math.sqrt(1-t),n=Math.sqrt(t),o=new se(i*Math.sin(a),i*Math.cos(a),n*Math.sin(r),n*Math.cos(r));return kt(o,se.identity())<0?-o:o}function l2(s,e){return new b(Bt(s,-e.x,e.x),Bt(s,-e.y,e.y),Bt(s,-e.z,e.z))}function Gc(s){let e=ks(s);return e.scaleBy(Math.pow(ti(s),1/3)),e}function c2(s,e){return Qn(Gc(s),e)}function f2(s,e,t){let a=ks(s),r=Math.pow(Bt(s,0,1),1/3);return a.scaleBy(e+(t-e)*r),a}function d2(s){let e=Lc(s);return e.multiply(Math.pow(Bt(s,0,1),1/2),e),e}function h2(s,e,t){let a=Qn(ks(s),e),r=Math.pow(Bt(s,t,1),1/3);return a.scaleBy(r),a}function u2(s){let e=s.getFloat(),t=s.getFloat();e+t>1&&(e=1-e,t=1-t);let a=1-e-t;return new b(e,t,a)}function b2(s){return s/360*2*Math.PI}function g2(s){return 180*s/Math.PI}function p2(s){return Math.sin(s)}function m2(s){return Math.cos(s)}let zc=4919;function A2(){return++zc}function D2(s,e,t){let a=s[e],r=s[t];s[e]=r,s[t]=a}function Wc(s){return Math.floor(s)}function Mn(s){return Wc(s+.5)}function _2(s){return s=Math.max(s,0),s=Math.min(s,1),Mn(s*65535)}function B2(s){return s=Math.max(s,0),s=Math.min(s,1),Mn(s*255)}function Jc(s){return Math.abs(s)==0?s:1/Math.sqrt(s)}function v2(s){let e=Nn(s);return s.scaleBy(Jc(e))}function x2(s,e){return s.crossProduct(e)}function Nn(s){return kt(s,s)}function U2(s){let e=new ns(s);return ti(e)}function y2(s,e){let t=new ns(e);s.x=ti(t),s.y=ti(t),s.z=ti(t)}function C2(s,e,t){return s<e?t:s>t?e:s}function Pn(s,e){return s-Math.floor(s/e)*e}const S2=1e-6;class R{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 b(0,0,0);static _one=new b(1,1,1);static _prs=[new b,new b,new b];index=0;offset=0;rawData;_position;static allocMatrix(e){this.allocCount=e,R.dynamicMatrixBytes=Re.matrixBuffer,R.buffer=R.dynamicMatrixBytes.buffer,R.wasmMatrixPtr=Re.matrixBufferPtr,this.dynamicGlobalMatrixRef||=[],this.dynamicGlobalMatrixRef.forEach(t=>{t.offset=R.wasmMatrixPtr+t.index*R.blockBytes,t.rawData=ur(R.dynamicMatrixBytes.buffer,t.offset,16)}),R.help_matrix_0||=new R,R.help_matrix_1||=new R,R.help_matrix_2||=new R,R.helpMatrix||=new R,R.helpMatrix2||=new R,R._getEulerMatrix||=new R,R._getEulerMatrix.identity()}static fromToRotation(e,t,a){return a||=new R,a.transformDir(e,t),a}static fromArray(e){if(e.length!==16)throw new Error("Array must contain exactly 16 elements");const t=new R;for(let a=0;a<16;a++)t.rawData[a]=e[a];return t}static getAxisRotation(e,t,a,r){let i=new R,n=r*(Math.PI/180),o=Math.cos(n),l=Math.sin(n),c=1-o,f,d;return i.rawData[0]=o+e*e*c,i.rawData[5]=o+t*t*c,i.rawData[10]=o+a*a*c,f=e*t*c,d=a*l,i.rawData[1]=f+d,i.rawData[4]=f-d,f=e*a*c,d=t*l,i.rawData[8]=f+d,i.rawData[2]=f-d,f=t*a*c,d=e*l,i.rawData[9]=f-d,i.rawData[6]=f+d,i}static sanitizeEuler(e){R.makePositive(e)}static makePositive(e){let t=-1e-4,a=Math.PI*2-1e-4;e.x<t?e.x+=2*Math.PI:e.x>a&&(e.x-=2*Math.PI),e.y<t?e.y+=2*Math.PI:e.y>a&&(e.y-=2*Math.PI),e.z<t?e.z+=2*Math.PI:e.z>a&&(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)),R.sanitizeEuler(t),!0):(t.x=Math.PI*.5,t.y=Math.atan2(e.get(0,1),e.get(0,0)),t.z=0,R.sanitizeEuler(t),!1):(t.x=-Math.PI*.5,t.y=Math.atan2(-e.get(0,1),e.get(0,0)),t.z=0,R.sanitizeEuler(t),!1)}static matrixMultiply(e,t,a){R.wasm.Matrix_Multiply(e.index,t.index,a.index)}static matrixAppend(e,t,a){R.wasm.Matrix_Append(e.index,t.index,a.index)}static matrixRotateY(e,t){R.wasm.Matrix_Append(e,t.index)}static matrixRotate(e,t,a){R.wasm.Matrix_Rotate(e,t,a.index)}constructor(e=!1){if(R.useCount>=R.allocCount){let t=R.allocCount+R.allocOnceCount;Re.allocMatrix(t)}this.index=R.useCount,this.offset=R.wasmMatrixPtr+this.index*R.blockBytes,R.dynamicGlobalMatrixRef[this.index]=this,R.useCount++,this.rawData=ur(R.dynamicMatrixBytes.buffer,this.offset,16),this._position=new b,this.identity()}lookAt(e,t,a=b.Y_AXIS){let r=this.rawData,i=t.subtract(e,b.HELP_0);i.length===0&&(i.z=1),i.normalize();let n=a.crossProduct(i,b.HELP_1);n.length===0&&(Math.abs(a.z)===1?i.x+=1e-4:i.z-=1e-4,i.normalize(),n=a.crossProduct(i,b.HELP_1)),n.normalize();let o=i.crossProduct(n,b.HELP_2);r[0]=n.x,r[1]=o.x,r[2]=i.x,r[3]=0,r[4]=n.y,r[5]=o.y,r[6]=i.y,r[7]=0,r[8]=n.z,r[9]=o.z,r[10]=i.z,r[11]=0,r[12]=-n.dotProduct(e),r[13]=-o.dotProduct(e),r[14]=-i.dotProduct(e),r[15]=1}static floatArray=new Float64Array(16).fill(0);multiply(e){let t=this.rawData,a=e.rawData,r=R.floatArray;r[0]=t[0]*a[0]+t[1]*a[4]+t[2]*a[8]+t[3]*a[12],r[1]=t[0]*a[1]+t[1]*a[5]+t[2]*a[9]+t[3]*a[13],r[2]=t[0]*a[2]+t[1]*a[6]+t[2]*a[10]+t[3]*a[14],r[3]=t[0]*a[3]+t[1]*a[7]+t[2]*a[11]+t[3]*a[15],r[4]=t[4]*a[0]+t[5]*a[4]+t[6]*a[8]+t[7]*a[12],r[5]=t[4]*a[1]+t[5]*a[5]+t[6]*a[9]+t[7]*a[13],r[6]=t[4]*a[2]+t[5]*a[6]+t[6]*a[10]+t[7]*a[14],r[7]=t[4]*a[3]+t[5]*a[7]+t[6]*a[11]+t[7]*a[15],r[8]=t[8]*a[0]+t[9]*a[4]+t[10]*a[8]+t[11]*a[12],r[9]=t[8]*a[1]+t[9]*a[5]+t[10]*a[9]+t[11]*a[13],r[10]=t[8]*a[2]+t[9]*a[6]+t[10]*a[10]+t[11]*a[14],r[11]=t[8]*a[3]+t[9]*a[7]+t[10]*a[11]+t[11]*a[15],r[12]=t[12]*a[0]+t[13]*a[4]+t[14]*a[8]+t[15]*a[12],r[13]=t[12]*a[1]+t[13]*a[5]+t[14]*a[9]+t[15]*a[13],r[14]=t[12]*a[2]+t[13]*a[6]+t[14]*a[10]+t[15]*a[14],r[15]=t[12]*a[3]+t[13]*a[7]+t[14]*a[11]+t[15]*a[15],t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=r[3],t[4]=r[4],t[5]=r[5],t[6]=r[6],t[7]=r[7],t[8]=r[8],t[9]=r[9],t[10]=r[10],t[11]=r[11],t[12]=r[12],t[13]=r[13],t[14]=r[14],t[15]=r[15]}multiplyMatrices(e,t){const a=e.rawData,r=t.rawData,i=this.rawData,n=a[0],o=a[4],l=a[8],c=a[12],f=a[1],d=a[5],h=a[9],u=a[13],m=a[2],g=a[6],p=a[10],A=a[14],D=a[3],B=a[7],v=a[11],x=a[15],y=r[0],S=r[4],F=r[8],C=r[12],w=r[1],E=r[5],Q=r[9],T=r[13],j=r[2],ue=r[6],ee=r[10],N=r[14],M=r[3],O=r[7],W=r[11],ae=r[15];return i[0]=n*y+o*w+l*j+c*M,i[4]=n*S+o*E+l*ue+c*O,i[8]=n*F+o*Q+l*ee+c*W,i[12]=n*C+o*T+l*N+c*ae,i[1]=f*y+d*w+h*j+u*M,i[5]=f*S+d*E+h*ue+u*O,i[9]=f*F+d*Q+h*ee+u*W,i[13]=f*C+d*T+h*N+u*ae,i[2]=m*y+g*w+p*j+A*M,i[6]=m*S+g*E+p*ue+A*O,i[10]=m*F+g*Q+p*ee+A*W,i[14]=m*C+g*T+p*N+A*ae,i[3]=D*y+B*w+v*j+x*M,i[7]=D*S+B*E+v*ue+x*O,i[11]=D*F+B*Q+v*ee+x*W,i[15]=D*C+B*T+v*N+x*ae,this}multiplyPoint3(e,t){t||=new b;let a=this.rawData;return t.x=a[0]*e.x+a[4]*e.y+a[8]*e.z+a[12],t.y=a[1]*e.x+a[5]*e.y+a[9]*e.z+a[13],t.z=a[2]*e.x+a[6]*e.y+a[10]*e.z+a[14],t}multiplyVector4(e,t){t||=new b;let a=this.rawData,r=e.x,i=e.y,n=e.z,o=a[3]*r+a[7]*i+a[11]*n+a[15];return o=o||1,t.x=(a[0]*r+a[4]*i+a[8]*n+a[12])/o,t.y=(a[1]*r+a[5]*i+a[9]*n+a[13])/o,t.z=(a[2]*r+a[6]*i+a[10]*n+a[14])/o,t.w=1,t}transformVector4(e,t){let a=this.rawData;t||=new b;let r=e.x,i=e.y,n=e.z,o=e.w;return t.x=r*a[0]+i*a[4]+n*a[8]+o*a[12],t.y=r*a[1]+i*a[5]+n*a[9]+o*a[13],t.z=r*a[2]+i*a[6]+n*a[10]+o*a[14],t.w=r*a[3]+i*a[7]+n*a[11]+o*a[15],t}perspectiveMultiplyPoint3(e,t){let a=b.HELP_2,r,i=this.rawData;if(a.x=i[0]*e.x+i[4]*e.y+i[8]*e.z+i[12],a.y=i[1]*e.x+i[5]*e.y+i[9]*e.z+i[13],a.z=i[2]*e.x+i[6]*e.y+i[10]*e.z+i[14],r=i[3]*e.x+i[7]*e.y+i[11]*e.z+i[15],Math.abs(r)>1e-7){let n=1/r;return t.x=a.x*n,t.y=a.y*n,t.z=a.z*n,!0}else return t.x=0,t.y=0,t.z=0,!1}perspective(e,t,a,r){let i=this.rawData,n=e*_t/2,o=Math.cos(n)/Math.sin(n);i[0]=-o/t,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=o,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=r/(r-a),i[11]=1,i[12]=0,i[13]=0,i[14]=-a*r/(r-a),i[15]=0}perspective3(e,t,a,r){let i=Math.tan(e*Math.PI/360)*a,n=i*t;this.frustum(-n,n,-i,i,a,r)}frustum(e,t,a,r,i,n){let o=this.rawData;o[0]=-2*i/(t-e),o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=2*i/(r-a),o[6]=0,o[7]=0,o[8]=(t+e)/(t-e),o[9]=(r+a)/(r-a),o[10]=n/(n-i),o[11]=1,o[12]=0,o[13]=0,o[14]=-n*i/(n-i),o[15]=0}ortho(e,t,a,r){let i=this.rawData;return i[0]=2/e,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=2/t,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=1/(r-a),i[11]=0,i[12]=0,i[13]=0,i[14]=a/(a-r),i[15]=1,this}orthoZO(e,t,a,r,i,n){let o=this.rawData,l=1/(e-t),c=1/(a-r),f=1/(i-n);return o[0]=-2*l,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=-2*c,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=f,o[11]=0,o[12]=(e+t)*l,o[13]=(r+a)*c,o[14]=i*f,o[15]=1,this}orthoOffCenter(e,t,a,r,i,n){let o=this.rawData;o[0]=2/(t-e),o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=2/(r-a),o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1/(n-i),o[11]=0,o[12]=(e+t)/(e-t),o[13]=(r+a)/(a-r),o[14]=i/(i-n),o[15]=1}transformDir(e,t){let a=this.rawData,r=1e-6,i=b.ZERO;t.crossProduct(e,i);let n=t.dotProduct(e);if(n>1-r)this.identity();else if(n<-1+r){let o=b.HELP_1,l=b.HELP_2,c=0,f,d,h,u,m,g,p,A,D,B,v,x,y,S,F,C,w,E;l.x=0,l.y=e.z,l.z=-e.y,l.dotProduct(l)<r&&(l.x=-e.z,l.y=0,l.z=e.x),c=1/Math.sqrt(l.dotProduct(l)),l.x*=c,l.y*=c,l.z*=c,l.crossProduct(e,o),f=-e.x*e.x,d=-e.y*e.y,h=-e.z*e.z,u=-e.x*e.y,m=-e.x*e.z,g=-e.y*e.z,p=o.x*o.x,A=o.y*o.y,D=o.z*o.z,B=o.x*o.y,v=o.x*o.z,x=o.y*o.z,y=-l.x*l.x,S=-l.y*l.y,F=-l.z*l.z,C=-l.x*l.y,w=-l.x*l.z,E=-l.y*l.z,a[0]=f+p+y,a[1]=u+B+C,a[2]=m+v+w,a[4]=a[1],a[5]=d+A+S,a[6]=g+x+E,a[8]=a[2],a[9]=a[6],a[10]=h+D+F,a[3]=0,a[7]=0,a[11]=0,a[15]=1}else{let o,l,c,f,d,h=i.dotProduct(i),u=(1-n)/h;o=u*i.x,l=u*i.z,c=o*i.y,f=o*i.z,d=l*i.y,a[0]=n+o*i.x,a[1]=c-i.z,a[2]=f+i.y,a[4]=c+i.z,a[5]=n+u*i.y*i.y,a[6]=d-i.x,a[8]=f-i.y,a[9]=d+i.x,a[10]=n+l*i.z,a[3]=0,a[7]=0,a[11]=0,a[15]=1}return this}append(e){let t=this.rawData,a=t[0],r=t[4],i=t[8],n=t[12],o=t[1],l=t[5],c=t[9],f=t[13],d=t[2],h=t[6],u=t[10],m=t[14],g=t[3],p=t[7],A=t[11],D=t[15];t[0]=a*e.rawData[0]+o*e.rawData[4]+d*e.rawData[8]+g*e.rawData[12],t[1]=a*e.rawData[1]+o*e.rawData[5]+d*e.rawData[9]+g*e.rawData[13],t[2]=a*e.rawData[2]+o*e.rawData[6]+d*e.rawData[10]+g*e.rawData[14],t[3]=a*e.rawData[3]+o*e.rawData[7]+d*e.rawData[11]+g*e.rawData[15],t[4]=r*e.rawData[0]+l*e.rawData[4]+h*e.rawData[8]+p*e.rawData[12],t[5]=r*e.rawData[1]+l*e.rawData[5]+h*e.rawData[9]+p*e.rawData[13],t[6]=r*e.rawData[2]+l*e.rawData[6]+h*e.rawData[10]+p*e.rawData[14],t[7]=r*e.rawData[3]+l*e.rawData[7]+h*e.rawData[11]+p*e.rawData[15],t[8]=i*e.rawData[0]+c*e.rawData[4]+u*e.rawData[8]+A*e.rawData[12],t[9]=i*e.rawData[1]+c*e.rawData[5]+u*e.rawData[9]+A*e.rawData[13],t[10]=i*e.rawData[2]+c*e.rawData[6]+u*e.rawData[10]+A*e.rawData[14],t[11]=i*e.rawData[3]+c*e.rawData[7]+u*e.rawData[11]+A*e.rawData[15],t[12]=n*e.rawData[0]+f*e.rawData[4]+m*e.rawData[8]+D*e.rawData[12],t[13]=n*e.rawData[1]+f*e.rawData[5]+m*e.rawData[9]+D*e.rawData[13],t[14]=n*e.rawData[2]+f*e.rawData[6]+m*e.rawData[10]+D*e.rawData[14],t[15]=n*e.rawData[3]+f*e.rawData[7]+m*e.rawData[11]+D*e.rawData[15]}add(e){let t=this.rawData,a=t[0],r=t[4],i=t[8],n=t[12],o=t[1],l=t[5],c=t[9],f=t[13],d=t[2],h=t[6],u=t[10],m=t[14],g=t[3],p=t[7],A=t[11],D=t[15],B=e.rawData[0],v=e.rawData[4],x=e.rawData[8],y=e.rawData[12],S=e.rawData[1],F=e.rawData[5],C=e.rawData[9],w=e.rawData[13],E=e.rawData[2],Q=e.rawData[6],T=e.rawData[10],j=e.rawData[14],ue=e.rawData[3],ee=e.rawData[7],N=e.rawData[11],M=e.rawData[15];return t[0]=a+B,t[1]=o+S,t[2]=d+E,t[3]=g+ue,t[4]=r+v,t[5]=l+F,t[6]=h+Q,t[7]=p+ee,t[8]=i+x,t[9]=c+C,t[10]=u+T,t[11]=A+N,t[12]=n+y,t[13]=f+w,t[14]=m+j,t[15]=D+M,this}sub(e){let t=this.rawData,a=t[0],r=t[4],i=t[8],n=t[12],o=t[1],l=t[5],c=t[9],f=t[13],d=t[2],h=t[6],u=t[10],m=t[14],g=t[3],p=t[7],A=t[11],D=t[15],B=e.rawData[0],v=e.rawData[4],x=e.rawData[8],y=e.rawData[12],S=e.rawData[1],F=e.rawData[5],C=e.rawData[9],w=e.rawData[13],E=e.rawData[2],Q=e.rawData[6],T=e.rawData[10],j=e.rawData[14],ue=e.rawData[3],ee=e.rawData[7],N=e.rawData[11],M=e.rawData[15];return t[0]=a-B,t[1]=o-S,t[2]=d-E,t[3]=g-ue,t[4]=r-v,t[5]=l-F,t[6]=h-Q,t[7]=p-ee,t[8]=i-x,t[9]=c-C,t[10]=u-T,t[11]=A-N,t[12]=n-y,t[13]=f-w,t[14]=m-j,t[15]=D-M,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 a=R.getAxisRotation(t.x,t.y,t.z,e);this.append(a)}createByRotation(e,t){let a=R.helpMatrix,r,i,n=e*_t;return r=Math.sin(n),i=Math.cos(n),t.x==1&&(a.rawData[0]=1,a.rawData[1]=0,a.rawData[2]=0,a.rawData[3]=0,a.rawData[4]=0,a.rawData[5]=i,a.rawData[6]=r,a.rawData[7]=0,a.rawData[8]=0,a.rawData[9]=-r,a.rawData[10]=i,a.rawData[11]=0,a.rawData[12]=0,a.rawData[13]=0,a.rawData[14]=0,a.rawData[15]=1),t.y==1&&(a.rawData[0]=i,a.rawData[1]=0,a.rawData[2]=-r,a.rawData[3]=0,a.rawData[4]=0,a.rawData[5]=1,a.rawData[6]=0,a.rawData[7]=0,a.rawData[8]=r,a.rawData[9]=0,a.rawData[10]=i,a.rawData[11]=0,a.rawData[12]=0,a.rawData[13]=0,a.rawData[14]=0,a.rawData[15]=1),t.z==1&&(a.rawData[0]=i,a.rawData[1]=r,a.rawData[2]=0,a.rawData[3]=0,a.rawData[4]=-r,a.rawData[5]=i,a.rawData[6]=0,a.rawData[7]=0,a.rawData[8]=0,a.rawData[9]=0,a.rawData[10]=1,a.rawData[11]=0,a.rawData[12]=0,a.rawData[13]=0,a.rawData[14]=0,a.rawData[15]=1),this.append(a),this}appendScale(e,t,a){R.helpMatrix.createByScale(e,t,a),this.append(R.helpMatrix)}createByScale(e,t,a){let r=this.rawData;r[0]=e,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=t,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[10]=a,r[11]=0,r[12]=0,r[13]=0,r[14]=0,r[15]=1}appendTranslation(e,t,a){let r=this.rawData;r[12]+=e,r[13]+=t,r[14]+=a}clone(){let e=new R;return e.copyFrom(this),e}copyRowFrom(e,t){let a=this.rawData;switch(e){case 0:a[0]=t.x,a[1]=t.y,a[2]=t.z,a[3]=t.w;break;case 1:a[4]=t.x,a[5]=t.y,a[6]=t.z,a[7]=t.w;break;case 2:a[8]=t.x,a[9]=t.y,a[10]=t.z,a[11]=t.w;break;case 3:a[12]=t.x,a[13]=t.y,a[14]=t.z,a[15]=t.w;break}}copyRowTo(e,t){let a=this.rawData;switch(e){case 0:t.x=a[0],t.y=a[1],t.z=a[2],t.w=a[3];break;case 1:t.x=a[4],t.y=a[5],t.z=a[6],t.w=a[7];break;case 2:t.x=a[8],t.y=a[9],t.z=a[10],t.w=a[11];break;case 3:t.x=a[12],t.y=a[13],t.z=a[14],t.w=a[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,a=!1){let r=this.rawData;e[0+t]=r[0],e[1+t]=r[1],e[2+t]=r[2],e[3+t]=r[3],e[4+t]=r[4],e[5+t]=r[5],e[6+t]=r[6],e[7+t]=r[7],e[8+t]=r[8],e[9+t]=r[9],e[10+t]=r[10],e[11+t]=r[11],e[12+t]=r[12],e[13+t]=r[13],e[14+t]=r[14],e[15+t]=r[15]}copyColFrom(e,t){let a=this.rawData;switch(e){case 0:a[0]=t.x,a[4]=t.y,a[8]=t.z,a[12]=t.w;break;case 1:a[1]=t.x,a[5]=t.y,a[9]=t.z,a[13]=t.w;break;case 2:a[2]=t.x,a[6]=t.y,a[10]=t.z,a[14]=t.w;break;case 3:a[3]=t.x,a[7]=t.y,a[11]=t.z,a[15]=t.w;break}}copyColTo(e,t){let a=this.rawData;switch(e){case 0:t.x=a[0],t.y=a[4],t.z=a[8],t.w=a[12];break;case 1:t.x=a[1],t.y=a[5],t.z=a[9],t.w=a[13];break;case 2:t.x=a[2],t.y=a[6],t.z=a[10],t.w=a[14];break;case 3:t.x=a[3],t.y=a[7],t.z=a[11],t.w=a[15];break}}copyToMatrix3D(e){e.rawData=this.rawData.slice(0)}makeRotationFromQuaternion(e){return this.compose(R._zero,e,R._one),this}static decomposeRawData=new Float64Array(16).fill(0);decompose(e="eulerAngles",t){let a=se.CALCULATION_QUATERNION,r=t||R._prs;this.copyRawDataTo(R.decomposeRawData);let i=R.decomposeRawData,n=r[0];n.x=i[12],n.y=i[13],n.z=i[14],i[12]=0,i[13]=0,i[14]=0;let o=r[2];o.x=Math.sqrt(i[0]*i[0]+i[1]*i[1]+i[2]*i[2]),o.y=Math.sqrt(i[4]*i[4]+i[5]*i[5]+i[6]*i[6]),o.z=Math.sqrt(i[8]*i[8]+i[9]*i[9]+i[10]*i[10]),i[0]*(i[5]*i[10]-i[6]*i[9])-i[1]*(i[4]*i[10]-i[6]*i[8])+i[2]*(i[4]*i[9]-i[5]*i[8])<0&&(o.z=-o.z),i[0]/=o.x,i[1]/=o.x,i[2]/=o.x,i[4]/=o.y,i[5]/=o.y,i[6]/=o.y,i[8]/=o.z,i[9]/=o.z,i[10]/=o.z;let l=r[1],c;switch(e){case oa.AXIS_ANGLE:l.w=Math.acos((i[0]+i[5]+i[10]-1)/2);let f=Math.sqrt((i[6]-i[9])*(i[6]-i[9])+(i[8]-i[2])*(i[8]-i[2])+(i[1]-i[4])*(i[1]-i[4]));l.x=(i[6]-i[9])/f,l.y=(i[8]-i[2])/f,l.z=(i[1]-i[4])/f;break;case oa.QUATERNION:c=i[0]+i[5]+i[10],c>0?(l.w=Math.sqrt(1+c)/2,l.x=(i[6]-i[9])/(4*l.w),l.y=(i[8]-i[2])/(4*l.w),l.z=(i[1]-i[4])/(4*l.w)):i[0]>i[5]&&i[0]>i[10]?(l.x=Math.sqrt(1+i[0]-i[5]-i[10])/2,l.w=(i[6]-i[9])/(4*l.x),l.y=(i[1]+i[4])/(4*l.x),l.z=(i[8]+i[2])/(4*l.x)):i[5]>i[10]?(l.y=Math.sqrt(1+i[5]-i[0]-i[10])/2,l.x=(i[1]+i[4])/(4*l.y),l.w=(i[8]-i[2])/(4*l.y),l.z=(i[6]+i[9])/(4*l.y)):(l.z=Math.sqrt(1+i[10]-i[0]-i[5])/2,l.x=(i[8]+i[2])/(4*l.z),l.y=(i[6]+i[9])/(4*l.z),l.w=(i[1]-i[4])/(4*l.z));break;case oa.EULER_ANGLES:c=i[0]+i[5]+i[10],c>0?(a.w=Math.sqrt(1+c)/2,a.x=(i[6]-i[9])/(4*a.w),a.y=(i[8]-i[2])/(4*a.w),a.z=(i[1]-i[4])/(4*a.w)):i[0]>i[5]&&i[0]>i[10]?(a.x=Math.sqrt(1+i[0]-i[5]-i[10])/2,a.w=(i[6]-i[9])/(4*a.x),a.y=(i[1]+i[4])/(4*a.x),a.z=(i[8]+i[2])/(4*a.x)):i[5]>i[10]?(l.y=Math.sqrt(1+i[5]-i[0]-i[10])/2,a.x=(i[1]+i[4])/(4*a.y),a.w=(i[8]-i[2])/(4*a.y),a.z=(i[6]+i[9])/(4*a.y)):(a.z=Math.sqrt(1+i[10]-i[0]-i[5])/2,a.x=(i[8]+i[2])/(4*a.z),a.y=(i[6]+i[9])/(4*a.z),a.w=(i[1]-i[4])/(4*a.z)),a.getEulerAngles(l);break}return r[0]=n,r[1]=l,r[2]=o,r}static getEuler(e,t,a=!0,r){return e||=new b,R._getEulerMatrix.makeRotationFromQuaternion(t).makeEuler(e,a,r),e}compose(e,t,a){const r=this.rawData,i=t.x,n=t.y,o=t.z,l=t.w,c=i+i,f=n+n,d=o+o,h=i*c,u=i*f,m=i*d,g=n*f,p=n*d,A=o*d,D=l*c,B=l*f,v=l*d,x=a.x,y=a.y,S=a.z;return r[0]=(1-(g+A))*x,r[1]=(u+v)*x,r[2]=(m-B)*x,r[3]=0,r[4]=(u-v)*y,r[5]=(1-(h+A))*y,r[6]=(p+D)*y,r[7]=0,r[8]=(m+B)*S,r[9]=(p-D)*S,r[10]=(1-(h+g))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}deltaTransformVector(e,t){t||=new b;let a=this.rawData,r=e.x,i=e.y,n=e.z;return t.x=r*a[0]+i*a[4]+n*a[8],t.y=r*a[1]+i*a[5]+n*a[9],t.z=r*a[2]+i*a[6]+n*a[10],t.w=r*a[3]+i*a[7]+n*a[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],a=e[8]*e[6]-e[4]*e[10],r=e[4]*e[9]-e[8]*e[5],i=e[9]*e[2]-e[1]*e[10],n=e[0]*e[10]-e[8]*e[2],o=e[8]*e[1]-e[0]*e[9],l=e[1]*e[6]-e[5]*e[2],c=e[4]*e[2]-e[0]*e[6],f=e[0]*e[5]-e[4]*e[1],d=e[0]*t+e[4]*i+e[8]*l;if(Math.abs(d)>1e-11){let h=1/d;e[0]=h*t,e[4]=h*a,e[8]=h*r,e[1]=h*i,e[5]=h*n,e[9]=h*o,e[2]=h*l,e[6]=h*c,e[10]=h*f}}invert(){let e=this.determinant,t=Math.abs(e)>1e-11,a=this.rawData;if(t){e=1/e;let r=a[0],i=a[4],n=a[8],o=a[12],l=a[1],c=a[5],f=a[9],d=a[13],h=a[2],u=a[6],m=a[10],g=a[14],p=a[3],A=a[7],D=a[11],B=a[15];a[0]=e*(c*(m*B-g*D)-f*(u*B-g*A)+d*(u*D-m*A)),a[1]=-e*(l*(m*B-g*D)-f*(h*B-g*p)+d*(h*D-m*p)),a[2]=e*(l*(u*B-g*A)-c*(h*B-g*p)+d*(h*A-u*p)),a[3]=-e*(l*(u*D-m*A)-c*(h*D-m*p)+f*(h*A-u*p)),a[4]=-e*(i*(m*B-g*D)-n*(u*B-g*A)+o*(u*D-m*A)),a[5]=e*(r*(m*B-g*D)-n*(h*B-g*p)+o*(h*D-m*p)),a[6]=-e*(r*(u*B-g*A)-i*(h*B-g*p)+o*(h*A-u*p)),a[7]=e*(r*(u*D-m*A)-i*(h*D-m*p)+n*(h*A-u*p)),a[8]=e*(i*(f*B-d*D)-n*(c*B-d*A)+o*(c*D-f*A)),a[9]=-e*(r*(f*B-d*D)-n*(l*B-d*p)+o*(l*D-f*p)),a[10]=e*(r*(c*B-d*A)-i*(l*B-d*p)+o*(l*A-c*p)),a[11]=-e*(r*(c*D-f*A)-i*(l*D-f*p)+n*(l*A-c*p)),a[12]=-e*(i*(f*g-d*m)-n*(c*g-d*u)+o*(c*m-f*u)),a[13]=e*(r*(f*g-d*m)-n*(l*g-d*h)+o*(l*m-f*h)),a[14]=-e*(r*(c*g-d*u)-i*(l*g-d*h)+o*(l*u-c*h)),a[15]=e*(r*(c*m-f*u)-i*(l*m-f*h)+n*(l*u-c*h))}return t}transformPoint(e,t){let a=this.rawData;t||=new b;let r=e.x,i=e.y,n=e.z;return t.x=r*a[0]+i*a[4]+n*a[8]+a[12],t.y=r*a[1]+i*a[5]+n*a[9]+a[13],t.z=r*a[2]+i*a[6]+n*a[10]+a[14],t}transformVector(e,t){let a=this.rawData;t||=new b;let r=e.x,i=e.y,n=e.z;return t.x=r*a[0]+i*a[4]+n*a[8],t.y=r*a[1]+i*a[5]+n*a[9],t.z=r*a[2]+i*a[6]+n*a[10],t}transpose(){let e=this.rawData;for(let t=0;t<R.helpMatrix.rawData.length;t++)R.helpMatrix.rawData[t]=e[t];e[1]=R.helpMatrix.rawData[4],e[2]=R.helpMatrix.rawData[8],e[3]=R.helpMatrix.rawData[12],e[4]=R.helpMatrix.rawData[1],e[6]=R.helpMatrix.rawData[9],e[7]=R.helpMatrix.rawData[13],e[8]=R.helpMatrix.rawData[2],e[9]=R.helpMatrix.rawData[6],e[11]=R.helpMatrix.rawData[14],e[12]=R.helpMatrix.rawData[3],e[13]=R.helpMatrix.rawData[7],e[14]=R.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 b;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 b(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,a){this.copyFrom(t).sub(e).mult(a).add(e)}get(e,t){return this.rawData[e+t*4]}set(e,t,a){this.rawData[e+t*4]=a}getMaxScaleOnAxis(){let e=this.rawData,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],a=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,a,r))}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),a=this.get(1,0)*e.x+this.get(1,1)*e.y+this.get(1,2)*e.z+this.get(1,3),r=this.get(2,0)*e.x+this.get(2,1)*e.y+this.get(2,2)*e.z+this.get(2,3),i=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,a),this.set(2,3,r),this.set(3,3,i),this}setTRInverse(e,t){t=t.inverse(),se.quaternionToMatrix(t,this),this.translate(new b(-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,a){return this.setElements(e.x,t.x,a.x,0,e.y,t.y,a.y,0,e.z,t.z,a.z,0,0,0,0,1),this}makeRotationAxis(e,t){const a=Math.cos(t),r=Math.sin(t),i=1-a,n=e.x,o=e.y,l=e.z,c=i*n,f=i*o;return this.setElements(c*n+a,c*o-r*l,c*l+r*o,0,c*o+r*l,f*o+a,f*l-r*n,0,c*l-r*o,f*l+r*n,i*l*l+a,0,0,0,0,1),this}static transpose(e,t){t||=new R;let a=e.rawData,r=t.rawData;return r[0]=a[0],r[1]=a[4],r[2]=a[8],r[3]=a[12],r[4]=a[1],r[5]=a[5],r[6]=a[9],r[7]=a[13],r[8]=a[2],r[9]=a[6],r[10]=a[10],r[11]=a[14],r[12]=a[3],r[13]=a[7],r[14]=a[11],r[15]=a[15],t}static inverse(e,t){t||=new R;let a=e.rawData,r=t.rawData;r[0]=a[5]*a[10]*a[15]-a[5]*a[14]*a[11]-a[6]*a[9]*a[15]+a[6]*a[13]*a[11]+a[7]*a[9]*a[14]-a[7]*a[13]*a[10],r[1]=-a[1]*a[10]*a[15]+a[1]*a[14]*a[11]+a[2]*a[9]*a[15]-a[2]*a[13]*a[11]-a[3]*a[9]*a[14]+a[3]*a[13]*a[10],r[2]=a[1]*a[6]*a[15]-a[1]*a[14]*a[7]-a[2]*a[5]*a[15]+a[2]*a[13]*a[7]+a[3]*a[5]*a[14]-a[3]*a[13]*a[6],r[3]=-a[1]*a[6]*a[11]+a[1]*a[10]*a[7]+a[2]*a[5]*a[11]-a[2]*a[9]*a[7]-a[3]*a[5]*a[10]+a[3]*a[9]*a[6],r[4]=-a[4]*a[10]*a[15]+a[4]*a[14]*a[11]+a[6]*a[8]*a[15]-a[6]*a[12]*a[11]-a[7]*a[8]*a[14]+a[7]*a[12]*a[10],r[5]=a[0]*a[10]*a[15]-a[0]*a[14]*a[11]-a[2]*a[8]*a[15]+a[2]*a[12]*a[11]+a[3]*a[8]*a[14]-a[3]*a[12]*a[10],r[6]=-a[0]*a[6]*a[15]+a[0]*a[14]*a[7]+a[2]*a[4]*a[15]-a[2]*a[12]*a[7]-a[3]*a[4]*a[14]+a[3]*a[12]*a[6],r[7]=a[0]*a[6]*a[11]-a[0]*a[10]*a[7]-a[2]*a[4]*a[11]+a[2]*a[8]*a[7]+a[3]*a[4]*a[10]-a[3]*a[8]*a[6],r[8]=a[4]*a[9]*a[15]-a[4]*a[13]*a[11]-a[5]*a[8]*a[15]+a[5]*a[12]*a[11]+a[7]*a[8]*a[13]-a[7]*a[12]*a[9],r[9]=-a[0]*a[9]*a[15]+a[0]*a[13]*a[11]+a[1]*a[8]*a[15]-a[1]*a[12]*a[11]-a[3]*a[8]*a[13]+a[3]*a[12]*a[9],r[10]=a[0]*a[5]*a[15]-a[0]*a[13]*a[7]-a[1]*a[4]*a[15]+a[1]*a[12]*a[7]+a[3]*a[4]*a[13]-a[3]*a[12]*a[5],r[11]=-a[0]*a[5]*a[11]+a[0]*a[9]*a[7]+a[1]*a[4]*a[11]-a[1]*a[8]*a[7]-a[3]*a[4]*a[9]+a[3]*a[8]*a[5],r[12]=-a[4]*a[9]*a[14]+a[4]*a[13]*a[10]+a[5]*a[8]*a[14]-a[5]*a[12]*a[10]-a[6]*a[8]*a[13]+a[6]*a[12]*a[9],r[13]=a[0]*a[9]*a[14]-a[0]*a[13]*a[10]-a[1]*a[8]*a[14]+a[1]*a[12]*a[10]+a[2]*a[8]*a[13]-a[2]*a[12]*a[9],r[14]=-a[0]*a[5]*a[14]+a[0]*a[13]*a[6]+a[1]*a[4]*a[14]-a[1]*a[12]*a[6]-a[2]*a[4]*a[13]+a[2]*a[12]*a[5],r[15]=a[0]*a[5]*a[10]-a[0]*a[9]*a[6]-a[1]*a[4]*a[10]+a[1]*a[8]*a[6]+a[2]*a[4]*a[9]-a[2]*a[8]*a[5];let i=a[0]*r[0]+a[1]*r[4]+a[2]*r[8]+a[3]*r[12];for(let n=0;n<16;n++)r[n]/=i;return t}makeEuler(e,t,a="XYZ"){const r=this.rawData,i=r[0],n=r[4],o=r[8],l=r[1],c=r[5],f=r[9],d=r[2],h=r[6],u=r[10];switch(a){case"XYZ":e.y=Math.asin(Be(o,-1,1)),Math.abs(o)<.9999999?(e.x=Math.atan2(-f,u),e.z=Math.atan2(-n,i)):(e.x=Math.atan2(h,c),e.z=0);break;case"YXZ":e.x=Math.asin(-Be(f,-1,1)),Math.abs(f)<.9999999?(e.y=Math.atan2(o,u),e.z=Math.atan2(l,c)):(e.y=Math.atan2(-d,i),e.z=0);break;case"ZXY":e.x=Math.asin(Be(h,-1,1)),Math.abs(h)<.9999999?(e.y=Math.atan2(-d,u),e.z=Math.atan2(-n,c)):(e.y=0,e.z=Math.atan2(l,i));break;case"ZYX":e.y=Math.asin(-Be(d,-1,1)),Math.abs(d)<.9999999?(e.x=Math.atan2(h,u),e.z=Math.atan2(l,i)):(e.x=0,e.z=Math.atan2(-n,c));break;case"YZX":e.z=Math.asin(Be(l,-1,1)),Math.abs(l)<.9999999?(e.x=Math.atan2(-f,c),e.y=Math.atan2(-d,i)):(e.x=0,e.y=Math.atan2(o,u));break;case"XZY":e.z=Math.asin(-Be(n,-1,1)),Math.abs(n)<.9999999?(e.x=Math.atan2(h,c),e.y=Math.atan2(o,i)):(e.x=Math.atan2(-f,u),e.y=0);break}return t&&e.multiplyScalar(ei),e}setElements(e,t,a,r,i,n,o,l,c,f,d,h,u,m,g,p){const A=this.rawData;return A[0]=e,A[4]=t,A[8]=a,A[12]=r,A[1]=i,A[5]=n,A[9]=o,A[13]=l,A[2]=c,A[6]=f,A[10]=d,A[14]=h,A[3]=u,A[7]=m,A[11]=g,A[15]=p,this}makeMatrix44ByQuaternion(e,t,a){this.identity(),se.quaternionToMatrix(a,this),this.appendTranslation(e.x,e.y,e.z),this.appendScale(t.x,t.y,t.z)}}function jc(s,e,t){for(let a=0;a<4;a++)t.rawData[a]=s.rawData[a]*e.rawData[0]+s.rawData[a+4]*e.rawData[1]+s.rawData[a+8]*e.rawData[2]+s.rawData[a+12]*e.rawData[3],t.rawData[a+4]=s.rawData[a]*e.rawData[4]+s.rawData[a+4]*e.rawData[5]+s.rawData[a+8]*e.rawData[6]+s.rawData[a+12]*e.rawData[7],t.rawData[a+8]=s.rawData[a]*e.rawData[8]+s.rawData[a+4]*e.rawData[9]+s.rawData[a+8]*e.rawData[10]+s.rawData[a+12]*e.rawData[11],t.rawData[a+12]=s.rawData[a]*e.rawData[12]+s.rawData[a+4]*e.rawData[13]+s.rawData[a+8]*e.rawData[14]+s.rawData[a+12]*e.rawData[15]}function Es(s,e,t,a){let r=a.rawData,i=s.x*_t,n=s.y*_t,o=s.z*_t,l=0,c=i*.5,f=n*.5,d=o*.5,h=Math.cos(c),u=Math.sin(c),m=Math.cos(f),g=Math.sin(f),p=Math.cos(d),A=Math.sin(d);l=h*m*p+u*g*A,i=u*m*p-h*g*A,n=h*g*p+u*m*A,o=h*m*A-u*g*p;let D=i+i,B=n+n,v=o+o,x=i*D,y=i*B,S=i*v,F=n*B,C=n*v,w=o*v,E=l*D,Q=l*B,T=l*v,j=t.x,ue=t.y,ee=t.z;r[0]=(1-(F+w))*j,r[1]=(y+T)*j,r[2]=(S-Q)*j,r[3]=0,r[4]=(y-T)*ue,r[5]=(1-(x+w))*ue,r[6]=(C+E)*ue,r[7]=0,r[8]=(S+Q)*ee,r[9]=(C-E)*ee,r[10]=(1-(x+F))*ee,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1}function Zc(s,e,t){let a=s.rawData,r=t.rawData,i=a[0],n=a[4],o=a[8],l=a[12],c=a[1],f=a[5],d=a[9],h=a[13],u=a[2],m=a[6],g=a[10],p=a[14],A=a[3],D=a[7],B=a[11],v=a[15];r[0]=i*e.rawData[0]+c*e.rawData[4]+u*e.rawData[8]+A*e.rawData[12],r[1]=i*e.rawData[1]+c*e.rawData[5]+u*e.rawData[9]+A*e.rawData[13],r[2]=i*e.rawData[2]+c*e.rawData[6]+u*e.rawData[10]+A*e.rawData[14],r[3]=i*e.rawData[3]+c*e.rawData[7]+u*e.rawData[11]+A*e.rawData[15],r[4]=n*e.rawData[0]+f*e.rawData[4]+m*e.rawData[8]+D*e.rawData[12],r[5]=n*e.rawData[1]+f*e.rawData[5]+m*e.rawData[9]+D*e.rawData[13],r[6]=n*e.rawData[2]+f*e.rawData[6]+m*e.rawData[10]+D*e.rawData[14],r[7]=n*e.rawData[3]+f*e.rawData[7]+m*e.rawData[11]+D*e.rawData[15],r[8]=o*e.rawData[0]+d*e.rawData[4]+g*e.rawData[8]+B*e.rawData[12],r[9]=o*e.rawData[1]+d*e.rawData[5]+g*e.rawData[9]+B*e.rawData[13],r[10]=o*e.rawData[2]+d*e.rawData[6]+g*e.rawData[10]+B*e.rawData[14],r[11]=o*e.rawData[3]+d*e.rawData[7]+g*e.rawData[11]+B*e.rawData[15],r[12]=l*e.rawData[0]+h*e.rawData[4]+p*e.rawData[8]+v*e.rawData[12],r[13]=l*e.rawData[1]+h*e.rawData[5]+p*e.rawData[9]+v*e.rawData[13],r[14]=l*e.rawData[2]+h*e.rawData[6]+p*e.rawData[10]+v*e.rawData[14],r[15]=l*e.rawData[3]+h*e.rawData[7]+p*e.rawData[11]+v*e.rawData[15]}function F2(s,e){let t=e.x,a=e.y,r=e.z,i=e.w,n=s.rawData,o=2*t*a,l=2*t*r,c=2*t*i,f=2*a*r,d=2*a*i,h=2*r*i,u=t*t,m=a*a,g=r*r,p=i*i;return n[0]=u-m-g+p,n[4]=o-h,n[8]=l+d,n[12]=0,n[1]=o+h,n[5]=-u+m-g+p,n[9]=f-c,n[13]=0,n[2]=l-d,n[6]=f+c,n[10]=-u-m+g+p,n[14]=0,n[3]=0,n[7]=0,n[11]=0,n[15]=1,s}function k2(s,e){let t=e.rawData,a=Math.sin(s),r=Math.cos(s);return t[0]=r,t[1]=0,t[2]=-a,t[3]=0,t[8]=a,t[9]=0,t[10]=r,t[11]=0,t}function E2(s,e,t){let a=e.x,r=e.y,i=e.z,n=Math.hypot(a,r,i),o,l,c,f,d,h,u,m,g,p,A,D;if(n<S2)return null;n=1/n,a*=n,r*=n,i*=n,o=Math.sin(s),l=Math.cos(s),c=1-l,f=a*a*c+l,d=r*a*c+i*o,h=i*a*c-r*o,u=a*r*c-i*o,m=r*r*c+l,g=i*r*c+a*o,p=a*i*c+r*o,A=r*i*c-a*o,D=i*i*c+l;let B=t.rawData;return B[0]=f,B[1]=d,B[2]=h,B[3]=0,B[4]=u,B[5]=m,B[6]=g,B[7]=0,B[8]=p,B[9]=A,B[10]=D,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function Vn(s,e,t){let a=s.rawData,r=a[0],i=a[1],n=a[2],o=a[3],l=a[4],c=a[5],f=a[6],d=a[7],h=a[8],u=a[9],m=a[10],g=a[11],p=a[12],A=a[13],D=a[14],B=a[15],v=e.rawData,x=t.rawData,y=v[0],S=v[1],F=v[2],C=v[3];return x[0]=y*r+S*l+F*h+C*p,x[1]=y*i+S*c+F*u+C*A,x[2]=y*n+S*f+F*m+C*D,x[3]=y*o+S*d+F*g+C*B,y=v[4],S=v[5],F=v[6],C=v[7],x[4]=y*r+S*l+F*h+C*p,x[5]=y*i+S*c+F*u+C*A,x[6]=y*n+S*f+F*m+C*D,x[7]=y*o+S*d+F*g+C*B,y=v[8],S=v[9],F=v[10],C=v[11],x[8]=y*r+S*l+F*h+C*p,x[9]=y*i+S*c+F*u+C*A,x[10]=y*n+S*f+F*m+C*D,x[11]=y*o+S*d+F*g+C*B,y=v[12],S=v[13],F=v[14],C=v[15],x[12]=y*r+S*l+F*h+C*p,x[13]=y*i+S*c+F*u+C*A,x[14]=y*n+S*f+F*m+C*D,x[15]=y*o+S*d+F*g+C*B,x}var ht=(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))(ht||{});class ws extends xi{static lightSize=24;index=-1;lightType=-1;radius=.001;linear=8;lightPosition=new b;lightMatrixIndex=-1;direction=new b;quadratic=.032;lightColor=new J(1,1,1,1);intensity=1;innerAngle=0;outerAngle=1;range=100;castShadowIndex=-1;lightTangent=b.FORWARD;iesIndex=-1}class Oe{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,a){this.init();let r=this.componentsUpdateList.get(e);r||(r=new Map,this.componentsUpdateList.set(e,r)),r.set(t,a)}static unBindUpdate(e,t){this.init();let a=this.componentsUpdateList.get(e);a&&a.delete(t)}static bindLateUpdate(e,t,a){this.init();let r=this.componentsLateUpdateList.get(e);r||(r=new Map,this.componentsLateUpdateList.set(e,r)),r.set(t,a)}static unBindLateUpdate(e,t){this.init();let a=this.componentsLateUpdateList.get(e);a&&a.delete(t)}static bindBeforeUpdate(e,t,a){this.init();let r=this.componentsBeforeUpdateList.get(e);r||(r=new Map,this.componentsBeforeUpdateList.set(e,r)),r.set(t,a)}static unBindBeforeUpdate(e,t){this.init();let a=this.componentsBeforeUpdateList.get(e);a&&a.delete(t)}static bindCompute(e,t,a){this.init();let r=this.componentsComputeList.get(e);r||(r=new Map,this.componentsComputeList.set(e,r)),r.set(t,a)}static unBindCompute(e,t){this.init();let a=this.componentsComputeList.get(e);a&&a.delete(t)}static bindGraphic(e,t,a){this.init();let r=this.graphicComponent.get(e);r||(r=new Map,this.graphicComponent.set(e,r)),r.set(t,a)}static unBindGraphic(e,t){this.init();let a=this.graphicComponent.get(e);a&&a.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 a=Oe.waitStartComponent.get(e);if(a){let r=a.indexOf(t);r!=-1&&a.splice(r)}}static bindEnablePick(e,t,a){this.init();let r=this.componentsEnablePickerList.get(e);r||(r=new Map,this.componentsEnablePickerList.set(e,r)),r.set(t,a)}static unBindEnablePick(e,t){this.init();let a=this.componentsEnablePickerList.get(e);a&&a.delete(t)}}class et{object3D=null;_eventDispatcher;get eventDispatcher(){return this._eventDispatcher||=new Ya,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?Oe.bindUpdate(this.transform.view3D,this,e):Oe.unBindUpdate(this.transform.view3D,this)}_onLateUpdate(e){e!=null?Oe.bindLateUpdate(this.transform.view3D,this,e):Oe.unBindLateUpdate(this.transform.view3D,this)}_onBeforeUpdate(e){e!=null?Oe.bindBeforeUpdate(this.transform.view3D,this,e):Oe.unBindBeforeUpdate(this.transform.view3D,this)}_onCompute(e){e!=null?Oe.bindCompute(this.transform.view3D,this,e):Oe.unBindCompute(this.transform.view3D,this)}_onGraphic(e){e!=null?Oe.bindGraphic(this.transform.view3D,this,e):Oe.unBindGraphic(this.transform.view3D,this)}beforeDestroy(e){Oe.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 Is{value=0;inv_base=0;static get(e,t){let a=0,r=1/t;for(;e>0;)a+=e%t*r,e/=t,r/=t;return a}getBase(e,t){let a=this.inv_base=1/t;for(;e>0;)this.value+=a*(e%t),e/=t,a*=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,a;do a=t,t*=this.inv_base;while(t>=e);this.value+=a+t-1}}get(){return this.value}}class ba{origin=new b;length=Number.MAX_VALUE;static _rayl=1e9;static _smallnum=1e-8;_vector=new b;_dir=new b;constructor(e,t){this.origin.copyFrom(e||new b),this._dir.copyFrom(t||new b),this._dir.normalize()}get direction(){return this._dir}set direction(e){this._dir.copyFrom(e),this._dir.normalize()}clone(){return new ba(this.origin,this.direction)}intersectBox(e,t){let a=this.direction,r=this.origin,i,n,o,l,c,f;const d=1/a.x,h=1/a.y,u=1/a.z,m=e.min,g=e.max;return i=((d>=0?m.x:g.x)-r.x)*d,n=((d>=0?g.x:m.x)-r.x)*d,o=((h>=0?m.y:g.y)-r.y)*h,l=((h>=0?g.y:m.y)-r.y)*h,i>l||o>n||(o>i&&(i=o),l<n&&(n=l),c=((u>=0?m.z:g.z)-r.z)*u,f=((u>=0?g.z:m.z)-r.z)*u,i>f||c>n)||(c>i&&(i=c),f<n&&(n=f),n<0)?null:(t||=new b,this.pointAt(i>=0?i:n,t))}pointAt(e,t){return t||=new b,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,a=e.subtract(this.origin),r=kt(a,t),i=kt(t,t),n=r/i,o=this.getPoint(n);return Nn(e.subtract(o))}applyMatrix(e){this.origin=e.transformPoint(this.origin),this._dir=e.transformVector(this._dir)}_v0=new b;_v1=new b;_v2=new b;pointInTriangle(e,t,a,r){let i=this._v0,n=this._v1,o=this._v2;r.subtract(t,i),a.subtract(t,n),e.subtract(t,o);let l=b.dot(i,i),c=b.dot(i,n),f=b.dot(i,o),d=b.dot(n,n),h=b.dot(n,o),u=1/(l*d-c*c),m=(d*f-c*h)*u,g=(l*h-c*f)*u;return m>=0&&g>=0&&m+g<1}_E1=new b;_E2=new b;_P=new b;_T=new b;_Q=new b;intersectTriangle(e,t,a){let r=a.v1,i=a.v2,n=a.v3;i.subtract(r,this._E1),n.subtract(r,this._E2),t.crossProduct(this._E2,this._P);let o=this._E1.dotProduct(this._P);if(o>0?e.subtract(r,this._T):(r.subtract(e,this._T),o=-o),o<1e-4||(a.u=this._T.dotProduct(this._P),a.u<0||a.u>o)||(this._T.crossProduct(this._E1,this._Q),a.v=t.dotProduct(this._Q),a.v<0||a.u+a.v>o))return null;let l=new b;a.t0=a.t=this._E2.dotProduct(this._Q);let c=1/o;return a.t*=c,a.u*=c,a.v*=c,l.x=e.x+a.t*t.x,l.y=e.y+a.t*t.y,l.z=e.z+a.t*t.z,l}intersectSphere(e,t,a,r){let i=e.subtract(a),n=b.dot(t,t),o=2*b.dot(i,t),l=b.dot(i,i)-r*r,c=o*o-4*n*l,f=b.HELP_3;if(c<0)return null;{let d=(-o-Math.sqrt(c))/(n*2);return d<0?null:(f.x=e.x+d*t.x,f.y=e.y+d*t.y,f.z=e.z+d*t.z,f)}}intersectionSegment(e,t,a){const r=this.origin,i=b.HELP_0,n=b.HELP_1,o=b.HELP_2,l=b.HELP_3;t.subtract(e,i),this._dir.scaleToRef(ba._rayl,o),r.add(o,n),e.subtract(r,l);var c=b.dot(i,i),f=b.dot(i,o),d=b.dot(o,o),h=b.dot(i,l),u=b.dot(o,l),m=c*d-f*f,g,p,A=m,D,B,v=m;m<ba._smallnum?(p=0,A=1,B=u,v=d):(p=f*u-d*h,B=c*u-f*h,p<0?(p=0,B=u,v=d):p>A&&(p=A,B=u+f,v=d)),B<0?(B=0,-h<0?p=0:-h>c?p=A:(p=-h,A=c)):B>v&&(B=v,-h+f<0?p=0:-h+f>c?p=A:(p=-h+f,A=c)),g=Math.abs(p)<ba._smallnum?0:p/A,D=Math.abs(B)<ba._smallnum?0:B/v;const x=b.HELP_4;o.scaleToRef(D,x);const y=b.HELP_5;i.scaleToRef(g,y),y.add(l,y);const S=b.HELP_6;y.subtract(x,S);var F=D>0&&D<=this._dir.length&&S.lengthSquared<a*a;if(F){let C=new b;return C.copyFrom(t.subtract(e)),C.scaleBy(g),C.add(e,C),{out:C,length:y.length}}return{out:null,length:-1}}get_vec(e,t){let a=b.HELP_1;return a.x=e.x-t.x,a.y=e.y-t.y,a.z=e.z-t.z,a}}class ps{x;y;w;h;constructor(e=0,t=0,a=0,r=0){this.x=e,this.y=t,this.w=a,this.h=r}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,a,r,i,n){return!(e<a||e>i||t<r||t>n)}clone(){return new ps(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,a,r){return!(this.x!=e||this.y!=t||this.width!=a||this.height!=r)}equalInnerArea(e){var t=this.x,a=this.y,r=this.x+this.width,i=this.y+this.height,n=e.x,o=e.y,l=e.x+e.width,c=e.y+e.height;return Math.max(t,n)<=Math.min(r,l)&&Math.max(a,o)<=Math.min(i,c)}innerArea(e,t){t=t||new ps;var a=this.x,r=this.y,i=this.x+this.width,n=this.y+this.height,o=e.x,l=e.y,c=e.x+e.width,f=e.y+e.height,d=Math.max(r,l),h=Math.min(n,f),u=Math.max(a,o),m=Math.min(c,i);return d>=0&&h>=0&&h-d>=0&&m-u>0?(t.x=u,t.y=d,t.width=m-u,t.height=h-d):(t.x=0,t.y=0,t.width=0,t.height=0),t}setTo(e,t,a,r){this.x=e,this.y=t,this.width=a,this.height=r}}class Ce{center;extents;max;min;size;static maxVector3=new b(1,1,1).multiplyScalar(Number.MAX_VALUE*.1);static minVector3=new b(1,1,1).multiplyScalar(-Number.MAX_VALUE*.1);constructor(e,t){e||=b.ZERO.clone(),t||=b.ZERO.clone(),this.setFromCenterAndSize(e,t)}makeEmpty(){return this.setFromMinMax(Ce.maxVector3,Ce.minVector3),this}setFromMinMax(e,t){return this.init(),this.min.copyFrom(e),this.max.copyFrom(t),this.max.subtract(this.min,this.size),this.extents.copyFrom(this.size).multiplyScalar(.5),this.min.add(this.max,this.center).multiplyScalar(.5),this}init(){return this.min||=new b,this.max||=new b,this.size||=new b,this.center||=new b,this.extents||=new b,this}setFromCenterAndSize(e,t){return this.init(),this.center.copyFrom(e),this.size.copyFrom(t),this.extents.copyFrom(this.size).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=this.max.x-this.min.x,this.size.y=this.max.y-this.min.y,this.size.z=this.max.z-this.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.min.x+this.extents.x,this.center.y=this.min.y+this.extents.y,this.center.z=this.min.z+this.extents.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),this.size.x=this.max.x-this.min.x,this.size.y=this.max.y-this.min.y,this.size.z=this.max.z-this.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.min.x+this.extents.x,this.center.y=this.min.y+this.extents.y,this.center.z=this.min.z+this.extents.z}static fromPoints(e){for(var t=new Ce(new b,new b),a=0;a<e.length;a++)t.expandByPoint(e[a]);return t}calculateTransform(e){}clone(){var e=new Ce(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,a=this.max;return t.x<=e.min.x&&t.y<=e.min.y&&t.z<=e.min.z&&a.x>=e.max.x&&a.y>=e.max.y&&a.z>=e.max.z}updateBound(){}destroy(e){this.center=null,this.extents=null,this.min=null,this.max=null,this.size=null}}class On{planes;corners;boundingBox=new Ce;constructor(){this.planes=[],this.corners=[];for(var e=0;e<6;e++)this.planes[e]=new b;for(var e=0;e<8;e++)this.corners[e]=new b}updateBoundBox(e){this.boundingBox.makeEmpty();let t=this.boundingBox.min,a=this.boundingBox.max,r=0;for(let i=0;i<2;++i)for(let n=0;n<2;++n)for(let o=0;o<2;++o){let l=this.corners[r];r++,l.set(2*i-1,2*n-1,o,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),a.x=Math.max(l.x,a.x),a.y=Math.max(l.y,a.y),a.z=Math.max(l.z,a.z)}return this.boundingBox.setFromMinMax(t,a),this}setFrustumCorners(e){let t=0;for(let a=0;a<2;++a)for(let r=0;r<2;++r)for(let i=0;i<2;++i){let n=this.corners[t];n.set(2*a-1,2*r-1,i,1),e.transformVector4(n,n),n.div(n.w,n),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 a=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/=a,this.planes[0].y/=a,this.planes[0].z/=a,this.planes[0].w/=a,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],a=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/=a,this.planes[1].y/=a,this.planes[1].z/=a,this.planes[1].w/=a,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],a=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/=a,this.planes[2].y/=a,this.planes[2].z/=a,this.planes[2].w/=a,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],a=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/=a,this.planes[3].y/=a,this.planes[3].z/=a,this.planes[3].w/=a,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],a=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/=a,this.planes[4].y/=a,this.planes[4].z/=a,this.planes[4].w/=a,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],a=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/=a,this.planes[5].y/=a,this.planes[5].z/=a,this.planes[5].w/=a}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,a=0,r,i=e.transform.worldPosition,n=t.radius,o=t.center.x+i.x,l=t.center.y+i.y,c=t.center.z+i.z;for(let f of this.planes){if(r=f.x*o+f.y*l+f.z*c+f.w,r<=-n)return 0;r>n&&a++}return a===6?2:1}containsBox(e){let t=0,a,i=Math.max(e.size.x,e.size.y,e.size.z)*2,n=e.center.x,o=e.center.y,l=e.center.z;for(let c of this.planes){if(a=c.x*n+c.y*o+c.z*l+c.w,a<=-i)return 0;a>i&&t++}return t===6?2:1}containsBox2(e){let t=0,a,r=1.74*Math.max(e.extents.x,e.extents.y,e.extents.z);for(let i of this.planes){if(a=i.x*e.center.x+i.y*e.center.y+i.z*e.center.z+i.w,a<=-r)return 0;a>r&&t++}return t===6?2:1}containsBoxPrecise(e){const t=[new b(e.min.x,e.min.y,e.min.z),new b(e.max.x,e.min.y,e.min.z),new b(e.min.x,e.max.y,e.min.z),new b(e.max.x,e.max.y,e.min.z),new b(e.min.x,e.min.y,e.max.z),new b(e.max.x,e.min.y,e.max.z),new b(e.min.x,e.max.y,e.max.z),new b(e.max.x,e.max.y,e.max.z)];let a=0;for(let r=0;r<6;r++){const i=this.planes[r];let n=-1/0,o=1/0;for(let l=0;l<8;l++){const c=t[l],f=i.x*c.x+i.y*c.y+i.z*c.z+i.w;n=Math.max(n,f),o=Math.min(o,f)}if(n<0)return 0;o>0&&a++}return a===6?2:1}}var ot=(s=>(s[s.ortho=0]="ortho",s[s.perspective=1]="perspective",s[s.shadow=2]="shadow",s))(ot||{});class w2{corners;index;constructor(e){this.index=e,this.corners=[];for(let t=0;t<4;t++)this.corners.push(new b)}}class I2{bound;twoSections;name;color;shadowCamera;index;constructor(e,t,a){this.bound=new Ce,this.shadowCamera=gt.createCamera3DObject(null,"csmShadowCamera_"+a),this.shadowCamera.isShadowCamera=!0,this.shadowCamera.orthoOffCenter(100,-100,100,-100,1,1e4),this.twoSections=[e,t],this.index=a,a==0?this.color=new J(1,0,0,1):a==1?this.color=new J(0,1,0,1):a==2?this.color=new J(0,0,1,1):a==3&&(this.color=new J(0,1,1,1)),this.name="child_"+a}updateBound(){this.bound.makeEmpty();let e=this.bound.min,t=this.bound.max;for(let a of this.twoSections)for(let r of a.corners)e.x=Math.min(r.x,e.x),e.y=Math.min(r.y,e.y),e.z=Math.min(r.z,e.z),t.x=Math.max(r.x,t.x),t.y=Math.max(r.y,t.y),t.z=Math.max(r.z,t.z);return this.bound.setFromMinMax(e,t),this}}class Yc{sections;children;name;constructor(e){this.sections=[];let t=e+1;for(let a=0;a<t;a++)this.sections.push(new w2(a));this.children=[];for(let a=0;a<e;a++)this.children.push(new I2(this.sections[a],this.sections[a+1],a))}update(e,t,a,r,i){let n=this.sections.length-1;for(let o=0;o<=n;++o){let l=this.sections[o],c=0,f=this.logSplit(a,r,o,this.sections.length);{let h=(f-a)/r;h=h**i.csmScatteringExp,f=(r-a)*h+a}f*=i.csmAreaScale;let d=(e.rawData[10]*f+e.rawData[14])/f;for(let h=0;h<2;++h)for(let u=0;u<2;++u){let m=l.corners[c];c++,m.set(2*h-1,2*u-1,d,1),t.transformVector4(m,m),m.div(m.w,m)}}for(let o of this.children)o.updateBound();return this}squareSplit(e,t,a,r){return(a/(r-1))**4*(t-e)+e}uniformSplit(e,t,a,r){return a/(r-1)*(t-e)+e}logSplit(e,t,a,r){return e*(t/e)**(a/(r-1))}}class ai extends et{fov=60;name;aspect=1;near=1;far=5e3;left=-100;right=100;top=100;bottom=-100;frustumSize=100;viewPort=new ps;frustum;sh=new Float32Array(36);isShadowCamera=!1;_projectionMatrixInv=new R;_projectionMatrix=new R;_viewMatrix=new R;_viewMatrixInv=new R;_unprojection=new R;_pvMatrixInv=new R;_pvMatrix=new R;_halfw;_halfh;_ray;_enableCSM=!1;mainCamera;get projectionMatrix(){return this._projectionMatrix}lookTarget;type=ot.perspective;csm;cubeShadowCameras=[];get enableCSM(){return this._enableCSM}set enableCSM(e){e&&!this.csm&&(this.csm=new Yc(na.Cascades)),this._enableCSM=e}constructor(){super()}init(){super.init(),this._ray=new ba,this.frustum=new On,this.lookTarget=new b(0,0,0),this.viewPort.x=0,this.viewPort.y=0,this.viewPort.w=I.presentationSize[0],this.viewPort.h=I.presentationSize[1],this.updateProjection(),I.addEventListener(lr.RESIZE,this.updateProjection,this)}updateProjection(){this.aspect=I.aspect,this.type==ot.perspective?this.perspective(this.fov,this.aspect,this.near,this.far):this.type==ot.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,a=this.far-this.near;return t/a-_.setting.shadow.shadowBias*.01}getShadowWorldExtents(){let e=_.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,a=this.csm.children[0].shadowCamera;return(a.far-a.near)/t}getCSMShadowWorldExtents(e){return Math.round(this.csm.children[e].bound.extents.length)}perspective(e,t,a,r){this.fov=e,this.aspect=t,this.near=Math.max(.001,a),this.far=r,this._projectionMatrix.perspective(this.fov,this.aspect,this.near,this.far),this.type=ot.perspective}ortho(e,t,a){this.frustumSize=e;let r=e*.5*this.aspect,i=e*.5,n=-r/2,o=r/2,l=i/2,c=-i/2;this.orthoOffCenter(n,o,c,l,t,a)}orthoOffCenter(e,t,a,r,i,n){this.near=i,this.far=n,this.left=e,this.right=t,this.top=r,this.bottom=a,this.type=ot.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 b(0,0,0,1)),this._halfw=this.viewPort.width*.5,this._halfh=this.viewPort.height*.5,zt.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 b),this._halfw=this.viewPort.width*.5,this._halfh=this.viewPort.height*.5;let a=e.x,r=e.y;return t.x=a/this.viewPort.width-.25,t.y=r/this.viewPort.height-.25,this.unProject(t.x,t.y,e.z,t),t}get pvMatrix(){return Vn(this._projectionMatrix,this.viewMatrix,this._pvMatrix),this._pvMatrix}get pvMatrix2(){Vn(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=R.helpMatrix;return e.identity(),e.copyFrom(this.projectionMatrixInv),e.multiply(this.vMatrixInv),e}get ndcToView(){let e=R.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,a,r){return r||(r=new b),r.x=e,r.y=-t,r.z=a,r.w=1,r.x*=a,r.y*=a,this._unprojection.copyFrom(this._projectionMatrix),this._unprojection.invert(),zt.transformVector(this._unprojection,r,r),r.z=a,r}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 a=this._ray,r=gt.UnProjection(e,t,.01,this),i=gt.UnProjection(e,t,1,this);return i=i.subtract(r).normalize(),a.origin.copyFrom(r),a.direction=i,a}screenPointToWorld(e,t,a){return gt.UnProjection(e,t,a,this)}worldToScreenPoint(e,t){return gt.Projection(e,this,t)}lookAt(e,t,a=b.Y_AXIS){this.transform.lookAt(e,t,a),t&&this.lookTarget.copyFrom(t)}onUpdate(){this._useJitterProjection&&this.getJitteredProjectionMatrix(),this.frustum.update(this.pvMatrix),this.frustum.updateBoundBox(this.pvMatrixInv);let e=_.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 Is,this._jitterOffsetList=[];for(let t=0;t<32;t++){let a=this.generateRandomOffset();this._jitterOffsetList.push(a)}this._jitterOffsetList.reverse()}generateRandomOffset(){let e=new de(Is.get((this._sampleIndex&1023)+1,2)-.5,Is.get((this._sampleIndex&1023)+1,3)-.5);return++this._sampleIndex>=32&&(this._sampleIndex=0),e}getJitteredProjectionMatrix(){let e=_.setting.render.postProcessing.taa,t=this._projectionMatrix,a=e.temporalJitterScale,r=this._jitterFrameIndex%e.jitterSeedCount,i=this._jitterOffsetList[r].x*a,n=this._jitterOffsetList[r].y*a,o=t.get(0,2),l=t.get(1,2);this._jitterX=i/this.viewPort.width,this._jitterY=n/this.viewPort.height,o+=this._jitterX,l+=this._jitterY,t.set(0,2,o),t.set(1,2,l),this._jitterFrameIndex++}getWorldDirection(e){e||=new b;const t=this.transform._worldMatrix.rawData;return e.set(-t[8],-t[9],-t[10]).normalize()}}class Yt extends et{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 mt(Yt.POSITION_ONCHANGE);eventRotationChange=new mt(Yt.ROTATION_ONCHANGE);eventScaleChange=new mt(Yt.SCALE_ONCHANGE);eventLocalChange=new mt(Yt.LOCAL_ONCHANGE);onPositionChange;onRotationChange;onScaleChange;_scene3d;_parent;_localPos;_localRot;_localRotQuat;_localScale;_localDetailPos;_localDetailRot;_localDetailScale;index;index2;_forward=new b;_back=new b;_right=new b;_left=new b;_up=new b;_down=new b;_worldMatrix;_targetPos;static=!1;depthOrder=0;get localChange(){return Re.matrixStateBuffer[this.index2]!=0}set localChange(e){Re.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,Re.setParent(this.index,e?e.worldMatrix.index:-1,this.depthOrder),this.localChange=!0,this.object3D){let a=e?e.scene3D:null;a?(this._scene3d=a,this.object3D.components.forEach(r=>{Oe.appendWaitStart(r)})):this.object3D.components.forEach(r=>{r.__stop()});for(let r of this.object3D.entityChildren)r.transform.parent=e?this:null;this.object3D.components.forEach(r=>{r.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 R(!0),this.index=this._worldMatrix.index,this.index2=this._worldMatrix.index*Re.stateStruct,this._localPos=new b,this._localRot=new b,this._localRotQuat=new se,this._localScale=new b(1,1,1),Re.setScale(this.index,this._localScale.x,this._localScale.y,this._localScale.z),Re.setRotation(this.index,this._localRot.x,this._localRot.y,this._localRot.z),Re.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,a=e.length;for(t=0;t<a;t++)e[t].transform.notifyLocalChange()}this.eventDispatcher.dispatchEvent(this.eventLocalChange)}get up(){return this.worldMatrix.transformVector(b.UP,this._up),this._up}set up(e){this._up.copyFrom(e),zt.fromToRotation(b.UP,this._up,se.HELP_0),this.transform.localRotQuat=se.HELP_0}get down(){return this.worldMatrix.transformVector(b.DOWN,this._down),this._down}set down(e){this._down.copyFrom(e),zt.fromToRotation(b.DOWN,this._down,se.HELP_0),this.transform.localRotQuat=se.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get forward(){return this.worldMatrix.transformVector(b.FORWARD,this._forward),this._forward}set forward(e){this._forward.copyFrom(e),zt.fromToRotation(b.FORWARD,this._forward,se.HELP_0),this.transform.localRotQuat=se.HELP_0,this.notifyLocalChange(),this.onRotationChange?.(),this.eventRotationChange&&this.eventDispatcher.dispatchEvent(this.eventRotationChange)}get back(){return this.worldMatrix.transformVector(b.BACK,this._back),this._back}set back(e){this._back.copyFrom(e),zt.fromToRotation(b.BACK,this._back,se.HELP_0),this.transform.localRotQuat=se.HELP_0}get left(){return this.worldMatrix.transformVector(b.neg_X_AXIS,this._left),this._left}set left(e){this._left.copyFrom(e),zt.fromToRotation(b.LEFT,this._left,se.HELP_0),this.transform.localRotQuat=se.HELP_0}get right(){return this.worldMatrix.transformVector(b.X_AXIS,this._right),this._right}set right(e){this._right.copyFrom(e),zt.fromToRotation(b.RIGHT,this._right,se.HELP_0),this.transform.localRotQuat=se.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),Re.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?(Es(this._localRot,this._localPos,this._localScale,this._worldMatrix),Zc(this._worldMatrix,this.parent.worldMatrix,this._worldMatrix)):Es(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=b.UP){this.lookAt(this.transform.worldPosition,e,t)}lookAt(e,t,a=b.UP){this._targetPos||=new b,this._targetPos.copyFrom(t),this.localPosition=e,R.helpMatrix.lookAt(e,t,a),R.helpMatrix.invert();var r=R.helpMatrix.decompose(oa.QUATERNION);this.localRotQuat=se.CALCULATION_QUATERNION.copyFrom(r[1])}decomposeFromMatrix(e,t="eulerAngles"){let a=e.decompose(t),r=this.transform;return r.localRotQuat.copyFrom(a[1]),r.localRotQuat=r.localRotQuat,r.localPosition.copyFrom(a[0]),r.localPosition=r.localPosition,r.localScale.copyFrom(a[2]),r.localScale=r.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,Re.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,Re.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,Re.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,Re.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,Re.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,Re.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,Re.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,Re.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,Re.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),Re.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),Re.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){Re.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,Re.setContinueScale(this.index,e.x,e.y,e.z)}get localDetailRot(){return this._localDetailRot}set localDetailRot(e){this._localDetailRot=e,Re.setContinueRotation(this.index,e.x,e.y,e.z)}get localDetailPos(){return this._localDetailPos}set localDetailPos(e){this._localDetailPos=e,Re.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 la{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 G=(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))(G||{}),De=(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))(De||{}),Xc=(s=>(s[s.src_a=0]="src_a",s[s.dest_a=1]="dest_a",s))(Xc||{});class Hc{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 Ia{static mipmapShader=`
5670
5670
  var<private> pos : array<vec2<f32>, 4> = array<vec2<f32>, 4>(
5671
5671
  vec2<f32>(-1.0, 1.0), vec2<f32>(1.0, 1.0),
5672
5672
  vec2<f32>(-1.0, -1.0), vec2<f32>(1.0, -1.0));
@@ -5692,21 +5692,21 @@ struct InstanceData {
5692
5692
  var outColor: vec4<f32> = textureSampleLevel(img, imgSampler, texCoord, 0.0);
5693
5693
  return outColor;
5694
5694
  }
5695
- `;static pipelineCache={};static pipeline;static getMipmapPipeline(e){let t=I.device,a=Ia.pipelineCache[e.format];if(!a){const r=t.createShaderModule({code:Ia.mipmapShader});let i=t.createBindGroupLayout({entries:[{binding:0,visibility:e.visibility,sampler:e.samplerBindingLayout},{binding:1,visibility:e.visibility,texture:e.textureBindingLayout}]}),n=I.device.createPipelineLayout({bindGroupLayouts:[i]});a=t.createRenderPipeline({layout:n,vertex:{module:r,entryPoint:"vertexMain"},fragment:{module:r,entryPoint:"fragmentMain",targets:[{format:e.format}]},primitive:{topology:"triangle-strip",stripIndexFormat:"uint32"}}),Ia.pipelineCache[e.format]=a}return a}static webGPUGenerateMipmap(e){let t=I.device,a=e.textureDescriptor,r=Ia.getMipmapPipeline(e),i=e.getGPUTexture().createView({baseMipLevel:0,mipLevelCount:1});const n=k.beginCommandEncoder();for(let o=1;o<a.mipLevelCount;++o){const l=e.getGPUTexture().createView({baseMipLevel:o,mipLevelCount:1}),c=n.beginRenderPass({colorAttachments:[{view:l,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"}]});let f=t.createBindGroupLayout({entries:[{binding:0,visibility:e.visibility,sampler:e.samplerBindingLayout},{binding:1,visibility:e.visibility,texture:e.textureBindingLayout}]});const d=t.createBindGroup({layout:f,entries:[{binding:0,resource:e.gpuSampler},{binding:1,resource:i}]});c.setPipeline(r),c.setBindGroup(0,d),c.draw(4),c.end(),i=l}k.endCommandEncoder(n)}static getMipmapCount(e,t){let i=Math.max(e,t);return 1+Math.log2(i)|0}}class ut{name;url;gpuTexture;_isDestroyed=!1;get isDestroyed(){return this._isDestroyed}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,a=1){this.width=e,this.height=t,this.numberLayer=a,this.minFilter=hr.linear,this.magFilter=hr.linear,this.mipmapFilter=hr.linear,this.addressModeU=qt.repeat,this.addressModeV=qt.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,a,r,i=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.STORAGE_BINDING,n=1,o=0){this.width=e,this.height=t,this.format=r,this.usage=i,this.textureDescriptor={size:[e,t,n],mipLevelCount:a,format:r,usage:i,label:`${this.name+this.width+this.height+this.format}`},o>0&&(this.textureDescriptor.sampleCount=o),n>1?this.viewDescriptor={format:r,dimension:"2d-array"}:this.viewDescriptor={format:r,dimension:this.textureBindingLayout.viewDimension,mipLevelCount:a,baseMipLevel:0}}generate(e){let t=32,a=32;"width"in e&&(t=e.width,a=e.height),(t<32||a<32)&&console.log(e.name+"Size must be greater than 32!"),this.width=t,this.height=a,this.createTexture(e)}createTexture(e){this._sourceImageData=e,this.updateTextureDescription(),this.updateGPUTexture();let t=I.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height]),this.useMipmap&&Ia.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=I.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height]),Ia.webGPUGenerateMipmap(this)}}else if(this.samplerBindingLayout.type="non-filtering",this._useMipmap==!0&&this._sourceImageData){this._useMipmap=!1,this.updateTextureDescription(),this.updateGPUTexture();let t=I.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,a=Math.max(e,t);return 1+Math.log2(a)|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=I.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=I.device.createSampler(this),this._stateChangeRef.forEach((e,t)=>{e()})}destroy(e){if(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._isDestroyed=!0),this._sourceImageData&&this._sourceImageData instanceof ImageBitmap){try{this._sourceImageData.close()}catch{}this._sourceImageData=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 Kc extends ut{_bitmapTextures;constructor(e,t,a){super(e,t,a),this.format=oe.rgba8unorm,this.mipmapCount=1,this._bitmapTextures=[],this.init()}setTextures(e){this._bitmapTextures.length=0;for(let t=0;t<e.length;t++){const a=e[t];this.addTexture(a)}}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 a=0;a<this._bitmapTextures.length;a++){const r=this._bitmapTextures[a];r.pid=a}}}updateTexture(){let e=k.beginCommandEncoder();for(let t=0;t<this._bitmapTextures.length;t++){let a=this._bitmapTextures[t];e.copyTextureToTexture({texture:a.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})}k.endCommandEncoder(e)}internalCreateBindingLayoutDesc(){this.textureBindingLayout.viewDimension="2d-array",this.samplerBindingLayout.type="filtering",this.minFilter=hr.linear,this.magFilter=hr.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=I.device.createSampler(this)}}class Ra{static use=!1;static iesTexture;static ies_list=[];_iesTexture;index=0;constructor(){}generateIES(e){}set IESTexture(e){this._iesTexture=e,e.addressModeU=qt.repeat,e.addressModeV=qt.repeat,e.addressModeW=qt.repeat,Ra.ies_list.indexOf(this)==-1&&(this.index=Ra.ies_list.length,Ra.ies_list.push(this),Ra.iesTexture||Ra.create(e.width,e.height),Ra.iesTexture.addTexture(e))}get IESTexture(){return this._iesTexture}static create(e,t){let a=48;this.iesTexture=new Kc(e,t,a)}}class Ln{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=I.device.createBindGroupLayout({entries:e}),this._globalDataBindGroupLayout}}class yi{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 x=(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))(x||{});class ri{_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!==`
5695
+ `;static pipelineCache={};static pipeline;static getMipmapPipeline(e){let t=I.device,a=Ia.pipelineCache[e.format];if(!a){const r=t.createShaderModule({code:Ia.mipmapShader});let i=t.createBindGroupLayout({entries:[{binding:0,visibility:e.visibility,sampler:e.samplerBindingLayout},{binding:1,visibility:e.visibility,texture:e.textureBindingLayout}]}),n=I.device.createPipelineLayout({bindGroupLayouts:[i]});a=t.createRenderPipeline({layout:n,vertex:{module:r,entryPoint:"vertexMain"},fragment:{module:r,entryPoint:"fragmentMain",targets:[{format:e.format}]},primitive:{topology:"triangle-strip",stripIndexFormat:"uint32"}}),Ia.pipelineCache[e.format]=a}return a}static webGPUGenerateMipmap(e){let t=I.device,a=e.textureDescriptor,r=Ia.getMipmapPipeline(e),i=e.getGPUTexture().createView({baseMipLevel:0,mipLevelCount:1});const n=k.beginCommandEncoder();for(let o=1;o<a.mipLevelCount;++o){const l=e.getGPUTexture().createView({baseMipLevel:o,mipLevelCount:1}),c=n.beginRenderPass({colorAttachments:[{view:l,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"}]});let f=t.createBindGroupLayout({entries:[{binding:0,visibility:e.visibility,sampler:e.samplerBindingLayout},{binding:1,visibility:e.visibility,texture:e.textureBindingLayout}]});const d=t.createBindGroup({layout:f,entries:[{binding:0,resource:e.gpuSampler},{binding:1,resource:i}]});c.setPipeline(r),c.setBindGroup(0,d),c.draw(4),c.end(),i=l}k.endCommandEncoder(n)}static getMipmapCount(e,t){let i=Math.max(e,t);return 1+Math.log2(i)|0}}class ut{name;url;gpuTexture;_isDestroyed=!1;get isDestroyed(){return this._isDestroyed}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,a=1){this.width=e,this.height=t,this.numberLayer=a,this.minFilter=hr.linear,this.magFilter=hr.linear,this.mipmapFilter=hr.linear,this.addressModeU=qt.repeat,this.addressModeV=qt.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,a,r,i=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.STORAGE_BINDING,n=1,o=0){this.width=e,this.height=t,this.format=r,this.usage=i,this.textureDescriptor={size:[e,t,n],mipLevelCount:a,format:r,usage:i,label:`${this.name+this.width+this.height+this.format}`},o>0&&(this.textureDescriptor.sampleCount=o),n>1?this.viewDescriptor={format:r,dimension:"2d-array"}:this.viewDescriptor={format:r,dimension:this.textureBindingLayout.viewDimension,mipLevelCount:a,baseMipLevel:0}}generate(e){let t=32,a=32;"width"in e&&(t=e.width,a=e.height),(t<32||a<32)&&console.log(e.name+"Size must be greater than 32!"),this.width=t,this.height=a,this.createTexture(e)}createTexture(e){this._sourceImageData=e,this.updateTextureDescription(),this.updateGPUTexture();let t=I.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height]),this.useMipmap&&Ia.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=I.device;this.gpuTexture instanceof GPUTexture&&t.queue.copyExternalImageToTexture({source:this._sourceImageData},{texture:this.gpuTexture},[this.width,this.height]),Ia.webGPUGenerateMipmap(this)}}else if(this.samplerBindingLayout.type="non-filtering",this._useMipmap==!0&&this._sourceImageData){this._useMipmap=!1,this.updateTextureDescription(),this.updateGPUTexture();let t=I.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,a=Math.max(e,t);return 1+Math.log2(a)|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=I.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=I.device.createSampler(this),this._stateChangeRef.forEach((e,t)=>{e()})}destroy(e){if(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._isDestroyed=!0),this._sourceImageData&&this._sourceImageData instanceof ImageBitmap){try{this._sourceImageData.close()}catch{}this._sourceImageData=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 Kc extends ut{_bitmapTextures;constructor(e,t,a){super(e,t,a),this.format=oe.rgba8unorm,this.mipmapCount=1,this._bitmapTextures=[],this.init()}setTextures(e){this._bitmapTextures.length=0;for(let t=0;t<e.length;t++){const a=e[t];this.addTexture(a)}}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 a=0;a<this._bitmapTextures.length;a++){const r=this._bitmapTextures[a];r.pid=a}}}updateTexture(){let e=k.beginCommandEncoder();for(let t=0;t<this._bitmapTextures.length;t++){let a=this._bitmapTextures[t];e.copyTextureToTexture({texture:a.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})}k.endCommandEncoder(e)}internalCreateBindingLayoutDesc(){this.textureBindingLayout.viewDimension="2d-array",this.samplerBindingLayout.type="filtering",this.minFilter=hr.linear,this.magFilter=hr.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=I.device.createSampler(this)}}class Ra{static use=!1;static iesTexture;static ies_list=[];_iesTexture;index=0;constructor(){}generateIES(e){}set IESTexture(e){this._iesTexture=e,e.addressModeU=qt.repeat,e.addressModeV=qt.repeat,e.addressModeW=qt.repeat,Ra.ies_list.indexOf(this)==-1&&(this.index=Ra.ies_list.length,Ra.ies_list.push(this),Ra.iesTexture||Ra.create(e.width,e.height),Ra.iesTexture.addTexture(e))}get IESTexture(){return this._iesTexture}static create(e,t){let a=48;this.iesTexture=new Kc(e,t,a)}}class Ln{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=I.device.createBindGroupLayout({entries:e}),this._globalDataBindGroupLayout}}class yi{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 U=(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))(U||{});class ri{_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!==`
5696
5696
  `?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===`
5697
5697
  `}skipComment(){for(;this._char!==`
5698
5698
  `&&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(`
5699
- `,this._currPosition);return t==-1&&(t=this._source.length),this._line++,this._column=0,this._currPosition=t,this._nextPosition=t+1,this._source.substring(e,t+1)}}class qc extends ri{_tokenPosition=0;_tokens=[];constructor(e){super(e.source),this.parse()}skipToken(e){this._tokenPosition+=e}peekToken(e){return this._tokenPosition+e>=this._tokens.length?new yi(x.EOF,"\0"):this._tokens[this._tokenPosition+e]}GetNextToken(){if(this._tokenPosition>=this._tokens.length)return new yi(x.EOF,"\0");let e=this._tokens[this._tokenPosition];return this._tokenPosition++,e}get currTokenPosition(){return this._tokenPosition}parse(){this.readChar(),this._tokens=new Array;var e;do e=this.nextToken(),this._tokens.push(e);while(e.Type!=x.EOF)}nextToken(){if(this.skipWhitespace(),this._char==="/"){if(this.peekChar()==="/")return this.skipComment(),this.nextToken();if(this.peekChar()==="*")return this.skipMultilineComment(),this.nextToken()}var e=new yi;switch(e.Line=this._line,e.Colume=this._column,this._char){case"\0":e.Type=x.EOF,e.Literal="EOF";break;case".":e.Type=x.DOT,e.Literal=".";break;case",":e.Type=x.COMMA,e.Literal=",";break;case":":e.Type=x.COLON,e.Literal=":";break;case"?":e.Type=x.QUEMARK,e.Literal="?";break;case";":e.Type=x.SEMICOLON,e.Literal=";";break;case"(":e.Type=x.LEFTSAMLL,e.Literal="(";break;case")":e.Type=x.RIGHTSAMLL,e.Literal=")";break;case"[":e.Type=x.LEFTMEDI,e.Literal="[";break;case"]":e.Type=x.RIGHTMEDI,e.Literal="]";break;case"{":e.Type=x.LEFTBIG,e.Literal="{";break;case"}":e.Type=x.RIGHTBIG,e.Literal="}";break;case"+":if(this.peekChar()==="+"){this.readChar(),e.Type=x.INC,e.Literal="++";break}else if(this.peekChar()==="="){this.readChar(),e.Type=x.ADDASSIGN,e.Literal="+=";break}e.Type=x.ADD,e.Literal="+";break;case"-":if(this.peekChar()==="-"){this.readChar(),e.Type=x.DEC,e.Literal="--";break}else if(this.peekChar()==="="){this.readChar(),e.Type=x.SUBASSIGN,e.Literal="-=";break}e.Type=x.SUB,e.Literal="-";break;case"*":if(this.peekChar()==="="){this.readChar(),e.Type=x.MULASSIGN,e.Literal="*=";break}e.Type=x.MUL,e.Literal="*";break;case"/":if(this.peekChar()==="="){this.readChar(),e.Type=x.DIVASSIGN,e.Literal="/=";break}e.Type=x.DIV,e.Literal="/";break;case"&":if(this.peekChar()==="&"){this.readChar(),e.Type=x.AND,e.Literal="&&";break}e.Type=x.BITAND,e.Literal="&";break;case"|":if(this.peekChar()==="|"){this.readChar(),e.Type=x.OR,e.Literal="||";break}e.Type=x.BITOR,e.Literal="&";break;case"^":e.Type=x.BITXOR,e.Literal="^";break;case"!":if(this.peekChar()==="="){this.readChar(),e.Type=x.NOTEQUAL,e.Literal="!=";break}e.Type=x.NOT,e.Literal="!";break;case">":if(this.peekChar()==="="){this.readChar(),e.Type=x.GREATEREQUAL,e.Literal=">=";break}else if(this.peekChar()===">"){this.readChar(),e.Type=x.BITSHIFT_R,e.Literal=">>";break}e.Type=x.GREATER,e.Literal=">";break;case"=":if(this.peekChar()==="="){this.readChar(),e.Type=x.EQUAL,e.Literal="==";break}e.Type=x.ASSIGN,e.Literal="=";break;case"<":if(this.peekChar()==="="){this.readChar(),e.Type=x.LESSEQUAL,e.Literal="<=";break}else if(this.peekChar()==="<"){this.readChar(),e.Type=x.BITSHIFT_L,e.Literal="<<";break}e.Type=x.LESS,e.Literal="<";break;default:return this.isDigit(this._char)?this.readDecimal():(e.Literal=this.readIdentifier(),e.Type=this.lookupIdentifier(e.Literal),this.getChar()=="["&&this.peekChar()=="]"&&e.isBuiltinType()&&(e.Type++,e.Literal+="[]",this.readChar(),this.readChar()),e)}return this.readChar(),e}readDecimal(){var e=new yi;e.Line=this._line,e.Colume=this._column,e.Type=x.LITERAL;var t=this.readNumber();return this._char==="e"?(e.Literal=t+this._char,this.readChar(),e.Literal+=this._char,this.readChar(),e.Literal+=this.readNumber(),e.Type=x.LITERAL,e):this._char==="u"?(this.readChar(),e.Type=x.LITERAL,e.Literal=t+"u",e):this._char==="f"?(this.readChar(),e.Type=x.LITERAL,e.Literal=t+"f",e):(e.Type=x.LITERAL,e.Literal=t,e)}lookupIdentifier(e){switch(e){case"void":return x.VOID;case"int":return x.INT;case"uint":return x.UINT;case"bool":return x.BOOL;case"true":return x.BOOL;case"false":return x.BOOL;case"float":return x.FLOAT;case"vec2":return x.VEC2;case"vec3":return x.VEC3;case"vec4":return x.VEC4;case"bvec2":return x.BVEC2;case"bvec3":return x.BVEC3;case"bvec4":return x.BVEC4;case"ivec2":return x.IVEC2;case"ivec3":return x.IVEC3;case"ivec4":return x.IVEC4;case"uvec2":return x.UVEC2;case"uvec3":return x.UVEC3;case"uvec4":return x.UVEC4;case"mat2":return x.MAT2x2;case"mat2x2":return x.MAT2x2;case"mat2x3":return x.MAT2x3;case"mat2x4":return x.MAT2x4;case"mat3":return x.MAT3x3;case"mat3x2":return x.MAT3x2;case"mat3x3":return x.MAT3x3;case"mat3x4":return x.MAT3x4;case"mat4":return x.MAT4x4;case"mat4x2":return x.MAT4x2;case"mat4x3":return x.MAT4x3;case"mat4x4":return x.MAT4x4;case"sampler":return x.SAMPLER;case"sampler1D":return x.SAMPLER_1D;case"sampler2D":return x.SAMPLER_2D;case"sampler3D":return x.SAMPLER_3D;case"samplerCube":return x.SAMPLER_CUBE;case"samplerShadow":return x.SAMPLER_SHADOW;case"sampler1DShadow":return x.SAMPLER_1D_SHADOW;case"sampler2DShadow":return x.SAMPLER_2D_SHADOW;case"texture1D":return x.TEXTURE_1D;case"texture2D":return x.TEXTURE_2D;case"texture3D":return x.TEXTURE_3D;case"textureCube":return x.TEXTURE_CUBE;case"texture1DArray":return x.TEXTURE_1D_ARRAY;case"texture2DArray":return x.TEXTURE_2D_ARRAY;case"textureCubeArray":return x.TEXTURE_CUBE_ARRAY;case"const":return x.CONST;case"layout":return x.LAYOUT;case"precision":return x.PRECISION;case"attribute":return x.ATTRIBUTE;case"uniform":return x.UNIFORM;case"varying":return x.VARYING;case"invariant":return x.INVARIANT;case"in":return x.IN;case"out":return x.OUT;case"inout":return x.INOUT;case"if":return x.IF;case"else":return x.ELSE;case"for":return x.FOR;case"while":return x.WHILE;case"do":return x.DO;case"break":return x.BREAK;case"return":return x.RETURN;case"continue":return x.CONTINUE;case"struct":return x.STRUCT}return x.IDENT}}class R2{name="";value="";args=[]}class $c extends ri{_result;_skipLine;_definitionTables;constructor(e){super(e),this._result="",this._skipLine=!1,this._definitionTables=new Map,this.parse()}parse(){for(this.readChar();this._char!=="\0";){if(this.skipWhitespace(),this._char==="/"){if(this.peekChar()==="/"){this.skipComment();continue}if(this.peekChar()==="*"){this.skipMultilineComment();continue}}if(this._char==="#"){this.readCharAndSkipWhitespace();var e=this.readIdentifier();switch(e){case"version":this.readLine().trim();break;case"define":this.readCharAndSkipWhitespace();var t=this.readIdentifier();if(this.getChar()==="("){let o=new R2;if(this.readCharAndSkipWhitespace(),this.getChar()!==")")do{var a=this.readIdentifier();if(o.args.push(a),this.skipWhitespace(),this.getChar()===","){this.readCharAndSkipWhitespace();continue}}while(this.getChar()!==")");this.readCharAndSkipWhitespace(),o.name=t,o.value=this.readLine().trim(),this._definitionTables.set(t,o),this.readCharAndSkipWhitespace()}else{let o=this.readLine().trim();o[0]=="="&&(o=o.substring(1)),this._definitionTables.set(t,o)}break;case"if":let n=this.readLine().trim();if(n=="0"||n=="false"){this._skipLine=!0;break}if(this._definitionTables.has(n)&&(n=this._definitionTables.get(n),n=="0"||n=="false")){this._skipLine=!0;break}break;case"ifdef":this.readCharAndSkipWhitespace();var r=this.readIdentifier();this._skipLine=!this._definitionTables.has(r);break;case"else":this._skipLine=!this._skipLine;break;case"endif":this._skipLine=!1;break;default:throw"Unknown preprocessing command:"+e}}else{var i=this.readLine();if(!this._skipLine){for(let n of this._definitionTables.keys()){let o=i.indexOf(n);if(o!=-1){let l=this._definitionTables.get(n);if(typeof l=="string")i=i.replace(n,l);else{let c=l,f=new ri(i.substring(o+n.length));if(f.readCharAndSkipWhitespace(),f.getChar()==="("){f.readCharAndSkipWhitespace();for(let m=1;f.getChar()!=="\0"&&m>0;){switch(f.getChar()){case"(":m++;break;case")":m--;break}f.readCharAndSkipWhitespace()}}let d=o,h=d+n.length+f.currPosition,u=i.substring(d,h).trim();if(c.args.length>0){let m=[],g=u.substring(u.indexOf("(")+1,u.lastIndexOf(")")).trim();g.length>0&&(m=this.parseArgs(g));let p=c.value.substring(c.value.indexOf("("));for(let A=0;A<c.args.length;A++)p=p.replace(c.args[A],m[A]);p=c.value.substring(0,c.value.indexOf("("))+p,i=i.replace(u,p)}else i=i.replace(u,c.value)}}}this._result+=i}this.readChar()}}}get source(){return this._result}parseArgs(e){let t=[],a=0,r=new ri(e),i=r.currPosition;if(r.readCharAndSkipWhitespace(),r.getChar()!=="\0")for(r.readCharAndSkipWhitespace();r.getChar()!=="\0";){switch(r.getChar()){case"(":a++;break;case")":a--;break;case",":if(a==0){let n=e.substring(i,r.currPosition);t.push(n),i=r.currPosition+1}break}r.readCharAndSkipWhitespace()}if(i<r.currPosition){let n=e.substring(i,r.currPosition);t.push(n)}return t}}class e0{result;ASTRoot;_syntax;constructor(e){this.result="",this._syntax=e,this.ASTRoot=e.ASTRoot}generateWGSL(){let e=new Gn;var t=new s0;let a=[],r=[],i=[];for(let f of this.ASTRoot.nodes)if(f instanceof cs)if(f.scope=="in")if(f.nodes[0]instanceof rt){e.layoutsIn.push(f);let d=new Wn;d.name=f.nodes[0].name,d.type=f.nodes[0].type,d.locationID=Number.parseInt(f.qualifier.get("location")),t.inputAttribute.push(d)}else if(f.qualifier.has("local_size_x"))e.workGroupSize=f;else throw"not impl";else if(f.scope=="out")if(e.layoutsOut.push(f),f.nodes[0]instanceof rt){let d=new Wn;d.name=f.nodes[0].name,d.type=f.nodes[0].type,d.locationID=Number.parseInt(f.qualifier.get("location")),t.outputAttribute.push(d)}else throw"not impl";else if(f.scope=="uniform")if(r.push(f),f.nodes[0]instanceof rt){let d=new zn;d.name=f.nodes[0].name,d.type=f.nodes[0].type,d.setID=Number.parseInt(f.qualifier.get("set")),d.bindingID=Number.parseInt(f.qualifier.get("binding")),t.uniformInfo.push(d)}else if(f.nodes[0]instanceof tr){let d=new zn;d.name="unif"+t.uniformInfo.length.toString(),d.type=f.nodes[0].name,d.setID=Number.parseInt(f.qualifier.get("set")),d.bindingID=Number.parseInt(f.qualifier.get("binding")),t.uniformInfo.push(d)}else throw"not impl";else f.scope=="buffer"&&a.push(f);else i.push(f);e.stage="fragment";let n=0,o=new ri(""),l=this._syntax.lexer.source,c=new Map;for(;(n=l.indexOf("gl_",n))!=-1;){o.reset(l.substring(n,n+32)),o.readChar();let f=o.readIdentifier();if(n+=f.length,!c.has(f))switch(c.set(f,f),f){case"gl_InstanceID":e.stage="vertex",e.builtinIn.push("@builtin(instance_index) gl_InstanceID: u32");break;case"gl_Position":e.stage="vertex",e.builtinOut.push("@builtin(position) gl_Position: vec4<f32>"),e.addIdentifier("gl_Position","stout.gl_Position");break;case"gl_VertexIndex":e.stage="vertex",e.builtinIn.push("@builtin(vertex_index) gl_VertexIndex: u32");break;case"gl_FrontFacing":e.stage="fragment",e.builtinIn.push("@builtin(front_facing) gl_FrontFacing: bool");break;case"gl_FragDepth":e.stage="fragment",e.builtinOut.push("@builtin(frag_depth) gl_FragDepth: f32"),e.addIdentifier("gl_FragDepth","stout.gl_FragDepth");break;case"gl_WorkGroupID":e.stage="compute",e.builtinIn.push("@builtin(workgroup_id) gl_WorkGroupID: vec3<u32>");break;case"gl_NumWorkGroups":e.stage="compute",e.builtinIn.push("@builtin(num_workgroups) gl_NumWorkGroups: vec3<u32>");break;case"gl_LocalInvocationID":e.stage="compute",e.builtinIn.push("@builtin(local_invocation_id) gl_LocalInvocationID: vec3<u32>");break;case"gl_LocalInvocationIndex":e.stage="compute",e.builtinIn.push("@builtin(local_invocation_index) gl_LocalInvocationIndex: u32");break;case"gl_GlobalInvocationID":e.stage="compute",e.builtinIn.push("@builtin(global_invocation_id) gl_GlobalInvocationID: vec3<u32>");break;default:throw"Unprocessed built-in variables: "+f}}for(let f of r)f.nodes[0]instanceof tr&&(t.sourceCode+=f.nodes[0].formatToWGSL(e,0),t.sourceCode+=`\r
5699
+ `,this._currPosition);return t==-1&&(t=this._source.length),this._line++,this._column=0,this._currPosition=t,this._nextPosition=t+1,this._source.substring(e,t+1)}}class qc extends ri{_tokenPosition=0;_tokens=[];constructor(e){super(e.source),this.parse()}skipToken(e){this._tokenPosition+=e}peekToken(e){return this._tokenPosition+e>=this._tokens.length?new yi(U.EOF,"\0"):this._tokens[this._tokenPosition+e]}GetNextToken(){if(this._tokenPosition>=this._tokens.length)return new yi(U.EOF,"\0");let e=this._tokens[this._tokenPosition];return this._tokenPosition++,e}get currTokenPosition(){return this._tokenPosition}parse(){this.readChar(),this._tokens=new Array;var e;do e=this.nextToken(),this._tokens.push(e);while(e.Type!=U.EOF)}nextToken(){if(this.skipWhitespace(),this._char==="/"){if(this.peekChar()==="/")return this.skipComment(),this.nextToken();if(this.peekChar()==="*")return this.skipMultilineComment(),this.nextToken()}var e=new yi;switch(e.Line=this._line,e.Colume=this._column,this._char){case"\0":e.Type=U.EOF,e.Literal="EOF";break;case".":e.Type=U.DOT,e.Literal=".";break;case",":e.Type=U.COMMA,e.Literal=",";break;case":":e.Type=U.COLON,e.Literal=":";break;case"?":e.Type=U.QUEMARK,e.Literal="?";break;case";":e.Type=U.SEMICOLON,e.Literal=";";break;case"(":e.Type=U.LEFTSAMLL,e.Literal="(";break;case")":e.Type=U.RIGHTSAMLL,e.Literal=")";break;case"[":e.Type=U.LEFTMEDI,e.Literal="[";break;case"]":e.Type=U.RIGHTMEDI,e.Literal="]";break;case"{":e.Type=U.LEFTBIG,e.Literal="{";break;case"}":e.Type=U.RIGHTBIG,e.Literal="}";break;case"+":if(this.peekChar()==="+"){this.readChar(),e.Type=U.INC,e.Literal="++";break}else if(this.peekChar()==="="){this.readChar(),e.Type=U.ADDASSIGN,e.Literal="+=";break}e.Type=U.ADD,e.Literal="+";break;case"-":if(this.peekChar()==="-"){this.readChar(),e.Type=U.DEC,e.Literal="--";break}else if(this.peekChar()==="="){this.readChar(),e.Type=U.SUBASSIGN,e.Literal="-=";break}e.Type=U.SUB,e.Literal="-";break;case"*":if(this.peekChar()==="="){this.readChar(),e.Type=U.MULASSIGN,e.Literal="*=";break}e.Type=U.MUL,e.Literal="*";break;case"/":if(this.peekChar()==="="){this.readChar(),e.Type=U.DIVASSIGN,e.Literal="/=";break}e.Type=U.DIV,e.Literal="/";break;case"&":if(this.peekChar()==="&"){this.readChar(),e.Type=U.AND,e.Literal="&&";break}e.Type=U.BITAND,e.Literal="&";break;case"|":if(this.peekChar()==="|"){this.readChar(),e.Type=U.OR,e.Literal="||";break}e.Type=U.BITOR,e.Literal="&";break;case"^":e.Type=U.BITXOR,e.Literal="^";break;case"!":if(this.peekChar()==="="){this.readChar(),e.Type=U.NOTEQUAL,e.Literal="!=";break}e.Type=U.NOT,e.Literal="!";break;case">":if(this.peekChar()==="="){this.readChar(),e.Type=U.GREATEREQUAL,e.Literal=">=";break}else if(this.peekChar()===">"){this.readChar(),e.Type=U.BITSHIFT_R,e.Literal=">>";break}e.Type=U.GREATER,e.Literal=">";break;case"=":if(this.peekChar()==="="){this.readChar(),e.Type=U.EQUAL,e.Literal="==";break}e.Type=U.ASSIGN,e.Literal="=";break;case"<":if(this.peekChar()==="="){this.readChar(),e.Type=U.LESSEQUAL,e.Literal="<=";break}else if(this.peekChar()==="<"){this.readChar(),e.Type=U.BITSHIFT_L,e.Literal="<<";break}e.Type=U.LESS,e.Literal="<";break;default:return this.isDigit(this._char)?this.readDecimal():(e.Literal=this.readIdentifier(),e.Type=this.lookupIdentifier(e.Literal),this.getChar()=="["&&this.peekChar()=="]"&&e.isBuiltinType()&&(e.Type++,e.Literal+="[]",this.readChar(),this.readChar()),e)}return this.readChar(),e}readDecimal(){var e=new yi;e.Line=this._line,e.Colume=this._column,e.Type=U.LITERAL;var t=this.readNumber();return this._char==="e"?(e.Literal=t+this._char,this.readChar(),e.Literal+=this._char,this.readChar(),e.Literal+=this.readNumber(),e.Type=U.LITERAL,e):this._char==="u"?(this.readChar(),e.Type=U.LITERAL,e.Literal=t+"u",e):this._char==="f"?(this.readChar(),e.Type=U.LITERAL,e.Literal=t+"f",e):(e.Type=U.LITERAL,e.Literal=t,e)}lookupIdentifier(e){switch(e){case"void":return U.VOID;case"int":return U.INT;case"uint":return U.UINT;case"bool":return U.BOOL;case"true":return U.BOOL;case"false":return U.BOOL;case"float":return U.FLOAT;case"vec2":return U.VEC2;case"vec3":return U.VEC3;case"vec4":return U.VEC4;case"bvec2":return U.BVEC2;case"bvec3":return U.BVEC3;case"bvec4":return U.BVEC4;case"ivec2":return U.IVEC2;case"ivec3":return U.IVEC3;case"ivec4":return U.IVEC4;case"uvec2":return U.UVEC2;case"uvec3":return U.UVEC3;case"uvec4":return U.UVEC4;case"mat2":return U.MAT2x2;case"mat2x2":return U.MAT2x2;case"mat2x3":return U.MAT2x3;case"mat2x4":return U.MAT2x4;case"mat3":return U.MAT3x3;case"mat3x2":return U.MAT3x2;case"mat3x3":return U.MAT3x3;case"mat3x4":return U.MAT3x4;case"mat4":return U.MAT4x4;case"mat4x2":return U.MAT4x2;case"mat4x3":return U.MAT4x3;case"mat4x4":return U.MAT4x4;case"sampler":return U.SAMPLER;case"sampler1D":return U.SAMPLER_1D;case"sampler2D":return U.SAMPLER_2D;case"sampler3D":return U.SAMPLER_3D;case"samplerCube":return U.SAMPLER_CUBE;case"samplerShadow":return U.SAMPLER_SHADOW;case"sampler1DShadow":return U.SAMPLER_1D_SHADOW;case"sampler2DShadow":return U.SAMPLER_2D_SHADOW;case"texture1D":return U.TEXTURE_1D;case"texture2D":return U.TEXTURE_2D;case"texture3D":return U.TEXTURE_3D;case"textureCube":return U.TEXTURE_CUBE;case"texture1DArray":return U.TEXTURE_1D_ARRAY;case"texture2DArray":return U.TEXTURE_2D_ARRAY;case"textureCubeArray":return U.TEXTURE_CUBE_ARRAY;case"const":return U.CONST;case"layout":return U.LAYOUT;case"precision":return U.PRECISION;case"attribute":return U.ATTRIBUTE;case"uniform":return U.UNIFORM;case"varying":return U.VARYING;case"invariant":return U.INVARIANT;case"in":return U.IN;case"out":return U.OUT;case"inout":return U.INOUT;case"if":return U.IF;case"else":return U.ELSE;case"for":return U.FOR;case"while":return U.WHILE;case"do":return U.DO;case"break":return U.BREAK;case"return":return U.RETURN;case"continue":return U.CONTINUE;case"struct":return U.STRUCT}return U.IDENT}}class R2{name="";value="";args=[]}class $c extends ri{_result;_skipLine;_definitionTables;constructor(e){super(e),this._result="",this._skipLine=!1,this._definitionTables=new Map,this.parse()}parse(){for(this.readChar();this._char!=="\0";){if(this.skipWhitespace(),this._char==="/"){if(this.peekChar()==="/"){this.skipComment();continue}if(this.peekChar()==="*"){this.skipMultilineComment();continue}}if(this._char==="#"){this.readCharAndSkipWhitespace();var e=this.readIdentifier();switch(e){case"version":this.readLine().trim();break;case"define":this.readCharAndSkipWhitespace();var t=this.readIdentifier();if(this.getChar()==="("){let o=new R2;if(this.readCharAndSkipWhitespace(),this.getChar()!==")")do{var a=this.readIdentifier();if(o.args.push(a),this.skipWhitespace(),this.getChar()===","){this.readCharAndSkipWhitespace();continue}}while(this.getChar()!==")");this.readCharAndSkipWhitespace(),o.name=t,o.value=this.readLine().trim(),this._definitionTables.set(t,o),this.readCharAndSkipWhitespace()}else{let o=this.readLine().trim();o[0]=="="&&(o=o.substring(1)),this._definitionTables.set(t,o)}break;case"if":let n=this.readLine().trim();if(n=="0"||n=="false"){this._skipLine=!0;break}if(this._definitionTables.has(n)&&(n=this._definitionTables.get(n),n=="0"||n=="false")){this._skipLine=!0;break}break;case"ifdef":this.readCharAndSkipWhitespace();var r=this.readIdentifier();this._skipLine=!this._definitionTables.has(r);break;case"else":this._skipLine=!this._skipLine;break;case"endif":this._skipLine=!1;break;default:throw"Unknown preprocessing command:"+e}}else{var i=this.readLine();if(!this._skipLine){for(let n of this._definitionTables.keys()){let o=i.indexOf(n);if(o!=-1){let l=this._definitionTables.get(n);if(typeof l=="string")i=i.replace(n,l);else{let c=l,f=new ri(i.substring(o+n.length));if(f.readCharAndSkipWhitespace(),f.getChar()==="("){f.readCharAndSkipWhitespace();for(let m=1;f.getChar()!=="\0"&&m>0;){switch(f.getChar()){case"(":m++;break;case")":m--;break}f.readCharAndSkipWhitespace()}}let d=o,h=d+n.length+f.currPosition,u=i.substring(d,h).trim();if(c.args.length>0){let m=[],g=u.substring(u.indexOf("(")+1,u.lastIndexOf(")")).trim();g.length>0&&(m=this.parseArgs(g));let p=c.value.substring(c.value.indexOf("("));for(let A=0;A<c.args.length;A++)p=p.replace(c.args[A],m[A]);p=c.value.substring(0,c.value.indexOf("("))+p,i=i.replace(u,p)}else i=i.replace(u,c.value)}}}this._result+=i}this.readChar()}}}get source(){return this._result}parseArgs(e){let t=[],a=0,r=new ri(e),i=r.currPosition;if(r.readCharAndSkipWhitespace(),r.getChar()!=="\0")for(r.readCharAndSkipWhitespace();r.getChar()!=="\0";){switch(r.getChar()){case"(":a++;break;case")":a--;break;case",":if(a==0){let n=e.substring(i,r.currPosition);t.push(n),i=r.currPosition+1}break}r.readCharAndSkipWhitespace()}if(i<r.currPosition){let n=e.substring(i,r.currPosition);t.push(n)}return t}}class e0{result;ASTRoot;_syntax;constructor(e){this.result="",this._syntax=e,this.ASTRoot=e.ASTRoot}generateWGSL(){let e=new Gn;var t=new s0;let a=[],r=[],i=[];for(let f of this.ASTRoot.nodes)if(f instanceof cs)if(f.scope=="in")if(f.nodes[0]instanceof rt){e.layoutsIn.push(f);let d=new Wn;d.name=f.nodes[0].name,d.type=f.nodes[0].type,d.locationID=Number.parseInt(f.qualifier.get("location")),t.inputAttribute.push(d)}else if(f.qualifier.has("local_size_x"))e.workGroupSize=f;else throw"not impl";else if(f.scope=="out")if(e.layoutsOut.push(f),f.nodes[0]instanceof rt){let d=new Wn;d.name=f.nodes[0].name,d.type=f.nodes[0].type,d.locationID=Number.parseInt(f.qualifier.get("location")),t.outputAttribute.push(d)}else throw"not impl";else if(f.scope=="uniform")if(r.push(f),f.nodes[0]instanceof rt){let d=new zn;d.name=f.nodes[0].name,d.type=f.nodes[0].type,d.setID=Number.parseInt(f.qualifier.get("set")),d.bindingID=Number.parseInt(f.qualifier.get("binding")),t.uniformInfo.push(d)}else if(f.nodes[0]instanceof tr){let d=new zn;d.name="unif"+t.uniformInfo.length.toString(),d.type=f.nodes[0].name,d.setID=Number.parseInt(f.qualifier.get("set")),d.bindingID=Number.parseInt(f.qualifier.get("binding")),t.uniformInfo.push(d)}else throw"not impl";else f.scope=="buffer"&&a.push(f);else i.push(f);e.stage="fragment";let n=0,o=new ri(""),l=this._syntax.lexer.source,c=new Map;for(;(n=l.indexOf("gl_",n))!=-1;){o.reset(l.substring(n,n+32)),o.readChar();let f=o.readIdentifier();if(n+=f.length,!c.has(f))switch(c.set(f,f),f){case"gl_InstanceID":e.stage="vertex",e.builtinIn.push("@builtin(instance_index) gl_InstanceID: u32");break;case"gl_Position":e.stage="vertex",e.builtinOut.push("@builtin(position) gl_Position: vec4<f32>"),e.addIdentifier("gl_Position","stout.gl_Position");break;case"gl_VertexIndex":e.stage="vertex",e.builtinIn.push("@builtin(vertex_index) gl_VertexIndex: u32");break;case"gl_FrontFacing":e.stage="fragment",e.builtinIn.push("@builtin(front_facing) gl_FrontFacing: bool");break;case"gl_FragDepth":e.stage="fragment",e.builtinOut.push("@builtin(frag_depth) gl_FragDepth: f32"),e.addIdentifier("gl_FragDepth","stout.gl_FragDepth");break;case"gl_WorkGroupID":e.stage="compute",e.builtinIn.push("@builtin(workgroup_id) gl_WorkGroupID: vec3<u32>");break;case"gl_NumWorkGroups":e.stage="compute",e.builtinIn.push("@builtin(num_workgroups) gl_NumWorkGroups: vec3<u32>");break;case"gl_LocalInvocationID":e.stage="compute",e.builtinIn.push("@builtin(local_invocation_id) gl_LocalInvocationID: vec3<u32>");break;case"gl_LocalInvocationIndex":e.stage="compute",e.builtinIn.push("@builtin(local_invocation_index) gl_LocalInvocationIndex: u32");break;case"gl_GlobalInvocationID":e.stage="compute",e.builtinIn.push("@builtin(global_invocation_id) gl_GlobalInvocationID: vec3<u32>");break;default:throw"Unprocessed built-in variables: "+f}}for(let f of r)f.nodes[0]instanceof tr&&(t.sourceCode+=f.nodes[0].formatToWGSL(e,0),t.sourceCode+=`\r
5700
5700
  `);for(let f of r)t.sourceCode+=f.formatToWGSL(e,0);t.sourceCode+=`\r
5701
5701
  `;for(let f of a)f.nodes[0]instanceof tr&&(t.sourceCode+=f.nodes[0].formatToWGSL(e,0),t.sourceCode+=`\r
5702
5702
  `);for(let f of a)t.sourceCode+=f.formatToWGSL(e,0);t.sourceCode+=`\r
5703
5703
  `;for(let f of i)t.sourceCode+=f.formatToWGSL(e,0),f instanceof rt&&(t.sourceCode+=`;\r
5704
- `);return t}}class Gn{_stage="fragment";_builtinIn=[];_builtinOut=[];_layoutsIn=[];_layoutsOut=[];_layoutUniformCount=0;_workGroupSize=void 0;_parentContext;_identifierEnv=new Map;constructor(e){this._parentContext=e}get stage(){return this.parentContext!=null?this.parentContext.stage:this._stage}set stage(e){this.parentContext!=null&&(this.parentContext.stage=e),this._stage=e}get builtinIn(){return this.parentContext!=null?this.parentContext.builtinIn:this._builtinIn}get builtinOut(){return this.parentContext!=null?this.parentContext.builtinOut:this._builtinOut}get layoutsIn(){return this.parentContext!=null?this.parentContext.layoutsIn:this._layoutsIn}get layoutsOut(){return this.parentContext!=null?this.parentContext.layoutsOut:this._layoutsOut}get layoutUniformCount(){return this.parentContext!=null?this.parentContext.layoutUniformCount:this._layoutUniformCount}set layoutUniformCount(e){if(this.parentContext!=null){this.parentContext.layoutUniformCount=e;return}this._layoutUniformCount=e}get workGroupSize(){return this.parentContext!=null?this.parentContext.workGroupSize:this._workGroupSize}set workGroupSize(e){this.parentContext!=null&&(this.parentContext.workGroupSize=e),this._workGroupSize=e}get parentContext(){return this._parentContext}findIdentifier(e){return this._identifierEnv.has(e)?this._identifierEnv.get(e):this._parentContext!=null?this._parentContext.findIdentifier(e):e}addIdentifier(e,t){this._identifierEnv.set(e,t)}hasIdentifier(e){return this._identifierEnv.has(e)}}class Ge{nodes=[];constructor(){}addNode(e){this.nodes.push(e)}formatToWGSL(e,t){return""}}class tr extends Ge{name="";fields=[];constructor(e){super(),this.name=e}static parse(e){if(e.peekToken(0).Type==x.IDENT&&e.peekToken(1).Type==x.LEFTBIG){let t=new tr(e.peekToken(0).Literal);for(e.skipToken(2);e.peekToken(0).Type!=x.RIGHTBIG;){let a=rt.parse(e);t.fields.push(a)}return e.peekToken(0).Type==x.RIGHTBIG&&e.skipToken(1),e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1),t}throw"Error parsing structure: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);a+=r+"struct "+this.name+` {\r
5704
+ `);return t}}class Gn{_stage="fragment";_builtinIn=[];_builtinOut=[];_layoutsIn=[];_layoutsOut=[];_layoutUniformCount=0;_workGroupSize=void 0;_parentContext;_identifierEnv=new Map;constructor(e){this._parentContext=e}get stage(){return this.parentContext!=null?this.parentContext.stage:this._stage}set stage(e){this.parentContext!=null&&(this.parentContext.stage=e),this._stage=e}get builtinIn(){return this.parentContext!=null?this.parentContext.builtinIn:this._builtinIn}get builtinOut(){return this.parentContext!=null?this.parentContext.builtinOut:this._builtinOut}get layoutsIn(){return this.parentContext!=null?this.parentContext.layoutsIn:this._layoutsIn}get layoutsOut(){return this.parentContext!=null?this.parentContext.layoutsOut:this._layoutsOut}get layoutUniformCount(){return this.parentContext!=null?this.parentContext.layoutUniformCount:this._layoutUniformCount}set layoutUniformCount(e){if(this.parentContext!=null){this.parentContext.layoutUniformCount=e;return}this._layoutUniformCount=e}get workGroupSize(){return this.parentContext!=null?this.parentContext.workGroupSize:this._workGroupSize}set workGroupSize(e){this.parentContext!=null&&(this.parentContext.workGroupSize=e),this._workGroupSize=e}get parentContext(){return this._parentContext}findIdentifier(e){return this._identifierEnv.has(e)?this._identifierEnv.get(e):this._parentContext!=null?this._parentContext.findIdentifier(e):e}addIdentifier(e,t){this._identifierEnv.set(e,t)}hasIdentifier(e){return this._identifierEnv.has(e)}}class Ge{nodes=[];constructor(){}addNode(e){this.nodes.push(e)}formatToWGSL(e,t){return""}}class tr extends Ge{name="";fields=[];constructor(e){super(),this.name=e}static parse(e){if(e.peekToken(0).Type==U.IDENT&&e.peekToken(1).Type==U.LEFTBIG){let t=new tr(e.peekToken(0).Literal);for(e.skipToken(2);e.peekToken(0).Type!=U.RIGHTBIG;){let a=rt.parse(e);t.fields.push(a)}return e.peekToken(0).Type==U.RIGHTBIG&&e.skipToken(1),e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1),t}throw"Error parsing structure: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);a+=r+"struct "+this.name+` {\r
5705
5705
  `;for(let i of this.fields)i.arraySize.nodes.length<=0?a+=r+" "+i.name+": "+ca(i.type)+`,\r
5706
5706
  `:i.arraySize.nodes[0]instanceof ar?a+=r+" "+i.name+": array<"+ca(i.type)+", "+i.arraySize.nodes[0].value+`>,\r
5707
5707
  `:a+=r+" "+i.name+": array<"+ca(i.type)+", "+i.arraySize.nodes[0].formatToWGSL(e,0)+`>,\r
5708
5708
  `;return a+=r+`};\r
5709
- `,a}}class ln extends Ge{name;args;body;returnType;constructor(e,t,a,r){super(),this.name=e,this.args=t,this.body=a,this.returnType=r}static parse(e){if((e.peekToken(0).isBuiltinType()||e.peekToken(0).Type==x.VOID)&&e.peekToken(1).Type==x.IDENT&&e.peekToken(2).Type==x.LEFTSAMLL){let t=e.peekToken(0).Literal,a=e.peekToken(1).Literal;e.skipToken(2);let r=new Array;if(e.peekToken(0).Type!=x.LEFTSAMLL)throw"Error parsing function parameter list: Unexpected character";for(e.skipToken(1);e.peekToken(0).Type!=x.EOF;){if(e.peekToken(0).Type==x.RIGHTSAMLL){e.skipToken(1);break}(e.peekToken(0).Type==x.INOUT||e.peekToken(0).Type==x.IN||e.peekToken(0).Type==x.OUT)&&e.skipToken(1);let n=rt.parse(e);r.push(n),e.peekToken(0).Type==x.COMMA&&e.skipToken(1)}let i=Fa.parse(e);return new ln(a,r,i,t)}throw"Error parsing function: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t),i,n=e.layoutsOut.length>0||e.builtinOut.length>0;switch(e.stage){case"compute":i="ComputeOutput";break;case"vertex":i="VertexOutput";break;case"fragment":i="FragmentOutput";break;default:i="StructOutput";break}if(this.name=="main"&&n){a+="struct "+i+` {\r
5709
+ `,a}}class ln extends Ge{name;args;body;returnType;constructor(e,t,a,r){super(),this.name=e,this.args=t,this.body=a,this.returnType=r}static parse(e){if((e.peekToken(0).isBuiltinType()||e.peekToken(0).Type==U.VOID)&&e.peekToken(1).Type==U.IDENT&&e.peekToken(2).Type==U.LEFTSAMLL){let t=e.peekToken(0).Literal,a=e.peekToken(1).Literal;e.skipToken(2);let r=new Array;if(e.peekToken(0).Type!=U.LEFTSAMLL)throw"Error parsing function parameter list: Unexpected character";for(e.skipToken(1);e.peekToken(0).Type!=U.EOF;){if(e.peekToken(0).Type==U.RIGHTSAMLL){e.skipToken(1);break}(e.peekToken(0).Type==U.INOUT||e.peekToken(0).Type==U.IN||e.peekToken(0).Type==U.OUT)&&e.skipToken(1);let n=rt.parse(e);r.push(n),e.peekToken(0).Type==U.COMMA&&e.skipToken(1)}let i=Fa.parse(e);return new ln(a,r,i,t)}throw"Error parsing function: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t),i,n=e.layoutsOut.length>0||e.builtinOut.length>0;switch(e.stage){case"compute":i="ComputeOutput";break;case"vertex":i="VertexOutput";break;case"fragment":i="FragmentOutput";break;default:i="StructOutput";break}if(this.name=="main"&&n){a+="struct "+i+` {\r
5710
5710
  `;for(let f of e.layoutsOut)if(f.nodes[0]instanceof rt){let d=f.nodes[0];f.qualifier.size==1&&f.qualifier.has("location")&&(a+=" @location("+f.qualifier.get("location")+") "),a+=d.name+": "+ca(d.type)+`,\r
5711
5711
  `,e.addIdentifier(d.name,"stout."+d.name)}let c=e.builtinOut;for(let f of c)a+=" "+f+`,\r
5712
5712
  `;a+=`};\r
@@ -5723,26 +5723,26 @@ struct InstanceData {
5723
5723
  `),a+=o+` {\r
5724
5724
  `,a+=l,a+=r+`}\r
5725
5725
  `,a+=`\r
5726
- `,a}}class cn extends Ge{args=[];constructor(){super()}static parse(e){if(e.peekToken(0).Type==x.LEFTSAMLL){e.skipToken(1);let t=new cn;for(;e.peekToken(0).Type!=x.EOF;){if(e.peekToken(0).Type==x.RIGHTSAMLL){e.skipToken(1);break}let a=we.parse(e);t.args.push(a),e.peekToken(0).Type==x.COMMA&&e.skipToken(1)}return t}throw"Error parsing function argument table: Unexpected character"}}class Jr extends Ge{name;args;constructor(e,t){super(),this.name=e,this.args=t}static parse(e){if(e.peekToken(0).isDataType()&&e.peekToken(1).Type==x.LEFTSAMLL){let t=e.peekToken(0).Literal;e.skipToken(1);let a=cn.parse(e);return new Jr(t,a)}throw"Error parsing function argument table: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);if(this.name=="texture"&&this.args.args[0].nodes[0]instanceof Jr){let i=this.args.args[0].nodes[0];if(i.name=="sampler2D"){a+=r+"textureSample(";for(let n=0;n<i.args.args.length;n++){let o=i.args.args[n];n>0&&(a+=", "),a+=o.formatToWGSL(e,0)}for(let n=1;n<this.args.args.length;n++){let o=this.args.args[n];n>0&&(a+=", "),a+=o.formatToWGSL(e,0)}return a+=")",a}}a+=r+ca(this.name)+"(";for(let i=0;i<this.args.args.length;i++){let n=this.args.args[i];i>0&&(a+=", "),a+=n.formatToWGSL(e,0)}return a+=")",a}}class rt extends Ge{type;name;arraySize;hasIn;hasOut;hasConst;constructor(e,t,a=new we){super(),this.type=e,this.name=t,this.hasIn=!1,this.hasOut=!1,this.hasConst=!1,this.arraySize=a}static parse(e){let t=new rt("",""),a=e.peekToken(0);if(a.Type==x.CONST)e.skipToken(1),t.hasConst=!0;else if(a.Type==x.IN)e.skipToken(1),t.hasIn=!0;else if(a.Type==x.OUT)e.skipToken(1),t.hasOut=!0;else if(a.Type==x.INOUT)e.skipToken(1),t.hasIn=!0,t.hasOut=!0;else if(!a.isDataType())throw"Error parsing declaration expression: Unexpected character("+a.Literal+")";if(a=e.peekToken(0),a.isDataType()&&e.peekToken(1).Type==x.LEFTMEDI){if(t.type=a.Literal,e.skipToken(2),t.arraySize=we.parse(e),e.peekToken(0).Type==x.RIGHTMEDI&&e.skipToken(1),e.peekToken(0).Type!=x.IDENT)throw"Unexpected";t.name=e.peekToken(0).Literal,e.skipToken(1)}else if(a.isDataType()&&e.peekToken(1).Type==x.IDENT&&e.peekToken(2).Type==x.LEFTMEDI)t.type=e.peekToken(0).Literal,t.name=e.peekToken(1).Literal,e.skipToken(3),e.peekToken(0).Type==x.RIGHTMEDI?e.skipToken(1):(t.arraySize=we.parse(e),e.peekToken(0).Type==x.RIGHTMEDI&&e.skipToken(1));else if(a.isDataType()&&e.peekToken(1).Type==x.IDENT)t.type=e.peekToken(0).Literal,t.name=e.peekToken(1).Literal,e.skipToken(2);else throw"Error parsing declaration expression: Unexpected character("+a.Literal+")";if(a=e.peekToken(0),a.Type==x.SEMICOLON)return e.skipToken(1),t;if(a.Type==x.RIGHTSAMLL)return t;if(a.Type==x.ASSIGN){let r=e.peekToken(0);e.skipToken(1);let i=new Ha(t.name),n=we.parse(e);return e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1),t.addNode(new br(r,i,n)),t}else if(a.Type==x.COMMA){for(;e.peekToken(0).Type==x.COMMA&&e.peekToken(1).Type==x.IDENT;){let r=new rt(t.type,e.peekToken(1).Literal);t.addNode(r),e.skipToken(2),e.peekToken(0).Type==x.ASSIGN&&(e.skipToken(-1),r.addNode(we.parse(e)))}return t}throw"Error parsing declaration expression: Unexpected character("+e.peekToken(0).Literal+")"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);if(this.hasConst?a+=r+"let ":a+=r+"var ",e.addIdentifier(this.name,this.name),this.arraySize.nodes.length<=0?a+=this.name+": "+ca(this.type):this.arraySize.nodes[0]instanceof ar?a+=this.name+": array<"+ca(this.type)+", "+this.arraySize.nodes[0].value+">":a+=this.name+": array<"+ca(this.type)+", "+this.arraySize.nodes[0].formatToWGSL(e,0)+">",this.nodes.length>0&&this.nodes[0]instanceof br)a+=" = "+this.nodes[0].rightValue.formatToWGSL(e,0);else if(this.nodes.length>0&&this.nodes[0]instanceof we&&this.nodes[0].nodes[0]instanceof br)a+=" = "+this.nodes[0].nodes[0].rightValue.formatToWGSL(e,0);else if(this.nodes.length>0&&this.nodes[0]instanceof rt){a+=`;\r
5726
+ `,a}}class cn extends Ge{args=[];constructor(){super()}static parse(e){if(e.peekToken(0).Type==U.LEFTSAMLL){e.skipToken(1);let t=new cn;for(;e.peekToken(0).Type!=U.EOF;){if(e.peekToken(0).Type==U.RIGHTSAMLL){e.skipToken(1);break}let a=we.parse(e);t.args.push(a),e.peekToken(0).Type==U.COMMA&&e.skipToken(1)}return t}throw"Error parsing function argument table: Unexpected character"}}class Jr extends Ge{name;args;constructor(e,t){super(),this.name=e,this.args=t}static parse(e){if(e.peekToken(0).isDataType()&&e.peekToken(1).Type==U.LEFTSAMLL){let t=e.peekToken(0).Literal;e.skipToken(1);let a=cn.parse(e);return new Jr(t,a)}throw"Error parsing function argument table: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);if(this.name=="texture"&&this.args.args[0].nodes[0]instanceof Jr){let i=this.args.args[0].nodes[0];if(i.name=="sampler2D"){a+=r+"textureSample(";for(let n=0;n<i.args.args.length;n++){let o=i.args.args[n];n>0&&(a+=", "),a+=o.formatToWGSL(e,0)}for(let n=1;n<this.args.args.length;n++){let o=this.args.args[n];n>0&&(a+=", "),a+=o.formatToWGSL(e,0)}return a+=")",a}}a+=r+ca(this.name)+"(";for(let i=0;i<this.args.args.length;i++){let n=this.args.args[i];i>0&&(a+=", "),a+=n.formatToWGSL(e,0)}return a+=")",a}}class rt extends Ge{type;name;arraySize;hasIn;hasOut;hasConst;constructor(e,t,a=new we){super(),this.type=e,this.name=t,this.hasIn=!1,this.hasOut=!1,this.hasConst=!1,this.arraySize=a}static parse(e){let t=new rt("",""),a=e.peekToken(0);if(a.Type==U.CONST)e.skipToken(1),t.hasConst=!0;else if(a.Type==U.IN)e.skipToken(1),t.hasIn=!0;else if(a.Type==U.OUT)e.skipToken(1),t.hasOut=!0;else if(a.Type==U.INOUT)e.skipToken(1),t.hasIn=!0,t.hasOut=!0;else if(!a.isDataType())throw"Error parsing declaration expression: Unexpected character("+a.Literal+")";if(a=e.peekToken(0),a.isDataType()&&e.peekToken(1).Type==U.LEFTMEDI){if(t.type=a.Literal,e.skipToken(2),t.arraySize=we.parse(e),e.peekToken(0).Type==U.RIGHTMEDI&&e.skipToken(1),e.peekToken(0).Type!=U.IDENT)throw"Unexpected";t.name=e.peekToken(0).Literal,e.skipToken(1)}else if(a.isDataType()&&e.peekToken(1).Type==U.IDENT&&e.peekToken(2).Type==U.LEFTMEDI)t.type=e.peekToken(0).Literal,t.name=e.peekToken(1).Literal,e.skipToken(3),e.peekToken(0).Type==U.RIGHTMEDI?e.skipToken(1):(t.arraySize=we.parse(e),e.peekToken(0).Type==U.RIGHTMEDI&&e.skipToken(1));else if(a.isDataType()&&e.peekToken(1).Type==U.IDENT)t.type=e.peekToken(0).Literal,t.name=e.peekToken(1).Literal,e.skipToken(2);else throw"Error parsing declaration expression: Unexpected character("+a.Literal+")";if(a=e.peekToken(0),a.Type==U.SEMICOLON)return e.skipToken(1),t;if(a.Type==U.RIGHTSAMLL)return t;if(a.Type==U.ASSIGN){let r=e.peekToken(0);e.skipToken(1);let i=new Ha(t.name),n=we.parse(e);return e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1),t.addNode(new br(r,i,n)),t}else if(a.Type==U.COMMA){for(;e.peekToken(0).Type==U.COMMA&&e.peekToken(1).Type==U.IDENT;){let r=new rt(t.type,e.peekToken(1).Literal);t.addNode(r),e.skipToken(2),e.peekToken(0).Type==U.ASSIGN&&(e.skipToken(-1),r.addNode(we.parse(e)))}return t}throw"Error parsing declaration expression: Unexpected character("+e.peekToken(0).Literal+")"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);if(this.hasConst?a+=r+"let ":a+=r+"var ",e.addIdentifier(this.name,this.name),this.arraySize.nodes.length<=0?a+=this.name+": "+ca(this.type):this.arraySize.nodes[0]instanceof ar?a+=this.name+": array<"+ca(this.type)+", "+this.arraySize.nodes[0].value+">":a+=this.name+": array<"+ca(this.type)+", "+this.arraySize.nodes[0].formatToWGSL(e,0)+">",this.nodes.length>0&&this.nodes[0]instanceof br)a+=" = "+this.nodes[0].rightValue.formatToWGSL(e,0);else if(this.nodes.length>0&&this.nodes[0]instanceof we&&this.nodes[0].nodes[0]instanceof br)a+=" = "+this.nodes[0].nodes[0].rightValue.formatToWGSL(e,0);else if(this.nodes.length>0&&this.nodes[0]instanceof rt){a+=`;\r
5727
5727
  `;for(let i of this.nodes)a+=i.formatToWGSL(e,t)+`;\r
5728
5728
  `}else a+=`;\r
5729
- `;return a}}class jr extends Ge{expression1;condition;expression2;loopBody;constructor(e,t,a,r){super(),this.expression1=e,this.condition=t,this.expression2=a,this.loopBody=r}static parse(e){if(e.peekToken(0).Type==x.FOR&&e.peekToken(1).Type==x.LEFTSAMLL){e.skipToken(2);let t;e.peekToken(0).Type==x.SEMICOLON?(e.skipToken(1),t=new we):e.peekToken(0).isDataType()&&e.peekToken(1).Type==x.IDENT&&e.peekToken(2).Type==x.ASSIGN?(t=new rt(e.peekToken(0).Literal,e.peekToken(1).Literal),e.skipToken(1),t.addNode(we.parse(e)),e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1)):(t=we.parse(e),e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1));let a;e.peekToken(0).Type==x.SEMICOLON?(e.skipToken(1),a=new we):(a=we.parse(e),e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1));let r;e.peekToken(0).Type==x.SEMICOLON?(e.skipToken(1),r=new we):(r=we.parse(e),e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1)),e.peekToken(0).Type==x.RIGHTSAMLL&&e.skipToken(1);let i;return e.peekToken(0).Type==x.LEFTBIG?i=Fa.parse(e):i=new Fa,new jr(t,a,r,i)}throw"Error parsing for loop: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);a+=r+"for (",a+=this.expression1.formatToWGSL(e,0)+"; ",a+=this.condition.formatToWGSL(e,0)+"; ",a+=this.expression2.formatToWGSL(e,0)+")",a+=` { \r
5729
+ `;return a}}class jr extends Ge{expression1;condition;expression2;loopBody;constructor(e,t,a,r){super(),this.expression1=e,this.condition=t,this.expression2=a,this.loopBody=r}static parse(e){if(e.peekToken(0).Type==U.FOR&&e.peekToken(1).Type==U.LEFTSAMLL){e.skipToken(2);let t;e.peekToken(0).Type==U.SEMICOLON?(e.skipToken(1),t=new we):e.peekToken(0).isDataType()&&e.peekToken(1).Type==U.IDENT&&e.peekToken(2).Type==U.ASSIGN?(t=new rt(e.peekToken(0).Literal,e.peekToken(1).Literal),e.skipToken(1),t.addNode(we.parse(e)),e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1)):(t=we.parse(e),e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1));let a;e.peekToken(0).Type==U.SEMICOLON?(e.skipToken(1),a=new we):(a=we.parse(e),e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1));let r;e.peekToken(0).Type==U.SEMICOLON?(e.skipToken(1),r=new we):(r=we.parse(e),e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1)),e.peekToken(0).Type==U.RIGHTSAMLL&&e.skipToken(1);let i;return e.peekToken(0).Type==U.LEFTBIG?i=Fa.parse(e):i=new Fa,new jr(t,a,r,i)}throw"Error parsing for loop: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);a+=r+"for (",a+=this.expression1.formatToWGSL(e,0)+"; ",a+=this.condition.formatToWGSL(e,0)+"; ",a+=this.expression2.formatToWGSL(e,0)+")",a+=` { \r
5730
5730
  `;for(let i of this.loopBody.nodes)a+=i.formatToWGSL(e,t+1),!(i instanceof Lr)&&!(i instanceof Zr)&&!(i instanceof jr)&&(a+=`;\r
5731
5731
  `);return a+=r+`} \r
5732
- `,a}}class Zr extends Ge{conditionExpr;loopBody;constructor(e,t){super(),this.conditionExpr=e,this.loopBody=t}static parse(e){if(e.peekToken(0).Type==x.WHILE){e.skipToken(1),e.peekToken(0).Type==x.LEFTSAMLL&&e.skipToken(1);let t=we.parse(e);e.peekToken(0).Type==x.RIGHTSAMLL&&e.skipToken(1);let a=Fa.parse(e);return new Zr(t,a)}throw"Error parsing while loop: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);a+=r+`loop {\r
5732
+ `,a}}class Zr extends Ge{conditionExpr;loopBody;constructor(e,t){super(),this.conditionExpr=e,this.loopBody=t}static parse(e){if(e.peekToken(0).Type==U.WHILE){e.skipToken(1),e.peekToken(0).Type==U.LEFTSAMLL&&e.skipToken(1);let t=we.parse(e);e.peekToken(0).Type==U.RIGHTSAMLL&&e.skipToken(1);let a=Fa.parse(e);return new Zr(t,a)}throw"Error parsing while loop: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);a+=r+`loop {\r
5733
5733
  `,a+=r+" if ("+this.conditionExpr.formatToWGSL(e,0)+`) { break; }\r
5734
5734
  \r
5735
5735
  `;for(let i of this.loopBody.nodes)a+=i.formatToWGSL(e,t+1),!(i instanceof Lr)&&!(i instanceof Zr)&&!(i instanceof jr)&&(a+=`;\r
5736
5736
  `);return a+=r+`}\r
5737
- `,a}}class Q2 extends Ge{constructor(){super()}}class Lr extends Ge{conditionExpr;trueBranch;falseBranch;constructor(e,t,a){super(),this.conditionExpr=e,this.trueBranch=t,this.falseBranch=a}static parse(e){if(e.peekToken(0).Type==x.IF){e.skipToken(1),e.peekToken(0).Type==x.LEFTSAMLL&&e.skipToken(1);let t=we.parse(e),a,r=new Fa;if(e.peekToken(0).Type==x.RIGHTSAMLL&&e.skipToken(1),e.peekToken(0).Type==x.LEFTBIG?a=Fa.parse(e):(a=new Fa,e.peekToken(0).Type==x.RETURN?a.addNode(os.parse(e)):a.addNode(we.parse(e))),e.peekToken(0).Type==x.ELSE)if(e.skipToken(1),e.peekToken(0).Type==x.LEFTBIG)r=Fa.parse(e);else throw"not impl";return new Lr(t,a,r)}throw"Error parsing IF branch statement: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);a+=r+"if ("+this.conditionExpr.formatToWGSL(e,0)+`) {\r
5737
+ `,a}}class Q2 extends Ge{constructor(){super()}}class Lr extends Ge{conditionExpr;trueBranch;falseBranch;constructor(e,t,a){super(),this.conditionExpr=e,this.trueBranch=t,this.falseBranch=a}static parse(e){if(e.peekToken(0).Type==U.IF){e.skipToken(1),e.peekToken(0).Type==U.LEFTSAMLL&&e.skipToken(1);let t=we.parse(e),a,r=new Fa;if(e.peekToken(0).Type==U.RIGHTSAMLL&&e.skipToken(1),e.peekToken(0).Type==U.LEFTBIG?a=Fa.parse(e):(a=new Fa,e.peekToken(0).Type==U.RETURN?a.addNode(os.parse(e)):a.addNode(we.parse(e))),e.peekToken(0).Type==U.ELSE)if(e.skipToken(1),e.peekToken(0).Type==U.LEFTBIG)r=Fa.parse(e);else throw"not impl";return new Lr(t,a,r)}throw"Error parsing IF branch statement: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);a+=r+"if ("+this.conditionExpr.formatToWGSL(e,0)+`) {\r
5738
5738
  `;for(let i of this.trueBranch.nodes)a+=i.formatToWGSL(e,t+1)+`;\r
5739
5739
  `;if(this.falseBranch.nodes.length>0){a+=r+`} else {\r
5740
5740
  `;for(let i of this.falseBranch.nodes)a+=i.formatToWGSL(e,t+1)+`;\r
5741
5741
  `}return a+=r+`}\r
5742
- `,a}}class we extends Ge{constructor(){super()}static parse(e){let t=new Array,a=new Array,r=0;for(;e.peekToken(0).Type!=x.EOF;){let i=e.peekToken(0);if(i.Type==x.SEMICOLON||i.Type==x.RIGHTMEDI||i.Type==x.COMMA||i.Type==x.COLON||i.Type==x.RIGHTBIG)break;if(i.isOperation()){if(i.isOperation()){if(i.Type==x.INC||i.Type==x.DEC){let n=i;e.skipToken(1);let o=we.parse(e);a.push(new ii(n,void 0,o));continue}else if(t.length>0){if(t[t.length-1].nOperationPriorityLevel<=i.nOperationPriorityLevel)we.unionOperation(t,a);else if(t.length>0&&t[t.length-1].Literal=="-"){let o=t.pop(),l=a.pop();a.push(new ii(o,void 0,l))}}t.push(i),e.skipToken(1)}}else if(i.Type==x.LITERAL){a.push(new ar(i.Literal)),e.skipToken(1);continue}else if(i.Type==x.LEFTSAMLL){r++,t.push(i),e.skipToken(1);continue}else if(i.Type==x.RIGHTSAMLL){if(r<=0)break;for(r--;we.unionOperation(t,a););if(t[t.length-1].Type==x.LEFTSAMLL){t.pop();let n=new t0;n.addNode(a.pop()),a.push(n)}e.skipToken(1);continue}else if(i.Type==x.IDENT){if(e.peekToken(1).Type==x.INC||e.peekToken(1).Type==x.DEC){let n=e.peekToken(1),o=new Ha(i.Literal);a.push(new ii(n,o,void 0)),e.skipToken(2);continue}else if(e.peekToken(1).Type==x.LEFTSAMLL){a.push(Jr.parse(e));continue}else if(e.peekToken(1).Type==x.DOT){a.push(ls.parse(e));continue}else if(e.peekToken(1).Type==x.LEFTMEDI){a.push(Yr.parse(e));continue}a.push(new Ha(i.Literal)),e.skipToken(1);continue}else{if(i.isBuiltinType()&&e.peekToken(1).Type==x.LEFTSAMLL){a.push(Jr.parse(e));continue}if(i.isAssignOperation()){let n=i;e.skipToken(1);let o=a.pop(),l=we.parse(e);a.push(new br(n,o,l));continue}if(i.Type==x.LEFTBIG&&(e.peekToken(1).Type==x.LITERAL||e.peekToken(1).Type==x.SUB&&e.peekToken(2).Type==x.LITERAL)){a.push(ms.parse(e));continue}if(i.Type==x.QUEMARK){t.length>0&&t[t.length-1].nOperationPriorityLevel<=i.nOperationPriorityLevel&&we.unionOperation(t,a),e.skipToken(1);let n=a.pop(),o=we.parse(e);e.peekToken(0).Type==x.COLON&&e.skipToken(1);let l=we.parse(e);if(a.push(new a0(n,o,l)),e.peekToken(-1).Type==x.SEMICOLON)break;continue}if(i.Type==x.LEFTMEDI){e.skipToken(1);let n=we.parse(e);e.peekToken(0).Type==x.RIGHTMEDI&&e.skipToken(1);let o=a.pop();a.push(new Yr(o,n));continue}throw"An unexpected character"}}for(;t.length>0&&we.unionOperation(t,a););if(t.length<=0&&a.length==1){let i=new we;return i.addNode(a.pop()),i}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 a=e.pop(),r=t.pop();return t.push(new ii(a,void 0,r)),!0}return!1}if(e[e.length-1].isOperation()){let a=t.pop(),r=e.pop(),i=t.pop();return r.Type==x.DOT?t.push(new ls(i,a)):t.push(new br(r,i,a)),!0}return!1}}class t0 extends Ge{constructor(){super()}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+"("+this.nodes[0].formatToWGSL(e,0)+")"}}class Ha extends Ge{name;constructor(e){super(),this.name=e}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+e.findIdentifier(this.name)}}class ar extends Ge{value;constructor(e){super(),this.value=e}static parse(e){let t=e.peekToken(0);if(t.Type==x.SUB&&e.peekToken(1).Type==x.LITERAL){let a=new ar("-"+e.peekToken(1).Literal);return e.skipToken(2),a}else if(t.Type==x.LITERAL){let a=new ar(t.Literal);return e.skipToken(1),a}throw"Error parsing literal constants: Unexpected characters("+t.Literal+")"}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+this.value}}class ms extends ar{arrayValue;constructor(e){super(""),this.arrayValue=e}static parse(e){if(e.peekToken(0).Type==x.LEFTBIG&&e.peekToken(1).Type==x.LITERAL||e.peekToken(0).Type==x.LEFTBIG&&e.peekToken(1).Type==x.SUB&&e.peekToken(2).Type==x.LITERAL){e.skipToken(1);let t=[];for(;e.peekToken(0).Type!=x.RIGHTBIG;){if(e.peekToken(0).Type==x.LEFTSAMLL){t.push(ms.parse(e));continue}if(t.push(ar.parse(e)),e.peekToken(0).Type==x.COMMA){e.skipToken(1);continue}else if(e.peekToken(0).Type==x.RIGHTBIG){e.skipToken(1);break}else throw"Error parsing array constants: Unexpected characters"}return new ms(t)}throw"Error parsing array constants: Unexpected characters"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);this.arrayValue[0].value.includes(".")?a+=r+"array<f32, "+this.arrayValue.length.toString()+">(":a+=r+"array<i32, "+this.arrayValue.length.toString()+">(";for(let i=0;i<this.arrayValue.length;i++)i>0&&(a+=", "),a+=this.arrayValue[i].formatToWGSL(e,0);return a+=")",a}}class T2 extends Ge{constructor(){super()}}class M2 extends Ge{constructor(){super()}}class fn extends Ge{constructor(){super()}static parse(e){if(e.peekToken(0).Type==x.CONTINUE&&e.peekToken(1).Type==x.SEMICOLON)return e.skipToken(2),new fn;throw"Error parsing continue: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);return a+=r+"continue",a}}class os extends Ge{value;constructor(e){super(),this.value=e}static parse(e){if(e.peekToken(0).Type==x.RETURN){e.skipToken(1);let t=we.parse(e);return e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1),new os(t)}throw"Error parsing return expression: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);return a+=r+"return "+this.value.formatToWGSL(e,0),a}}class ii extends Ge{op;leftValue;rightValue;constructor(e,t,a){super(),this.op=e,this.leftValue=t,this.rightValue=a}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);if(this.op.Literal=="++"||this.op.Literal=="--")if(this.leftValue!=null){let i=this.leftValue.formatToWGSL(e,0);a+=r+i+" = "+i+" "+this.op.Literal[0]+" 1"}else{let i=this.rightValue.formatToWGSL(e,0);a+=r+i+" = "+i+" "+this.op.Literal[0]+" 1"}else this.leftValue!=null?a+=r+this.leftValue.formatToWGSL(e,0)+this.op.Literal:a+=r+this.op.Literal+this.rightValue.formatToWGSL(e,0);return a}}class br extends Ge{op;leftValue;rightValue;constructor(e,t,a){super(),this.op=e,this.leftValue=t,this.rightValue=a}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);return a+=r+this.leftValue.formatToWGSL(e,0)+" "+this.op.Literal+" "+this.rightValue.formatToWGSL(e,0),a}}class a0 extends Ge{condition;expression1;expression2;constructor(e,t,a){super(),this.condition=e,this.expression1=t,this.expression2=a}static parse(e){throw"Error parsing ternary operation expression: Unexpected character"}formatToWGSL(e,t){return""}}class ls extends Ge{leftValue;rightValue;constructor(e,t){super(),this.leftValue=e,this.rightValue=t}static parse(e){if(e.peekToken(0).Type==x.IDENT&&e.peekToken(1).Type==x.DOT&&e.peekToken(2).Type==x.IDENT){let t=new Ha(e.peekToken(0).Literal),a=new Ha(e.peekToken(2).Literal);return e.skipToken(3),new ls(t,a)}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 Yr extends Ge{leftValue;indexValue;constructor(e,t){super(),this.leftValue=e,this.indexValue=t}static parse(e){if(e.peekToken(0).Type==x.IDENT&&e.peekToken(1).Type==x.LEFTMEDI){let t=new Ha(e.peekToken(0).Literal);e.skipToken(2);let a=we.parse(e);e.peekToken(0).Type==x.RIGHTMEDI&&e.skipToken(1);let r=new Yr(t,a);for(;e.peekToken(0).Type==x.LEFTMEDI;)e.skipToken(1),a=we.parse(e),e.peekToken(0).Type==x.RIGHTMEDI&&e.skipToken(1),r=new Yr(r,a);return r}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 Fa extends Ge{constructor(){super()}static parse(e){if(e.peekToken(0).Type==x.LEFTBIG){e.skipToken(1);let t=new Fa;for(let a=1;a>0&&e.peekToken(0).Type!=x.EOF;){let r=e.peekToken(0);if(r.Type==x.LEFTBIG){a++,e.skipToken(1);continue}if(r.Type==x.RIGHTBIG){a--,e.skipToken(1);continue}if(r.Type==x.SEMICOLON){e.skipToken(1);continue}if(r.isDataType()&&e.peekToken(1).Type==x.IDENT){t.addNode(rt.parse(e));continue}if(r.Type==x.CONST&&e.peekToken(1).isDataType()&&e.peekToken(2).Type==x.IDENT){t.addNode(rt.parse(e));continue}else if(r.Type==x.IDENT&&e.peekToken(1).Type==x.ASSIGN){t.addNode(we.parse(e)),e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1);continue}else if(r.Type==x.IDENT&&e.peekToken(1).Type==x.LEFTMEDI){let i=Yr.parse(e);if(e.peekToken(0).Type==x.ASSIGN){let n=e.peekToken(0);e.skipToken(1);let o=we.parse(e);e.peekToken(0).Type==x.RIGHTMEDI&&e.skipToken(1),t.addNode(new br(n,i,o));continue}t.addNode(i);continue}else if(r.Type==x.IDENT&&e.peekToken(1).Type==x.DOT){let i=we.parse(e);t.addNode(i);continue}else if(r.Type==x.IDENT&&e.peekToken(1).isAssignOperation()){let i=e.peekToken(1),n=new Ha(r.Literal);e.skipToken(2);let o=we.parse(e);e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1),t.addNode(new br(i,n,o));continue}else if(r.Type==x.IDENT&&(e.peekToken(1).Type==x.INC||e.peekToken(1).Type==x.DEC)&&e.peekToken(2).Type==x.SEMICOLON){let i=e.peekToken(1);t.addNode(new ii(i,new Ha(r.Literal),void 0)),e.skipToken(3);continue}else if(r.Type==x.RETURN){t.addNode(os.parse(e));continue}else if(r.Type==x.CONTINUE){t.addNode(fn.parse(e));continue}else if(r.Type==x.WHILE){t.addNode(Zr.parse(e));continue}else if(r.Type==x.FOR){t.addNode(jr.parse(e));continue}else if(r.Type==x.IF){t.addNode(Lr.parse(e));continue}else if(r.Type==x.IDENT&&e.peekToken(1).Type==x.LEFTSAMLL){t.addNode(Jr.parse(e)),e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(0);continue}throw"Error parsing block: Unexpected symbol("+r.Literal+")"}return t}throw"Error parsing block: Unexpected symbol"}}class dn extends Ge{type;qualifier;constructor(e,t){super(),this.type=t,this.qualifier=e}static parse(e){if(e.peekToken(0).Type==x.PRECISION&&e.peekToken(1).Type==x.IDENT&&e.peekToken(2).isBuiltinType()){let t=new dn(e.peekToken(1).Literal,e.peekToken(2).Literal);return e.skipToken(3),e.peekToken(0).Type==x.SEMICOLON&&e.skipToken(1),t}throw"Error parsing precision qualifier: Unexpected character"}formatToWGSL(e,t){return""}}class cs extends Ge{scope="";qualifier=new Map;constructor(){super()}addQualifier(e,t=""){this.qualifier.set(e,t)}static parse(e){if(e.peekToken(0).Type==x.LAYOUT&&e.peekToken(1).Type==x.LEFTSAMLL){let t=new cs;e.skipToken(2);do if(e.peekToken(0).Type==x.IDENT){if(e.peekToken(1).Type==x.ASSIGN&&e.peekToken(2).Type==x.LITERAL){let r=e.peekToken(0).Literal,i=e.peekToken(2).Literal;if(t.addQualifier(r,i),e.skipToken(3),e.peekToken(0).Type==x.COMMA){e.skipToken(1);continue}let n=e.peekToken(0);n.Line=0}else if(e.peekToken(1).Type==x.RIGHTSAMLL){let r=e.peekToken(0).Literal;t.addQualifier(r,""),e.skipToken(1);break}else if(e.peekToken(1).Type==x.COMMA){let r=e.peekToken(0).Literal;t.addQualifier(r,""),e.skipToken(2);continue}}while(e.peekToken(0).Type!=x.RIGHTSAMLL);if(e.peekToken(0).Type==x.RIGHTSAMLL&&e.skipToken(1),t.scope=e.peekToken(0).Literal,e.skipToken(1),e.peekToken(0).Type==x.SEMICOLON)return e.skipToken(1),t;if(e.peekToken(0).isBuiltinType()&&e.peekToken(1).Type==x.IDENT&&e.peekToken(2).Type==x.SEMICOLON){let a=new rt(e.peekToken(0).Literal,e.peekToken(1).Literal);return t.addNode(a),e.skipToken(3),t}else if(e.peekToken(0).Type==x.IDENT&&e.peekToken(1).Type==x.LEFTBIG){let a=tr.parse(e);return t.addNode(a),e.peekToken(0).Type==x.IDENT&&e.peekToken(1).Type==x.SEMICOLON&&(a.addNode(new rt(a.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 a="";if(this.qualifier.size==1&&this.qualifier.has("location"))a+="@location("+this.qualifier.get("location")+") ";else if(this.qualifier.size==2&&this.qualifier.has("set")&&this.qualifier.has("binding"))a+="@group("+this.qualifier.get("set")+") @binding("+this.qualifier.get("binding")+") ";else if(this.qualifier.size>=1&&this.qualifier.has("binding"))a+="@group(0) @binding("+this.qualifier.get("binding")+") ";else if(this.qualifier.size==1&&this.qualifier.has("push_constant"))a+="@push_constant ";else if(this.qualifier.size>=1&&this.qualifier.has("local_size_x"))a+="@workgroup_size(",a+=this.qualifier.get("local_size_x")+", ",a+=this.qualifier.has("local_size_y")?this.qualifier.get("local_size_y")+", ":"1, ",a+=this.qualifier.has("local_size_z")?this.qualifier.get("local_size_z")+"":"1",a+=")";else if(this.nodes.length<=0)return"";let r=this.nodes[0];if(r instanceof rt){switch(r.type){case"sampler":case"texture2D":a+="var ";break;default:this.scope=="buffer"?e.stage=="compute"?a+="var<storage, read_write> ":a+="var<storage, read> ":a+="var<"+this.scope+"> ";break}e.addIdentifier(r.name,r.name),a+=r.name+": "+ca(r.type)+`;\r
5742
+ `,a}}class we extends Ge{constructor(){super()}static parse(e){let t=new Array,a=new Array,r=0;for(;e.peekToken(0).Type!=U.EOF;){let i=e.peekToken(0);if(i.Type==U.SEMICOLON||i.Type==U.RIGHTMEDI||i.Type==U.COMMA||i.Type==U.COLON||i.Type==U.RIGHTBIG)break;if(i.isOperation()){if(i.isOperation()){if(i.Type==U.INC||i.Type==U.DEC){let n=i;e.skipToken(1);let o=we.parse(e);a.push(new ii(n,void 0,o));continue}else if(t.length>0){if(t[t.length-1].nOperationPriorityLevel<=i.nOperationPriorityLevel)we.unionOperation(t,a);else if(t.length>0&&t[t.length-1].Literal=="-"){let o=t.pop(),l=a.pop();a.push(new ii(o,void 0,l))}}t.push(i),e.skipToken(1)}}else if(i.Type==U.LITERAL){a.push(new ar(i.Literal)),e.skipToken(1);continue}else if(i.Type==U.LEFTSAMLL){r++,t.push(i),e.skipToken(1);continue}else if(i.Type==U.RIGHTSAMLL){if(r<=0)break;for(r--;we.unionOperation(t,a););if(t[t.length-1].Type==U.LEFTSAMLL){t.pop();let n=new t0;n.addNode(a.pop()),a.push(n)}e.skipToken(1);continue}else if(i.Type==U.IDENT){if(e.peekToken(1).Type==U.INC||e.peekToken(1).Type==U.DEC){let n=e.peekToken(1),o=new Ha(i.Literal);a.push(new ii(n,o,void 0)),e.skipToken(2);continue}else if(e.peekToken(1).Type==U.LEFTSAMLL){a.push(Jr.parse(e));continue}else if(e.peekToken(1).Type==U.DOT){a.push(ls.parse(e));continue}else if(e.peekToken(1).Type==U.LEFTMEDI){a.push(Yr.parse(e));continue}a.push(new Ha(i.Literal)),e.skipToken(1);continue}else{if(i.isBuiltinType()&&e.peekToken(1).Type==U.LEFTSAMLL){a.push(Jr.parse(e));continue}if(i.isAssignOperation()){let n=i;e.skipToken(1);let o=a.pop(),l=we.parse(e);a.push(new br(n,o,l));continue}if(i.Type==U.LEFTBIG&&(e.peekToken(1).Type==U.LITERAL||e.peekToken(1).Type==U.SUB&&e.peekToken(2).Type==U.LITERAL)){a.push(ms.parse(e));continue}if(i.Type==U.QUEMARK){t.length>0&&t[t.length-1].nOperationPriorityLevel<=i.nOperationPriorityLevel&&we.unionOperation(t,a),e.skipToken(1);let n=a.pop(),o=we.parse(e);e.peekToken(0).Type==U.COLON&&e.skipToken(1);let l=we.parse(e);if(a.push(new a0(n,o,l)),e.peekToken(-1).Type==U.SEMICOLON)break;continue}if(i.Type==U.LEFTMEDI){e.skipToken(1);let n=we.parse(e);e.peekToken(0).Type==U.RIGHTMEDI&&e.skipToken(1);let o=a.pop();a.push(new Yr(o,n));continue}throw"An unexpected character"}}for(;t.length>0&&we.unionOperation(t,a););if(t.length<=0&&a.length==1){let i=new we;return i.addNode(a.pop()),i}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 a=e.pop(),r=t.pop();return t.push(new ii(a,void 0,r)),!0}return!1}if(e[e.length-1].isOperation()){let a=t.pop(),r=e.pop(),i=t.pop();return r.Type==U.DOT?t.push(new ls(i,a)):t.push(new br(r,i,a)),!0}return!1}}class t0 extends Ge{constructor(){super()}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+"("+this.nodes[0].formatToWGSL(e,0)+")"}}class Ha extends Ge{name;constructor(e){super(),this.name=e}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+e.findIdentifier(this.name)}}class ar extends Ge{value;constructor(e){super(),this.value=e}static parse(e){let t=e.peekToken(0);if(t.Type==U.SUB&&e.peekToken(1).Type==U.LITERAL){let a=new ar("-"+e.peekToken(1).Literal);return e.skipToken(2),a}else if(t.Type==U.LITERAL){let a=new ar(t.Literal);return e.skipToken(1),a}throw"Error parsing literal constants: Unexpected characters("+t.Literal+")"}formatToWGSL(e,t){return(t<=0?"":" ".repeat(t))+this.value}}class ms extends ar{arrayValue;constructor(e){super(""),this.arrayValue=e}static parse(e){if(e.peekToken(0).Type==U.LEFTBIG&&e.peekToken(1).Type==U.LITERAL||e.peekToken(0).Type==U.LEFTBIG&&e.peekToken(1).Type==U.SUB&&e.peekToken(2).Type==U.LITERAL){e.skipToken(1);let t=[];for(;e.peekToken(0).Type!=U.RIGHTBIG;){if(e.peekToken(0).Type==U.LEFTSAMLL){t.push(ms.parse(e));continue}if(t.push(ar.parse(e)),e.peekToken(0).Type==U.COMMA){e.skipToken(1);continue}else if(e.peekToken(0).Type==U.RIGHTBIG){e.skipToken(1);break}else throw"Error parsing array constants: Unexpected characters"}return new ms(t)}throw"Error parsing array constants: Unexpected characters"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);this.arrayValue[0].value.includes(".")?a+=r+"array<f32, "+this.arrayValue.length.toString()+">(":a+=r+"array<i32, "+this.arrayValue.length.toString()+">(";for(let i=0;i<this.arrayValue.length;i++)i>0&&(a+=", "),a+=this.arrayValue[i].formatToWGSL(e,0);return a+=")",a}}class T2 extends Ge{constructor(){super()}}class M2 extends Ge{constructor(){super()}}class fn extends Ge{constructor(){super()}static parse(e){if(e.peekToken(0).Type==U.CONTINUE&&e.peekToken(1).Type==U.SEMICOLON)return e.skipToken(2),new fn;throw"Error parsing continue: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);return a+=r+"continue",a}}class os extends Ge{value;constructor(e){super(),this.value=e}static parse(e){if(e.peekToken(0).Type==U.RETURN){e.skipToken(1);let t=we.parse(e);return e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1),new os(t)}throw"Error parsing return expression: Unexpected character"}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);return a+=r+"return "+this.value.formatToWGSL(e,0),a}}class ii extends Ge{op;leftValue;rightValue;constructor(e,t,a){super(),this.op=e,this.leftValue=t,this.rightValue=a}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);if(this.op.Literal=="++"||this.op.Literal=="--")if(this.leftValue!=null){let i=this.leftValue.formatToWGSL(e,0);a+=r+i+" = "+i+" "+this.op.Literal[0]+" 1"}else{let i=this.rightValue.formatToWGSL(e,0);a+=r+i+" = "+i+" "+this.op.Literal[0]+" 1"}else this.leftValue!=null?a+=r+this.leftValue.formatToWGSL(e,0)+this.op.Literal:a+=r+this.op.Literal+this.rightValue.formatToWGSL(e,0);return a}}class br extends Ge{op;leftValue;rightValue;constructor(e,t,a){super(),this.op=e,this.leftValue=t,this.rightValue=a}formatToWGSL(e,t){let a="",r=t<=0?"":" ".repeat(t);return a+=r+this.leftValue.formatToWGSL(e,0)+" "+this.op.Literal+" "+this.rightValue.formatToWGSL(e,0),a}}class a0 extends Ge{condition;expression1;expression2;constructor(e,t,a){super(),this.condition=e,this.expression1=t,this.expression2=a}static parse(e){throw"Error parsing ternary operation expression: Unexpected character"}formatToWGSL(e,t){return""}}class ls extends Ge{leftValue;rightValue;constructor(e,t){super(),this.leftValue=e,this.rightValue=t}static parse(e){if(e.peekToken(0).Type==U.IDENT&&e.peekToken(1).Type==U.DOT&&e.peekToken(2).Type==U.IDENT){let t=new Ha(e.peekToken(0).Literal),a=new Ha(e.peekToken(2).Literal);return e.skipToken(3),new ls(t,a)}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 Yr extends Ge{leftValue;indexValue;constructor(e,t){super(),this.leftValue=e,this.indexValue=t}static parse(e){if(e.peekToken(0).Type==U.IDENT&&e.peekToken(1).Type==U.LEFTMEDI){let t=new Ha(e.peekToken(0).Literal);e.skipToken(2);let a=we.parse(e);e.peekToken(0).Type==U.RIGHTMEDI&&e.skipToken(1);let r=new Yr(t,a);for(;e.peekToken(0).Type==U.LEFTMEDI;)e.skipToken(1),a=we.parse(e),e.peekToken(0).Type==U.RIGHTMEDI&&e.skipToken(1),r=new Yr(r,a);return r}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 Fa extends Ge{constructor(){super()}static parse(e){if(e.peekToken(0).Type==U.LEFTBIG){e.skipToken(1);let t=new Fa;for(let a=1;a>0&&e.peekToken(0).Type!=U.EOF;){let r=e.peekToken(0);if(r.Type==U.LEFTBIG){a++,e.skipToken(1);continue}if(r.Type==U.RIGHTBIG){a--,e.skipToken(1);continue}if(r.Type==U.SEMICOLON){e.skipToken(1);continue}if(r.isDataType()&&e.peekToken(1).Type==U.IDENT){t.addNode(rt.parse(e));continue}if(r.Type==U.CONST&&e.peekToken(1).isDataType()&&e.peekToken(2).Type==U.IDENT){t.addNode(rt.parse(e));continue}else if(r.Type==U.IDENT&&e.peekToken(1).Type==U.ASSIGN){t.addNode(we.parse(e)),e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1);continue}else if(r.Type==U.IDENT&&e.peekToken(1).Type==U.LEFTMEDI){let i=Yr.parse(e);if(e.peekToken(0).Type==U.ASSIGN){let n=e.peekToken(0);e.skipToken(1);let o=we.parse(e);e.peekToken(0).Type==U.RIGHTMEDI&&e.skipToken(1),t.addNode(new br(n,i,o));continue}t.addNode(i);continue}else if(r.Type==U.IDENT&&e.peekToken(1).Type==U.DOT){let i=we.parse(e);t.addNode(i);continue}else if(r.Type==U.IDENT&&e.peekToken(1).isAssignOperation()){let i=e.peekToken(1),n=new Ha(r.Literal);e.skipToken(2);let o=we.parse(e);e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1),t.addNode(new br(i,n,o));continue}else if(r.Type==U.IDENT&&(e.peekToken(1).Type==U.INC||e.peekToken(1).Type==U.DEC)&&e.peekToken(2).Type==U.SEMICOLON){let i=e.peekToken(1);t.addNode(new ii(i,new Ha(r.Literal),void 0)),e.skipToken(3);continue}else if(r.Type==U.RETURN){t.addNode(os.parse(e));continue}else if(r.Type==U.CONTINUE){t.addNode(fn.parse(e));continue}else if(r.Type==U.WHILE){t.addNode(Zr.parse(e));continue}else if(r.Type==U.FOR){t.addNode(jr.parse(e));continue}else if(r.Type==U.IF){t.addNode(Lr.parse(e));continue}else if(r.Type==U.IDENT&&e.peekToken(1).Type==U.LEFTSAMLL){t.addNode(Jr.parse(e)),e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(0);continue}throw"Error parsing block: Unexpected symbol("+r.Literal+")"}return t}throw"Error parsing block: Unexpected symbol"}}class dn extends Ge{type;qualifier;constructor(e,t){super(),this.type=t,this.qualifier=e}static parse(e){if(e.peekToken(0).Type==U.PRECISION&&e.peekToken(1).Type==U.IDENT&&e.peekToken(2).isBuiltinType()){let t=new dn(e.peekToken(1).Literal,e.peekToken(2).Literal);return e.skipToken(3),e.peekToken(0).Type==U.SEMICOLON&&e.skipToken(1),t}throw"Error parsing precision qualifier: Unexpected character"}formatToWGSL(e,t){return""}}class cs extends Ge{scope="";qualifier=new Map;constructor(){super()}addQualifier(e,t=""){this.qualifier.set(e,t)}static parse(e){if(e.peekToken(0).Type==U.LAYOUT&&e.peekToken(1).Type==U.LEFTSAMLL){let t=new cs;e.skipToken(2);do if(e.peekToken(0).Type==U.IDENT){if(e.peekToken(1).Type==U.ASSIGN&&e.peekToken(2).Type==U.LITERAL){let r=e.peekToken(0).Literal,i=e.peekToken(2).Literal;if(t.addQualifier(r,i),e.skipToken(3),e.peekToken(0).Type==U.COMMA){e.skipToken(1);continue}let n=e.peekToken(0);n.Line=0}else if(e.peekToken(1).Type==U.RIGHTSAMLL){let r=e.peekToken(0).Literal;t.addQualifier(r,""),e.skipToken(1);break}else if(e.peekToken(1).Type==U.COMMA){let r=e.peekToken(0).Literal;t.addQualifier(r,""),e.skipToken(2);continue}}while(e.peekToken(0).Type!=U.RIGHTSAMLL);if(e.peekToken(0).Type==U.RIGHTSAMLL&&e.skipToken(1),t.scope=e.peekToken(0).Literal,e.skipToken(1),e.peekToken(0).Type==U.SEMICOLON)return e.skipToken(1),t;if(e.peekToken(0).isBuiltinType()&&e.peekToken(1).Type==U.IDENT&&e.peekToken(2).Type==U.SEMICOLON){let a=new rt(e.peekToken(0).Literal,e.peekToken(1).Literal);return t.addNode(a),e.skipToken(3),t}else if(e.peekToken(0).Type==U.IDENT&&e.peekToken(1).Type==U.LEFTBIG){let a=tr.parse(e);return t.addNode(a),e.peekToken(0).Type==U.IDENT&&e.peekToken(1).Type==U.SEMICOLON&&(a.addNode(new rt(a.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 a="";if(this.qualifier.size==1&&this.qualifier.has("location"))a+="@location("+this.qualifier.get("location")+") ";else if(this.qualifier.size==2&&this.qualifier.has("set")&&this.qualifier.has("binding"))a+="@group("+this.qualifier.get("set")+") @binding("+this.qualifier.get("binding")+") ";else if(this.qualifier.size>=1&&this.qualifier.has("binding"))a+="@group(0) @binding("+this.qualifier.get("binding")+") ";else if(this.qualifier.size==1&&this.qualifier.has("push_constant"))a+="@push_constant ";else if(this.qualifier.size>=1&&this.qualifier.has("local_size_x"))a+="@workgroup_size(",a+=this.qualifier.get("local_size_x")+", ",a+=this.qualifier.has("local_size_y")?this.qualifier.get("local_size_y")+", ":"1, ",a+=this.qualifier.has("local_size_z")?this.qualifier.get("local_size_z")+"":"1",a+=")";else if(this.nodes.length<=0)return"";let r=this.nodes[0];if(r instanceof rt){switch(r.type){case"sampler":case"texture2D":a+="var ";break;default:this.scope=="buffer"?e.stage=="compute"?a+="var<storage, read_write> ":a+="var<storage, read> ":a+="var<"+this.scope+"> ";break}e.addIdentifier(r.name,r.name),a+=r.name+": "+ca(r.type)+`;\r
5743
5743
  `}else if(r instanceof tr){if(this.scope=="buffer"?e.stage=="compute"?a+="var<storage, read_write> ":a+="var<storage, read> ":a+="var<"+this.scope+"> ",r.nodes.length<=0){let i="unif"+e.layoutUniformCount.toString();for(;e.hasIdentifier(i);)e.layoutUniformCount++,i="unif"+e.layoutUniformCount.toString();for(let n of r.fields)e.addIdentifier(n.name,i+"."+n.name);a+=i+": "+r.name+`;\r
5744
5744
  `,e.layoutUniformCount++}else{let i=r.nodes[0];a+=i.name+": "+i.type+`;\r
5745
- `}return a}return a}}function ca(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 r0{_lexer;_rootNode;constructor(e){this._lexer=e,this._rootNode=new Ge,this.parse()}get lexer(){return this._lexer}parse(){for(;this.peekToken(0).Type!==x.EOF;){if(this.peekToken(0).Type==x.SEMICOLON){this.skipToken(1);continue}let e=this.parseStatement();e!==null&&this._rootNode.addNode(e)}}parseStatement(){let e=this.peekToken();if(e.Type==x.LAYOUT&&this.peekToken(1).Type==x.LEFTSAMLL)return cs.parse(this._lexer);if(e.Type==x.STRUCT)return this.skipToken(1),tr.parse(this._lexer);if((e.isBuiltinType()||e.Type==x.VOID)&&this.peekToken(1).Type==x.IDENT&&this.peekToken(2).Type==x.LEFTSAMLL)return ln.parse(this._lexer);if(e.Type==x.CONST&&this.peekToken(1).isDataType())return rt.parse(this._lexer);if(e.isDataType()&&this.peekToken(1).Type==x.IDENT)return rt.parse(this._lexer);if(e.Type==x.OUT&&this.peekToken(1).isDataType()&&this.peekToken(2).Type==x.IDENT)return rt.parse(this._lexer);if(e.Type==x.PRECISION)return dn.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 i0{static VertexShader="VertexShader";static FragmentShader="FragmentShader";static convertGLSL(e){var t=new $c(e),a=new qc(t),r=new r0(a),i=new e0(r);return i.generateWGSL()}}class zn{setID=0;bindingID=0;name="";type=""}class Wn{name="";type="";locationID=0;builtinName="";isBuiltinAttribute(){return this.builtinName!=""}}class s0{uniformInfo=[];inputAttribute=[];outputAttribute=[];sourceCode=""}var Ba=(s=>(s[s.vertex=0]="vertex",s[s.fragment=1]="fragment",s[s.computer=2]="computer",s))(Ba||{});class n0{blendMode=De.NONE;depthCompare=nt.less_equal;depthWriteEnabled=!0;frontFace="ccw";cullMode=Gt.back;topology=Ss.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 De.ABOVE;case"ALPHA":return De.ALPHA;case"NORMAL":return De.NORMAL;case"ADD":return De.ADD;case"BELOW":return De.BELOW;case"ERASE":return De.ERASE;case"MUL":return De.MUL;case"SCREEN":return De.SCREEN;case"DIVD":return De.DIVD;case"SOFT_ADD":return De.SOFT_ADD}return De.NONE}}class o0 extends Xa{uniformNodes=[];_onChange=!0;constructor(){super(),this.bufferType=Da.MaterialDataUniformGPUBuffer}initDataUniform(e){this.uniformNodes=e;let t=0;for(const a in e){const r=e[a];r||console.error(a,"is empty"),t+=r.size*4}t=Math.floor(t/256+1)*256,this.createBuffer(GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,t/4,null,"MaterialDataUniformGPUBuffer");for(const a in e){const r=e[a];r||console.error(a,"is empty");let i=this.memory.allocation_node(r.size*4);r.memoryInfo=i,r.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 Ka{static renderShaderModulePool;static renderShader;static init(){this.renderShaderModulePool=new Map,this.renderShader=new Map}}class ke{reference;static _ins;static getInstance(){return this._ins||=new ke,this._ins}attached(e,t){this.reference||=new Map;let a=this.reference.get(e);a||=new Map,a.set(t,e),this.reference.set(e,a)}detached(e,t){if(!this.reference)return;let a=this.reference.get(e);a&&(a.delete(t),a.size===0&&this.reference.delete(e))}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 Jn{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 qe extends Cn{passType=fe.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 Y||console.error("Shader Not Register, Please Register Shader!",this.vsName),this.fsName in Y||console.error("Shader Not Register, Please Register Shader!",this.fsName),Y[this.vsName]&&(this._sourceVS=Y[this.vsName]),Y[this.fsName]&&(this._sourceFS=Y[this.fsName]),this.textures={},this.bindGroups=[],this.shaderState=new n0,this.materialDataUniformBuffer=new o0,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==Gt.none}set doubleSide(e){let t=e?Gt.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!=De.NORMAL&&e!=De.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}setUniformArray(e,t){super.setUniformArray(e,t),this.materialDataUniformBuffer.onChange()}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 a=this.createGroupLayouts();this.createPipeline(e,t,a)}reBuild(e,t){this.compileShader(Ba.vertex,this._destVS,t),this.compileShader(Ba.fragment,this._destFS,t),this.genRenderPipeline(e,t)}apply(e,t,a){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=Mt.genRenderShaderVariant(this),this.reBuild(e,t),this._valueChange=!1,a&&a())}preCompile(e){this.preDefine(e),this.preCompileShader(Ba.vertex,this._sourceVS.concat()),this.preCompileShader(Ba.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),_.setting.render.useCompressGBuffer?this.defineValue.USE_COMPRESSGBUFFER=!0:this.defineValue.USE_COMPRESSGBUFFER=!1,_a.parse(e,this.defineValue)}setBindGroup(e,t){this.bindGroups[e]=t}checkBuffer(e,t){}preCompileShader(e,t,a){let r=t;if(r.indexOf("version ")!=-1){var i=i0.convertGLSL(r);r=i.sourceCode}for(const n in this.constValues)if(Object.prototype.hasOwnProperty.call(this.constValues,n)){const o=this.constValues[n];r=r.replaceAll(`&${n}`,o.toString())}switch(e){case Ba.vertex:this._destVS=r;break;case Ba.fragment:this._destFS=r;break}}compileShader(e,t,a){let r=t;r=this.applyPostDefine(r,a);let i=t;for(let o in this.defineValue)i+=`${o}=${this.defineValue[o]},`;let n=Ka.renderShaderModulePool.get(i);switch(n||(r=this.applyPostDefine(r,a),n=I.device.createShaderModule({label:e==Ba.vertex?this.vsName:this.fsName,code:r}),n.getCompilationInfo().then(o=>{o.messages.length>0&&(console.log(r),console.log(o))}),Ka.renderShaderModulePool.set(i,n)),e){case Ba.vertex:this._vsShaderModule=n,this._destVS=r;break;case Ba.fragment:this._fsShaderModule=n,this._destFS=r;break}}getGroupLayout(e,t){let a=[];for(let r=0;r<t.length;r++){const i=t[r];if(i)if(i.varType=="uniform"){this._bufferDic.has(i.varName)||console.error(`not set ${i.varName} buffer`);let n=this._bufferDic.get(i.varName).visibility,o={binding:i.binding,visibility:n,buffer:{type:"uniform"}};a.push(o)}else if(i.varType=="storage-read"){this._bufferDic.has(i.varName)||console.error(`not set ${i.varName} buffer`);let n=this._bufferDic.get(i.varName).visibility,o={binding:i.binding,visibility:n,buffer:{type:"read-only-storage"}};a.push(o)}else if(i.varType=="var")switch(i.dataType){case"sampler":{let n=i.varName.replace("Sampler",""),o=this.textures[n]?this.textures[n]:_.res.redTexture,l={binding:i.binding,visibility:o.visibility,sampler:o.samplerBindingLayout};a.push(l),this._textureGroup=e}break;case"sampler_comparison":{let n=i.varName.replace("Sampler",""),o=this.textures[n]?this.textures[n]:_.res.redTexture,l={binding:i.binding,visibility:o.visibility,sampler:o.sampler_comparisonBindingLayout};a.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 n=this.textures[i.varName]?this.textures[i.varName]:_.res.redTexture,o={binding:i.binding,visibility:n.visibility,texture:n.textureBindingLayout};a.push(o),this._textureGroup=e,ke.getInstance().attached(n,this)}break;case"texture_external":{let n=this.textures[i.varName]?this.textures[i.varName]:_.res.redTexture,o={binding:i.binding,visibility:n.visibility,externalTexture:{}};a.push(o),this._textureGroup=e,ke.getInstance().attached(n,this)}break;default:{let n=this.textures[i.varName]?this.textures[i.varName]:_.res.redTexture,o={binding:i.binding,visibility:n.visibility,texture:n.textureBindingLayout};a.push(o),this._textureGroup=e,ke.getInstance().attached(n,this)}break}else{debugger;console.error("bind group can't empty")}}return a}_cacheEntries;genGroups(e,t,a=!1){if(!this.bindGroups[e]||a){const r=t[e];let i=[];for(let o=0;o<r.length;o++){const l=r[o];if(l){if(l.varType=="uniform"){let c=this._bufferDic.get(l.varName);if(c){if(c.bufferType==Da.MaterialDataUniformGPUBuffer){let d=[];if(l.dataFields)for(let h=0;h<l.dataFields.length;h++){const u=l.dataFields[h];this.uniforms[u.name]?d.push(this.uniforms[u.name]):console.error(`shader-${this.vsName}:${this.fsName} ${u.name}is empty`)}d.length>0&&this.materialDataUniformBuffer.initDataUniform(d)}let f={binding:l.binding,resource:{buffer:c.buffer,offset:0,size:c.memory.shareDataBuffer.byteLength}};i.push(f),this.checkBuffer(l.varName,c)}else console.error(`shader${this.vsName}-${this.fsName}`,`buffer ${l.varName} is missing!`)}else if(l.varType=="storage-read"){let c=this._bufferDic.get(l.varName);if(c){let f={binding:l.binding,resource:{buffer:c.buffer,offset:0,size:c.memory.shareDataBuffer.byteLength}};i.push(f),this.checkBuffer(l.varName,c)}else console.error(`buffer ${l.varName} is missing!`)}else if(l.varType=="var")if(l.dataType=="sampler"){let c=l.varName.replace("Sampler",""),f=this.textures[c];if(f||(f=_.res.blackTexture,this.setTexture(c,f)),f){let d={binding:l.binding,resource:f.gpuSampler};i.push(d)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}else if(l.dataType=="sampler_comparison"){let c=l.varName.replace("Sampler",""),f=this.textures[c];if(f){let d={binding:l.binding,resource:f.gpuSampler_comparison};i.push(d)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}else{let c=this.textures[l.varName];if(c||(c=_.res.whiteTexture,this.setTexture(l.varName,c)),c){let f={binding:l.binding,resource:c.getGPUView()};i.push(f)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}}}let n=I.device.createBindGroup({layout:this.bindGroupLayouts[e],entries:i});this.bindGroups[e]=n}}createPipeline(e,t,a){let r=e,i=this.shaderState,n=[];for(const c of t.renderTargetTextures)n.push({format:c.format});for(let c=0;c<n.length;c++){const f=n[c];i.writeMasks&&i.writeMasks.length>0&&(f.writeMask=i.writeMasks[c])}if(t.outColor!=-1){let c=n[t.outColor];i.blendMode!=De.NONE?c.blend=Hc.getBlend(i.blendMode):delete c.blend}let o={label:this.vsName+"|"+this.fsName,layout:a,primitive:{topology:i.topology,cullMode:i.cullMode,frontFace:i.frontFace},vertex:void 0};this.vsEntryPoint!=""&&(o.vertex={module:this._vsShaderModule,entryPoint:this.vsEntryPoint,buffers:r.vertexBuffer.vertexBufferLayouts}),this.fsEntryPoint!=""&&(o.fragment={module:this._fsShaderModule,entryPoint:this.fsEntryPoint,targets:n}),i.multisample>0&&(o.multisample={count:i.multisample}),(t.zPreTexture||t.depthTexture)&&(i.blendMode!=De.NONE,_.setting.render.zPrePass&&t.zPreTexture&&i.useZ?o.depthStencil={depthWriteEnabled:!1,depthCompare:nt.less,format:t.zPreTexture.format}:o.depthStencil={depthWriteEnabled:i.depthWriteEnabled,depthCompare:i.depthCompare,format:t.depthTexture.format});let l=Jn.getSharePipeline(this.shaderVariant);l?this.pipeline=l:(this.pipeline=k.createPipeline(o),Jn.setSharePipeline(this.shaderVariant,this.pipeline))}createGroupLayouts(){this._groupsShaderReflectionVarInfos=[];let e=this.shaderReflection;this.bindGroupLayouts=[Ln.getGlobalDataBindGroupLayout()];for(let a=1;a<e.groups.length;a++){let r=e.groups[a];if(r){let i=this.getGroupLayout(a,r);this._groupsShaderReflectionVarInfos[a]=r;let n=I.device.createBindGroupLayout({entries:i,label:`vs${this.vsName} fs${this.fsName} ${r.length}`});this.bindGroupLayouts[a]=n}else console.error("can't set empty group!",a)}let t=I.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(G.TEXCOORD_1),a=e.hasAttribute(G.joints0),r=e.hasAttribute(G.a_morphPositions_0),i=e.hasAttribute(G.TANGENT),n=e.hasAttribute(G.color),o=this.shaderState.acceptGI,l=this.shaderState.useLight;t&&(this.defineValue.USE_SECONDUV=!0),a&&r?this.defineValue.USE_METAHUMAN=!0:(this.defineValue.USE_SKELETON=a,this.defineValue.USE_MORPHTARGETS=r),"USE_TANGENT"in this.defineValue||(this.defineValue.USE_TANGENT=i),this.defineValue.USE_GI=o,this.defineValue.USE_SHADOWMAPING=this.shaderState.acceptShadow,this.defineValue.USE_LIGHT=l,this.defineValue.USE_VERTXCOLOR=n,_.setting.pick.mode=="pixel"&&(this.defineValue.USE_WORLDPOS=!0),_.setting.gi.enable?this.defineValue.USEGI=!0:this.defineValue.USEGI=!1,_.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,_.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=_.setting.shadow.type=="PCF",this.defineValue.USE_HARD_SHADOW=_.setting.shadow.type=="HARD",this.defineValue.USE_SOFT_SHADOW=_.setting.shadow.type=="SOFT",this.defineValue.USE_CSM=na.Cascades>1,this.defineValue.USE_IES_PROFILE=Ra.use}genReflection(){this.shaderVariant=Mt.genRenderShaderVariant(this);let e=Mt.poolGetReflection(this.shaderVariant);if(e)this.shaderReflection=e;else{let t=_a.parse(this._destVS,this.defineValue);t=_a.parse(t,this.defineValue),Mt.getShaderReflection2(t,this);let a=_a.parse(this._destFS,this.defineValue);a=_a.parse(a,this.defineValue),Mt.getShaderReflection2(a,this),Mt.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 a=this.textures[t];if(ke.getInstance().detached(a,this),e&&!ke.getInstance().hasReference(a))a.destroy(e);else{a.destroy(!1);let r=ke.getInstance().getReference(a);if(r){let i=[];r.forEach((n,o)=>{"name"in n?i.push(n.name):i.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){Ka.renderShader.has(e)&&(Ka.renderShader.get(e).destroy(),Ka.renderShader.delete(e))}static getShader(e){return Ka.renderShader.get(e)}static createShader(e,t){let a=new qe(e,t);return Ka.renderShader.set(a.instanceID,a),a.instanceID}}class l0 extends qe{constructor(){super("sky_vs_frag_wgsl","SkyGBuffer_fs"),this.passType=fe.GI,this.setUniformVector3("eyesPos",new b),this.setUniformFloat("exposure",1),this.setUniformFloat("roughness",0);let e=this.shaderState;e.frontFace="ccw",e.cullMode=Gt.front,e.depthWriteEnabled=!1,e.depthCompare=nt.less}}class c0 extends qe{transparency;constructor(){super("gbuffer_vs","gbuffer_fs"),this.setShaderEntry("VertMain","FragMain"),this.passType=fe.GI,this.setUniformColor("baseColor",new J),this.setUniformColor("emissiveColor",new J),this.setUniformFloat("emissiveIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("alphaCutoff",1),this.blendMode=De.NONE,this.setTexture("normalMap",_.res.normalTexture)}}class f0 extends qe{constructor(){super("shadowCastMap_vert","directionShadowCastMap_frag"),this.passType=fe.SHADOW,this.setShaderEntry("main"),this.setUniformFloat("cameraFar",5e3),this.setUniformVector3("lightWorldPos",b.ZERO),this.shaderState.receiveEnv=!1,this.shaderState.castShadow=!1,this.shaderState.acceptShadow=!1,this.setDefine("USE_ALPHACUT",!0)}}class d0 extends qe{constructor(){super("castPointShadowMap_vert","shadowCastMap_frag"),this.passType=fe.POINT_SHADOW,this.setShaderEntry("main","main"),this.setUniformFloat("cameraFar",5e3),this.setUniformVector3("lightWorldPos",b.ZERO),this.shaderState.receiveEnv=!1,this.shaderState.castShadow=!1,this.shaderState.acceptShadow=!1,this.setDefine("USE_ALPHACUT",!0)}}class h0 extends qe{constructor(){super("ZPass_shader_vs","ZPass_shader_vs"),this.passType=fe.DEPTH,this.setShaderEntry("main"),this.useRz=!1;let e=this.shaderState;e.receiveEnv=!1}}class Ci{static createGIPass(e,t){if(sa.hasMask(e.rendererMask,Ne.Sky)){if(!t.passShader.get(fe.GI)){let r=t.getSubShaders(fe.COLOR)[0],i=new l0;i.setTexture("baseMap",r.getTexture("baseMap")),i.cullMode=r.cullMode,i.frontFace=r.frontFace,t.addRenderPass(i,0),i.preCompile(e.geometry)}}else this.castGBufferPass(e,t)}static castGBufferPass(e,t){let a=t.getDefaultShaders();for(let r=0;r<a.length;r++){const i=a[r];let n=t.getSubShaders(fe.GI);if(!n||n.length==0||n.length<r){let o=new c0;o.setTexture("baseMap",i.getTexture("baseMap")),o.setTexture("normalMap",i.getTexture("normalMap")),o.setTexture("emissiveMap",i.getTexture("emissiveMap")),i.uniforms.baseColor&&o.setUniform("baseColor",i.getUniform("baseColor")),i.uniforms.envIntensity&&o.setUniform("envIntensity",i.getUniform("envIntensity")),i.uniforms.emissiveColor&&o.setUniform("emissiveColor",i.getUniform("emissiveColor")),i.uniforms.emissiveIntensity&&o.setUniform("emissiveIntensity",i.getUniform("emissiveIntensity")),i.uniforms.alphaCutoff&&o.setUniform("alphaCutoff",i.getUniform("alphaCutoff")),o.cullMode=i.cullMode,o.frontFace=i.frontFace,o.preCompile(e.geometry),t.addRenderPass(o)}}}static createShadowPass(e,t){let a=sa.hasMask(e.rendererMask,Ne.SkinnedMesh),r=e.geometry.hasAttribute(G.TANGENT),i=e.geometry.hasAttribute(la.MORPH_POSITION_PREFIX+"0"),n=e.geometry.hasAttribute(la.MORPH_NORMAL_PREFIX+"0"),o=t.getSubShaders(fe.COLOR);for(let l=0;l<o.length;l++){const c=o[l];let f=t.getSubShaders(fe.SHADOW);if(!f||f.length<l+1){let h=new f0;h.setTexture("baseMap",c.getTexture("baseMap")),h.setUniform("alphaCutoff",c.getUniform("alphaCutoff")),r&&h.setDefine("USE_TANGENT",r),a&&h.setDefine("USE_SKELETON",a),i&&h.setDefine("USE_MORPHTARGETS",i),n&&h.setDefine("USE_MORPHNORMALS",n),c.cullMode=="none"?h.shaderState.cullMode="none":c.cullMode=="back"?h.shaderState.cullMode="front":c.cullMode=="front"&&(h.shaderState.cullMode="back"),h.preCompile(e.geometry),t.addRenderPass(h)}let d=t.getSubShaders(fe.POINT_SHADOW);if(!d||d.length<l+1){let h=new d0;h.setTexture("baseMap",c.getTexture("baseMap")),h.setUniform("alphaCutoff",c.getUniform("alphaCutoff")),h.setDefine("USE_ALPHACUT",1);for(let u=0;u<1;u++)r&&h.setDefine("USE_TANGENT",r),a&&h.setDefine("USE_SKELETON",a),i&&h.setDefine("USE_MORPHTARGETS",i),n&&h.setDefine("USE_MORPHNORMALS",n),h.shaderState.cullMode="front",h.preCompile(e.geometry);t.addRenderPass(h)}}}static createDepthPass(e,t){let a=t.getSubShaders(fe.COLOR),r=e.geometry.hasAttribute("TANGENT"),i=e.geometry.hasAttribute(la.MORPH_POSITION_PREFIX+"0"),n=e.geometry.hasAttribute(la.MORPH_NORMAL_PREFIX+"0"),o=sa.hasMask(e.rendererMask,Ne.SkinnedMesh);for(let l=0;l<a.length;l++){const c=a[l];let f=t.getSubShaders(fe.DEPTH);if(!f&&c.shaderState.useZ&&(!f||f.length<l)){let d=new h0;d.setTexture("baseMap",c.getTexture("baseMap")),r||d.setDefine("USE_TANGENT",r),o&&d.setDefine("USE_SKELETON",o),i&&d.setDefine("USE_MORPHTARGETS",i),n&&d.setDefine("USE_MORPHNORMALS",n),d.cullMode=c.cullMode,d.frontFace=c.frontFace,d.preCompile(e.geometry),t.addRenderPass(d)}}}static createReflectionPass(e,t){let a=t.getDefaultShaders();for(let o=0;o<a.length;o++){const l=a[o];let c=t.getSubShaders(fe.REFLECTION);if(!c||c.length==0||c.length<o){let f=new qe(l.vsName,l.fsName);f.vsEntryPoint=l.vsEntryPoint,f.fsEntryPoint=l.fsEntryPoint,f.passType=fe.REFLECTION;for(const d in l.shaderState){var r=l.shaderState[d];f.shaderState[d]=r}for(const d in l.textures){var i=l.getTexture(d);f.setTexture(d,i)}for(const d in l.uniforms){var n=l.getUniform(d);f.setUniform(d,n)}for(const d in l.defineValue){var n=l.defineValue[d];f.setDefine(d,n)}f.setDefine("USE_CASTREFLECTION",!0),f.preCompile(e.geometry),t.addRenderPass(f)}}}}class Sr{static _v1=new b;static _v2=new b;entities;box;subTrees=[];parent;level;static maxSplitLevel=6;static autoSplitLevel=3;index;uuid;constructor(e,t=0,a=null,r=0){this.parent=a,this.box=e.clone(),this.level=r,this.index=t,this.uuid=r+"_"+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<Sr.maxSplitLevel&&this.splitTree();let a;if(this.subTrees.length>0){for(let r of this.subTrees)if(r.tryInsertEntity(e)){a=!0;break}}return a||e.enterNode(this),!0}return!1}splitTree(){if(this.subTrees.length==0){const e=Sr._v1,t=this.box.extents.clone();let a=this.level+1,r=0;for(let i=0;i<2;i++)for(let n=0;n<2;n++)for(let o=0;o<2;o++){const l=new Ce;this.box.min.add(e.set(i,n,o).multiply(t),l.min),l.min.add(t,l.max),l.setFromMinMax(l.min,l.max);let c=new Sr(l,r++,this,a);this.subTrees.push(c)}}}__rayCastTempVector=new b;rayCasts(e,t){if(this.level==0||e.intersectBox(this.box,this.__rayCastTempVector)){this.entities.size>0&&t.push(...this.entities.values());for(let a of this.subTrees)a.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 a of this.entities.values())(this.level>Sr.autoSplitLevel||e.containsBox2(a.renderer.object3D.bound)>0)&&t.push(a);for(let a of this.subTrees)a.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 a of this.entities.values())(this.level>Sr.autoSplitLevel||e.containsBox2(a.renderer.object3D.bound)>0)&&(a.renderer.renderOrder<3e3?t.opaqueList.push(a.renderer):a.renderer.renderOrder>=3e3&&t.transparentList.push(a.renderer));for(let a of this.subTrees)a.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 a of this.subTrees)a.boxCasts(e,t);return!0}return!1}clean(){for(let e of this.entities.values())e.leaveNode();return this.entities.clear(),this}}class u0{_pool=[];_worldPosition=new b;_viewPosition=new b;_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,a,r){this._zSortList=[];for(let i of t){let n=this.pop();n.userData=i,n.obj3d=a(i),n.z=this.worldToCameraDepth(n.obj3d,e),this._zSortList.push(n)}this._zSortList.sort((i,n)=>i.z-n.z>0?1:-1),r||=[];for(let i of this._zSortList)r.push(i.userData);return this.recycle(),r}worldToCameraDepth(e,t){t||=e.transform.view3D.camera;let a=0;return t&&(this._worldPosition.copyFrom(e.transform.worldPosition),t.worldToScreenPoint(this._worldPosition,this._viewPosition),a=this._viewPosition.z),a}}let b0=new u0;var Si=(s=>(s[s.None=2]="None",s[s.StaticBatch=4]="StaticBatch",s[s.DynamicBatch=8]="DynamicBatch",s[s.Hiden=16]="Hiden",s))(Si||{});class jn{static addMask(e,t){return e|t}static removeMask(e,t){return e&~t}static hasMask(e,t){return(e&t)!=0}}class g0{opaqueList=[];transparentList=[];sky;clean(){this.opaqueList.length=0,this.transparentList.length=0}}class p0{renderGroup;constructor(){this.renderGroup=new Map}collect_add(e){let t="",a="";t+=e.geometry.instanceID;for(let i=0;i<e.materials.length;i++){const n=e.materials[i];a+=n.shader.getDefaultColorShader().shaderVariant}let r=t+a;this.renderGroup.has(r)||this.renderGroup.set(r,{bundleMap:new Map,key:r,renderNodes:[]}),this.renderGroup.get(r).renderNodes.indexOf(e)==-1&&this.renderGroup.get(r).renderNodes.push(e)}}class m0{renderShaderUpdateList=new Map;renderNodeList=new Map;collect_add(e){let t=e.transform.view3D;t&&e.materials&&e.materials.forEach(a=>{let r=this.renderShaderUpdateList.get(t);r||(r=new Map,this.renderShaderUpdateList.set(t,r));let i=this.renderNodeList.get(t);i||(i=new Map,this.renderNodeList.set(t,i)),i.set(e.instanceID,e);let n=a.getAllPass();for(let o=0;o<n.length;o++){const l=n[o];let c=`${e.geometry.instanceID+l.instanceID}`,f=r.get(c);f||(f=new Map,r.set(c,f)),f.set(e.instanceID,e)}})}collect_remove(e){let t=e.transform.view3D;if(t&&e.materials){let a=this.renderShaderUpdateList.get(t);a&&e.materials.forEach(r=>{let i=r.getAllPass();for(let n=0;n<i.length;n++){const o=i[n];let l=`${e.geometry.instanceID+o.instanceID}`;a.delete(l)}})}}}class q{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 q),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 g0,this._renderShaderCollect=new m0,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 a=e.length-1;a>0;a--)if(e[a].renderOrder<t.renderOrder){e.push(t);return}e.push(t)}addRenderNode(e,t){if(!e)return;let a=t.renderOrder>=3e3;if(t.hasMask(Ne.Sky))this.sky=t;else if(t.hasMask(Ne.Reflection)){this.removeRenderNode(e,t);let r=this._reflections.get(e);r||(r=[],this._reflections.set(e,r),r.push(t)),r.includes(t)||r.push(t)}else if(t.hasMask(Ne.Graphic3D))this._graphics.indexOf(t)==-1&&this._graphics.push(t);else if(jn.hasMask(t.renderLayer,Si.None)){this.removeRenderNode(e,t);let r=a?this._tr_RenderNodes:this._op_RenderNodes;r.has(e)||r.set(e,[]),r.get(e).push(t),_.setting.occlusionQuery.octree&&t.attachSceneOctree(this.getOctree(e));let i=this.getPashList(e,t);i.indexOf(t)==-1&&this.sortRenderNode(i,t)}else{this.removeRenderNode(e,t);let r=a?this._tr_renderGroup:this._op_renderGroup;r.has(e)||r.set(e,new p0),r.get(e).collect_add(t)}t.object3D.renderNode=t,this._renderShaderCollect.collect_add(t)}getOctree(e){let t,a=_.setting.occlusionQuery.octree;if(a&&(t=this._octreeRenderNodes.get(e),!t)){let r=new b(a.x,a.y,a.z),i=new b(a.width,a.height,a.depth),n=new Ce(r,i);t=new Sr(n),this._octreeRenderNodes.set(e,t)}return t}removeRenderNode(e,t){if(t.detachSceneOctree(),t.hasMask(Ne.Sky))this.sky=null;else if(t.hasMask(Ne.Reflection)){let a=this._reflections.get(e);if(a){let r=a.indexOf(t);r!=-1&&a.splice(r,1)}}else if(jn.hasMask(t.renderLayer,Si.None)){let a=this.getPashList(e,t);if(a){let r=a.indexOf(t);r!=-1&&a.splice(r,1)}}this._renderShaderCollect.collect_remove(t)}addLight(e,t){if(!this._sceneLights.has(e))this._sceneLights.set(e,[t]);else{let a=this._sceneLights.get(e);if(a.length>=_.setting.light.maxLight){console.warn("Alreay meet maxmium light number:",_.setting.light.maxLight);return}a.indexOf(t)!=-1||a.push(t)}}removeLight(e,t){if(this._sceneLights.has(e)){let a=this._sceneLights.get(e),r=a.indexOf(t);r!=-1&&a.splice(r,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 a=this._sceneGIProbes.get(e),r=a.indexOf(t);r!=-1&&a.splice(r,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 a=!1;for(const r of t)if(r.isRenderOrderChange||r.needSortOnCameraZ){a=!0;break}if(a){for(const r of t){let i=r.renderOrder;if(r.needSortOnCameraZ){let n=b0.worldToCameraDepth(r.object3D);n=1-Math.max(0,Math.min(1,n)),i+=n}r.__renderOrder=i,r.isRenderOrderChange=!1}t.sort((r,i)=>r.__renderOrder>i.__renderOrder?1:-1)}return this}getRenderNodes(e,t){if(this.autoSortRenderNodes(e),this._collectInfo.clean(),this._collectInfo.sky=this.sky,_.setting.occlusionQuery.octree)this.rendererOctree=this.getOctree(e),this.rendererOctree.getRenderNode(t.frustum,this._collectInfo);else{let a=this._op_RenderNodes.get(e);a&&(this._collectInfo.opaqueList=a.concat());let r=this._tr_RenderNodes.get(e);r&&(this._collectInfo.transparentList=r.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 A0{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 N2=Object.defineProperty,P2=Object.getOwnPropertyDescriptor,Zn=(s,e,t,a)=>{for(var r=P2(e,t),i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(e,t,r)||r);return r&&N2(e,t,r),r};class va extends et{instanceCount=0;lodLevel=0;alwaysRender=!1;instanceID;drawType=0;_geometry;_materials=[];_castShadow=!0;_castReflection=!0;_castGI=!1;_rendererMask=Ne.Default;_inRenderer=!1;_readyPipeline=!1;_combineShaderRefection;_ignoreEnvMap;_ignorePrefilterMap;__renderOrder=0;_renderOrder=0;_passInit=new Map;isRenderOrderChange;needSortOnCameraZ;isRecievePostEffectUI;_octreeBinder;_renderLayer=Si.None;_computes;init(e){this.renderOrder=0,this.rendererMask=Ne.Default,this.instanceID=yn().toString(),this._computes=[]}attachSceneOctree(e){this._octreeBinder={octree:e,entity:new A0(this)},this.transform.eventDispatcher.addEventListener(Yt.LOCAL_ONCHANGE,this.updateOctreeEntity,this)}detachSceneOctree(){this._octreeBinder&&(this._octreeBinder.entity?.leaveNode(),this.transform.eventDispatcher.removeEventListener(Yt.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&&ke.getInstance().detached(this._geometry,this),e&&ke.getInstance().attached(e,this)),this._geometry=e}addMask(e){this._rendererMask=sa.addMask(this.rendererMask,e)}removeMask(e){this._rendererMask=sa.removeMask(this.rendererMask,e)}hasMask(e){return sa.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 a=0;a<this._materials.length;a++){let r=this._materials[a];ke.getInstance().detached(r,this),r.shader&&r.shader.computes&&this.removeComputes(r.shader.computes)}for(let a=0;a<e.length;a++){let r=e[a];ke.getInstance().attached(r,this),r.shader&&r.shader.computes&&this.addComputes(r.shader.computes)}this._materials=e;let t=0;for(let a=0;a<e.length;a++){const n=e[a].getPass(fe.COLOR)[0];n.shaderState.transparent&&(t=t>n.renderOrder?t:n.renderOrder)}this.renderOrder=t,this._readyPipeline||this.initPipeline()}addComputes(e){this._computes.push(...e)}removeComputes(e){for(const t of e){let a=this._computes.indexOf(t);a!=-1&&this._computes.splice(a,1)}}addRendererMask(e){this._rendererMask=sa.addMask(this._rendererMask,e)}removeRendererMask(e){this._rendererMask=sa.removeMask(this._rendererMask,e)}onEnable(){this._readyPipeline||this.initPipeline(),q.instance.addRenderNode(this.transform.scene3D,this),this.updateOctreeEntity()}onDisable(){this._enable=!1,q.instance.removeRenderNode(this.transform.scene3D,this),super.onDisable?.()}selfCloneMaterials(e){let t=[];for(let a=0,r=this.materials.length;a<r;a++){const i=this.materials[a].clone();t.push(i)}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 r=this._materials[t].getPass(fe.COLOR);for(let i=0;i<r.length;i++){const n=r[i];n.shaderReflection||n.preCompile(this._geometry),this._geometry.generate(n.shaderReflection)}this.object3D.bound=this._geometry.bounds.clone()}this._readyPipeline=!0;let e=0;for(let t=0;t<this.materials.length;t++){const i=this.materials[t].getPass(fe.COLOR)[0];i.renderOrder>=3e3?e=e>i.renderOrder?e:i.renderOrder:e=Math.max(e-3e3,0),this.castNeedPass()}this.renderOrder=e,this.enable&&this.transform&&this.transform.scene3D&&q.instance.addRenderNode(this.transform.scene3D,this)}}castNeedPass(){if(this.castGI)for(let t=0;t<this.materials.length;t++){const a=this.materials[t];Ci.createGIPass(this,a.shader)}for(let t=0;t<this.materials.length;t++){const a=this.materials[t];a.castShadow&&Ci.createShadowPass(this,a.shader)}if(this.castReflection)for(let t=0;t<this.materials.length;t++){const a=this.materials[t];a.castReflection&&Ci.createReflectionPass(this,a.shader)}if(!sa.hasMask(this.rendererMask,Ne.IgnoreDepthPass)&&_.setting.render.zPrePass)for(let t=0;t<this.materials.length;t++){const a=this.materials[t];Ci.createDepthPass(this,a.shader)}else for(let t=0;t<this.materials.length;t++)this.materials[t].shader.removeShaderByIndex(fe.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,a){if(!this._geometry)return;let r=this,i=r.transform._worldMatrix;const n=Math.max(r.materials.length,r._geometry.subGeometries.length);for(let o=0;o<n;o++){const l=o>=r.materials.length?r.materials[0]:r.materials[o];if(!l||!l.enable)continue;let c=l.getPass(t);if(!(!c||c.length==0)){k.bindGeometryBuffer(a.encoder,r._geometry),dt.viewCount_vertex(e,fe[t],r._geometry.vertexCount);for(let f=0;f<c.length;f++){if(!c||c.length==0)continue;const h=c[f];if(h.pipeline){h.shaderState.splitTexture&&(a.endRenderPass(),Nt.WriteSplitColorTexture(r.instanceID),a.beginOpaqueRenderPass(),k.bindCamera(a.encoder,e.camera),k.bindGeometryBuffer(a.encoder,r._geometry)),k.bindPipeline(a.encoder,h)&&dt.viewCount_pipeline(e,fe[t]);let p=(o>=r._geometry.subGeometries.length?r._geometry.subGeometries[0]:r._geometry.subGeometries[o]).lodLevels[r.lodLevel];r.instanceCount>0?(dt.viewCount_instance(e,fe[t],r.instanceCount),dt.viewCount_indices(e,fe[t],p.indexCount),dt.viewCount_tri(e,fe[t],p.indexCount/3*r.instanceCount),k.drawIndexed(a.encoder,p.indexCount,r.instanceCount,p.indexStart,0,0)):(dt.viewCount_indices(e,fe[t],p.indexCount),dt.viewCount_tri(e,fe[t],p.indexCount/3),k.drawIndexed(a.encoder,p.indexCount,1,p.indexStart,0,i.index)),dt.viewCount_draw(e,fe[t])}}}}}renderPass2(e,t,a,r,i,n=!1){if(!this.enable||!this._geometry)return;let o=this,l=o.object3D.transform._worldMatrix;for(let c=0;c<this.materials.length;c++){const f=this.materials[c];if(!f.castShadow&&t==fe.SHADOW)continue;let d=f.getPass(t);if(!d||d.length==0)return;if(this.drawType==2)for(let h of d)h.pipeline&&(k.bindPipeline(i,h),k.draw(i,6,1,0,l.index));else{k.bindGeometryBuffer(i,o._geometry);for(let h of d)if(h.pipeline){k.bindPipeline(i,h);let p=o._geometry.subGeometries[c].lodLevels[o.lodLevel];k.drawIndexed(i,p.indexCount,1,p.indexStart,0,l.index)}}}}recordRenderPass2(e,t,a,r,i,n=!1){if(!this.enable)return;let o=this;for(let l=0;l<this.materials.length;l++){let f=this.materials[l].getPass(t);if(!f||f.length==0)return;let d=o.object3D.transform._worldMatrix;for(let h=0;h<f.length;h++){const u=f[h];k.bindPipeline(i,u);let A=o._geometry.subGeometries[l].lodLevels[o.lodLevel];k.drawIndexed(i,A.indexCount,1,A.indexStart,0,d.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,a,r){let i=this,n=e.scene.envMap;for(let o=0;o<i.materials.length;o++){let c=i.materials[o].getPass(t);if(c)for(let f=0;f<c.length;f++){const h=c[f];if(h.shaderState.splitTexture){let B=Nt.CreateSplitTexture(i.instanceID);h.setTexture("splitTexture_Map",B)}!i._ignoreEnvMap&&h.envMap!=n&&h.setTexture("envMap",n),h.prefilterMap||h.setTexture("prefilterMap",n);let u=xe.getReflectionEntries(e.scene);if(!h.reflectionMap&&u&&u.reflectionMap&&(h.setTexture("reflectionMap",u.reflectionMap),h.setStorageBuffer("reflectionBuffer",u.storageGPUBuffer)),h.pipeline){h.apply(i._geometry,a,()=>i.noticeShaderChange());continue}let m=_.res.getTexture("BRDFLUT");h.setTexture("brdflutMap",m);let g=_.getRenderJob(e).shadowMapPassRenderer;g&&g.depth2DArrayTexture&&h.setTexture("shadowMap",_.getRenderJob(e).shadowMapPassRenderer.depth2DArrayTexture);let p=_.getRenderJob(e).pointLightShadowRenderer;p&&p.cubeArrayTexture&&h.setTexture("pointShadowMap",p.cubeArrayTexture);let A=Ra.iesTexture;A&&h.setTexture("iesTextureArrayMap",A),a.irradianceBuffer&&a.irradianceBuffer.length>0&&(h.setTexture("irradianceMap",a.irradianceBuffer[0]),h.setTexture("irradianceDepthMap",a.irradianceBuffer[1]));let D=xe.getLightEntries(e.scene);D&&(h.setStorageBuffer("lightBuffer",D.storageGPUBuffer),D.irradianceVolume&&h.setUniformBuffer("irradianceData",D.irradianceVolume.irradianceVolumeBuffer)),r&&(h.setStorageBuffer("clustersUniform",r.clustersUniformBuffer),h.setStorageBuffer("lightAssignBuffer",r.lightAssignBuffer),h.setStorageBuffer("assignTable",r.assignTableBuffer),h.setStorageBuffer("clusterBuffer",r.clusterBuffer)),h.apply(i._geometry,a),this._passInit.set(t,!0)}}}beforeDestroy(e){this._geometry&&(ke.getInstance().detached(this._geometry,this),ke.getInstance().hasReference(this._geometry)||this._geometry.destroy(e));for(let t=0;t<this._materials.length;t++){const a=this._materials[t];a&&(ke.getInstance().detached(a,this),ke.getInstance().hasReference(a)||a.destroy(e))}this._computes&&(this._computes.length=0),this.detachSceneOctree(),super.beforeDestroy(e)}destroy(e){super.destroy(e),this._geometry=void 0,this._materials.length=0,this._computes=null,this._passInit&&(this._passInit.clear(),this._passInit=null),this._combineShaderRefection=void 0}}Zn([qr],va.prototype,"materials"),Zn([qr],va.prototype,"castShadow"),Zn([qr],va.prototype,"castGI");class xt{instanceID;name;enable=!0;_defaultSubShader;_shader;_isDestroyed=!1;constructor(){this.instanceID=Wt()}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 a of t)a.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 a of t)a.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(fe.COLOR)}clone(){let e=new xt;return e.shader=this.shader.clone(),e}destroy(e){this._isDestroyed||(this.name=null,this.instanceID=null,this._shader&&(this._shader.destroy(e),this._shader=null),this._defaultSubShader=null,this._isDestroyed=!0)}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 D0=`
5745
+ `}return a}return a}}function ca(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 r0{_lexer;_rootNode;constructor(e){this._lexer=e,this._rootNode=new Ge,this.parse()}get lexer(){return this._lexer}parse(){for(;this.peekToken(0).Type!==U.EOF;){if(this.peekToken(0).Type==U.SEMICOLON){this.skipToken(1);continue}let e=this.parseStatement();e!==null&&this._rootNode.addNode(e)}}parseStatement(){let e=this.peekToken();if(e.Type==U.LAYOUT&&this.peekToken(1).Type==U.LEFTSAMLL)return cs.parse(this._lexer);if(e.Type==U.STRUCT)return this.skipToken(1),tr.parse(this._lexer);if((e.isBuiltinType()||e.Type==U.VOID)&&this.peekToken(1).Type==U.IDENT&&this.peekToken(2).Type==U.LEFTSAMLL)return ln.parse(this._lexer);if(e.Type==U.CONST&&this.peekToken(1).isDataType())return rt.parse(this._lexer);if(e.isDataType()&&this.peekToken(1).Type==U.IDENT)return rt.parse(this._lexer);if(e.Type==U.OUT&&this.peekToken(1).isDataType()&&this.peekToken(2).Type==U.IDENT)return rt.parse(this._lexer);if(e.Type==U.PRECISION)return dn.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 i0{static VertexShader="VertexShader";static FragmentShader="FragmentShader";static convertGLSL(e){var t=new $c(e),a=new qc(t),r=new r0(a),i=new e0(r);return i.generateWGSL()}}class zn{setID=0;bindingID=0;name="";type=""}class Wn{name="";type="";locationID=0;builtinName="";isBuiltinAttribute(){return this.builtinName!=""}}class s0{uniformInfo=[];inputAttribute=[];outputAttribute=[];sourceCode=""}var Ba=(s=>(s[s.vertex=0]="vertex",s[s.fragment=1]="fragment",s[s.computer=2]="computer",s))(Ba||{});class n0{blendMode=De.NONE;depthCompare=nt.less_equal;depthWriteEnabled=!0;frontFace="ccw";cullMode=Gt.back;topology=Ss.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 De.ABOVE;case"ALPHA":return De.ALPHA;case"NORMAL":return De.NORMAL;case"ADD":return De.ADD;case"BELOW":return De.BELOW;case"ERASE":return De.ERASE;case"MUL":return De.MUL;case"SCREEN":return De.SCREEN;case"DIVD":return De.DIVD;case"SOFT_ADD":return De.SOFT_ADD}return De.NONE}}class o0 extends Xa{uniformNodes=[];_onChange=!0;constructor(){super(),this.bufferType=Da.MaterialDataUniformGPUBuffer}initDataUniform(e){this.uniformNodes=e;let t=0;for(const a in e){const r=e[a];r||console.error(a,"is empty"),t+=r.size*4}t=Math.floor(t/256+1)*256,this.createBuffer(GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,t/4,null,"MaterialDataUniformGPUBuffer");for(const a in e){const r=e[a];r||console.error(a,"is empty");let i=this.memory.allocation_node(r.size*4);r.memoryInfo=i,r.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 Ka{static renderShaderModulePool;static renderShader;static init(){this.renderShaderModulePool=new Map,this.renderShader=new Map}}class ke{reference;static _ins;static getInstance(){return this._ins||=new ke,this._ins}attached(e,t){this.reference||=new Map;let a=this.reference.get(e);a||=new Map,a.set(t,e),this.reference.set(e,a)}detached(e,t){if(!this.reference)return;let a=this.reference.get(e);a&&(a.delete(t),a.size===0&&this.reference.delete(e))}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 Jn{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 qe extends Cn{passType=fe.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 Y||console.error("Shader Not Register, Please Register Shader!",this.vsName),this.fsName in Y||console.error("Shader Not Register, Please Register Shader!",this.fsName),Y[this.vsName]&&(this._sourceVS=Y[this.vsName]),Y[this.fsName]&&(this._sourceFS=Y[this.fsName]),this.textures={},this.bindGroups=[],this.shaderState=new n0,this.materialDataUniformBuffer=new o0,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==Gt.none}set doubleSide(e){let t=e?Gt.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!=De.NORMAL&&e!=De.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}setUniformArray(e,t){super.setUniformArray(e,t),this.materialDataUniformBuffer.onChange()}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 a=this.createGroupLayouts();this.createPipeline(e,t,a)}reBuild(e,t){this.compileShader(Ba.vertex,this._destVS,t),this.compileShader(Ba.fragment,this._destFS,t),this.genRenderPipeline(e,t)}apply(e,t,a){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=Mt.genRenderShaderVariant(this),this.reBuild(e,t),this._valueChange=!1,a&&a())}preCompile(e){this.preDefine(e),this.preCompileShader(Ba.vertex,this._sourceVS.concat()),this.preCompileShader(Ba.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),_.setting.render.useCompressGBuffer?this.defineValue.USE_COMPRESSGBUFFER=!0:this.defineValue.USE_COMPRESSGBUFFER=!1,_a.parse(e,this.defineValue)}setBindGroup(e,t){this.bindGroups[e]=t}checkBuffer(e,t){}preCompileShader(e,t,a){let r=t;if(r.indexOf("version ")!=-1){var i=i0.convertGLSL(r);r=i.sourceCode}for(const n in this.constValues)if(Object.prototype.hasOwnProperty.call(this.constValues,n)){const o=this.constValues[n];r=r.replaceAll(`&${n}`,o.toString())}switch(e){case Ba.vertex:this._destVS=r;break;case Ba.fragment:this._destFS=r;break}}compileShader(e,t,a){let r=t;r=this.applyPostDefine(r,a);let i=t;for(let o in this.defineValue)i+=`${o}=${this.defineValue[o]},`;let n=Ka.renderShaderModulePool.get(i);switch(n||(r=this.applyPostDefine(r,a),n=I.device.createShaderModule({label:e==Ba.vertex?this.vsName:this.fsName,code:r}),n.getCompilationInfo().then(o=>{o.messages.length>0&&(console.log(r),console.log(o))}),Ka.renderShaderModulePool.set(i,n)),e){case Ba.vertex:this._vsShaderModule=n,this._destVS=r;break;case Ba.fragment:this._fsShaderModule=n,this._destFS=r;break}}getGroupLayout(e,t){let a=[];for(let r=0;r<t.length;r++){const i=t[r];if(i)if(i.varType=="uniform"){this._bufferDic.has(i.varName)||console.error(`not set ${i.varName} buffer`);let n=this._bufferDic.get(i.varName).visibility,o={binding:i.binding,visibility:n,buffer:{type:"uniform"}};a.push(o)}else if(i.varType=="storage-read"){this._bufferDic.has(i.varName)||console.error(`not set ${i.varName} buffer`);let n=this._bufferDic.get(i.varName).visibility,o={binding:i.binding,visibility:n,buffer:{type:"read-only-storage"}};a.push(o)}else if(i.varType=="var")switch(i.dataType){case"sampler":{let n=i.varName.replace("Sampler",""),o=this.textures[n]?this.textures[n]:_.res.redTexture,l={binding:i.binding,visibility:o.visibility,sampler:o.samplerBindingLayout};a.push(l),this._textureGroup=e}break;case"sampler_comparison":{let n=i.varName.replace("Sampler",""),o=this.textures[n]?this.textures[n]:_.res.redTexture,l={binding:i.binding,visibility:o.visibility,sampler:o.sampler_comparisonBindingLayout};a.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 n=this.textures[i.varName]?this.textures[i.varName]:_.res.redTexture,o={binding:i.binding,visibility:n.visibility,texture:n.textureBindingLayout};a.push(o),this._textureGroup=e,ke.getInstance().attached(n,this)}break;case"texture_external":{let n=this.textures[i.varName]?this.textures[i.varName]:_.res.redTexture,o={binding:i.binding,visibility:n.visibility,externalTexture:{}};a.push(o),this._textureGroup=e,ke.getInstance().attached(n,this)}break;default:{let n=this.textures[i.varName]?this.textures[i.varName]:_.res.redTexture,o={binding:i.binding,visibility:n.visibility,texture:n.textureBindingLayout};a.push(o),this._textureGroup=e,ke.getInstance().attached(n,this)}break}else{debugger;console.error("bind group can't empty")}}return a}_cacheEntries;genGroups(e,t,a=!1){if(!this.bindGroups[e]||a){const r=t[e];let i=[];for(let o=0;o<r.length;o++){const l=r[o];if(l){if(l.varType=="uniform"){let c=this._bufferDic.get(l.varName);if(c){if(c.bufferType==Da.MaterialDataUniformGPUBuffer){let d=[];if(l.dataFields)for(let h=0;h<l.dataFields.length;h++){const u=l.dataFields[h];this.uniforms[u.name]?d.push(this.uniforms[u.name]):console.error(`shader-${this.vsName}:${this.fsName} ${u.name}is empty`)}d.length>0&&this.materialDataUniformBuffer.initDataUniform(d)}let f={binding:l.binding,resource:{buffer:c.buffer,offset:0,size:c.memory.shareDataBuffer.byteLength}};i.push(f),this.checkBuffer(l.varName,c)}else console.error(`shader${this.vsName}-${this.fsName}`,`buffer ${l.varName} is missing!`)}else if(l.varType=="storage-read"){let c=this._bufferDic.get(l.varName);if(c){let f={binding:l.binding,resource:{buffer:c.buffer,offset:0,size:c.memory.shareDataBuffer.byteLength}};i.push(f),this.checkBuffer(l.varName,c)}else console.error(`buffer ${l.varName} is missing!`)}else if(l.varType=="var")if(l.dataType=="sampler"){let c=l.varName.replace("Sampler",""),f=this.textures[c];if(f||(f=_.res.blackTexture,this.setTexture(c,f)),f){let d={binding:l.binding,resource:f.gpuSampler};i.push(d)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}else if(l.dataType=="sampler_comparison"){let c=l.varName.replace("Sampler",""),f=this.textures[c];if(f){let d={binding:l.binding,resource:f.gpuSampler_comparison};i.push(d)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}else{let c=this.textures[l.varName];if(c||(c=_.res.whiteTexture,this.setTexture(l.varName,c)),c){let f={binding:l.binding,resource:c.getGPUView()};i.push(f)}else console.error(`shader${this.vsName}-${this.fsName}`,`texture ${l.varName} is missing! `)}}}let n=I.device.createBindGroup({layout:this.bindGroupLayouts[e],entries:i});this.bindGroups[e]=n}}createPipeline(e,t,a){let r=e,i=this.shaderState,n=[];for(const c of t.renderTargetTextures)n.push({format:c.format});for(let c=0;c<n.length;c++){const f=n[c];i.writeMasks&&i.writeMasks.length>0&&(f.writeMask=i.writeMasks[c])}if(t.outColor!=-1){let c=n[t.outColor];i.blendMode!=De.NONE?c.blend=Hc.getBlend(i.blendMode):delete c.blend}let o={label:this.vsName+"|"+this.fsName,layout:a,primitive:{topology:i.topology,cullMode:i.cullMode,frontFace:i.frontFace},vertex:void 0};this.vsEntryPoint!=""&&(o.vertex={module:this._vsShaderModule,entryPoint:this.vsEntryPoint,buffers:r.vertexBuffer.vertexBufferLayouts}),this.fsEntryPoint!=""&&(o.fragment={module:this._fsShaderModule,entryPoint:this.fsEntryPoint,targets:n}),i.multisample>0&&(o.multisample={count:i.multisample}),(t.zPreTexture||t.depthTexture)&&(i.blendMode!=De.NONE,_.setting.render.zPrePass&&t.zPreTexture&&i.useZ?o.depthStencil={depthWriteEnabled:!1,depthCompare:nt.less,format:t.zPreTexture.format}:o.depthStencil={depthWriteEnabled:i.depthWriteEnabled,depthCompare:i.depthCompare,format:t.depthTexture.format});let l=Jn.getSharePipeline(this.shaderVariant);l?this.pipeline=l:(this.pipeline=k.createPipeline(o),Jn.setSharePipeline(this.shaderVariant,this.pipeline))}createGroupLayouts(){this._groupsShaderReflectionVarInfos=[];let e=this.shaderReflection;this.bindGroupLayouts=[Ln.getGlobalDataBindGroupLayout()];for(let a=1;a<e.groups.length;a++){let r=e.groups[a];if(r){let i=this.getGroupLayout(a,r);this._groupsShaderReflectionVarInfos[a]=r;let n=I.device.createBindGroupLayout({entries:i,label:`vs${this.vsName} fs${this.fsName} ${r.length}`});this.bindGroupLayouts[a]=n}else console.error("can't set empty group!",a)}let t=I.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(G.TEXCOORD_1),a=e.hasAttribute(G.joints0),r=e.hasAttribute(G.a_morphPositions_0),i=e.hasAttribute(G.TANGENT),n=e.hasAttribute(G.color),o=this.shaderState.acceptGI,l=this.shaderState.useLight;t&&(this.defineValue.USE_SECONDUV=!0),a&&r?this.defineValue.USE_METAHUMAN=!0:(this.defineValue.USE_SKELETON=a,this.defineValue.USE_MORPHTARGETS=r),"USE_TANGENT"in this.defineValue||(this.defineValue.USE_TANGENT=i),this.defineValue.USE_GI=o,this.defineValue.USE_SHADOWMAPING=this.shaderState.acceptShadow,this.defineValue.USE_LIGHT=l,this.defineValue.USE_VERTXCOLOR=n,_.setting.pick.mode=="pixel"&&(this.defineValue.USE_WORLDPOS=!0),_.setting.gi.enable?this.defineValue.USEGI=!0:this.defineValue.USEGI=!1,_.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,_.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=_.setting.shadow.type=="PCF",this.defineValue.USE_HARD_SHADOW=_.setting.shadow.type=="HARD",this.defineValue.USE_SOFT_SHADOW=_.setting.shadow.type=="SOFT",this.defineValue.USE_CSM=na.Cascades>1,this.defineValue.USE_IES_PROFILE=Ra.use}genReflection(){this.shaderVariant=Mt.genRenderShaderVariant(this);let e=Mt.poolGetReflection(this.shaderVariant);if(e)this.shaderReflection=e;else{let t=_a.parse(this._destVS,this.defineValue);t=_a.parse(t,this.defineValue),Mt.getShaderReflection2(t,this);let a=_a.parse(this._destFS,this.defineValue);a=_a.parse(a,this.defineValue),Mt.getShaderReflection2(a,this),Mt.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 a=this.textures[t];if(ke.getInstance().detached(a,this),e&&!ke.getInstance().hasReference(a))a.destroy(e);else{a.destroy(!1);let r=ke.getInstance().getReference(a);if(r){let i=[];r.forEach((n,o)=>{"name"in n?i.push(n.name):i.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){Ka.renderShader.has(e)&&(Ka.renderShader.get(e).destroy(),Ka.renderShader.delete(e))}static getShader(e){return Ka.renderShader.get(e)}static createShader(e,t){let a=new qe(e,t);return Ka.renderShader.set(a.instanceID,a),a.instanceID}}class l0 extends qe{constructor(){super("sky_vs_frag_wgsl","SkyGBuffer_fs"),this.passType=fe.GI,this.setUniformVector3("eyesPos",new b),this.setUniformFloat("exposure",1),this.setUniformFloat("roughness",0);let e=this.shaderState;e.frontFace="ccw",e.cullMode=Gt.front,e.depthWriteEnabled=!1,e.depthCompare=nt.less}}class c0 extends qe{transparency;constructor(){super("gbuffer_vs","gbuffer_fs"),this.setShaderEntry("VertMain","FragMain"),this.passType=fe.GI,this.setUniformColor("baseColor",new J),this.setUniformColor("emissiveColor",new J),this.setUniformFloat("emissiveIntensity",1),this.setUniformFloat("normalScale",1),this.setUniformFloat("alphaCutoff",1),this.blendMode=De.NONE,this.setTexture("normalMap",_.res.normalTexture)}}class f0 extends qe{constructor(){super("shadowCastMap_vert","directionShadowCastMap_frag"),this.passType=fe.SHADOW,this.setShaderEntry("main"),this.setUniformFloat("cameraFar",5e3),this.setUniformVector3("lightWorldPos",b.ZERO),this.shaderState.receiveEnv=!1,this.shaderState.castShadow=!1,this.shaderState.acceptShadow=!1,this.setDefine("USE_ALPHACUT",!0)}}class d0 extends qe{constructor(){super("castPointShadowMap_vert","shadowCastMap_frag"),this.passType=fe.POINT_SHADOW,this.setShaderEntry("main","main"),this.setUniformFloat("cameraFar",5e3),this.setUniformVector3("lightWorldPos",b.ZERO),this.shaderState.receiveEnv=!1,this.shaderState.castShadow=!1,this.shaderState.acceptShadow=!1,this.setDefine("USE_ALPHACUT",!0)}}class h0 extends qe{constructor(){super("ZPass_shader_vs","ZPass_shader_vs"),this.passType=fe.DEPTH,this.setShaderEntry("main"),this.useRz=!1;let e=this.shaderState;e.receiveEnv=!1}}class Ci{static createGIPass(e,t){if(sa.hasMask(e.rendererMask,Ne.Sky)){if(!t.passShader.get(fe.GI)){let r=t.getSubShaders(fe.COLOR)[0],i=new l0;i.setTexture("baseMap",r.getTexture("baseMap")),i.cullMode=r.cullMode,i.frontFace=r.frontFace,t.addRenderPass(i,0),i.preCompile(e.geometry)}}else this.castGBufferPass(e,t)}static castGBufferPass(e,t){let a=t.getDefaultShaders();for(let r=0;r<a.length;r++){const i=a[r];let n=t.getSubShaders(fe.GI);if(!n||n.length==0||n.length<r){let o=new c0;o.setTexture("baseMap",i.getTexture("baseMap")),o.setTexture("normalMap",i.getTexture("normalMap")),o.setTexture("emissiveMap",i.getTexture("emissiveMap")),i.uniforms.baseColor&&o.setUniform("baseColor",i.getUniform("baseColor")),i.uniforms.envIntensity&&o.setUniform("envIntensity",i.getUniform("envIntensity")),i.uniforms.emissiveColor&&o.setUniform("emissiveColor",i.getUniform("emissiveColor")),i.uniforms.emissiveIntensity&&o.setUniform("emissiveIntensity",i.getUniform("emissiveIntensity")),i.uniforms.alphaCutoff&&o.setUniform("alphaCutoff",i.getUniform("alphaCutoff")),o.cullMode=i.cullMode,o.frontFace=i.frontFace,o.preCompile(e.geometry),t.addRenderPass(o)}}}static createShadowPass(e,t){let a=sa.hasMask(e.rendererMask,Ne.SkinnedMesh),r=e.geometry.hasAttribute(G.TANGENT),i=e.geometry.hasAttribute(la.MORPH_POSITION_PREFIX+"0"),n=e.geometry.hasAttribute(la.MORPH_NORMAL_PREFIX+"0"),o=t.getSubShaders(fe.COLOR);for(let l=0;l<o.length;l++){const c=o[l];let f=t.getSubShaders(fe.SHADOW);if(!f||f.length<l+1){let h=new f0;h.setTexture("baseMap",c.getTexture("baseMap")),h.setUniform("alphaCutoff",c.getUniform("alphaCutoff")),r&&h.setDefine("USE_TANGENT",r),a&&h.setDefine("USE_SKELETON",a),i&&h.setDefine("USE_MORPHTARGETS",i),n&&h.setDefine("USE_MORPHNORMALS",n),c.cullMode=="none"?h.shaderState.cullMode="none":c.cullMode=="back"?h.shaderState.cullMode="front":c.cullMode=="front"&&(h.shaderState.cullMode="back"),h.preCompile(e.geometry),t.addRenderPass(h)}let d=t.getSubShaders(fe.POINT_SHADOW);if(!d||d.length<l+1){let h=new d0;h.setTexture("baseMap",c.getTexture("baseMap")),h.setUniform("alphaCutoff",c.getUniform("alphaCutoff")),h.setDefine("USE_ALPHACUT",1);for(let u=0;u<1;u++)r&&h.setDefine("USE_TANGENT",r),a&&h.setDefine("USE_SKELETON",a),i&&h.setDefine("USE_MORPHTARGETS",i),n&&h.setDefine("USE_MORPHNORMALS",n),h.shaderState.cullMode="front",h.preCompile(e.geometry);t.addRenderPass(h)}}}static createDepthPass(e,t){let a=t.getSubShaders(fe.COLOR),r=e.geometry.hasAttribute("TANGENT"),i=e.geometry.hasAttribute(la.MORPH_POSITION_PREFIX+"0"),n=e.geometry.hasAttribute(la.MORPH_NORMAL_PREFIX+"0"),o=sa.hasMask(e.rendererMask,Ne.SkinnedMesh);for(let l=0;l<a.length;l++){const c=a[l];let f=t.getSubShaders(fe.DEPTH);if(!f&&c.shaderState.useZ&&(!f||f.length<l)){let d=new h0;d.setTexture("baseMap",c.getTexture("baseMap")),r||d.setDefine("USE_TANGENT",r),o&&d.setDefine("USE_SKELETON",o),i&&d.setDefine("USE_MORPHTARGETS",i),n&&d.setDefine("USE_MORPHNORMALS",n),d.cullMode=c.cullMode,d.frontFace=c.frontFace,d.preCompile(e.geometry),t.addRenderPass(d)}}}static createReflectionPass(e,t){let a=t.getDefaultShaders();for(let o=0;o<a.length;o++){const l=a[o];let c=t.getSubShaders(fe.REFLECTION);if(!c||c.length==0||c.length<o){let f=new qe(l.vsName,l.fsName);f.vsEntryPoint=l.vsEntryPoint,f.fsEntryPoint=l.fsEntryPoint,f.passType=fe.REFLECTION;for(const d in l.shaderState){var r=l.shaderState[d];f.shaderState[d]=r}for(const d in l.textures){var i=l.getTexture(d);f.setTexture(d,i)}for(const d in l.uniforms){var n=l.getUniform(d);f.setUniform(d,n)}for(const d in l.defineValue){var n=l.defineValue[d];f.setDefine(d,n)}f.setDefine("USE_CASTREFLECTION",!0),f.preCompile(e.geometry),t.addRenderPass(f)}}}}class Sr{static _v1=new b;static _v2=new b;entities;box;subTrees=[];parent;level;static maxSplitLevel=6;static autoSplitLevel=3;index;uuid;constructor(e,t=0,a=null,r=0){this.parent=a,this.box=e.clone(),this.level=r,this.index=t,this.uuid=r+"_"+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<Sr.maxSplitLevel&&this.splitTree();let a;if(this.subTrees.length>0){for(let r of this.subTrees)if(r.tryInsertEntity(e)){a=!0;break}}return a||e.enterNode(this),!0}return!1}splitTree(){if(this.subTrees.length==0){const e=Sr._v1,t=this.box.extents.clone();let a=this.level+1,r=0;for(let i=0;i<2;i++)for(let n=0;n<2;n++)for(let o=0;o<2;o++){const l=new Ce;this.box.min.add(e.set(i,n,o).multiply(t),l.min),l.min.add(t,l.max),l.setFromMinMax(l.min,l.max);let c=new Sr(l,r++,this,a);this.subTrees.push(c)}}}__rayCastTempVector=new b;rayCasts(e,t){if(this.level==0||e.intersectBox(this.box,this.__rayCastTempVector)){this.entities.size>0&&t.push(...this.entities.values());for(let a of this.subTrees)a.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 a of this.entities.values())(this.level>Sr.autoSplitLevel||e.containsBox2(a.renderer.object3D.bound)>0)&&t.push(a);for(let a of this.subTrees)a.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 a of this.entities.values())(this.level>Sr.autoSplitLevel||e.containsBox2(a.renderer.object3D.bound)>0)&&(a.renderer.renderOrder<3e3?t.opaqueList.push(a.renderer):a.renderer.renderOrder>=3e3&&t.transparentList.push(a.renderer));for(let a of this.subTrees)a.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 a of this.subTrees)a.boxCasts(e,t);return!0}return!1}clean(){for(let e of this.entities.values())e.leaveNode();return this.entities.clear(),this}}class u0{_pool=[];_worldPosition=new b;_viewPosition=new b;_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,a,r){this._zSortList=[];for(let i of t){let n=this.pop();n.userData=i,n.obj3d=a(i),n.z=this.worldToCameraDepth(n.obj3d,e),this._zSortList.push(n)}this._zSortList.sort((i,n)=>i.z-n.z>0?1:-1),r||=[];for(let i of this._zSortList)r.push(i.userData);return this.recycle(),r}worldToCameraDepth(e,t){t||=e.transform.view3D.camera;let a=0;return t&&(this._worldPosition.copyFrom(e.transform.worldPosition),t.worldToScreenPoint(this._worldPosition,this._viewPosition),a=this._viewPosition.z),a}}let b0=new u0;var Si=(s=>(s[s.None=2]="None",s[s.StaticBatch=4]="StaticBatch",s[s.DynamicBatch=8]="DynamicBatch",s[s.Hiden=16]="Hiden",s))(Si||{});class jn{static addMask(e,t){return e|t}static removeMask(e,t){return e&~t}static hasMask(e,t){return(e&t)!=0}}class g0{opaqueList=[];transparentList=[];sky;clean(){this.opaqueList.length=0,this.transparentList.length=0}}class p0{renderGroup;constructor(){this.renderGroup=new Map}collect_add(e){let t="",a="";t+=e.geometry.instanceID;for(let i=0;i<e.materials.length;i++){const n=e.materials[i];a+=n.shader.getDefaultColorShader().shaderVariant}let r=t+a;this.renderGroup.has(r)||this.renderGroup.set(r,{bundleMap:new Map,key:r,renderNodes:[]}),this.renderGroup.get(r).renderNodes.indexOf(e)==-1&&this.renderGroup.get(r).renderNodes.push(e)}}class m0{renderShaderUpdateList=new Map;renderNodeList=new Map;collect_add(e){let t=e.transform.view3D;t&&e.materials&&e.materials.forEach(a=>{let r=this.renderShaderUpdateList.get(t);r||(r=new Map,this.renderShaderUpdateList.set(t,r));let i=this.renderNodeList.get(t);i||(i=new Map,this.renderNodeList.set(t,i)),i.set(e.instanceID,e);let n=a.getAllPass();for(let o=0;o<n.length;o++){const l=n[o];let c=`${e.geometry.instanceID+l.instanceID}`,f=r.get(c);f||(f=new Map,r.set(c,f)),f.set(e.instanceID,e)}})}collect_remove(e){let t=e.transform.view3D;if(t&&e.materials){let a=this.renderShaderUpdateList.get(t);a&&e.materials.forEach(r=>{let i=r.getAllPass();for(let n=0;n<i.length;n++){const o=i[n];let l=`${e.geometry.instanceID+o.instanceID}`;a.delete(l)}})}}}class q{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 q),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 g0,this._renderShaderCollect=new m0,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 a=e.length-1;a>0;a--)if(e[a].renderOrder<t.renderOrder){e.push(t);return}e.push(t)}addRenderNode(e,t){if(!e)return;let a=t.renderOrder>=3e3;if(t.hasMask(Ne.Sky))this.sky=t;else if(t.hasMask(Ne.Reflection)){this.removeRenderNode(e,t);let r=this._reflections.get(e);r||(r=[],this._reflections.set(e,r),r.push(t)),r.includes(t)||r.push(t)}else if(t.hasMask(Ne.Graphic3D))this._graphics.indexOf(t)==-1&&this._graphics.push(t);else if(jn.hasMask(t.renderLayer,Si.None)){this.removeRenderNode(e,t);let r=a?this._tr_RenderNodes:this._op_RenderNodes;r.has(e)||r.set(e,[]),r.get(e).push(t),_.setting.occlusionQuery.octree&&t.attachSceneOctree(this.getOctree(e));let i=this.getPashList(e,t);i.indexOf(t)==-1&&this.sortRenderNode(i,t)}else{this.removeRenderNode(e,t);let r=a?this._tr_renderGroup:this._op_renderGroup;r.has(e)||r.set(e,new p0),r.get(e).collect_add(t)}t.object3D.renderNode=t,this._renderShaderCollect.collect_add(t)}getOctree(e){let t,a=_.setting.occlusionQuery.octree;if(a&&(t=this._octreeRenderNodes.get(e),!t)){let r=new b(a.x,a.y,a.z),i=new b(a.width,a.height,a.depth),n=new Ce(r,i);t=new Sr(n),this._octreeRenderNodes.set(e,t)}return t}removeRenderNode(e,t){if(t.detachSceneOctree(),t.hasMask(Ne.Sky))this.sky=null;else if(t.hasMask(Ne.Reflection)){let a=this._reflections.get(e);if(a){let r=a.indexOf(t);r!=-1&&a.splice(r,1)}}else if(jn.hasMask(t.renderLayer,Si.None)){let a=this.getPashList(e,t);if(a){let r=a.indexOf(t);r!=-1&&a.splice(r,1)}}this._renderShaderCollect.collect_remove(t)}addLight(e,t){if(!this._sceneLights.has(e))this._sceneLights.set(e,[t]);else{let a=this._sceneLights.get(e);if(a.length>=_.setting.light.maxLight){console.warn("Alreay meet maxmium light number:",_.setting.light.maxLight);return}a.indexOf(t)!=-1||a.push(t)}}removeLight(e,t){if(this._sceneLights.has(e)){let a=this._sceneLights.get(e),r=a.indexOf(t);r!=-1&&a.splice(r,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 a=this._sceneGIProbes.get(e),r=a.indexOf(t);r!=-1&&a.splice(r,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 a=!1;for(const r of t)if(r.isRenderOrderChange||r.needSortOnCameraZ){a=!0;break}if(a){for(const r of t){let i=r.renderOrder;if(r.needSortOnCameraZ){let n=b0.worldToCameraDepth(r.object3D);n=1-Math.max(0,Math.min(1,n)),i+=n}r.__renderOrder=i,r.isRenderOrderChange=!1}t.sort((r,i)=>r.__renderOrder>i.__renderOrder?1:-1)}return this}getRenderNodes(e,t){if(this.autoSortRenderNodes(e),this._collectInfo.clean(),this._collectInfo.sky=this.sky,_.setting.occlusionQuery.octree)this.rendererOctree=this.getOctree(e),this.rendererOctree.getRenderNode(t.frustum,this._collectInfo);else{let a=this._op_RenderNodes.get(e);a&&(this._collectInfo.opaqueList=a.concat());let r=this._tr_RenderNodes.get(e);r&&(this._collectInfo.transparentList=r.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 A0{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 N2=Object.defineProperty,P2=Object.getOwnPropertyDescriptor,Zn=(s,e,t,a)=>{for(var r=P2(e,t),i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(e,t,r)||r);return r&&N2(e,t,r),r};class va extends et{instanceCount=0;lodLevel=0;alwaysRender=!1;instanceID;drawType=0;_geometry;_materials=[];_castShadow=!0;_castReflection=!0;_castGI=!1;_rendererMask=Ne.Default;_inRenderer=!1;_readyPipeline=!1;_combineShaderRefection;_ignoreEnvMap;_ignorePrefilterMap;__renderOrder=0;_renderOrder=0;_passInit=new Map;isRenderOrderChange;needSortOnCameraZ;isRecievePostEffectUI;_octreeBinder;_renderLayer=Si.None;_computes;init(e){this.renderOrder=0,this.rendererMask=Ne.Default,this.instanceID=yn().toString(),this._computes=[]}attachSceneOctree(e){this._octreeBinder={octree:e,entity:new A0(this)},this.transform.eventDispatcher.addEventListener(Yt.LOCAL_ONCHANGE,this.updateOctreeEntity,this)}detachSceneOctree(){this._octreeBinder&&(this._octreeBinder.entity?.leaveNode(),this.transform.eventDispatcher.removeEventListener(Yt.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&&ke.getInstance().detached(this._geometry,this),e&&ke.getInstance().attached(e,this)),this._geometry=e}addMask(e){this._rendererMask=sa.addMask(this.rendererMask,e)}removeMask(e){this._rendererMask=sa.removeMask(this.rendererMask,e)}hasMask(e){return sa.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 a=0;a<this._materials.length;a++){let r=this._materials[a];ke.getInstance().detached(r,this),r.shader&&r.shader.computes&&this.removeComputes(r.shader.computes)}for(let a=0;a<e.length;a++){let r=e[a];ke.getInstance().attached(r,this),r.shader&&r.shader.computes&&this.addComputes(r.shader.computes)}this._materials=e;let t=0;for(let a=0;a<e.length;a++){const n=e[a].getPass(fe.COLOR)[0];n.shaderState.transparent&&(t=t>n.renderOrder?t:n.renderOrder)}this.renderOrder=t,this._readyPipeline||this.initPipeline()}addComputes(e){this._computes.push(...e)}removeComputes(e){for(const t of e){let a=this._computes.indexOf(t);a!=-1&&this._computes.splice(a,1)}}addRendererMask(e){this._rendererMask=sa.addMask(this._rendererMask,e)}removeRendererMask(e){this._rendererMask=sa.removeMask(this._rendererMask,e)}onEnable(){this._readyPipeline||this.initPipeline(),q.instance.addRenderNode(this.transform.scene3D,this),this.updateOctreeEntity()}onDisable(){this._enable=!1,q.instance.removeRenderNode(this.transform.scene3D,this),super.onDisable?.()}selfCloneMaterials(e){let t=[];for(let a=0,r=this.materials.length;a<r;a++){const i=this.materials[a].clone();t.push(i)}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 r=this._materials[t].getPass(fe.COLOR);for(let i=0;i<r.length;i++){const n=r[i];n.shaderReflection||n.preCompile(this._geometry),this._geometry.generate(n.shaderReflection)}this.object3D.bound=this._geometry.bounds.clone()}this._readyPipeline=!0;let e=0;for(let t=0;t<this.materials.length;t++){const i=this.materials[t].getPass(fe.COLOR)[0];i.renderOrder>=3e3?e=e>i.renderOrder?e:i.renderOrder:e=Math.max(e-3e3,0),this.castNeedPass()}this.renderOrder=e,this.enable&&this.transform&&this.transform.scene3D&&q.instance.addRenderNode(this.transform.scene3D,this)}}castNeedPass(){if(this.castGI)for(let t=0;t<this.materials.length;t++){const a=this.materials[t];Ci.createGIPass(this,a.shader)}for(let t=0;t<this.materials.length;t++){const a=this.materials[t];a.castShadow&&Ci.createShadowPass(this,a.shader)}if(this.castReflection)for(let t=0;t<this.materials.length;t++){const a=this.materials[t];a.castReflection&&Ci.createReflectionPass(this,a.shader)}if(!sa.hasMask(this.rendererMask,Ne.IgnoreDepthPass)&&_.setting.render.zPrePass)for(let t=0;t<this.materials.length;t++){const a=this.materials[t];Ci.createDepthPass(this,a.shader)}else for(let t=0;t<this.materials.length;t++)this.materials[t].shader.removeShaderByIndex(fe.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,a){if(!this._geometry)return;let r=this,i=r.transform._worldMatrix;const n=Math.max(r.materials.length,r._geometry.subGeometries.length);for(let o=0;o<n;o++){const l=o>=r.materials.length?r.materials[0]:r.materials[o];if(!l||!l.enable)continue;let c=l.getPass(t);if(!(!c||c.length==0)){k.bindGeometryBuffer(a.encoder,r._geometry),dt.viewCount_vertex(e,fe[t],r._geometry.vertexCount);for(let f=0;f<c.length;f++){if(!c||c.length==0)continue;const h=c[f];if(h.pipeline){h.shaderState.splitTexture&&(a.endRenderPass(),Nt.WriteSplitColorTexture(r.instanceID),a.beginOpaqueRenderPass(),k.bindCamera(a.encoder,e.camera),k.bindGeometryBuffer(a.encoder,r._geometry)),k.bindPipeline(a.encoder,h)&&dt.viewCount_pipeline(e,fe[t]);let p=(o>=r._geometry.subGeometries.length?r._geometry.subGeometries[0]:r._geometry.subGeometries[o]).lodLevels[r.lodLevel];r.instanceCount>0?(dt.viewCount_instance(e,fe[t],r.instanceCount),dt.viewCount_indices(e,fe[t],p.indexCount),dt.viewCount_tri(e,fe[t],p.indexCount/3*r.instanceCount),k.drawIndexed(a.encoder,p.indexCount,r.instanceCount,p.indexStart,0,0)):(dt.viewCount_indices(e,fe[t],p.indexCount),dt.viewCount_tri(e,fe[t],p.indexCount/3),k.drawIndexed(a.encoder,p.indexCount,1,p.indexStart,0,i.index)),dt.viewCount_draw(e,fe[t])}}}}}renderPass2(e,t,a,r,i,n=!1){if(!this.enable||!this._geometry)return;let o=this,l=o.object3D.transform._worldMatrix;for(let c=0;c<this.materials.length;c++){const f=this.materials[c];if(!f.castShadow&&t==fe.SHADOW)continue;let d=f.getPass(t);if(!d||d.length==0)return;if(this.drawType==2)for(let h of d)h.pipeline&&(k.bindPipeline(i,h),k.draw(i,6,1,0,l.index));else{k.bindGeometryBuffer(i,o._geometry);for(let h of d)if(h.pipeline){k.bindPipeline(i,h);let p=o._geometry.subGeometries[c].lodLevels[o.lodLevel];k.drawIndexed(i,p.indexCount,1,p.indexStart,0,l.index)}}}}recordRenderPass2(e,t,a,r,i,n=!1){if(!this.enable)return;let o=this;for(let l=0;l<this.materials.length;l++){let f=this.materials[l].getPass(t);if(!f||f.length==0)return;let d=o.object3D.transform._worldMatrix;for(let h=0;h<f.length;h++){const u=f[h];k.bindPipeline(i,u);let A=o._geometry.subGeometries[l].lodLevels[o.lodLevel];k.drawIndexed(i,A.indexCount,1,A.indexStart,0,d.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,a,r){let i=this,n=e.scene.envMap;for(let o=0;o<i.materials.length;o++){let c=i.materials[o].getPass(t);if(c)for(let f=0;f<c.length;f++){const h=c[f];if(h.shaderState.splitTexture){let B=Nt.CreateSplitTexture(i.instanceID);h.setTexture("splitTexture_Map",B)}!i._ignoreEnvMap&&h.envMap!=n&&h.setTexture("envMap",n),h.prefilterMap||h.setTexture("prefilterMap",n);let u=xe.getReflectionEntries(e.scene);if(!h.reflectionMap&&u&&u.reflectionMap&&(h.setTexture("reflectionMap",u.reflectionMap),h.setStorageBuffer("reflectionBuffer",u.storageGPUBuffer)),h.pipeline){h.apply(i._geometry,a,()=>i.noticeShaderChange());continue}let m=_.res.getTexture("BRDFLUT");h.setTexture("brdflutMap",m);let g=_.getRenderJob(e).shadowMapPassRenderer;g&&g.depth2DArrayTexture&&h.setTexture("shadowMap",_.getRenderJob(e).shadowMapPassRenderer.depth2DArrayTexture);let p=_.getRenderJob(e).pointLightShadowRenderer;p&&p.cubeArrayTexture&&h.setTexture("pointShadowMap",p.cubeArrayTexture);let A=Ra.iesTexture;A&&h.setTexture("iesTextureArrayMap",A),a.irradianceBuffer&&a.irradianceBuffer.length>0&&(h.setTexture("irradianceMap",a.irradianceBuffer[0]),h.setTexture("irradianceDepthMap",a.irradianceBuffer[1]));let D=xe.getLightEntries(e.scene);D&&(h.setStorageBuffer("lightBuffer",D.storageGPUBuffer),D.irradianceVolume&&h.setUniformBuffer("irradianceData",D.irradianceVolume.irradianceVolumeBuffer)),r&&(h.setStorageBuffer("clustersUniform",r.clustersUniformBuffer),h.setStorageBuffer("lightAssignBuffer",r.lightAssignBuffer),h.setStorageBuffer("assignTable",r.assignTableBuffer),h.setStorageBuffer("clusterBuffer",r.clusterBuffer)),h.apply(i._geometry,a),this._passInit.set(t,!0)}}}beforeDestroy(e){this._geometry&&(ke.getInstance().detached(this._geometry,this),ke.getInstance().hasReference(this._geometry)||this._geometry.destroy(e));for(let t=0;t<this._materials.length;t++){const a=this._materials[t];a&&(ke.getInstance().detached(a,this),ke.getInstance().hasReference(a)||a.destroy(e))}this._computes&&(this._computes.length=0),this.detachSceneOctree(),super.beforeDestroy(e)}destroy(e){super.destroy(e),this._geometry=void 0,this._materials.length=0,this._computes=null,this._passInit&&(this._passInit.clear(),this._passInit=null),this._combineShaderRefection=void 0}}Zn([qr],va.prototype,"materials"),Zn([qr],va.prototype,"castShadow"),Zn([qr],va.prototype,"castGI");class xt{instanceID;name;enable=!0;_defaultSubShader;_shader;_isDestroyed=!1;constructor(){this.instanceID=Wt()}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 a of t)a.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 a of t)a.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(fe.COLOR)}clone(){let e=new xt;return e.shader=this.shader.clone(),e}destroy(e){this._isDestroyed||(this.name=null,this.instanceID=null,this._shader&&(this._shader.destroy(e),this._shader=null),this._defaultSubShader=null,this._isDestroyed=!0)}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 D0=`
5746
5746
  #include "GlobalUniform"
5747
5747
 
5748
5748
  // Constants
@@ -6024,7 +6024,7 @@ struct InstanceData {
6024
6024
  o.color = evalSplat(vTexCoord, vColor);
6025
6025
  return o;
6026
6026
  }
6027
- `;class Dt{computes;passShader;constructor(){this.computes=[],this.passShader=new Map}addRenderPass(e,t=-1){let a=this.passShader.get(e.passType)||[];t==-1?a.push(e):a.splice(t,-1,e),this.passShader.set(e.passType,a)}removeShader(e,t=-1){let a=this.passShader.get(e.passType);if(a)if(t==-1){let r=a.indexOf(e);r!=-1&&a.splice(r)}else a.splice(t,1)}removeShaderByIndex(e,t=-1){let a=this.passShader.get(e);a&&(t==-1?this.passShader.delete(e):a.splice(t,1))}getSubShaders(e){return this.passShader.get(e)||[]}hasSubShaders(e){return this.passShader.get(e).length>0}getDefaultShaders(){return this.passShader.get(fe.COLOR)}getDefaultColorShader(){return this.passShader.get(fe.COLOR)[0]}setDefine(e,t){for(const a of this.passShader)for(const r of a[1])r.setDefine(e,t)}hasDefine(e){for(const t of this.passShader)for(const a of t[1]){let r=a.hasDefine(e);if(r)return r}return!1}deleteDefine(e){for(const t of this.passShader)for(const a of t[1])a.deleteDefine(e)}setUniform(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniform(e,t)}setUniformFloat(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformFloat(e,t)}setUniformVector2(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformVector2(e,t)}setUniformVector3(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformVector3(e,t)}setUniformVector4(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformVector4(e,t)}setUniformColor(e,t){for(const a of this.passShader)for(const r of a[1])r.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 a of this.passShader)for(const r of a[1])r.setTexture(e,t);this.setDefine(`USE_${e.toLocaleUpperCase()}`,!0)}getTexture(e){return this.getDefaultColorShader().textures[e]}setUniformBuffer(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformBuffer(e,t)}getUniformBuffer(e){return this.getDefaultColorShader().getBuffer(e)}setStorageBuffer(e,t){for(const a of this.passShader)for(const r of a[1])r.setStorageBuffer(e,t)}getStorageBuffer(e){return this.getDefaultColorShader().getBuffer(e)}setStructStorageBuffer(e,t){for(const a of this.passShader)for(const r of a[1])r.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(e){for(const t of this.passShader)for(const a of t[1])a.destroy(e);this.passShader.clear(),this.passShader=null,this.computes=null}clone(){let e=new Dt,t=this.getDefaultShaders();for(const a of t)e.addRenderPass(a);return e}applyUniform(){for(const e of this.passShader)for(const t of e[1])t.applyUniform()}}var V2=Object.getOwnPropertyDescriptor,O2=(s,e,t,a)=>{for(var r=a>1?void 0:a?V2(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Fi=class extends Dt{constructor(){super();const s=new qe("gsplat_vs_dc","gsplat_fs_dc");s.passType=fe.COLOR,s.setShaderEntry("VertMain","FragMain"),s.topology=Ss.triangle_list,s.depthWriteEnabled=!1,s.cullMode=Gt.none,s.shaderState.transparent=!0,s.shaderState.blendMode=De.NORMAL,s.shaderState.writeMasks=[15,0],s.shaderState.castReflection=!1,s.shaderState.depthCompare=nt.less,this.addRenderPass(s),this.setDefault()}setDefault(){const s=this.getDefaultColorShader(),e=new R;s.setUniform("modelMatrix",e.rawData),s.setUniform("pixelCull",new Float32Array([2,0,0,0]))}};Fi=O2([Pa(Fi,"GSplatShader")],Fi);class Yn extends xt{_pixelCullArray=new Float32Array(4);constructor(){super(),Y.register("gsplat_vs_dc",D0),Y.register("gsplat_fs_dc",_0),this.shader=new Fi}setSplatTextures(e,t,a,r,i){const n=this.shader.getDefaultColorShader();n.setTexture("splatColor",e),n.setTexture("transformA",t),n.setTexture("transformB",a),n.setUniformArray("tex_params",r),i&&n.setTexture("splatOrder",i),n.shaderState.depthCompare=nt.less}setTransformMatrix(e){this.shader.getDefaultColorShader().setUniform("modelMatrix",e.rawData)}setPixelCulling(e,t,a=0,r=128){this._pixelCullArray[0]=e,this._pixelCullArray[1]=t,this._pixelCullArray[2]=a,this._pixelCullArray[3]=r,this.shader.getDefaultColorShader().setUniform("pixelCull",this._pixelCullArray)}setTexParams(e){this.shader.getDefaultColorShader().setUniformArray("tex_params",e)}}class Rs extends Xa{node;constructor(e){super(),this.bufferType=Da.VertexGPUBuffer,this.createVertexBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX,e)}createVertexBuffer(e,t){let a=I.device;this.byteSize=t*Float32Array.BYTES_PER_ELEMENT,this.usage=e,this.buffer&&this.destroy(),this.buffer=a.createBuffer({label:"VertexGPUBuffer",size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new cr,this.memoryNodes=new Map,this.memory.allocation(this.byteSize),this.node=this.memory.allocation_node(this.byteSize)}}var Et=(s=>(s[s.split=0]="split",s[s.compose=1]="compose",s[s.compose_bin=2]="compose_bin",s))(Et||{});class B0{vertexCount=0;vertexGPUBuffer;geometryType=Et.compose;_vertexBufferLayouts;_attributeSlotLayouts;_attributeLocation;constructor(){this._vertexBufferLayouts=[],this._attributeLocation={},this._attributeSlotLayouts=[]}get vertexBufferLayouts(){return this._vertexBufferLayouts}createVertexBuffer(e,t){switch(this.geometryType){case Et.split:this.createSplitVertexBuffer(e,t);break;case Et.compose:this.createComposeVertexBuffer(e,t);break;case Et.compose_bin:this.createComposBinVertexBuffer(e,t);break}}createSplitVertexBuffer(e,t){let a=0;for(let r=0;r<t.attributes.length;r++){const i=t.attributes[r];if(i.name=="index")continue;this._attributeLocation[i.name]=i.location;let n={name:i.name,format:i.format,offset:0,shaderLocation:i.location,stride:dr[i.format]};this._attributeSlotLayouts[i.location]=[n];let o=e.get(i.name);o||(o={attribute:i.name,data:new Float32Array(i.size*this.vertexCount)},e.set(i.name,o));let l=o.data.length/n.stride;this.vertexCount!=0&&this.vertexCount!=l&&console.error(" vertex count not match attribute count"),this.vertexCount=l,this._vertexBufferLayouts[i.location]={name:i.name,arrayStride:i.size*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[i.location],offset:a*4,size:this.vertexCount*i.size*4},a+=this.vertexCount*i.size}this.vertexGPUBuffer=new Rs(a)}createComposeVertexBuffer(e,t){this._attributeSlotLayouts[0]=[];let a=0;for(let r=0;r<t.attributes.length;r++){const i=t.attributes[r];if(i.name=="index"||i.type=="builtin")continue;this._attributeLocation[i.name]=i.location;let n={name:i.name,format:i.format,offset:a*4,shaderLocation:i.location,stride:dr[i.format]};this._attributeSlotLayouts[0][i.location]=n;let o=e.get(i.name);if(o||(o={attribute:i.name,data:new Float32Array(i.size*this.vertexCount)},e.set(i.name,o)),o.data){let l=o.data.length/n.stride;this.vertexCount!=0&&this.vertexCount!=l&&console.error(" vertex count not match attribute count"),this.vertexCount=l}a+=i.size}this._vertexBufferLayouts[0]={name:"composeStruct",arrayStride:a*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[0],offset:0,size:this.vertexCount*a*4},this.vertexGPUBuffer=new Rs(this.vertexCount*a)}createComposBinVertexBuffer(e,t){this._attributeSlotLayouts[0]=[];let a=0;for(let n=0;n<t.attributes.length;n++){const o=t.attributes[n];if(o.name=="index"||o.type=="builtin")continue;this._attributeLocation[o.name]=o.location;let l={name:o.name,format:o.format,offset:a*4,shaderLocation:o.location,stride:dr[o.format]};this._attributeSlotLayouts[0][o.location]=l;let c=e.get(o.name);if(c||(c={attribute:o.name,data:new Float32Array(o.size*this.vertexCount)},e.set(o.name,c)),c.data){let f=c.data.length/l.stride;this.vertexCount!=0&&this.vertexCount!=f&&console.error(" vertex count not match attribute count"),this.vertexCount=f}a+=o.size}let i=e.get(G.all).data.length/a;this.vertexCount=i,this._vertexBufferLayouts[0]={name:"composeStruct",arrayStride:a*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[0],offset:0,size:this.vertexCount*a*4},this.vertexGPUBuffer=new Rs(this.vertexCount*a)}upload(e,t){if(this.vertexGPUBuffer){switch(this.geometryType){case Et.split:{let a=this._attributeLocation[e],r=this._vertexBufferLayouts[a];this.vertexGPUBuffer.node.setFloat32Array(r.offset/4,t.data)}break;case Et.compose:for(let a=0;a<this.vertexCount;a++){const r=this._attributeSlotLayouts[0][this._attributeLocation[e]];for(let i=0;i<r.stride;i++){let n=t.data[a*r.stride+i],o=a*(this._vertexBufferLayouts[0].arrayStride/4)+r.offset/4+i;this.vertexGPUBuffer.node.setFloat(n,o)}}break;case Et.compose_bin:this.vertexGPUBuffer.node.setFloat32Array(0,t.data);break}this.vertexGPUBuffer?.apply()}}updateAttributes(e){switch(this.geometryType){case Et.split:for(let t=0;t<this._vertexBufferLayouts.length;t++){const a=this._vertexBufferLayouts[t];let r=e.get(a.name);this.vertexGPUBuffer.node.setFloat32Array(a.offset/4,r.data)}break;case Et.compose:for(let t=0;t<this.vertexCount;t++)this._attributeSlotLayouts.forEach(a=>{for(let r=0;r<a.length;r++){const i=a[r];let n=e.get(i.name);for(let o=0;o<i.stride;o++){let l=n.data[t*i.stride+o],c=t*(this._vertexBufferLayouts[0].arrayStride/4)+i.offset/4+o;this.vertexGPUBuffer.node.setFloat(l,c)}}});break;case Et.compose_bin:{let t=e.get(G.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 v0 extends Xa{indicesNode;constructor(e){super(),this.bufferType=Da.IndicesGPUBuffer,this.createIndicesBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.INDEX|GPUBufferUsage.INDIRECT,e)}createIndicesBuffer(e,t){let a=I.device;if(this.byteSize=t.length*4,this.usage=e,this.buffer&&this.destroy(),this.buffer=a.createBuffer({label:"IndicesGPUBuffer",size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new cr,this.memoryNodes=new Map,this.memory.allocation(this.byteSize),t){this.indicesNode=this.memory.allocation_node(t.length*4);const r=t.buffer instanceof ArrayBuffer?t.buffer:new Uint8Array(t.buffer).buffer;this.indicesNode.setArrayBuffer(0,r),this.apply()}}}class x0{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 v0(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 U0{lodLevels}class Le{instanceID;name;subGeometries=[];morphTargetsRelative;morphTargetDictionary;skinNames;bindPose;blendShapeData;vertexDim;vertexCount=0;_bounds;_attributeMap;_attributes;_indicesBuffer;_vertexBuffer;_onChange=!0;_wireframeLines;_isDestroyed=!1;constructor(){this.instanceID=Wt(),this._attributeMap=new Map,this._attributes=[],this._vertexBuffer=new B0}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 Ce(new b,new b(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(G.position);if(e&&e.data)for(let t=0;t<e.data.length/3;t++){const a=e.data[t*3+0],r=e.data[t*3+1],i=e.data[t*3+2];this._bounds.min.x>a&&(this._bounds.min.x=a),this._bounds.min.y>r&&(this._bounds.min.y=r),this._bounds.min.z>i&&(this._bounds.min.z=i),this._bounds.max.x<a&&(this._bounds.max.x=a),this._bounds.max.y<r&&(this._bounds.max.y=r),this._bounds.max.z<i&&(this._bounds.max.z=i)}this._bounds.setFromMinMax(this._bounds.min,this._bounds.max)}return this._bounds}set bounds(e){this._bounds=e}addSubGeometry(...e){let t=new U0;return t.lodLevels=e,this.subGeometries.push(t),t}generate(e){this._onChange&&(this._onChange=!1,this._indicesBuffer.upload(this.getAttribute(G.indices).data),this._vertexBuffer.createVertexBuffer(this._attributeMap,e),this._vertexBuffer.updateAttributes(this._attributeMap),this.vertexCount=this._vertexBuffer.vertexCount)}setIndices(e){if(!this._attributeMap.has(G.indices)){let t={attribute:G.indices,data:e};this._attributeMap.set(G.indices,t),this._indicesBuffer=new x0,this._indicesBuffer.createIndicesBuffer(t)}}setAttribute(e,t){if(e==G.indices)this.setIndices(t);else{let a={attribute:e,data:t};this._attributeMap.set(e,a),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==Et.split||this.geometryType==Et.compose){let e=this.getAttribute(G.position),t=this.getAttribute(G.indices);if(t&&e&&t.data.length>0){let a=e.data,r=[];for(let i=0;i<t.data.length/3;i++){const n=t.data[i*3+0],o=t.data[i*3+1],l=t.data[i*3+2];let c=new b(a[n*3+0],a[n*3+1],a[n*3+2]),f=new b(a[o*3+0],a[o*3+1],a[o*3+2]),d=new b(a[l*3+0],a[l*3+1],a[l*3+2]);r.push(c,f),r.push(f,d),r.push(d,c)}return this._wireframeLines=r,r}}else if(this.geometryType==Et.compose_bin){let e=this.getAttribute(G.all),t=this.vertexDim,a=this.getAttribute(G.indices);if(a&&e&&a.data.length>0){let r=e.data,i=[];for(let n=0;n<a.data.length/3;n++){const o=a.data[n*3+0],l=a.data[n*3+1],c=a.data[n*3+2];let f=new b(r[o*t+0],r[o*t+1],r[o*t+2]),d=new b(r[l*t+0],r[l*t+1],r[l*t+2]),h=new b(r[c*t+0],r[c*t+1],r[c*t+2]);i.push(f,d),i.push(d,h),i.push(h,f)}return this._wireframeLines=i,i}}return null}compute(){this._indicesBuffer&&this._indicesBuffer.compute(),this._vertexBuffer&&this._vertexBuffer.compute()}static crossA=b.UP.clone();static crossB=b.UP.clone();static crossRet=b.UP.clone();static point1=b.UP.clone();static point2=b.UP.clone();static point3=b.UP.clone();computeNormals(){let e=this.getAttribute(G.position),t=this.getAttribute(G.normal),a=this.getAttribute(G.indices);if(!e||!t||!a)return this;let r=a.data.length/3,i=Le.point1,n=Le.point2,o=Le.point3,l=Le.crossA,c=Le.crossB,f=Le.crossRet;for(let d=0;d<r;d++){let h=a.data[d*3],u=a.data[d*3+1],m=a.data[d*3+2];i.set(e.data[h*3],e.data[h*3+1],e.data[h*3+2]),n.set(e.data[u*3],e.data[u*3+1],e.data[u*3+2]),o.set(e.data[m*3],e.data[m*3+1],e.data[m*3+2]),b.sub(i,n,l).normalize(),b.sub(i,o,c).normalize();let g=l.crossProduct(c,f).normalize();t.data[h*3]=t.data[u*3]=t.data[m*3]=g.x,t.data[h*3+1]=t.data[u*3+1]=t.data[m*3+1]=g.y,t.data[h*3+2]=t.data[u*3+2]=t.data[m*3+2]=g.z}return this._vertexBuffer.upload(G.normal,t),this}isPrimitive(){return!1}destroy(e){this._isDestroyed||(this.instanceID=null,this.name=null,this.subGeometries=null,this.morphTargetDictionary=null,this.skinNames=null,this.bindPose=null,this.blendShapeData=null,this._wireframeLines=null,this._bounds&&(this._bounds.destroy(),this._bounds=null),this._attributeMap&&(this._attributeMap.forEach(t=>{t&&t.data&&(t.data=null)}),this._attributeMap.clear(),this._attributeMap=null),this._attributes=null,this._indicesBuffer&&(this._indicesBuffer.destroy(),this._indicesBuffer=null),this._vertexBuffer&&(this._vertexBuffer.destroy(),this._vertexBuffer=null),this._isDestroyed=!0)}}class Xn extends Le{batchSize;constructor(e=128){super(),this.batchSize=e;const t=new Float32Array(12*e);for(let r=0;r<e;++r)t.set([-1,-1,r,1,-1,r,1,1,r,-1,1,r],r*12);const a=new Uint32Array(6*e);for(let r=0;r<e;++r){const i=r*4;a.set([0+i,1+i,2+i,0+i,2+i,3+i],r*6)}this.setAttribute(G.position,t),this.setIndices(a),this.addSubGeometry({indexStart:0,indexCount:a.length,vertexStart:0,vertexCount:t.length/3,firstStart:0,index:0,topology:0})}}class ki extends ut{_dataBuffer;create(e,t,a,r=!1){let i=I.device;const n=Math.ceil(e*4/256)*256;this.format=oe.rgba8unorm,this.mipmapCount=Math.floor(r?Math.log2(e):1),this.createTextureDescriptor(e,t,this.mipmapCount,this.format);const o=this._dataBuffer=i.createBuffer({size:a.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(o,0,a.buffer);const l=k.beginCommandEncoder();return l.copyBufferToTexture({buffer:o,bytesPerRow:n},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),k.endCommandEncoder(l),r&&Ia.webGPUGenerateMipmap(this),this}updateTexture(e,t,a,r,i){let n=I.device;const o=Math.ceil(e*4/256)*256;if(this.mipmapCount=Math.floor(Math.log2(e)),r!==void 0&&i!==void 0&&i<t){const f=i,d=r*e*4,h=a.subarray(d,d+f*e*4),u=h.byteLength;(!this._dataBuffer||this._dataBuffer.size<u)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=n.createBuffer({size:u,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC})),n.queue.writeBuffer(this._dataBuffer,0,h.buffer,h.byteOffset,h.byteLength);const m=k.beginCommandEncoder();m.copyBufferToTexture({buffer:this._dataBuffer,bytesPerRow:o,offset:0},{texture:this.getGPUTexture(),origin:[0,r,0]},{width:e,height:f,depthOrArrayLayers:1}),k.endCommandEncoder(m);return}this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=null;const l=this._dataBuffer=n.createBuffer({size:a.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});n.queue.writeBuffer(l,0,a.buffer);const c=k.beginCommandEncoder();c.copyBufferToTexture({buffer:l,bytesPerRow:o},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),k.endCommandEncoder(c),this.gpuSampler=n.createSampler(this),this.mipmapCount>1&&Ia.webGPUGenerateMipmap(this)}}class Hn extends ut{_dataBuffer;create(e,t,a){let r=I.device;const i=e*4*4;this.format=oe.rgba32uint,this.createTextureDescriptor(e,t,1,this.format);const o=this._dataBuffer=r.createBuffer({size:a.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});r.queue.writeBuffer(o,0,a.buffer);const l=r.createCommandEncoder();return l.copyBufferToTexture({buffer:o,bytesPerRow:i},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),r.queue.submit([l.finish()]),this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="uint",this.gpuSampler=r.createSampler({}),this}updateTexture(e,t,a,r,i){let n=I.device;const o=e*4*4;if(r!==void 0&&i!==void 0&&i<t){const l=i,c=r*e*4,f=a.subarray(c,c+l*e*4);n.queue.writeTexture({texture:this.getGPUTexture(),origin:[0,r,0]},f.buffer,{bytesPerRow:o,offset:f.byteOffset},{width:e,height:l,depthOrArrayLayers:1});return}n.queue.writeTexture({texture:this.getGPUTexture()},a.buffer,{bytesPerRow:o},{width:e,height:t,depthOrArrayLayers:1})}}class Qs extends ut{_dataBuffer;create(e,t,a){let r=I.device;const i=e*4;this.format=oe.r32uint,this.createTextureDescriptor(e,t,1,this.format);const o=this._dataBuffer=r.createBuffer({size:a.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});r.queue.writeBuffer(o,0,a.buffer);const l=r.createCommandEncoder();return l.copyBufferToTexture({buffer:o,bytesPerRow:i},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),r.queue.submit([l.finish()]),this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="uint",this.gpuSampler=r.createSampler({}),this}updateTexture(e,t,a){let r=I.device;const i=e*4;r.queue.writeTexture({texture:this.getGPUTexture()},a.buffer,{bytesPerRow:i},{width:e,height:t,depthOrArrayLayers:1})}}const L2=new Float32Array(1);new Int32Array(L2.buffer);class Ts extends ut{uint16Array;_dataBuffer;create(e,t,a=null,r=!0){if(a==null){const i=e*t*4;a=new Uint16Array(i),a.fill(0)}return this.updateTexture(e,t,a,r),this}updateTexture(e,t,a,r=!0,i,n){(e!=this.width||t!=this.height)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=null,this.gpuTexture&&this.gpuTexture.destroy(),this.gpuTexture=null),this.uint16Array=a;let o=I.device;const l=e*4*2;if(this.format=oe.rgba16float,this.mipmapCount=Math.floor(r?Math.log2(e):1),this.createTextureDescriptor(e,t,this.mipmapCount,this.format),i!==void 0&&n!==void 0&&n<t){const h=n,u=i*e*4,m=h*e*4,g=a.subarray(u,u+m),p=g.byteLength;(!this._dataBuffer||this._dataBuffer.size<p)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=o.createBuffer({size:p,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC})),o.queue.writeBuffer(this._dataBuffer,0,g.buffer,g.byteOffset,g.byteLength);const A=k.beginCommandEncoder();A.copyBufferToTexture({buffer:this._dataBuffer,bytesPerRow:l,offset:0},{texture:this.getGPUTexture(),origin:[0,i,0]},{width:e,height:h,depthOrArrayLayers:1}),this.useMipmap||(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float"),k.endCommandEncoder(A);return}const c=a,f=c.byteLength;(!this._dataBuffer||this._dataBuffer.size<f)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=o.createBuffer({size:f,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC})),o.queue.writeBuffer(this._dataBuffer,0,c.buffer,c.byteOffset,c.byteLength);const d=k.beginCommandEncoder();d.copyBufferToTexture({buffer:this._dataBuffer,bytesPerRow:l},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),this.useMipmap||(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float"),k.endCommandEncoder(d),this.gpuSampler=o.createSampler(this),this.gpuTexture=this.getGPUTexture(),this.mipmapCount>1&&Ia.webGPUGenerateMipmap(this)}}const y0=new Float32Array(1),G2=new Int32Array(y0.buffer);let bt=function(s){y0[0]=s;const e=G2[0];let t=e>>16&32768,a=e>>12&2047;const r=e>>23&255;return r<103?t:r>142?(t|=31744,t|=(r==255?1:0)&&e&8388607,t):r<114?(a|=2048,t|=(a>>114-r)+(a>>113-r&1),t):(t|=r-112<<10|a>>1,t+=a&1,t)};var z2=Object.getOwnPropertyDescriptor,W2=(s,e,t,a)=>{for(var r=a>1?void 0:a?z2(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let si=class extends va{count=0;size=new de;splatColor;transformA;transformB;texParams;splatOrder;gsplatMaterial;_positions;get positions(){return this._positions}_worldPositions;_orderData;_sortWorker;_lastSentTime=0;_minIntervalMs=16;_centersSent=!1;_lastViewMatrixHash=0;_lastCameraSpeed=0;_adaptiveSorting=!0;_lastPixelCullParams="";_texturesInitialized=!1;_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}_batchSize=128;instanceCount=0;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);for(let t=0;t<e;t++)this._orderData[t]=t<this.count?t:this.count>0?this.count-1:0;this.splatOrder=new Qs().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 Yn,this.geometry=new Xn(this._batchSize),this.materials=[this.gsplatMaterial],this.instanceCount=0}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,a=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),r=-(t[4]*t[12]+t[5]*t[13]+t[6]*t[14]),i=-(t[8]*t[12]+t[9]*t[13]+t[10]*t[14]);let n=0,o=0,l=0;const c=Math.min(100,this._fullCount);for(let g=0;g<c;g++){const p=Math.floor(g/c*this._fullCount)*3;n+=this._worldPositions[p+0],o+=this._worldPositions[p+1],l+=this._worldPositions[p+2]}n/=c,o/=c,l/=c;const f=a-n,d=r-o,h=i-l,u=Math.sqrt(f*f+d*d+h*h);let m=this._lodDistances.length;for(let g=0;g<this._lodDistances.length;g++)if(u<this._lodDistances[g]){m=g;break}if(m!==this._currentLodLevel){this._currentLodLevel=m;const g=this._lodRatios[m],p=Math.floor(this._fullCount*g);if(this._mapping){const A=this._mapping;this._mapping=new Uint32Array(Math.min(p,A.length));for(let D=0;D<this._mapping.length;D++)this._mapping[D]=A[D];this.setMapping(this._mapping)}else this.count=p,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++)this._orderData[t]=t<this.count?t:this.count>0?this.count-1:0;if(this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData),this._sortWorker){const t=this._worldPositions||this._positions,a=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(t);if(this._mapping)for(let r=0;r<this._mapping.length;++r){const i=this._mapping[r]*3,n=r*3;a[n+0]=t[i+0],a[n+1]=t[i+1],a[n+2]=t[i+2]}this._sortWorker.postMessage({type:"centers",centers:a.buffer,mapping:this._mapping?this._mapping:null},[a.buffer]),this._centersSent=!0}else this._centersSent=!1;this.instanceCount=0}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}}getBatchingStats(){return{enabled:!0,batchSize:this._batchSize,instanceCount:this.instanceCount,splatCount:this.count,reduction:this.count>0?(1-this.instanceCount/this.count)*100:0}}evalTextureSize(s){let e=Math.ceil(Math.sqrt(s));const t=64;e=Math.ceil(e/t)*t;const a=Math.ceil(s/e);return new de(e,a)}buildColor(s){const e=this.size.x|0,t=this.size.y|0,a=new Uint8Array(e*t*4),r=.28209479177387814,i=s.count,n=s.sh?.coeffs,o=n?n.length/(3*i):1;for(let l=0;l<i;l++){let c=.5,f=.5,d=.5;if(n&&o>=1){const m=l*o*3;c=.5+n[m+0]*r,f=.5+n[m+o+0]*r,d=.5+n[m+2*o+0]*r}const h=s.opacity?1/(1+Math.exp(-s.opacity[l])):1,u=l*4;a[u+0]=Math.max(0,Math.min(255,Math.floor(c*255))),a[u+1]=Math.max(0,Math.min(255,Math.floor(f*255))),a[u+2]=Math.max(0,Math.min(255,Math.floor(d*255))),a[u+3]=Math.max(0,Math.min(255,Math.floor(h*255)))}this.splatColor=new ki().create(e,t,a,!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,a=s.count,r=new Uint32Array(e*t*4),i=new Uint16Array(e*t*4);i.fill(0);const n=new ArrayBuffer(4),o=new Float32Array(n),l=new Uint32Array(n),c=u=>(o[0]=u,l[0]),f=s.position,d=s.rotation,h=s.scale;for(let u=0;u<a;u++){const m=u*4,g=f[u*3+0],p=f[u*3+1],A=f[u*3+2];r[m+0]=c(g),r[m+1]=c(p),r[m+2]=c(A);let D=0,B=0,v=0,U=1;if(d){D=d[u*4+0],B=d[u*4+1],v=d[u*4+2],U=d[u*4+3];const Vt=1/Math.hypot(D,B,v,U);D*=Vt,B*=Vt,v*=Vt,U*=Vt}let y=1,S=1,F=1;h&&(y=Math.exp(h[u*3+0]),S=Math.exp(h[u*3+1]),F=Math.exp(h[u*3+2]));const C=D+D,w=B+B,E=v+v,Q=D*C,T=D*w,j=D*E,ue=B*w,ee=B*E,N=v*E,M=U*C,O=U*w,W=U*E,ae=1-(ue+N),z=T+W,K=j-O,$=T-W,re=1-(Q+N),ce=ee+M,Ae=j+O,Qe=ee-M,Ve=1-(Q+ue),H=ae*y,ie=z*y,le=K*y,ge=$*S,Ie=re*S,me=ce*S,ye=Ae*F,Se=Qe*F,Me=Ve*F,Ze=H*H+ge*ge+ye*ye,$e=H*ie+ge*Ie+ye*Se,ft=H*le+ge*me+ye*Me,Za=ie*ie+Ie*Ie+Se*Se,ga=ie*le+Ie*me+Se*Me,Qa=le*le+me*me+Me*Me,Ht=m;i[Ht+0]=bt(Ze)&65535,i[Ht+1]=bt($e)&65535,i[Ht+2]=bt(ft)&65535,i[Ht+3]=bt(Qa)&65535;const Ta=bt(Za)&65535,Ma=bt(ga)&65535;r[m+3]=Ta|Ma<<16}this.transformA=new Hn().create(e,t,r),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 Ts().create(e,t,i,!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 a=s.rawData;for(let r=0;r<t;r++){const i=r*3,n=e[i+0],o=e[i+1],l=e[i+2];this._worldPositions[i+0]=a[0]*n+a[4]*o+a[8]*l+a[12],this._worldPositions[i+1]=a[1]*n+a[5]*o+a[9]*l+a[13],this._worldPositions[i+2]=a[2]*n+a[6]*o+a[10]*l+a[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,a=t[2],r=t[6],i=t[10],n=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),o=-(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]),c=performance.now(),f=(c-this._lastSentTime)/1e3,d=Math.floor(n*1e3)^Math.floor(o*1e3)^Math.floor(l*1e3),h=Math.floor(a*1e3)^Math.floor(r*1e3)^Math.floor(i*1e3),u=d^h;if(u===this._lastViewMatrixHash&&!e)return;let m=this._minIntervalMs;if(this._adaptiveSorting&&this._minIntervalMs>0){const p=Math.abs(u-this._lastViewMatrixHash)/Math.max(f,.001);p<1e3?m=this._minIntervalMs:p<1e4?m=this._minIntervalMs*.5:m=this._minIntervalMs*.2,this._lastCameraSpeed=p}if(!(c-this._lastSentTime<m)){if(this._lastViewMatrixHash=u,this._lastSentTime=c,!this._sortWorker){this._sortWorker=this.createSortWorker(),this._sortWorker.onmessage=D=>{const B=D.data.order,v=this._orderData.buffer;this._sortWorker.postMessage({order:v},[v]);const U=new Uint32Array(B),y=this.size.x*this.size.y,S=this.count;(!this._orderData||this._orderData.length!==y)&&(this._orderData=new Uint32Array(y));const F=Math.min(S,U.length);if(this._orderData.set(U.subarray(0,F),0),F<y){const E=S>0?S-1:0;this._orderData.fill(E,F,y)}this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData);const C=Math.max(0,Math.min(this.count,D.data.count|0));this.texParams[2]=C;const w=Math.ceil(C/this._batchSize);this.instanceCount=w};const g=this._worldPositions||this._positions,p=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(g);if(this._mapping)for(let D=0;D<this._mapping.length;++D){const B=this._mapping[D]*3,v=D*3;p[v+0]=g[B+0],p[v+1]=g[B+1],p[v+2]=g[B+2]}const A=new Uint32Array(this.count);for(let D=0;D<this.count;D++)A[D]=D;this._sortWorker.postMessage({order:A.buffer,centers:p.buffer,mapping:this._mapping},[A.buffer,p.buffer]),this._centersSent=!0}if(!this._centersSent&&this._sortWorker){const g=this._worldPositions||this._positions,p=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(g);if(this._mapping)for(let A=0;A<this._mapping.length;++A){const D=this._mapping[A]*3,B=A*3;p[B+0]=g[D+0],p[B+1]=g[D+1],p[B+2]=g[D+2]}this._sortWorker.postMessage({type:"centers",centers:p.buffer,mapping:this._mapping?this._mapping:null},[p.buffer]),this._centersSent=!0}this._sortWorker.postMessage({cameraPosition:{x:n,y:o,z:l},cameraDirection:{x:-a,y:-r,z:-i}})}}createSortWorker(){function s(){let n,o,l,c,f,d=!1;const h={x:0,y:0,z:0},u={x:0,y:0,z:0},m={x:0,y:0,z:0},g={x:0,y:0,z:0};let p,A;const D=(v,U,y)=>{for(;v<=U;){const S=U+v>>1,F=y(S);if(F>0)v=S+1;else if(F<0)U=S-1;else return S}return~v},B=()=>{if(!n||!o||!c||!f)return;const v=c.x,U=c.y,y=c.z,S=f.x,F=f.y,C=f.z,w=.001;if(!d&&Math.abs(v-h.x)<w&&Math.abs(U-h.y)<w&&Math.abs(y-h.z)<w&&Math.abs(S-u.x)<w&&Math.abs(F-u.y)<w&&Math.abs(C-u.z)<w)return;d=!1,h.x=v,h.y=U,h.z=y,u.x=S,u.y=F,u.z=C;const E=o.length/3;p?.length!==E&&(p=new Uint32Array(E));let Q,T;for(let O=0;O<8;++O){const W=(O&1?m.x:g.x)-v,ae=(O&2?m.y:g.y)-U,z=(O&4?m.z:g.z)-y,K=W*S+ae*F+z*C;O===0?Q=T=K:(Q=Math.min(Q,K),T=Math.max(T,K))}A?A.fill(0):A=new Uint32Array(65537);const j=T-Q,ue=j<1e-6?0:1/j*2**16;for(let O=0;O<E;++O){const W=O*3,ae=o[W+0]-v,z=o[W+1]-U,K=o[W+2]-y,$=ae*S+z*F+K*C,re=Math.floor(($-Q)*ue);p[O]=re,A[re]++}for(let O=1;O<65537;O++)A[O]+=A[O-1];for(let O=0;O<E;O++){const W=p[O],ae=--A[W];n[ae]=O}const ee=O=>p[n[O]]/ue+Q,N=()=>{const O=D(0,E-1,W=>-ee(W));return Math.min(E,Math.abs(O))},M=ee(E-1)>=0?N():E;if(l)for(let O=0;O<E;++O)n[O]=l[n[O]];self.postMessage({order:n.buffer,count:M},[n.buffer]),n=null};self.onmessage=v=>{if(v.data.order&&(n=new Uint32Array(v.data.order)),v.data.centers){o=new Float32Array(v.data.centers),m.x=g.x=o[0],m.y=g.y=o[1],m.z=g.z=o[2];const U=o.length/3;for(let y=1;y<U;++y){const S=o[y*3+0],F=o[y*3+1],C=o[y*3+2];m.x=Math.min(m.x,S),m.y=Math.min(m.y,F),m.z=Math.min(m.z,C),g.x=Math.max(g.x,S),g.y=Math.max(g.y,F),g.z=Math.max(g.z,C)}d=!0}v.data.hasOwnProperty("mapping")&&(l=v.data.mapping?new Uint32Array(v.data.mapping):null,d=!0),v.data.cameraPosition&&(c=v.data.cameraPosition),v.data.cameraDirection&&(f=v.data.cameraDirection),B()}}const e=`(${s.toString()})()`,t=new Blob([e],{type:"application/javascript"}),a=URL.createObjectURL(t);return new Worker(a)}nodeUpdate(s,e,t,a){const r=this.object3D.transform.worldMatrix;this.gsplatMaterial.setTransformMatrix(r);const i=`${this._minPixelCoverage},${this._maxPixelCoverage},${this._maxPixelCullDistance},${this._batchSize}`;i!==this._lastPixelCullParams&&(this.gsplatMaterial.setPixelCulling(this._minPixelCoverage,this._maxPixelCoverage,this._maxPixelCullDistance,this._batchSize),this._lastPixelCullParams=i),this._texturesInitialized||(this.gsplatMaterial.setSplatTextures(this.splatColor,this.transformA,this.transformB,this.texParams,this.splatOrder),this._texturesInitialized=!0),super.nodeUpdate(s,e,t,a)}renderPass(s,e,t){const a=t.encoder;for(let r of this.materials){const i=r.getPass(e);if(!(!i||i.length===0))for(const n of i){if(!n.pipeline)continue;n.apply(this.geometry,t.rendererPassState||t),k.bindPipeline(a,n),k.bindGeometryBuffer(a,this.geometry);const l=this.geometry.subGeometries[0].lodLevels[0];this.instanceCount>0?k.drawIndexed(a,l.indexCount,this.instanceCount,l.indexStart,0,0):k.drawIndexed(a,l.indexCount,1,l.indexStart,0,0)}}}destroy(s){this._sortWorker&&(this._sortWorker.terminate(),this._sortWorker=null),this.splatColor&&(this.splatColor.destroy(s),this.splatColor=null),this.transformA&&(this.transformA.destroy(s),this.transformA=null),this.transformB&&(this.transformB.destroy(s),this.transformB=null),this.splatOrder&&(this.splatOrder.destroy(s),this.splatOrder=null),this._positions=null,this._worldPositions=null,this._orderData=null,this.texParams=null,this._mapping=null,super.destroy(s)}};si=W2([Lt(si,"GSplatRenderer")],si);const C0=`
6027
+ `;class Dt{computes;passShader;constructor(){this.computes=[],this.passShader=new Map}addRenderPass(e,t=-1){let a=this.passShader.get(e.passType)||[];t==-1?a.push(e):a.splice(t,-1,e),this.passShader.set(e.passType,a)}removeShader(e,t=-1){let a=this.passShader.get(e.passType);if(a)if(t==-1){let r=a.indexOf(e);r!=-1&&a.splice(r)}else a.splice(t,1)}removeShaderByIndex(e,t=-1){let a=this.passShader.get(e);a&&(t==-1?this.passShader.delete(e):a.splice(t,1))}getSubShaders(e){return this.passShader.get(e)||[]}hasSubShaders(e){return this.passShader.get(e).length>0}getDefaultShaders(){return this.passShader.get(fe.COLOR)}getDefaultColorShader(){return this.passShader.get(fe.COLOR)[0]}setDefine(e,t){for(const a of this.passShader)for(const r of a[1])r.setDefine(e,t)}hasDefine(e){for(const t of this.passShader)for(const a of t[1]){let r=a.hasDefine(e);if(r)return r}return!1}deleteDefine(e){for(const t of this.passShader)for(const a of t[1])a.deleteDefine(e)}setUniform(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniform(e,t)}setUniformFloat(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformFloat(e,t)}setUniformVector2(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformVector2(e,t)}setUniformVector3(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformVector3(e,t)}setUniformVector4(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformVector4(e,t)}setUniformColor(e,t){for(const a of this.passShader)for(const r of a[1])r.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 a of this.passShader)for(const r of a[1])r.setTexture(e,t);this.setDefine(`USE_${e.toLocaleUpperCase()}`,!0)}getTexture(e){return this.getDefaultColorShader().textures[e]}setUniformBuffer(e,t){for(const a of this.passShader)for(const r of a[1])r.setUniformBuffer(e,t)}getUniformBuffer(e){return this.getDefaultColorShader().getBuffer(e)}setStorageBuffer(e,t){for(const a of this.passShader)for(const r of a[1])r.setStorageBuffer(e,t)}getStorageBuffer(e){return this.getDefaultColorShader().getBuffer(e)}setStructStorageBuffer(e,t){for(const a of this.passShader)for(const r of a[1])r.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(e){for(const t of this.passShader)for(const a of t[1])a.destroy(e);this.passShader.clear(),this.passShader=null,this.computes=null}clone(){let e=new Dt,t=this.getDefaultShaders();for(const a of t)e.addRenderPass(a);return e}applyUniform(){for(const e of this.passShader)for(const t of e[1])t.applyUniform()}}var V2=Object.getOwnPropertyDescriptor,O2=(s,e,t,a)=>{for(var r=a>1?void 0:a?V2(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Fi=class extends Dt{constructor(){super();const s=new qe("gsplat_vs_dc","gsplat_fs_dc");s.passType=fe.COLOR,s.setShaderEntry("VertMain","FragMain"),s.topology=Ss.triangle_list,s.depthWriteEnabled=!1,s.cullMode=Gt.none,s.shaderState.transparent=!0,s.shaderState.blendMode=De.NORMAL,s.shaderState.writeMasks=[15,0],s.shaderState.castReflection=!1,s.shaderState.depthCompare=nt.less,this.addRenderPass(s),this.setDefault()}setDefault(){const s=this.getDefaultColorShader(),e=new R;s.setUniform("modelMatrix",e.rawData),s.setUniform("pixelCull",new Float32Array([2,0,0,0]))}};Fi=O2([Pa(Fi,"GSplatShader")],Fi);class Yn extends xt{_pixelCullArray=new Float32Array(4);constructor(){super(),Y.register("gsplat_vs_dc",D0),Y.register("gsplat_fs_dc",_0),this.shader=new Fi}setSplatTextures(e,t,a,r,i){const n=this.shader.getDefaultColorShader();n.setTexture("splatColor",e),n.setTexture("transformA",t),n.setTexture("transformB",a),n.setUniformArray("tex_params",r),i&&n.setTexture("splatOrder",i),n.shaderState.depthCompare=nt.less}setTransformMatrix(e){this.shader.getDefaultColorShader().setUniform("modelMatrix",e.rawData)}setPixelCulling(e,t,a=0,r=128){this._pixelCullArray[0]=e,this._pixelCullArray[1]=t,this._pixelCullArray[2]=a,this._pixelCullArray[3]=r,this.shader.getDefaultColorShader().setUniform("pixelCull",this._pixelCullArray)}setTexParams(e){this.shader.getDefaultColorShader().setUniformArray("tex_params",e)}}class Rs extends Xa{node;constructor(e){super(),this.bufferType=Da.VertexGPUBuffer,this.createVertexBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX,e)}createVertexBuffer(e,t){let a=I.device;this.byteSize=t*Float32Array.BYTES_PER_ELEMENT,this.usage=e,this.buffer&&this.destroy(),this.buffer=a.createBuffer({label:"VertexGPUBuffer",size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new cr,this.memoryNodes=new Map,this.memory.allocation(this.byteSize),this.node=this.memory.allocation_node(this.byteSize)}}var Et=(s=>(s[s.split=0]="split",s[s.compose=1]="compose",s[s.compose_bin=2]="compose_bin",s))(Et||{});class B0{vertexCount=0;vertexGPUBuffer;geometryType=Et.compose;_vertexBufferLayouts;_attributeSlotLayouts;_attributeLocation;constructor(){this._vertexBufferLayouts=[],this._attributeLocation={},this._attributeSlotLayouts=[]}get vertexBufferLayouts(){return this._vertexBufferLayouts}createVertexBuffer(e,t){switch(this.geometryType){case Et.split:this.createSplitVertexBuffer(e,t);break;case Et.compose:this.createComposeVertexBuffer(e,t);break;case Et.compose_bin:this.createComposBinVertexBuffer(e,t);break}}createSplitVertexBuffer(e,t){let a=0;for(let r=0;r<t.attributes.length;r++){const i=t.attributes[r];if(i.name=="index")continue;this._attributeLocation[i.name]=i.location;let n={name:i.name,format:i.format,offset:0,shaderLocation:i.location,stride:dr[i.format]};this._attributeSlotLayouts[i.location]=[n];let o=e.get(i.name);o||(o={attribute:i.name,data:new Float32Array(i.size*this.vertexCount)},e.set(i.name,o));let l=o.data.length/n.stride;this.vertexCount!=0&&this.vertexCount!=l&&console.error(" vertex count not match attribute count"),this.vertexCount=l,this._vertexBufferLayouts[i.location]={name:i.name,arrayStride:i.size*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[i.location],offset:a*4,size:this.vertexCount*i.size*4},a+=this.vertexCount*i.size}this.vertexGPUBuffer=new Rs(a)}createComposeVertexBuffer(e,t){this._attributeSlotLayouts[0]=[];let a=0;for(let r=0;r<t.attributes.length;r++){const i=t.attributes[r];if(i.name=="index"||i.type=="builtin")continue;this._attributeLocation[i.name]=i.location;let n={name:i.name,format:i.format,offset:a*4,shaderLocation:i.location,stride:dr[i.format]};this._attributeSlotLayouts[0][i.location]=n;let o=e.get(i.name);if(o||(o={attribute:i.name,data:new Float32Array(i.size*this.vertexCount)},e.set(i.name,o)),o.data){let l=o.data.length/n.stride;this.vertexCount!=0&&this.vertexCount!=l&&console.error(" vertex count not match attribute count"),this.vertexCount=l}a+=i.size}this._vertexBufferLayouts[0]={name:"composeStruct",arrayStride:a*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[0],offset:0,size:this.vertexCount*a*4},this.vertexGPUBuffer=new Rs(this.vertexCount*a)}createComposBinVertexBuffer(e,t){this._attributeSlotLayouts[0]=[];let a=0;for(let n=0;n<t.attributes.length;n++){const o=t.attributes[n];if(o.name=="index"||o.type=="builtin")continue;this._attributeLocation[o.name]=o.location;let l={name:o.name,format:o.format,offset:a*4,shaderLocation:o.location,stride:dr[o.format]};this._attributeSlotLayouts[0][o.location]=l;let c=e.get(o.name);if(c||(c={attribute:o.name,data:new Float32Array(o.size*this.vertexCount)},e.set(o.name,c)),c.data){let f=c.data.length/l.stride;this.vertexCount!=0&&this.vertexCount!=f&&console.error(" vertex count not match attribute count"),this.vertexCount=f}a+=o.size}let i=e.get(G.all).data.length/a;this.vertexCount=i,this._vertexBufferLayouts[0]={name:"composeStruct",arrayStride:a*4,stepMode:"vertex",attributes:this._attributeSlotLayouts[0],offset:0,size:this.vertexCount*a*4},this.vertexGPUBuffer=new Rs(this.vertexCount*a)}upload(e,t){if(this.vertexGPUBuffer){switch(this.geometryType){case Et.split:{let a=this._attributeLocation[e],r=this._vertexBufferLayouts[a];this.vertexGPUBuffer.node.setFloat32Array(r.offset/4,t.data)}break;case Et.compose:for(let a=0;a<this.vertexCount;a++){const r=this._attributeSlotLayouts[0][this._attributeLocation[e]];for(let i=0;i<r.stride;i++){let n=t.data[a*r.stride+i],o=a*(this._vertexBufferLayouts[0].arrayStride/4)+r.offset/4+i;this.vertexGPUBuffer.node.setFloat(n,o)}}break;case Et.compose_bin:this.vertexGPUBuffer.node.setFloat32Array(0,t.data);break}this.vertexGPUBuffer?.apply()}}updateAttributes(e){switch(this.geometryType){case Et.split:for(let t=0;t<this._vertexBufferLayouts.length;t++){const a=this._vertexBufferLayouts[t];let r=e.get(a.name);this.vertexGPUBuffer.node.setFloat32Array(a.offset/4,r.data)}break;case Et.compose:for(let t=0;t<this.vertexCount;t++)this._attributeSlotLayouts.forEach(a=>{for(let r=0;r<a.length;r++){const i=a[r];let n=e.get(i.name);for(let o=0;o<i.stride;o++){let l=n.data[t*i.stride+o],c=t*(this._vertexBufferLayouts[0].arrayStride/4)+i.offset/4+o;this.vertexGPUBuffer.node.setFloat(l,c)}}});break;case Et.compose_bin:{let t=e.get(G.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 v0 extends Xa{indicesNode;constructor(e){super(),this.bufferType=Da.IndicesGPUBuffer,this.createIndicesBuffer(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.INDEX|GPUBufferUsage.INDIRECT,e)}createIndicesBuffer(e,t){let a=I.device;if(this.byteSize=t.length*4,this.usage=e,this.buffer&&this.destroy(),this.buffer=a.createBuffer({label:"IndicesGPUBuffer",size:this.byteSize,usage:e,mappedAtCreation:!1}),this.memory=new cr,this.memoryNodes=new Map,this.memory.allocation(this.byteSize),t){this.indicesNode=this.memory.allocation_node(t.length*4);const r=t.buffer instanceof ArrayBuffer?t.buffer:new Uint8Array(t.buffer).buffer;this.indicesNode.setArrayBuffer(0,r),this.apply()}}}class x0{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 v0(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 U0{lodLevels}class Le{instanceID;name;subGeometries=[];morphTargetsRelative;morphTargetDictionary;skinNames;bindPose;blendShapeData;vertexDim;vertexCount=0;_bounds;_attributeMap;_attributes;_indicesBuffer;_vertexBuffer;_onChange=!0;_wireframeLines;_isDestroyed=!1;constructor(){this.instanceID=Wt(),this._attributeMap=new Map,this._attributes=[],this._vertexBuffer=new B0}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 Ce(new b,new b(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(G.position);if(e&&e.data)for(let t=0;t<e.data.length/3;t++){const a=e.data[t*3+0],r=e.data[t*3+1],i=e.data[t*3+2];this._bounds.min.x>a&&(this._bounds.min.x=a),this._bounds.min.y>r&&(this._bounds.min.y=r),this._bounds.min.z>i&&(this._bounds.min.z=i),this._bounds.max.x<a&&(this._bounds.max.x=a),this._bounds.max.y<r&&(this._bounds.max.y=r),this._bounds.max.z<i&&(this._bounds.max.z=i)}this._bounds.setFromMinMax(this._bounds.min,this._bounds.max)}return this._bounds}set bounds(e){this._bounds=e}addSubGeometry(...e){let t=new U0;return t.lodLevels=e,this.subGeometries.push(t),t}generate(e){this._onChange&&(this._onChange=!1,this._indicesBuffer.upload(this.getAttribute(G.indices).data),this._vertexBuffer.createVertexBuffer(this._attributeMap,e),this._vertexBuffer.updateAttributes(this._attributeMap),this.vertexCount=this._vertexBuffer.vertexCount)}setIndices(e){if(!this._attributeMap.has(G.indices)){let t={attribute:G.indices,data:e};this._attributeMap.set(G.indices,t),this._indicesBuffer=new x0,this._indicesBuffer.createIndicesBuffer(t)}}setAttribute(e,t){if(e==G.indices)this.setIndices(t);else{let a={attribute:e,data:t};this._attributeMap.set(e,a),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==Et.split||this.geometryType==Et.compose){let e=this.getAttribute(G.position),t=this.getAttribute(G.indices);if(t&&e&&t.data.length>0){let a=e.data,r=[];for(let i=0;i<t.data.length/3;i++){const n=t.data[i*3+0],o=t.data[i*3+1],l=t.data[i*3+2];let c=new b(a[n*3+0],a[n*3+1],a[n*3+2]),f=new b(a[o*3+0],a[o*3+1],a[o*3+2]),d=new b(a[l*3+0],a[l*3+1],a[l*3+2]);r.push(c,f),r.push(f,d),r.push(d,c)}return this._wireframeLines=r,r}}else if(this.geometryType==Et.compose_bin){let e=this.getAttribute(G.all),t=this.vertexDim,a=this.getAttribute(G.indices);if(a&&e&&a.data.length>0){let r=e.data,i=[];for(let n=0;n<a.data.length/3;n++){const o=a.data[n*3+0],l=a.data[n*3+1],c=a.data[n*3+2];let f=new b(r[o*t+0],r[o*t+1],r[o*t+2]),d=new b(r[l*t+0],r[l*t+1],r[l*t+2]),h=new b(r[c*t+0],r[c*t+1],r[c*t+2]);i.push(f,d),i.push(d,h),i.push(h,f)}return this._wireframeLines=i,i}}return null}compute(){this._indicesBuffer&&this._indicesBuffer.compute(),this._vertexBuffer&&this._vertexBuffer.compute()}static crossA=b.UP.clone();static crossB=b.UP.clone();static crossRet=b.UP.clone();static point1=b.UP.clone();static point2=b.UP.clone();static point3=b.UP.clone();computeNormals(){let e=this.getAttribute(G.position),t=this.getAttribute(G.normal),a=this.getAttribute(G.indices);if(!e||!t||!a)return this;let r=a.data.length/3,i=Le.point1,n=Le.point2,o=Le.point3,l=Le.crossA,c=Le.crossB,f=Le.crossRet;for(let d=0;d<r;d++){let h=a.data[d*3],u=a.data[d*3+1],m=a.data[d*3+2];i.set(e.data[h*3],e.data[h*3+1],e.data[h*3+2]),n.set(e.data[u*3],e.data[u*3+1],e.data[u*3+2]),o.set(e.data[m*3],e.data[m*3+1],e.data[m*3+2]),b.sub(i,n,l).normalize(),b.sub(i,o,c).normalize();let g=l.crossProduct(c,f).normalize();t.data[h*3]=t.data[u*3]=t.data[m*3]=g.x,t.data[h*3+1]=t.data[u*3+1]=t.data[m*3+1]=g.y,t.data[h*3+2]=t.data[u*3+2]=t.data[m*3+2]=g.z}return this._vertexBuffer.upload(G.normal,t),this}isPrimitive(){return!1}destroy(e){this._isDestroyed||(this.instanceID=null,this.name=null,this.subGeometries=null,this.morphTargetDictionary=null,this.skinNames=null,this.bindPose=null,this.blendShapeData=null,this._wireframeLines=null,this._bounds&&(this._bounds.destroy(),this._bounds=null),this._attributeMap&&(this._attributeMap.forEach(t=>{t&&t.data&&(t.data=null)}),this._attributeMap.clear(),this._attributeMap=null),this._attributes=null,this._indicesBuffer&&(this._indicesBuffer.destroy(),this._indicesBuffer=null),this._vertexBuffer&&(this._vertexBuffer.destroy(),this._vertexBuffer=null),this._isDestroyed=!0)}}class Xn extends Le{batchSize;constructor(e=128){super(),this.batchSize=e;const t=new Float32Array(12*e);for(let r=0;r<e;++r)t.set([-1,-1,r,1,-1,r,1,1,r,-1,1,r],r*12);const a=new Uint32Array(6*e);for(let r=0;r<e;++r){const i=r*4;a.set([0+i,1+i,2+i,0+i,2+i,3+i],r*6)}this.setAttribute(G.position,t),this.setIndices(a),this.addSubGeometry({indexStart:0,indexCount:a.length,vertexStart:0,vertexCount:t.length/3,firstStart:0,index:0,topology:0})}}class ki extends ut{_dataBuffer;create(e,t,a,r=!1){let i=I.device;const n=Math.ceil(e*4/256)*256;this.format=oe.rgba8unorm,this.mipmapCount=Math.floor(r?Math.log2(e):1),this.createTextureDescriptor(e,t,this.mipmapCount,this.format);const o=this._dataBuffer=i.createBuffer({size:a.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});i.queue.writeBuffer(o,0,a.buffer);const l=k.beginCommandEncoder();return l.copyBufferToTexture({buffer:o,bytesPerRow:n},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),k.endCommandEncoder(l),r&&Ia.webGPUGenerateMipmap(this),this}updateTexture(e,t,a,r,i){let n=I.device;const o=Math.ceil(e*4/256)*256;if(this.mipmapCount=Math.floor(Math.log2(e)),r!==void 0&&i!==void 0&&i<t){const f=i,d=r*e*4,h=a.subarray(d,d+f*e*4),u=h.byteLength;(!this._dataBuffer||this._dataBuffer.size<u)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=n.createBuffer({size:u,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC})),n.queue.writeBuffer(this._dataBuffer,0,h.buffer,h.byteOffset,h.byteLength);const m=k.beginCommandEncoder();m.copyBufferToTexture({buffer:this._dataBuffer,bytesPerRow:o,offset:0},{texture:this.getGPUTexture(),origin:[0,r,0]},{width:e,height:f,depthOrArrayLayers:1}),k.endCommandEncoder(m);return}this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=null;const l=this._dataBuffer=n.createBuffer({size:a.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});n.queue.writeBuffer(l,0,a.buffer);const c=k.beginCommandEncoder();c.copyBufferToTexture({buffer:l,bytesPerRow:o},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),k.endCommandEncoder(c),this.gpuSampler=n.createSampler(this),this.mipmapCount>1&&Ia.webGPUGenerateMipmap(this)}}class Hn extends ut{_dataBuffer;create(e,t,a){let r=I.device;const i=e*4*4;this.format=oe.rgba32uint,this.createTextureDescriptor(e,t,1,this.format);const o=this._dataBuffer=r.createBuffer({size:a.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});r.queue.writeBuffer(o,0,a.buffer);const l=r.createCommandEncoder();return l.copyBufferToTexture({buffer:o,bytesPerRow:i},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),r.queue.submit([l.finish()]),this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="uint",this.gpuSampler=r.createSampler({}),this}updateTexture(e,t,a,r,i){let n=I.device;const o=e*4*4;if(r!==void 0&&i!==void 0&&i<t){const l=i,c=r*e*4,f=a.subarray(c,c+l*e*4);n.queue.writeTexture({texture:this.getGPUTexture(),origin:[0,r,0]},f.buffer,{bytesPerRow:o,offset:f.byteOffset},{width:e,height:l,depthOrArrayLayers:1});return}n.queue.writeTexture({texture:this.getGPUTexture()},a.buffer,{bytesPerRow:o},{width:e,height:t,depthOrArrayLayers:1})}}class Qs extends ut{_dataBuffer;create(e,t,a){let r=I.device;const i=e*4;this.format=oe.r32uint,this.createTextureDescriptor(e,t,1,this.format);const o=this._dataBuffer=r.createBuffer({size:a.byteLength,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC});r.queue.writeBuffer(o,0,a.buffer);const l=r.createCommandEncoder();return l.copyBufferToTexture({buffer:o,bytesPerRow:i},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),r.queue.submit([l.finish()]),this.samplerBindingLayout.type="non-filtering",this.textureBindingLayout.sampleType="uint",this.gpuSampler=r.createSampler({}),this}updateTexture(e,t,a){let r=I.device;const i=e*4;r.queue.writeTexture({texture:this.getGPUTexture()},a.buffer,{bytesPerRow:i},{width:e,height:t,depthOrArrayLayers:1})}}const L2=new Float32Array(1);new Int32Array(L2.buffer);class Ts extends ut{uint16Array;_dataBuffer;create(e,t,a=null,r=!0){if(a==null){const i=e*t*4;a=new Uint16Array(i),a.fill(0)}return this.updateTexture(e,t,a,r),this}updateTexture(e,t,a,r=!0,i,n){(e!=this.width||t!=this.height)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=null,this.gpuTexture&&this.gpuTexture.destroy(),this.gpuTexture=null),this.uint16Array=a;let o=I.device;const l=e*4*2;if(this.format=oe.rgba16float,this.mipmapCount=Math.floor(r?Math.log2(e):1),this.createTextureDescriptor(e,t,this.mipmapCount,this.format),i!==void 0&&n!==void 0&&n<t){const h=n,u=i*e*4,m=h*e*4,g=a.subarray(u,u+m),p=g.byteLength;(!this._dataBuffer||this._dataBuffer.size<p)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=o.createBuffer({size:p,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC})),o.queue.writeBuffer(this._dataBuffer,0,g.buffer,g.byteOffset,g.byteLength);const A=k.beginCommandEncoder();A.copyBufferToTexture({buffer:this._dataBuffer,bytesPerRow:l,offset:0},{texture:this.getGPUTexture(),origin:[0,i,0]},{width:e,height:h,depthOrArrayLayers:1}),this.useMipmap||(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float"),k.endCommandEncoder(A);return}const c=a,f=c.byteLength;(!this._dataBuffer||this._dataBuffer.size<f)&&(this._dataBuffer&&this._dataBuffer.destroy(),this._dataBuffer=o.createBuffer({size:f,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC})),o.queue.writeBuffer(this._dataBuffer,0,c.buffer,c.byteOffset,c.byteLength);const d=k.beginCommandEncoder();d.copyBufferToTexture({buffer:this._dataBuffer,bytesPerRow:l},{texture:this.getGPUTexture()},{width:e,height:t,depthOrArrayLayers:1}),this.useMipmap||(this.samplerBindingLayout.type="filtering",this.textureBindingLayout.sampleType="float"),k.endCommandEncoder(d),this.gpuSampler=o.createSampler(this),this.gpuTexture=this.getGPUTexture(),this.mipmapCount>1&&Ia.webGPUGenerateMipmap(this)}}const y0=new Float32Array(1),G2=new Int32Array(y0.buffer);let bt=function(s){y0[0]=s;const e=G2[0];let t=e>>16&32768,a=e>>12&2047;const r=e>>23&255;return r<103?t:r>142?(t|=31744,t|=(r==255?1:0)&&e&8388607,t):r<114?(a|=2048,t|=(a>>114-r)+(a>>113-r&1),t):(t|=r-112<<10|a>>1,t+=a&1,t)};var z2=Object.getOwnPropertyDescriptor,W2=(s,e,t,a)=>{for(var r=a>1?void 0:a?z2(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let si=class extends va{count=0;size=new de;splatColor;transformA;transformB;texParams;splatOrder;gsplatMaterial;_positions;get positions(){return this._positions}_worldPositions;_orderData;_sortWorker;_lastSentTime=0;_minIntervalMs=16;_centersSent=!1;_lastViewMatrixHash=0;_lastCameraSpeed=0;_adaptiveSorting=!0;_lastPixelCullParams="";_texturesInitialized=!1;_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}_batchSize=128;instanceCount=0;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);for(let t=0;t<e;t++)this._orderData[t]=t<this.count?t:this.count>0?this.count-1:0;this.splatOrder=new Qs().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 Yn,this.geometry=new Xn(this._batchSize),this.materials=[this.gsplatMaterial],this.instanceCount=0}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,a=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),r=-(t[4]*t[12]+t[5]*t[13]+t[6]*t[14]),i=-(t[8]*t[12]+t[9]*t[13]+t[10]*t[14]);let n=0,o=0,l=0;const c=Math.min(100,this._fullCount);for(let g=0;g<c;g++){const p=Math.floor(g/c*this._fullCount)*3;n+=this._worldPositions[p+0],o+=this._worldPositions[p+1],l+=this._worldPositions[p+2]}n/=c,o/=c,l/=c;const f=a-n,d=r-o,h=i-l,u=Math.sqrt(f*f+d*d+h*h);let m=this._lodDistances.length;for(let g=0;g<this._lodDistances.length;g++)if(u<this._lodDistances[g]){m=g;break}if(m!==this._currentLodLevel){this._currentLodLevel=m;const g=this._lodRatios[m],p=Math.floor(this._fullCount*g);if(this._mapping){const A=this._mapping;this._mapping=new Uint32Array(Math.min(p,A.length));for(let D=0;D<this._mapping.length;D++)this._mapping[D]=A[D];this.setMapping(this._mapping)}else this.count=p,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++)this._orderData[t]=t<this.count?t:this.count>0?this.count-1:0;if(this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData),this._sortWorker){const t=this._worldPositions||this._positions,a=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(t);if(this._mapping)for(let r=0;r<this._mapping.length;++r){const i=this._mapping[r]*3,n=r*3;a[n+0]=t[i+0],a[n+1]=t[i+1],a[n+2]=t[i+2]}this._sortWorker.postMessage({type:"centers",centers:a.buffer,mapping:this._mapping?this._mapping:null},[a.buffer]),this._centersSent=!0}else this._centersSent=!1;this.instanceCount=0}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}}getBatchingStats(){return{enabled:!0,batchSize:this._batchSize,instanceCount:this.instanceCount,splatCount:this.count,reduction:this.count>0?(1-this.instanceCount/this.count)*100:0}}evalTextureSize(s){let e=Math.ceil(Math.sqrt(s));const t=64;e=Math.ceil(e/t)*t;const a=Math.ceil(s/e);return new de(e,a)}buildColor(s){const e=this.size.x|0,t=this.size.y|0,a=new Uint8Array(e*t*4),r=.28209479177387814,i=s.count,n=s.sh?.coeffs,o=n?n.length/(3*i):1;for(let l=0;l<i;l++){let c=.5,f=.5,d=.5;if(n&&o>=1){const m=l*o*3;c=.5+n[m+0]*r,f=.5+n[m+o+0]*r,d=.5+n[m+2*o+0]*r}const h=s.opacity?1/(1+Math.exp(-s.opacity[l])):1,u=l*4;a[u+0]=Math.max(0,Math.min(255,Math.floor(c*255))),a[u+1]=Math.max(0,Math.min(255,Math.floor(f*255))),a[u+2]=Math.max(0,Math.min(255,Math.floor(d*255))),a[u+3]=Math.max(0,Math.min(255,Math.floor(h*255)))}this.splatColor=new ki().create(e,t,a,!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,a=s.count,r=new Uint32Array(e*t*4),i=new Uint16Array(e*t*4);i.fill(0);const n=new ArrayBuffer(4),o=new Float32Array(n),l=new Uint32Array(n),c=u=>(o[0]=u,l[0]),f=s.position,d=s.rotation,h=s.scale;for(let u=0;u<a;u++){const m=u*4,g=f[u*3+0],p=f[u*3+1],A=f[u*3+2];r[m+0]=c(g),r[m+1]=c(p),r[m+2]=c(A);let D=0,B=0,v=0,x=1;if(d){D=d[u*4+0],B=d[u*4+1],v=d[u*4+2],x=d[u*4+3];const Vt=1/Math.hypot(D,B,v,x);D*=Vt,B*=Vt,v*=Vt,x*=Vt}let y=1,S=1,F=1;h&&(y=Math.exp(h[u*3+0]),S=Math.exp(h[u*3+1]),F=Math.exp(h[u*3+2]));const C=D+D,w=B+B,E=v+v,Q=D*C,T=D*w,j=D*E,ue=B*w,ee=B*E,N=v*E,M=x*C,O=x*w,W=x*E,ae=1-(ue+N),z=T+W,K=j-O,$=T-W,re=1-(Q+N),ce=ee+M,Ae=j+O,Qe=ee-M,Ve=1-(Q+ue),H=ae*y,ie=z*y,le=K*y,ge=$*S,Ie=re*S,me=ce*S,ye=Ae*F,Se=Qe*F,Me=Ve*F,Ze=H*H+ge*ge+ye*ye,$e=H*ie+ge*Ie+ye*Se,ft=H*le+ge*me+ye*Me,Za=ie*ie+Ie*Ie+Se*Se,ga=ie*le+Ie*me+Se*Me,Qa=le*le+me*me+Me*Me,Ht=m;i[Ht+0]=bt(Ze)&65535,i[Ht+1]=bt($e)&65535,i[Ht+2]=bt(ft)&65535,i[Ht+3]=bt(Qa)&65535;const Ta=bt(Za)&65535,Ma=bt(ga)&65535;r[m+3]=Ta|Ma<<16}this.transformA=new Hn().create(e,t,r),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 Ts().create(e,t,i,!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 a=s.rawData;for(let r=0;r<t;r++){const i=r*3,n=e[i+0],o=e[i+1],l=e[i+2];this._worldPositions[i+0]=a[0]*n+a[4]*o+a[8]*l+a[12],this._worldPositions[i+1]=a[1]*n+a[5]*o+a[9]*l+a[13],this._worldPositions[i+2]=a[2]*n+a[6]*o+a[10]*l+a[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,a=t[2],r=t[6],i=t[10],n=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),o=-(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]),c=performance.now(),f=(c-this._lastSentTime)/1e3,d=Math.floor(n*1e3)^Math.floor(o*1e3)^Math.floor(l*1e3),h=Math.floor(a*1e3)^Math.floor(r*1e3)^Math.floor(i*1e3),u=d^h;if(u===this._lastViewMatrixHash&&!e)return;let m=this._minIntervalMs;if(this._adaptiveSorting&&this._minIntervalMs>0){const p=Math.abs(u-this._lastViewMatrixHash)/Math.max(f,.001);p<1e3?m=this._minIntervalMs:p<1e4?m=this._minIntervalMs*.5:m=this._minIntervalMs*.2,this._lastCameraSpeed=p}if(!(c-this._lastSentTime<m)){if(this._lastViewMatrixHash=u,this._lastSentTime=c,!this._sortWorker){this._sortWorker=this.createSortWorker(),this._sortWorker.onmessage=D=>{const B=D.data.order,v=this._orderData.buffer;this._sortWorker.postMessage({order:v},[v]);const x=new Uint32Array(B),y=this.size.x*this.size.y,S=this.count;(!this._orderData||this._orderData.length!==y)&&(this._orderData=new Uint32Array(y));const F=Math.min(S,x.length);if(this._orderData.set(x.subarray(0,F),0),F<y){const E=S>0?S-1:0;this._orderData.fill(E,F,y)}this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData);const C=Math.max(0,Math.min(this.count,D.data.count|0));this.texParams[2]=C;const w=Math.ceil(C/this._batchSize);this.instanceCount=w};const g=this._worldPositions||this._positions,p=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(g);if(this._mapping)for(let D=0;D<this._mapping.length;++D){const B=this._mapping[D]*3,v=D*3;p[v+0]=g[B+0],p[v+1]=g[B+1],p[v+2]=g[B+2]}const A=new Uint32Array(this.count);for(let D=0;D<this.count;D++)A[D]=D;this._sortWorker.postMessage({order:A.buffer,centers:p.buffer,mapping:this._mapping},[A.buffer,p.buffer]),this._centersSent=!0}if(!this._centersSent&&this._sortWorker){const g=this._worldPositions||this._positions,p=this._mapping?new Float32Array(this._mapping.length*3):new Float32Array(g);if(this._mapping)for(let A=0;A<this._mapping.length;++A){const D=this._mapping[A]*3,B=A*3;p[B+0]=g[D+0],p[B+1]=g[D+1],p[B+2]=g[D+2]}this._sortWorker.postMessage({type:"centers",centers:p.buffer,mapping:this._mapping?this._mapping:null},[p.buffer]),this._centersSent=!0}this._sortWorker.postMessage({cameraPosition:{x:n,y:o,z:l},cameraDirection:{x:-a,y:-r,z:-i}})}}createSortWorker(){function s(){let n,o,l,c,f,d=!1;const h={x:0,y:0,z:0},u={x:0,y:0,z:0},m={x:0,y:0,z:0},g={x:0,y:0,z:0};let p,A;const D=(v,x,y)=>{for(;v<=x;){const S=x+v>>1,F=y(S);if(F>0)v=S+1;else if(F<0)x=S-1;else return S}return~v},B=()=>{if(!n||!o||!c||!f)return;const v=c.x,x=c.y,y=c.z,S=f.x,F=f.y,C=f.z,w=.001;if(!d&&Math.abs(v-h.x)<w&&Math.abs(x-h.y)<w&&Math.abs(y-h.z)<w&&Math.abs(S-u.x)<w&&Math.abs(F-u.y)<w&&Math.abs(C-u.z)<w)return;d=!1,h.x=v,h.y=x,h.z=y,u.x=S,u.y=F,u.z=C;const E=o.length/3;p?.length!==E&&(p=new Uint32Array(E));let Q,T;for(let O=0;O<8;++O){const W=(O&1?m.x:g.x)-v,ae=(O&2?m.y:g.y)-x,z=(O&4?m.z:g.z)-y,K=W*S+ae*F+z*C;O===0?Q=T=K:(Q=Math.min(Q,K),T=Math.max(T,K))}A?A.fill(0):A=new Uint32Array(65537);const j=T-Q,ue=j<1e-6?0:1/j*2**16;for(let O=0;O<E;++O){const W=O*3,ae=o[W+0]-v,z=o[W+1]-x,K=o[W+2]-y,$=ae*S+z*F+K*C,re=Math.floor(($-Q)*ue);p[O]=re,A[re]++}for(let O=1;O<65537;O++)A[O]+=A[O-1];for(let O=0;O<E;O++){const W=p[O],ae=--A[W];n[ae]=O}const ee=O=>p[n[O]]/ue+Q,N=()=>{const O=D(0,E-1,W=>-ee(W));return Math.min(E,Math.abs(O))},M=ee(E-1)>=0?N():E;if(l)for(let O=0;O<E;++O)n[O]=l[n[O]];self.postMessage({order:n.buffer,count:M},[n.buffer]),n=null};self.onmessage=v=>{if(v.data.order&&(n=new Uint32Array(v.data.order)),v.data.centers){o=new Float32Array(v.data.centers),m.x=g.x=o[0],m.y=g.y=o[1],m.z=g.z=o[2];const x=o.length/3;for(let y=1;y<x;++y){const S=o[y*3+0],F=o[y*3+1],C=o[y*3+2];m.x=Math.min(m.x,S),m.y=Math.min(m.y,F),m.z=Math.min(m.z,C),g.x=Math.max(g.x,S),g.y=Math.max(g.y,F),g.z=Math.max(g.z,C)}d=!0}v.data.hasOwnProperty("mapping")&&(l=v.data.mapping?new Uint32Array(v.data.mapping):null,d=!0),v.data.cameraPosition&&(c=v.data.cameraPosition),v.data.cameraDirection&&(f=v.data.cameraDirection),B()}}const e=`(${s.toString()})()`,t=new Blob([e],{type:"application/javascript"}),a=URL.createObjectURL(t);return new Worker(a)}nodeUpdate(s,e,t,a){const r=this.object3D.transform.worldMatrix;this.gsplatMaterial.setTransformMatrix(r);const i=`${this._minPixelCoverage},${this._maxPixelCoverage},${this._maxPixelCullDistance},${this._batchSize}`;i!==this._lastPixelCullParams&&(this.gsplatMaterial.setPixelCulling(this._minPixelCoverage,this._maxPixelCoverage,this._maxPixelCullDistance,this._batchSize),this._lastPixelCullParams=i),this._texturesInitialized||(this.gsplatMaterial.setSplatTextures(this.splatColor,this.transformA,this.transformB,this.texParams,this.splatOrder),this._texturesInitialized=!0),super.nodeUpdate(s,e,t,a)}renderPass(s,e,t){const a=t.encoder;for(let r of this.materials){const i=r.getPass(e);if(!(!i||i.length===0))for(const n of i){if(!n.pipeline)continue;n.apply(this.geometry,t.rendererPassState||t),k.bindPipeline(a,n),k.bindGeometryBuffer(a,this.geometry);const l=this.geometry.subGeometries[0].lodLevels[0];this.instanceCount>0?k.drawIndexed(a,l.indexCount,this.instanceCount,l.indexStart,0,0):k.drawIndexed(a,l.indexCount,1,l.indexStart,0,0)}}}destroy(s){this._sortWorker&&(this._sortWorker.terminate(),this._sortWorker=null),this.splatColor&&(this.splatColor.destroy(s),this.splatColor=null),this.transformA&&(this.transformA.destroy(s),this.transformA=null),this.transformB&&(this.transformB.destroy(s),this.transformB=null),this.splatOrder&&(this.splatOrder.destroy(s),this.splatOrder=null),this._positions=null,this._worldPositions=null,this._orderData=null,this.texParams=null,this._mapping=null,super.destroy(s)}};si=W2([Lt(si,"GSplatRenderer")],si);const C0=`
6028
6028
  #include "GlobalUniform"
6029
6029
 
6030
6030
  const ALPHA_THRESHOLD: f32 = 0.00392156863;
@@ -7429,7 +7429,7 @@ else if (typeof define === 'function' && define['amd'])
7429
7429
  define([], function() { return DracoDecoderModule; });
7430
7430
  else if (typeof exports === 'object')
7431
7431
  exports["DracoDecoderModule"] = DracoDecoderModule;
7432
- `;class po{static _workerCode;static _workers=new Map;static async apply(e,t){if(!t.extensions)return;const a=t.extensions.KHR_draco_mesh_compression;if(!a)return;let r=this._workers.get(e.gltf);r||(r=new Worker(await this.initDecoder()),this._workers.set(e.gltf,r)),r.postMessage({type:"init",decoderConfig:{}});let i=e.parseBufferView(a.bufferView);if(!i.result){let n=await new Promise((o,l)=>{r.onmessage=c=>{const f=c.data;f.type=="decode"?o(f.result):f.type=="error"&&l(f.error)},r.postMessage({type:"decoder",buffer:i,attributes:a.attributes},[i])});i.result=n}return i.result}static unload(e){let t=this._workers.get(e);t&&(t.terminate(),this._workers.delete(e))}static async initDecoder(){if(!this._workerCode){const e=new Blob([vf,"",`(${vb})()`],{type:"application/javascript"});this._workerCode=URL.createObjectURL(e)}return this._workerCode}}function vb(){let s,e;onmessage=t=>{const a=t.data;switch(a.type){case"init":s=a.decoderConfig,e=new Promise((n,o)=>{s.onModuleLoaded=l=>{n({draco:l})},DracoDecoderModule(s)});break;case"decoder":const r=a.buffer,i=a.attributes;e.then(n=>{const o=n.draco;let l=new o.Decoder,c=new o.DecoderBuffer;c.Init(new Int8Array(r),r.byteLength);let f,d;try{const h=l.GetEncodedGeometryType(c);h==o.TRIANGULAR_MESH?(d=new o.Mesh,f=l.DecodeBufferToMesh(c,d)):self.postMessage(new Error("INVALID_GEOMETRY_TYPE:"+h)),f.ok()||self.postMessage(new Error("DracoDecode:"+f.error_msg()));let u={};for(const m in i){let g=l.GetAttributeByUniqueId(d,i[m]);const p=g.num_components(),D=d.num_points()*p,B=D*Float32Array.BYTES_PER_ELEMENT,v=o.DT_FLOAT32,U=o._malloc(B);l.GetAttributeDataArrayForAllPoints(d,g,v,B,U);const y=new Float32Array(o.HEAPF32.buffer,U,D).slice();o._free(U),u[m]={data:y,numComponents:p,normalize:!1}}{const g=d.num_faces()*3,p=g*4,A=o._malloc(p);l.GetTrianglesUInt32Array(d,p,A);const D=new Uint32Array(o.HEAPF32.buffer,A,g).slice();o._free(A),u.indices={data:D,numComponents:1,normalize:!1}}self.postMessage({type:"decode",result:u})}catch(h){self.postMessage({type:"error",error:h.message})}finally{o.destroy(d),o.destroy(l),o.destroy(c)}});break}}}class xf{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:a,type:r,perspective:i,orthographic:n}=t;if(r==="perspective"&&i){const{aspectRatio:o,yfov:l,zfar:c,znear:f}=i;t.dcamera=Object.assign({},{name:a,type:r,yfov:l,znear:f,aspectRatio:o,zfar:c})}else if(r==="orthographic"&&n){const{xmag:o,ymag:l,zfar:c,znear:f}=n;t.dcamera=Object.assign({},{name:a,type:r,xmag:o,ymag:l,zfar:c,znear:f})}return t.dcamera}errorMiss(e,t){throw new Error(e+t)}}class Ut extends it{static format=je.JSON;_gltf;async parseJson(e){this._gltf=new Ns,this._gltf={...this._gltf,...e},this._gltf.resources={},await Promise.all([this.load_gltf_bin(),this.load_gltf_textures()]);let t=new Ps,a=await t.parse(this.initUrl,this._gltf,this._gltf.scene);return t.destroy(),t=null,a?(this.data=a.rootNode,a.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 a=this._gltf.buffers[t];if(a.uri.substring(0,5)!=="data:"){let r=It.parseUrl(this.baseUrl,a.uri);this.loaderFunctions?.onUrl&&(r=await this.loaderFunctions.onUrl(r));let i=new Rt().loadBinData(r,this.loaderFunctions).then(n=>{this._gltf.resources[a.uri]=n});e.push(i)}}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 a=this._gltf.images[t];if(a.uri){let r=It.parseUrl(this.baseUrl,a.uri);this.loaderFunctions?.onUrl&&(r=await this.loaderFunctions.onUrl(r));let i=new Rt().loadAsyncBitmapTexture(r,this.loaderFunctions).then(n=>{n.name=It.getURLName(a.uri),this._gltf.resources[n.name]=n});e.push(i)}}await Promise.all(e)}}}class Uf{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 a=t.primitives,r=t.extras,i=[];for(let n=0;n<a.length;n++){const o=a[n],{attributes:l,indices:c,material:f,mode:d,name:h,targets:u,morphTargetsRelative:m,extensions:g}=o;let p=t.name;for(let S in l)p+=S;p+=`indices:${c}`,p+=`material:${f}`;const A={attribArrays:{indices:[]},weights:[],defines:[],material:null,drawMode:null,meshName:null,modelName:null,morphTargetsRelative:!1,targetNames:r?r.targetNames:null};let D=!1,B=0,v=!1,U;g&&g.KHR_draco_mesh_compression&&(U=await po.apply(this.subParser,o));for(const S in l){const F=U?U[S]:this.parseAccessor(l[S]);if(F){let C;switch(S){case"POSITION":C=G.position;break;case"NORMAL":C=G.normal,D=!0;break;case"TEXCOORD_0":C=G.uv,B++;break;case"JOINTS_0":C=G.joints0;break;case"JOINTS_1":C=G.joints1,v=!0;break;case"WEIGHTS_0":C=G.weights0;break;case"WEIGHTS_1":C=G.weights1;break;default:C=S}A.attribArrays[C]=F}}if(D&&A.defines.push(Ut.getHasNormalDefine()),B&&A.defines.push(Ut.getTexCoordDefine(B)),v&&A.defines.push(Ut.getJointVec8Define()),c!==void 0){const S=U?U.indices:this.parseAccessor(c);S&&(A.attribArrays.indices=S)}const y=await this.parseMaterial(f);if(y&&(A.material=y,A.defines=A.defines.concat(y.defines)),A.drawMode=d===void 0?4:d,A.meshName=()=>p,A.modelName=t.name||Ut.getModelNameCounter(),u){A.defines.push(Ut.getMorphTargetsDefine(u.length)),A.morphTargetsRelative=!0;let S=!1,F=!1,C=!1;for(let w=0;w<u.length;w++){const E=u[w];Object.keys(E).forEach(Q=>{const T=this.parseAccessor(E[Q]);if(T){let j;switch(Q){case"POSITION":j=la.MORPH_POSITION_PREFIX+w,S=!0;break;case"NORMAL":j=la.MORPH_NORMAL_PREFIX+w,F=!0;break;case"TANGENT":j=la.MORPH_TANGENT_PREFIX+w,C=!0;break;default:j=!1}j?A.attribArrays[j]=T:console.error(`glTF has unsupported morph target attribute ${Q}`)}})}S&&A.defines.push(Ut.getMorphtargetPositionDefine()),F&&A.defines.push(Ut.getMorphtargetNormalDefine()),C&&A.defines.push(Ut.getMorphtargetTangentDefine()),A.weights=t.weights||new Array(u.length).fill(0)}i.push(A)}return t.dprimitives=i,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 yf{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:a,pbrMetallicRoughness:r,normalTexture:i,occlusionTexture:n,emissiveTexture:o,emissiveFactor:l,alphaMode:c,alphaCutoff:f,doubleSided:d,extensions:h}=t;const u={name:a,defines:[],doubleSided:!!d,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(r){const{baseColorFactor:m,metallicFactor:g,roughnessFactor:p,baseColorTexture:A,metallicRoughnessTexture:D}=r;if(Object.assign(u,{baseColorFactor:m||[1,1,1,1],metallicFactor:g===void 0?1:g,roughnessFactor:p===void 0?.5:p}),A){let B=A.extensions;if(B){let U=B.KHR_texture_transform;if(U){let y=new be(U.offset?U.offset[0]:0,U.offset?U.offset[1]:0,U.scale?U.scale[0]:1,U.scale?U.scale[1]:1);u.baseMapOffsetSize=y}}const v=await this.parseTexture(A.index);v?u.baseColorTexture=v:u.baseColorTexture=_.res.redTexture}if(i){let B=i.extensions;if(B){let U=B.KHR_texture_transform;if(U){let y=new be(U.offset?U.offset[0]:0,U.offset?U.offset[1]:0,U.scale?U.scale[0]:1,U.scale?U.scale[1]:1);u.normalMapOffsetSize=y}}const v=await this.parseTexture(i.index);v?u.normalTexture=v:u.normalTexture=_.res.normalTexture}if(D){let B=D.extensions;if(B){let U=B.KHR_texture_transform;if(U){let y=new be(U.offset?U.offset[0]:0,U.offset?U.offset[1]:0,U.scale?U.scale[0]:1,U.scale?U.scale[1]:1);u.roughnessMapOffsetSize=y}}const v=await this.parseTexture(D.index);v?u.metallicRoughnessTexture=v:u.metallicRoughnessTexture=_.res.blackTexture}}else Object.assign(u,{baseColorFactor:[1,1,1,1],metallicFactor:0,roughnessFactor:.5});if(u.baseColorFactor&&u.baseColorFactor[3]<1&&(c=c==="MASK"?"MASK":"BLEND"),c&&c!=="OPAQUE"&&(c==="MASK"&&(u.defines.push(Ut.getAlphaMaskDefine()),u.alphaCutoff=f===void 0?.5:f),c==="BLEND"&&(u.defines.push(Ut.getAlphaBlendDefine()),u.enableBlend=!0)),i){const m=await this.parseTexture(i.index);m?u.normalTexture=m:u.normalTexture=_.res.normalTexture}if(n){const m=await this.parseTexture(n.index);m&&(u.occlusionTexture=m)}if(l&&(u.emissiveFactor=l),o){const m=await this.parseTexture(o.index);m?u.emissiveTexture=m:u.emissiveTexture=_.res.blackTexture}return h&&(u.extensions=h),t.isParsed=!0,t.dmaterial=u,u}async parseTexture(e){return this.subParser.parseTexture(e)}errorMiss(e,t){throw new Error(e+t)}}class Cf{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:a,joints:r,inverseBindMatrices:i,skeleton:n}=t;if(!r)return this.errorMiss("skin.joints",e);t.isParsed=!0,t.dskin=!1;let o={name:a,skeleton:null,inverseBindMatrices:null,joints:r,defines:[Ut.getJointsNumDefine(r.length)]};if(n)o.skeleton=n;else{var l=-1;for(let c=0;c<this.gltf.nodes.length;c++)if(this.gltf.nodes[c].name=="root"){l=c;break}if(l==-1){let c=this.gltf.scenes[this.gltf.scene];l=c.nodes[c.nodes.length-1]}o.skeleton=l}if(o.inverseBindMatrices=la.IDENTITY_INVERSE_BIND_MATRICES,i!==void 0){const c=this.parseAccessor(i);if(c){const f=c.data,d=[];for(let h=0;h<f.length;h+=16)d.push(f.slice(h,h+16));o.inverseBindMatrices=d}else o=null}return t.dskin=o,t.dskin}parseAccessor(e){return this.subParser.parseAccessor(e)}errorMiss(e,t){throw new Error(e+t)}}class Sf{name="";index=0;instanceID="";parent=null;scale=new b;rotation=new se;translation=new b;constructor(e=""){this.name=e}}class mo{index;worldMatrix;constructor(e,t=!1){this.index=e,this.worldMatrix=new R(!t)}}class Ri{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 a=0;a<e.numJoint;a++){let r=new mo(a,t);this._jointsPose[a]=r,this.mJointMatrixIndexTable[a]=r.worldMatrix.index}}buildSkeletonPose(e){let t=new b,a=new se,r=new b,i=new Array(this._skeleton.numJoint);this.time=e[11]>0?e[11]:e[24];for(let n=0;n<this._skeleton.numJoint;n++){let o=12*n*4,l=new Float32Array(e.buffer,e.byteOffset+o,12),c=new R;t.set(l[0],l[1],l[2]),a.set(l[4],l[5],l[6],l[7]),r.set(l[8],l[9],l[10]),Es(a.getEulerAngles(),r,t,c),i[n]=c;let f=new mo(n);const d=this._skeleton.getJointParentIndex(n);if(d<0)f.worldMatrix.copyFrom(c);else{let h=this._jointsPose[d];jc(h.worldMatrix,c,f.worldMatrix)}this._jointsPose[n]=f}}get numJoint(){return this._skeleton.numJoint}get joints(){return this._jointsPose}get jointMatrixIndexTable(){return this.mJointMatrixIndexTable}lerp(e,t,a){if(e&&t)for(let r=0;r<this._jointsPose.length;r++){let i=e._jointsPose[r],n=t._jointsPose[r];this._jointsPose[r].worldMatrix.lerp(i.worldMatrix,n.worldMatrix,a)}else for(let r=0;r<this._jointsPose.length;r++){let i=e._jointsPose[r];this._jointsPose[r].worldMatrix.copyFrom(i.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 Ff extends mt{skeletonAnimation;constructor(e,t){super(),this.type=e,this.time=t}}class hn{name="";_skeleton;_skeletonPoses;_animationClipData;_events;constructor(e,t,a,r){if(this.name=e,this._skeleton=t,this._animationClipData=r,a>0&&r){this._skeletonPoses=new Array(a);let i=12*t.numJoint;for(let n=0;n<a;n++){let o=i*n*4;const l=r.buffer instanceof ArrayBuffer?r.buffer:new Uint8Array(r.buffer).buffer;let c=new Float32Array(l,o,i),f=new Ri(t);f.buildSkeletonPose(c),this._skeletonPoses[n]=f}}}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,a,r){let i=this.getSkeletonPose(e),n=this.getSkeletonPose(t);return r.lerp(i,n,a),r}createSubClip(e,t,a){var r=new hn(e,this._skeleton,0,null);const i=Math.max(Math.floor(t/this.frameRate),0),n=Math.min(Math.floor(a/this.frameRate),this._skeletonPoses.length-1);r._skeletonPoses=this._skeletonPoses.slice(i,n);const o=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,i*o,(n-i)*o),r}addEvent(e,t){this._events||(this._events=new Array),this._events.push(new Ff(e,t))}removeEvent(e){this._events&&(this._events=this._events.filter(t=>t.type!=e))}getEvents(){return this._events}}class Ao{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}parse(e){let t=new qo;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 a=new fl;a.clipName=t.name,a.useSkeletonPos=!1,a.useSkeletonScale=!1;for(let r of t.channels){let i=t.samplers[r.sampler];const n=this.subParser.parseAccessor(i.input),o=this.subParser.parseAccessor(i.output);let l=r.target.node,c=r.target.path,f=this.gltf.nodes[l];if(!f||!e.boneMap.has(f.name))continue;let d=e.boneMap.get(f.name);switch(c){case"scale":{let h=new Ur(o.numComponents);h.path="",h.attribute="",h.propertys=h.attribute.split("."),h.preInfinity=0,h.postInfinity=0,h.rotationOrder=0,a.useSkeletonScale=!0,a.scaleCurves.set(d.bonePath,h);for(let u=0;u<n.data.length;u++){const m=n.data[u],g=u*o.numComponents;let p=new as(0);p.time=m;const A=new b().set(o.data[g+0],o.data[g+1],o.data[g+2]);p.split(X.vector3,A,"value"),h.addKeyFrame(p)}}break;case"rotation":{let h=new Ur(o.numComponents);h.path="",h.attribute="",h.propertys=h.attribute.split("."),h.preInfinity=0,h.postInfinity=0,h.rotationOrder=0,a.rotationCurves.set(d.bonePath,h);for(let u=0;u<n.data.length;u++){const m=n.data[u],g=u*o.numComponents;let p=new as(0);p.time=m;const A=new se().set(o.data[g+0],o.data[g+1],o.data[g+2],o.data[g+3]);p.split(X.quaternion,A,"value"),h.addKeyFrame(p)}}break;case"translation":{let h=new Ur(o.numComponents);h.path="",h.attribute="",h.propertys=h.attribute.split("."),h.preInfinity=0,h.postInfinity=0,h.rotationOrder=0,a.useSkeletonPos=!0,a.positionCurves.set(d.bonePath,h);for(let u=0;u<n.data.length;u++){const m=n.data[u],g=u*o.numComponents;let p=new as(0);p.time=m;const A=new b().set(o.data[g+0],o.data[g+1],o.data[g+2]);p.split(X.vector3,A,"value"),h.addKeyFrame(p)}}break}}return a}parseSkeletonAnimationOld(e,t){let a=this.subParser.parseAccessor(t.samplers[0].input),r=a.data.length,i=a.data[1]-a.data[0];a.data[a.data.length-1];let n=12*e.numJoint,o=new Float32Array(n*r);for(var l=0;l<e.numJoint;l++)for(var c=0;c<r;c++){var f=n*c+12*l;o[f+0]=1,o[f+1]=1,o[f+2]=1,o[f+3]=1}for(let g of t.channels){let p=t.samplers[g.sampler];const A=this.subParser.parseAccessor(p.input),D=this.subParser.parseAccessor(p.output);let B=g.target.node,v=g.target.path,U=this.gltf.nodes[B];if(!U)continue;let y=e.getJointByName(U.name);if(y)switch(v){case"scale":if(r*D.numComponents==D.data.length)for(var c=0;c<r;c++){var d=c*D.numComponents,f=n*c+12*y.index;o[f+0]=D.data[d+0],o[f+1]=D.data[d+1],o[f+2]=D.data[d+2],o[f+3]=1}else if(A.data.length==2){let S=0;A.data[0];let F=A.data[1];var h=0*D.numComponents;b.HELP_0.set(D.data[h+0],D.data[h+1],D.data[h+2]);var u=1*D.numComponents;b.HELP_1.set(D.data[u+0],D.data[u+1],D.data[u+2]);for(var c=0;c<r;c++){let w=S/F;b.HELP_2.lerp(b.HELP_0,b.HELP_1,w);var f=n*c+12*y.index;o[f+0]=b.HELP_2.x,o[f+1]=b.HELP_2.y,o[f+2]=b.HELP_2.z,o[f+3]=1,S+=i}}else throw new Error("Unsupported animation sampler interpolation.");break;case"rotation":if(r*D.numComponents==D.data.length)for(var c=0;c<r;c++){var d=c*D.numComponents,f=n*c+12*y.index+4;o[f+0]=D.data[d+0],o[f+1]=D.data[d+1],o[f+2]=D.data[d+2],o[f+3]=D.data[d+3]}else if(A.data.length==2){let S=0;A.data[0];let F=A.data[1];var h=0*D.numComponents;b.HELP_0.set(D.data[h+0],D.data[h+1],D.data[h+2],D.data[h+3]);var u=1*D.numComponents;b.HELP_1.set(D.data[u+0],D.data[u+1],D.data[u+2],D.data[u+3]);for(var c=0;c<r;c++){let Q=S/F;b.HELP_2.lerp(b.HELP_0,b.HELP_1,Q);var f=n*c+12*y.index+4;o[f+0]=b.HELP_2.x,o[f+1]=b.HELP_2.y,o[f+2]=b.HELP_2.z,o[f+3]=b.HELP_2.w,S+=i}}else throw new Error("Unsupported animation sampler interpolation.");break;case"translation":if(r*D.numComponents==D.data.length)for(var c=0;c<r;c++){var d=c*D.numComponents,f=n*c+12*y.index+8;o[f+0]=D.data[d+0],o[f+1]=D.data[d+1],o[f+2]=D.data[d+2],o[f+3]=A.data[c*A.numComponents]}else if(A.data.length==2){let S=0;A.data[0];let F=A.data[1];var h=0*D.numComponents;b.HELP_0.set(D.data[h+0],D.data[h+1],D.data[h+2]);var u=1*D.numComponents;b.HELP_1.set(D.data[u+0],D.data[u+1],D.data[u+2]);for(var c=0;c<r;c++){let Q=S/F;b.HELP_2.lerp(b.HELP_0,b.HELP_1,Q);var f=n*c+12*y.index+8;o[f+0]=b.HELP_2.x,o[f+1]=b.HELP_2.y,o[f+2]=b.HELP_2.z,o[f+3]=S,S+=i}}else throw new Error("Unsupported animation sampler interpolation.");break}}return new hn(t.name,e,r,o)}buildSkeleton(e,t,a){let r=this.gltf.nodes[a];r.name||(r.name="Bone"+e.count);let i=new Ko;if(i.boneName=r.name,i.bonePath=t?t.bonePath+"/"+r.name:r.name,i.parentBoneName=t?t.boneName:"",i.boneID=e.count++,i.parentBoneID=t?t.boneID:-1,i.instanceID="",i.parentInstanceID="",i.s=new b(1,1,1),r.scale&&i.s.set(r.scale[0],r.scale[1],r.scale[2]),i.q=new se,r.rotation&&i.q.set(r.rotation[0],r.rotation[1],r.rotation[2],r.rotation[3]),i.t=new b,r.translation&&i.t.set(r.translation[0],r.translation[1],r.translation[2]),e.boneData.push(i),e.boneMap.set(i.boneName,i),r.children)for(let n of r.children)this.buildSkeleton(e,i,n)}buildSkeletonOld(e,t,a,r=0){let i=this.gltf.nodes[a];i.name||(i.name="Node_"+a);let n=new Sf(i.name);if(n.parent=t,i.scale&&n.scale.set(i.scale[0],i.scale[1],i.scale[2]),i.rotation&&n.rotation.set(i.rotation[0],i.rotation[1],i.rotation[2],i.rotation[3]),i.translation&&n.translation.set(i.translation[0],i.translation[1],i.translation[2]),e.addJoint(n),i.children)for(let o of i.children)this.buildSkeletonOld(e,n,o,r+1)}}class Do{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 Qi extends et{name;size=1;lightData;dirFix=1;bindOnChange;needUpdateShadow=!0;realTimeShadow=!0;_castGI=!1;_castShadow=!1;_iesProfiles;constructor(){super()}init(){this.transform.object3D.bound=new Ce(new b,new b),this.lightData=new ws,this.lightData.lightMatrixIndex=this.transform.worldMatrix.index}onChange(){this.bindOnChange&&this.bindOnChange(),this.transform.object3D.bound.setFromCenterAndSize(this.transform.worldPosition,new b(this.size,this.size,this.size)),this._castGI&&(q.instance.state.giLightingChange=!0),this._castShadow?(this.needUpdateShadow=!0,Zt.addShadowLight(this)):Zt.removeShadowLight(this),this.transform.view3D&&_.renderJobs&&_.renderJobs.get(this.transform.view3D).reflectionRenderer&&_.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(),q.instance.addLight(this.transform.scene3D,this)}onDisable(){this.onChange(),q.instance.removeLight(this.transform.scene3D,this),Zt.removeShadowLight(this)}set iesProfiles(e){this._iesProfiles=e,this.lightData.iesIndex=e.index,Ra.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?Do.add(this):Do.remove(this),this._castGI=e,e&&this.onChange()}get direction(){return this.lightData.direction}destroy(e){this.bindOnChange=null,q.instance.removeLight(this.transform.scene3D,this),Zt.removeShadowLight(this),this.transform.eventDispatcher.removeEventListener(Yt.ROTATION_ONCHANGE,this.onRotChange,this),this.transform.eventDispatcher.removeEventListener(Yt.SCALE_ONCHANGE,this.onScaleChange,this),super.destroy(e)}}var xb=Object.getOwnPropertyDescriptor,Ub=(s,e,t,a)=>{for(var r=a>1?void 0:a?xb(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Ti=class extends Qi{shadowCamera;constructor(){super()}init(){super.init(),this.object3D.name==""&&(this.object3D.name="DirectionLight_"+Wt()),this.radius=Number.MAX_SAFE_INTEGER,this.lightData.lightType=ht.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(){}};Ti=Ub([Lt(Ti,"DirectLight")],Ti);var yb=Object.getOwnPropertyDescriptor,Cb=(s,e,t,a)=>{for(var r=a>1?void 0:a?yb(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let li=class extends Qi{constructor(){super()}init(){super.init(),this.lightData.lightType=ht.PointLight,this.object3D.name==""&&(this.object3D.name="PointLight"+Wt())}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){}};li=Cb([Lt(li,"PointLight")],li);var Sb=Object.getOwnPropertyDescriptor,Fb=(s,e,t,a)=>{for(var r=a>1?void 0:a?Sb(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Mi=class extends Qi{constructor(){super()}init(){super.init(),this.lightData.lightType=ht.SpotLight,this.object3D.name==""&&(this.object3D.name="SpotLight"+Wt())}get innerAngle(){return this.lightData.innerAngle/this.lightData.outerAngle*100}set innerAngle(s){this.lightData.innerAngle=Be(s,0,100)/100*this.lightData.outerAngle,this.onChange()}get outerAngle(){return this.lightData.outerAngle*ei*2}set outerAngle(s){this.lightData.outerAngle=Be(s,1,179)*_t*.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=ht.SpotLight}onUpdate(){}onGraphic(s){}debug(){}debugDraw(s){}};Mi=Fb([Lt(Mi,"SpotLight")],Mi);class kf{static apply(e,t,a){let r=t.extensions;if(r&&r.KHR_materials_clearcoat){a.shader.getDefaultColorShader().setDefine("USE_CLEARCOAT",!0);let i=r.KHR_materials_clearcoat;"clearcoatFactor"in i&&(t.clearcoatFactor=i.clearcoatFactor,a.clearcoatFactor=t.clearcoatFactor),"clearcoatRoughnessFactor"in i&&(t.clearcoatRoughnessFactor=i.clearcoatRoughnessFactor,a.clearcoatRoughnessFactor=t.clearcoatRoughnessFactor)}}}class Ef{static apply(e,t,a){let r=t.extensions;r&&r.KHR_materials_emissive_strength?(a.emissiveIntensity=r.KHR_materials_emissive_strength.emissiveStrength,a.emissiveMap==_.res.blackTexture&&(a.emissiveMap=_.res.whiteTexture)):a.emissiveIntensity=1}}class wf{static apply(e,t,a){let r=t.extensions;r&&r.KHR_materials_unlit?a.supportLight=!1:a.supportLight=!0}}class If{gltf;subParser;_testCount=8;_hasCastShadow=!1;constructor(e){this.gltf=e.gltf,this.subParser=e}async convertNodeToObject3D(e,t){const a=new ne;if(a.name=e.name,a[la.GLTF_NODE_INDEX_PROPERTY]=e.nodeId,e.nodeObj=a,e.matrix&&(e.translation=[0,0,0],e.rotation=[0,0,0,1],e.scale=[1,1,1]),e.translation&&(a.transform.x=e.translation[0],a.transform.y=e.translation[1],a.transform.z=e.translation[2]),e.rotation){let r=new se;r.setFromArray(e.rotation),a.transform.localRotQuat=r}return e.scale&&(a.transform.scaleX=e.scale[0],a.transform.scaleY=e.scale[1],a.transform.scaleZ=e.scale[2]),t.addChild(a),e.light&&this.convertLight(e,a),e.primitives&&this.convertprimitives(e,a),e.skeleton&&this.convertSkeletonAnim(a,e.skeleton),a}convertSkeletonAnim(e,t){let a=this.subParser.parseSkeleton(t.skeleton);_.res.addObj(a.name,a);let r=[];for(let n=0;n<this.gltf.animations.length;n++){let o=this.gltf.animations[n];o.name||(o.name=n.toString());let l=this.subParser.parseSkeletonAnimation(a,o);r.push(l)}let i=e.addComponent(er);i.avatar=a.name,i.clips=r}convertLight(e,t){switch(e.light.type){case"directional":let a=t.addComponent(Ti);t.name=e.light.name,a.intensity=e.light.intensity*.1,a.radius=Number.MAX_SAFE_INTEGER,a.dirFix=-1,this._hasCastShadow||(this._hasCastShadow=!0,a.castShadow=this._hasCastShadow),a.lightColor=e.light.color?new J(e.light.color[0],e.light.color[1],e.light.color[2]):new J(1,1,1,1),a.debug();break;case"point":if(this._testCount>0){let i=t.addComponent(li);i.name=e.light.name,i.intensity=e.light.intensity?e.light.intensity*8*2:1,i.radius=8,i.at=2,i.range=e.light.range?e.light.range:8,i.lightColor=e.light.color?new J(e.light.color[0],e.light.color[1],e.light.color[2]):new J(1,1,1,1)}this._testCount--;break;case"spot":let r=t.addComponent(Mi);r.name=e.light.name,r.intensity=e.light.intensity*5,r.radius=1,r.dirFix=-1,r.at=2,r.range=e.light.range?e.light.range:8,r.outerAngle=e.light.spot.outerConeAngle*ei,r.lightColor=e.light.color?new J(e.light.color[0],e.light.color[1],e.light.color[2]):new J(1,1,1,1);break}}convertprimitives(e,t){for(let a=0;a<e.primitives.length;a++){const r=e.primitives[a];r.modelName;let i=r.material;i.name==null&&(i.name=Wt());let n,o=`matkey_${i.name}`;if(i&&this.gltf.resources[o])n=this.gltf.resources[o];else{let u=i;const m=u?.extensions?.KHR_materials_unlit!==void 0;let g=m?new vt:new aa;if(n=g,this.gltf.resources[o]=g,g.name=i.name,u){const{baseColorTexture:p,baseColorFactor:A,metallicFactor:D,roughnessFactor:B,doubleSided:v,metallicRoughnessTexture:U,normalTexture:y,occlusionTexture:S,emissiveTexture:F,emissiveFactor:C,enableBlend:w,alphaCutoff:E}=u;let Q=g=this.applyMaterialExtensions(u,g);if(m){const T=Q;T.baseColor=new J(A[0],A[1],A[2],A[3]),p&&(T.baseMap=p),Q.doubleSide=v,"enableBlend"in u&&(u.enableBlend?(u.defines?.includes("ALPHA_BLEND")?Q.blendMode=De.ALPHA:Q.blendMode=De.NORMAL,Q.castShadow=!1):Q.blendMode=De.NONE),"alphaCutoff"in u&&E>0&&E<1&&(Q.setUniformFloat("alphaCutoff",E),Q.blendMode=De.NORMAL,Q.transparent=!0)}else if("enableBlend"in u&&(u.enableBlend?(u.defines?.includes("ALPHA_BLEND")?Q.blendMode=De.ALPHA:Q.blendMode=De.NORMAL,Q.castShadow=!1):Q.blendMode=De.NONE),"alphaCutoff"in u&&E>0&&E<1&&(Q.setUniformFloat("alphaCutoff",E),Q.blendMode=De.NORMAL,Q.transparent=!0),u.baseMapOffsetSize&&Q.setUniformVector4("baseMapOffsetSize",u.baseMapOffsetSize),u.normalMapOffsetSize&&Q.setUniformVector4("normalMapOffsetSize",u.normalMapOffsetSize),u.emissiveMapOffsetSize&&Q.setUniformVector4("emissiveMapOffsetSize",u.emissiveMapOffsetSize),u.roughnessMapOffsetSize&&Q.setUniformVector4("roughnessMapOffsetSize",u.roughnessMapOffsetSize),u.metallicMapOffsetSize&&Q.setUniformVector4("metallicMapOffsetSize",u.metallicMapOffsetSize),u.aoMapOffsetSize&&Q.setUniformVector4("aoMapOffsetSize",u.aoMapOffsetSize),Q.setUniformColor("baseColor",new J(A[0],A[1],A[2],A[3])),Q.setUniformFloat("roughness",B??1),Q.setUniformFloat("metallic",D??0),Q.setUniformFloat("ao",1),Q.doubleSide=v,p&&Q.setTexture("baseMap",p),y&&Q.setTexture("normalMap",y),U?(Q.setTexture("maskMap",U),Q.shader.setDefine("USE_ROUGHNESS_G",!0),Q.shader.setDefine("USE_METALLIC_B",!0)):(Q.shader.setDefine("USE_ROUGHNESS_G",!1),Q.shader.setDefine("USE_METALLIC_B",!1)),F&&Q.setTexture("emissiveMap",F),C&&(C[0]>0||C[1]>0||C[2]>0)){Q.shader.getTexture("emissiveMap")||Q.shader.setTexture("emissiveMap",_.res.whiteTexture),Q.shader.setDefine("USE_EMISSIVEMAP",!0),Q.setUniformColor("emissiveColor",new J(C[0],C[1],C[2],C[3])),Q.blendMode!=De.NONE&&(Q.blendMode=De.ADD);let T=n.getUniformFloat("emissiveIntensity");(!T||T<=0)&&n.setUniformFloat("emissiveIntensity",1)}}}const{attribArrays:l,modelName:c,drawMode:f}=r;let d;if(!l.indices.data){let u=[],m=l.position.data.length/3/3;for(let g=0;g<m;g++){let p=g*3;u.push(p+2),u.push(p+0),u.push(p+1)}l.indices={data:new Uint8Array(u),normalize:!1,numComponents:1}}let h=!l.normal;if(h){let u=[],m=l.position.data.length/3;for(let g=0;g<m;g++)u.push(0),u.push(0),u.push(0);l.normal={data:new Float32Array(u),normalize:!1,numComponents:3}}if(l.indices.data&&l.indices.data.length>3){let u=r.meshName();this.gltf.resources[u]&&(d=this.gltf.resources[u]);const m=new ne;if(m.name=c+a,this.gltf.animations&&l[G.joints0]!=null){d||=this.createGeometryBase(c,l,r,e.skin),this.gltf.resources[u]=d,h&&l.indices?.data&&l.indices.data.length>0&&d.computeNormals();let g=this.gltf.nodes[e.skin.skeleton];g.dnode&&g.dnode.nodeObj?this.convertSkeletonAnim(t,e.skin):g.dnode.skeleton=e.skin;let p=m.addComponent(Dr);p.geometry=d,p.material=n}else{d||=this.createGeometryBase(c,l,r),this.gltf.resources[u]=d,h&&l.indices?.data&&l.indices.data.length>0&&d.computeNormals(),d.hasAttribute(G.joints0)&&d.vertexAttributeMap.delete(G.joints0);let g=m.addComponent(he);g.castShadow=!0,g.castGI=!0,g.geometry=d,g.material=n}e.skin&&e.skin.defines,t.addChild(m)}}}createGeometryBase(e,t,a,r){"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 i=new Le;if(i.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)),a.morphTargetsRelative){let l=new tl,c=a.targetNames;if(c&&c.length>0){l.shapeNames=[],l.shapeIndexs=[];for(let f=0;f<c.length;f++)l.shapeNames.push(c[f]),l.shapeIndexs.push(f)}l.vertexCount=t.position.data.length/3,l.blendCount=l.shapeNames.length,l.blendShapePropertyDatas=[],l.blendShapeMap=new Map;for(let f=0;f<l.blendCount;f++){let d=new el;d.shapeName=l.shapeNames[f],d.shapeIndex=l.shapeIndexs[f],d.frameCount=1,d.blendPositionList=t[la.MORPH_POSITION_PREFIX+f].data,d.blendNormalList=t[la.MORPH_NORMAL_PREFIX+f].data,l.blendShapePropertyDatas.push(d),l.blendShapeMap.set(d.shapeName,d)}i.blendShapeData=l}i.morphTargetsRelative=a.morphTargetsRelative;let n=a.targetNames;if(n&&n.length>0){let l=i.morphTargetDictionary={};for(let c=0;c<n.length;c++)l[n[c]]=c}if(i.morphTargetDictionary){let l=t.position.data.length/3,c=new Float32Array(l);for(let f=0;f<l;f++)c[f]=f;t.vIndex={data:c,normalize:!1,numComponents:1}}for(const l in t){let c=t[l];i.setAttribute(l,c.data)}if(r){i.skinNames=new Array(r.joints.length);for(let l=0;l<r.joints.length;l++){const c=r.joints[l],f=this.gltf.nodes[c];i.skinNames[l]=f.name}i.bindPose=new Array(r.inverseBindMatrices.length);for(let l=0;l<r.inverseBindMatrices.length;l++){const c=r.inverseBindMatrices[l];let f=new R;f.rawData.set(c),i.bindPose[l]=f}}let o=i.getAttribute(G.indices);return i.addSubGeometry({indexStart:0,indexCount:o.data.length,vertexStart:0,index:0,vertexCount:0,firstStart:0,topology:0}),i}applyMaterialExtensions(e,t){return e.extensions&&(kf.apply(this.gltf,e,t),wf.apply(this.gltf,e,t),Ef.apply(this.gltf,e,t)),t}parseSkinJoints(e){let t=[];for(let a of e.joints){let r=this.gltf.nodes[a];t.push(r.name)}return t}}class Ps{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,a){this.gltf=t,this.initUrl=e;const{version:r,generator:i}=this.gltf.asset;if(this._generator=i,r!=="2.0")return console.error(`GLTFParser only support glTF 2.0 for now! Received glTF version: ${this.version}`),!1;const n={nodes:await this.parseScene(a),animations:this.parseAnimations(),name:this.currentSceneName};return await this.convertToNode(n)}destroy(){po.unload(this.gltf),this.gltf=null}async parseScene(e){const t=e||this.gltf.scene||0,a=this.gltf.scenes[t];if(typeof a>"u")return this.errorMiss("scene",t);this.currentSceneName=a.name||"GLTF_NO_NAME_SCENE";const r=[],i=a.nodes;for(let n=0;n<i.length;n++){const o=await this.parseNode(i[n]);o&&r.push(o)}return r}async parseNode(e){const t=this.gltf.nodes[e];if(!t)return this.errorMiss("node",e);if(t.isParsed)return t.dnode;const{name:a,matrix:r,translation:i,rotation:n,scale:o}=t,l={name:a,matrix:r,translation:i,rotation:n,scale:o,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 c=this.parseSkin(t.skin);c&&(l.skin=c)}if(l.children=[],t.children)for(let c=0;c<t.children.length;c++)l.children.push(await this.parseNode(t.children[c]));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 xf(this.gltf)),this._cameraParser.parse(e)}async parseMesh(e){return this._meshParser||(this._meshParser=new Uf(this)),this._meshParser.parse(e)}async parseTexture(e){let t=this.gltf.textures[e];if(t&&!t.dtexture){if(t&&t.source!=null){let a=this.gltf.images[t.source];if(a.uri){let r=a.uri;r=It.getURLName(r),t.dtexture=this.gltf.resources[r]}else if(a.bufferView){let r=this.parseBufferView(a.bufferView),i=new $a,n=new Blob([r],{type:a.mimeType});await i.loadFromBlob(n),t.dtexture=i}else t.dtexture=this.gltf.resources[a.name]}else if(t.name){let a=It.getURLName(t.name);t.dtexture=this.gltf.resources[a]}}return t.dtexture||console.log("miss texture , please check texture!",e,t),t.dtexture}async parseMaterial(e){return this._materialParser||(this._materialParser=new yf(this)),this._materialParser.parse(e)}parseAnimations(){return[]}async parseObject3D(e,t){return this._converter||(this._converter=new If(this)),this._converter.convertNodeToObject3D(e,t)}parseSkeleton(e){return this._skeletonParser||(this._skeletonParser=new Ao(this)),this._skeletonParser.parse(e)}parseSkeletonAnimation(e,t){return this._skeletonParser||(this._skeletonParser=new Ao(this)),this._skeletonParser.parseSkeletonAnimation(e,t)}async traverse(e,t){for(let a=0;a<t.length;a++){const r=await this.parseObject3D(t[a],e);await this.traverse(r,t[a].children)}}async convertToNode(e){const t=new ne;t.name=e.name;const a=e.nodes;e.animations;const r=[],i=[];return await this.traverse(t,a),{rootNode:t,textures:r,animations:void 0,cameras:i}}parseSkin(e){return this._skinParser||(this._skinParser=new Cf(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 a=!!t.normalized,r=this.gltf.bufferViews[t.bufferView],i=r&&r.byteStride,n=go(t.componentType);let o=1;switch(t.type){case"SCALAR":o=1;break;case"VEC2":o=2;break;case"VEC3":o=3;break;case"VEC4":case"MAT2":o=4;break;case"MAT3":o=9;break;case"MAT4":o=16;break;default:o=0;break}if(o===0)return console.error(`glTF has unknown data type in accessor: ${t.type}`),!1;const l=o*n.BYTES_PER_ELEMENT;let c;if(r!==void 0){if(c=this.parseBufferView(t.bufferView),!c)return t.daccessor}else c=new Uint8Array(l*t.count).buffer;let f=this.getTypedArrayFromArrayBuffer(c,i,t.byteOffset||0,n,o,t.count);if(t.sparse){const{count:d,indices:h,values:u}=t.sparse;f=new n(f);const m=h.byteOffset||0,g=this.gltf.bufferViews[h.bufferView],p=go(h.componentType),A=this.parseBufferView(h.bufferView),D=this.getTypedArrayFromArrayBuffer(A,g.byteStride,m,p,1,d),B=u.byteOffset||0,v=this.gltf.bufferViews[u.bufferView],U=this.parseBufferView(u.bufferView),y=this.getTypedArrayFromArrayBuffer(U,v.byteStride,B,n,o,d);for(let S=0;S<D.length;S++)f.set(y.slice(S*o,S*o+o),D[S]*o)}return t.computeResult={typedArray:f,arrayType:n,numComponents:o},t.daccessor={data:f,numComponents:o,normalize:a},t.daccessor}getTypedArrayFromArrayBuffer(e,t,a,r,i,n){let o;const l=i*r.BYTES_PER_ELEMENT;if(t&&l!==t){const c=i*n;o=new r(c);for(let f=0;f<n;f++){const d=new r(e,a+f*t,i);for(let h=0;h<i;h++)o[f*i+h]=d[h]}}else o=new r(e,a,n*i);return o}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 a=this.parseBuffer(t.buffer);if(a){const{byteOffset:r,byteLength:i}=t,n=new Uint8Array(a,r||0,i);t.dbufferView=new Uint8Array(n).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 a=t.uri,r=this.gltf.resources[a];r?r.byteLength===t.byteLength?t.dbuffer=this.gltf.resources[a]:console.error(`load gltf resource "${a}" at buffers[${e} failed, ArrayBuffer.byteLength not equals buffer's byteLength]`):console.error(`load gltf resource "${a}" at buffers[${e}] failed`)}else{const a=t.uri.indexOf(this._BASE64_MARKER)+this._BASE64_MARKER.length,r=window.atob(t.uri.substring(a)),i=new Uint8Array(r.length);for(let n=0;n<r.length;n++)i[n]=r.charCodeAt(n);t.dbuffer=i.buffer}return t.dbuffer}getLight(e){return this.gltf.extensions.KHR_lights_punctual.lights[e]}applyNodeExtensions(e,t){let a=e.extensions;a.KHR_lights_punctual&&this.gltf.extensions.KHR_lights_punctual&&(t.light=this.getLight(a.KHR_lights_punctual.light))}}class Rf{magic;version;length}class Qf{chunkLength;chunkType;chunkData}class _o extends it{static format=je.BIN;_gltf;async parseBuffer(e){let t=new Uint8Array(e);t.pos=0;const a=this.parseHeader(t);if(a.magic!=1179937895)return console.error("invalid GLB file"),!1;if(a.version!==2)return console.error(`GLBParser only support glTF 2.0 for now! Received glTF version: ${a.version}`),!1;let r=[];for(;t.pos<t.length;){let d=this.parseChunk(t);r.push(d)}if(r[0].chunkType!=1313821514)return console.error("invalid GLBChunk"),!1;let i="",n=65535,o=r[0].chunkData;for(let d=0;d<o.length;d+=n){let h=o.length-d;h=Math.min(h,n);let u=o.subarray(d,d+h);i+=String.fromCharCode(...u)}let l=JSON.parse(i);this._gltf=new Ns,this._gltf={...this._gltf,...l},this._gltf.resources={};for(let d=0;d<this._gltf.buffers.length;d++){let h=this._gltf.buffers[d];h.isParsed=!0,h.dbuffer=r[d+1].chunkData.buffer}if(this._gltf.images)for(let d=0;d<this._gltf.images.length;d++){let h=this._gltf.images[d];h.name=h.name||"bufferView_"+h.bufferView.toString();const u=this._gltf.bufferViews[h.bufferView],m=this._gltf.buffers[u.buffer];let g=new Uint8Array(m.dbuffer,u.byteOffset,u.byteLength),p=new Blob([g],{type:h.mimeType}),A=new $a;await A.loadFromBlob(p),A.name=h.name,this._gltf.resources[h.name]=A}let c=new Ps,f=await c.parse(this.initUrl,this._gltf,this._gltf.scene);return c.destroy(),f?(this.data=f.rootNode,f.rootNode):null}async parseJsonAndBuffer(e,t){this._gltf=new Ns,this._gltf={...this._gltf,...e},this._gltf.resources={};let a=this._gltf.buffers[0];if(a.isParsed=!0,a.dbuffer=t,this._gltf.images)for(let n=0;n<this._gltf.images.length;n++){let o=this._gltf.images[n];o.name=o.name||"bufferView_"+o.bufferView.toString();const l=this._gltf.bufferViews[o.bufferView],c=this._gltf.buffers[l.buffer];let f=new Uint8Array(c.dbuffer,l.byteOffset,l.byteLength),d=new Blob([f],{type:o.mimeType}),h=new $a;await h.loadFromBlob(d),h.name=o.name,this._gltf.resources[o.name]=h}let r=new Ps,i=await r.parse(this.initUrl,this._gltf,this._gltf.scene);return r.destroy(),i?(this.data=i.rootNode,i.rootNode):null}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}parseHeader(e){let t=e.pos,a=new Rf,r=new Uint32Array(e.buffer,t,3);return e.pos+=r.byteLength,a.magic=r[0],a.version=r[1],a.length=r[2],a}parseChunk(e){let t=e.pos,a=new Qf,r=new Uint32Array(e.buffer,t,2);t=e.pos+=r.byteLength,a.chunkLength=r[0],a.chunkType=r[1],a.chunkData=new Uint8Array(e.buffer,t,a.chunkLength);const i=new Uint8Array(a.chunkLength);for(let n=0;n<a.chunkLength;n++)i[n]=a.chunkData[n];return a.chunkData=i,e.pos+=a.chunkLength,a}}class Tf extends Dt{constructor(){super();let e=new qe("PBRLItShader","PBRLItShader");e.setShaderEntry("VertMain","FragMain"),e.passType=fe.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 J(.75,.75,.75,1)),this.setUniformColor("emissiveColor",new J(0,0,0)),this.setUniformVector4("materialF0",new be(.04,.04,.04,1)),this.setUniformColor("specularColor",new J(.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 J(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this.setUniformFloat("clearcoatIor",1.5),this.setUniformVector4("baseMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("normalMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("emissiveMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("roughnessMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("metallicMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("aoMapOffsetSize",new be(0,0,1,1)),this.baseMap=_.res.whiteTexture,this.normalMap=_.res.normalTexture,this.maskMap=_.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!=_.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 aa extends xt{constructor(){super();let e=new Tf;this.shader=e}clone(){let e=new aa,t=e.shader.getDefaultColorShader(),a=this.shader.getDefaultColorShader();return t.defineValue={...a.defineValue},t.setUniform("shadowBias",a.getUniform("shadowBias")),t.setUniform("baseColor",a.getUniform("baseColor")),t.setUniform("specularColor",a.getUniform("specularColor")),t.setUniform("emissiveColor",a.getUniform("emissiveColor")),t.setUniform("materialF0",a.getUniform("materialF0")),t.setUniform("envIntensity",a.getUniform("envIntensity")),t.setUniform("normalScale",a.getUniform("normalScale")),t.setUniform("roughness",a.getUniform("roughness")),t.setUniform("metallic",a.getUniform("metallic")),t.setUniform("ao",a.getUniform("ao")),t.setUniform("roughness_min",a.getUniform("roughness_min")),t.setUniform("roughness_max",a.getUniform("roughness_max")),t.setUniform("metallic_min",a.getUniform("metallic_min")),t.setUniform("metallic_max",a.getUniform("metallic_max")),t.setUniform("emissiveIntensity",a.getUniform("emissiveIntensity")),t.setUniform("alphaCutoff",a.getUniform("alphaCutoff")),t.setUniform("ior",a.getUniform("ior")),t.setUniform("clearcoatFactor",a.getUniform("clearcoatFactor")),t.setUniform("clearcoatRoughnessFactor",a.getUniform("clearcoatRoughnessFactor")),t.setUniform("clearcoatColor",a.getUniform("clearcoatColor")),t.setUniform("clearcoatWeight",a.getUniform("clearcoatWeight")),t.setUniform("clearcoatIor",a.getUniform("clearcoatIor")),t.setTexture("baseMap",a.getTexture("baseMap")),t.setTexture("normalMap",a.getTexture("normalMap")),t.setTexture("emissiveMap",a.getTexture("emissiveMap")),t.setTexture("aoMap",a.getTexture("aoMap")),t.setTexture("maskMap",a.getTexture("maskMap")),t.setTexture("empty",a.getTexture("empty")),t.setUniform("baseMapOffsetSize",a.getUniform("baseMapOffsetSize")),t.setUniform("normalMapOffsetSize",a.getUniform("normalMapOffsetSize")),t.setUniform("emissiveMapOffsetSize",a.getUniform("emissiveMapOffsetSize")),t.setUniform("roughnessMapOffsetSize",a.getUniform("roughnessMapOffsetSize")),t.setUniform("metallicMapOffsetSize",a.getUniform("metallicMapOffsetSize")),t.setUniform("aoMapOffsetSize",a.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 Ds extends it{static format=je.TEXT;static cloudImageProcessParam="";textData="";source_vertices;source_normals;source_tangents;source_textureCoords;matLibs;geometrys;activeGeo;currentObjectName;currentMaterialName;facesMaterialsIndex;mtl;mtlUrl;async parseString(e){return this.source_vertices=[],this.source_normals=[],this.source_tangents=[],this.source_textureCoords=[],this.currentObjectName="default",this.currentMaterialName="",this.matLibs={},this.geometrys={},this.activeGeo=void 0,this.textData=e,await Promise.all([this.parserOBJ(),this.loadMTL()]),this.parser_mesh(),"null"}applyVector2(e,t,a){e>=0&&t[e]&&t[e].length>0?(a.push(t[e][0]),a.push(-t[e][1])):(a.push(0),a.push(0))}applyVector3(e,t,a){e>=0&&t[e]&&t[e].length>0?(a.push(t[e][0]),a.push(t[e][1]),a.push(t[e][2])):(a.push(0),a.push(0),a.push(0))}applyVector4(e,t,a){a.push(t[e][0]),a.push(t[e][1]),a.push(t[e][2]),a.push(t[e][3])}parseUVIndex(e,t){const a=parseInt(e,10);return a>=0?a-1:t+a}parseVertexIndex(e,t){const a=parseInt(e,10);return a>=0?a-1:t+a}parseNormalIndex(e,t){const a=parseInt(e,10);return a>=0?a-1:t+a}calculateFaceNormal(e,t,a){const r=[t[0]-e[0],t[1]-e[1],t[2]-e[2]],i=[a[0]-e[0],a[1]-e[1],a[2]-e[2]],n=[r[1]*i[2]-r[2]*i[1],r[2]*i[0]-r[0]*i[2],r[0]*i[1]-r[1]*i[0]],o=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);return o>0&&(n[0]/=o,n[1]/=o,n[2]/=o),n}async loadMTL(){let t=await new Rt().loadTxt(this.baseUrl+this.mtlUrl),a=t.data,r,i=a.split(/\r?\n/);for(let c=0;c<i.length;c++){let f=i[c];var n=f.indexOf("#");n!=-1&&(f=f.substring(0,n)),f=f.trim();var o=f.split(/\s+/);o[0]==="newmtl"?(r={name:o[1]},this.matLibs[o[1]]=r):o[0].indexOf("map_")!=-1?(r[o[0]]=o[1],r.textures||(r.textures=[o[o.length-1]]),r.textures.push(o[o.length-1])):o.length==2?r[o[0]]=Number(o[1]):o.length==3?r[o[0]]=[Number(o[1]),Number(o[2])]:o.length==4&&(r[o[0]]=[Number(o[1]),Number(o[2]),Number(o[3])])}const l=[];for(const c in this.matLibs){const f=this.matLibs[c];if(f.textures&&f.textures.length>0)for(let d=0;d<f.textures.length;d++){const h=It.normalizePath(this.baseUrl+f.textures[d]);l.push(_.res.loadTexture(h+Ds.cloudImageProcessParam).catch(u=>(console.error(`Failed to load texture: ${h}`,u),null)))}}return await Promise.all(l),t=null,!0}async load_textures(){}getGeometryKey(e,t){const a=(e??this.currentObjectName??"default")||"default",r=t??this.currentMaterialName??"",i=r.length>0?r:"default";return`${a}::${i}`}ensureActiveGeo(e,t){const a=(e??this.currentObjectName??"default")||"default",r=t??this.currentMaterialName??"",i=this.getGeometryKey(a,r);this.geometrys[i]?this.geometrys[i].source_mat!==r&&(this.geometrys[i].source_mat=r):this.geometrys[i]={type:a,name:i,source_mat:r,source_faces:[]},this.activeGeo=this.geometrys[i]}parserLine(e){var t=e.indexOf("#");if(t!=-1){if(e.indexOf("# object")!=-1){const m=e.split(/\s+/),g=m[1]||"default",p=m[2]||"default";this.currentObjectName=p,this.activeGeo=void 0,this.ensureActiveGeo(p,this.currentMaterialName),this.activeGeo&&(this.activeGeo.type=g)}e=e.substring(0,t)}e=e.trim();var a=e.split(/\s+/);if(a[0]==="v"){var r=[Number(a[1]),Number(a[2]),Number(a[3]),a[4]?1:Number(a[4])];this.source_vertices.push(r)}else if(a[0]==="vt"){var i=[Number(a[1]),Number(a[2]),a[3]?1:Number(a[3])];this.source_textureCoords.push(i)}else if(a[0]==="vn"){var n=[Number(a[1]),Number(a[2]),Number(a[3])];this.source_normals.push(n)}else if(a[0]==="f"){for(var o={indices:[],texture:[],normal:[]},l=1;l<a.length;++l){var c=a[l];if(c.length!==0){var f=c.split("/"),d=f[0]||"",h=f.length>=2&&f[1]||"",u=f.length>=3&&f[2]||"";d.length!==0&&(o.indices.push(d),o.texture.push(h),o.normal.push(u))}}this.ensureActiveGeo(),this.activeGeo.source_faces.push(o)}else a[0]==="usemtl"?(this.currentMaterialName=a[1]||"",this.ensureActiveGeo(this.currentObjectName,this.currentMaterialName)):a[0]==="mtllib"&&(this.mtlUrl=a[1])}async parserOBJ(){let e=this.textData.split(/\r?\n/);for(let t=0;t<e.length;t++){const a=e[t];this.parserLine(a)}return this.textData="",!0}async parser_mesh(){let e=new ne;for(const t in this.geometrys){const a=this.geometrys[t];a.vertex_arr=[],a.normal_arr=[],a.uv_arr=[],a.indeice_arr=[];let r=0;const i=this.source_vertices.length,n=this.source_normals.length,o=this.source_textureCoords.length;for(let m=0;m<a.source_faces.length;m++){const g=a.source_faces[m];let p=this.parseVertexIndex(g.indices[0],i),A=this.parseVertexIndex(g.indices[1],i),D=this.parseVertexIndex(g.indices[2],i);const B=T=>{if(!T||T.length===0)return-1;const j=this.parseNormalIndex(T,n);return Number.isFinite(j)&&j>=0&&j<n?j:-1},v=T=>{if(!T||T.length===0)return-1;const j=this.parseUVIndex(T,o);return Number.isFinite(j)&&j>=0&&j<o?j:-1};let U=B(g.normal[0]),y=B(g.normal[1]),S=B(g.normal[2]);const F=U<0||y<0||S<0;let C=null;F&&p>=0&&A>=0&&D>=0&&this.source_vertices[p]&&this.source_vertices[A]&&this.source_vertices[D]&&(C=this.calculateFaceNormal(this.source_vertices[p],this.source_vertices[A],this.source_vertices[D]));let w=v(g.texture[0]),E=v(g.texture[1]),Q=v(g.texture[2]);if(this.applyVector3(p,this.source_vertices,a.vertex_arr),U>=0?this.applyVector3(U,this.source_normals,a.normal_arr):C?a.normal_arr.push(C[0],C[1],C[2]):a.normal_arr.push(0,0,0),w>=0?this.applyVector2(w,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,this.applyVector3(A,this.source_vertices,a.vertex_arr),y>=0?this.applyVector3(y,this.source_normals,a.normal_arr):C?a.normal_arr.push(C[0],C[1],C[2]):a.normal_arr.push(0,0,0),E>=0?this.applyVector2(E,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,this.applyVector3(D,this.source_vertices,a.vertex_arr),S>=0?this.applyVector3(S,this.source_normals,a.normal_arr):C?a.normal_arr.push(C[0],C[1],C[2]):a.normal_arr.push(0,0,0),Q>=0?this.applyVector2(Q,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,g.indices.length>3){let T=this.parseVertexIndex(g.indices[3],i),j=B(g.normal[3]),ue=v(g.texture[3]),ee=null;(U<0||S<0||j<0)&&p>=0&&D>=0&&T>=0&&this.source_vertices[p]&&this.source_vertices[D]&&this.source_vertices[T]&&(ee=this.calculateFaceNormal(this.source_vertices[p],this.source_vertices[D],this.source_vertices[T])),this.applyVector3(p,this.source_vertices,a.vertex_arr),U>=0?this.applyVector3(U,this.source_normals,a.normal_arr):ee?a.normal_arr.push(ee[0],ee[1],ee[2]):a.normal_arr.push(0,0,0),w>=0?this.applyVector2(w,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,this.applyVector3(D,this.source_vertices,a.vertex_arr),S>=0?this.applyVector3(S,this.source_normals,a.normal_arr):ee?a.normal_arr.push(ee[0],ee[1],ee[2]):a.normal_arr.push(0,0,0),Q>=0?this.applyVector2(Q,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,this.applyVector3(T,this.source_vertices,a.vertex_arr),j>=0?this.applyVector3(j,this.source_normals,a.normal_arr):ee?a.normal_arr.push(ee[0],ee[1],ee[2]):a.normal_arr.push(0,0,0),ue>=0?this.applyVector2(ue,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++}}let l=new Le;l.setIndices(new Uint32Array(a.indeice_arr)),l.setAttribute(G.position,new Float32Array(a.vertex_arr)),l.setAttribute(G.normal,new Float32Array(a.normal_arr)),l.setAttribute(G.uv,new Float32Array(a.uv_arr)),l.setAttribute(G.TEXCOORD_1,new Float32Array(a.uv_arr)),l.addSubGeometry({indexStart:0,indexCount:a.indeice_arr.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let c=new aa;const f=a.source_mat,d=f?this.matLibs[f]:void 0;if(d&&d.map_Kd){const m=It.normalizePath(this.baseUrl+d.map_Kd),g=_.res.getTexture(m+Ds.cloudImageProcessParam);g&&(c.baseMap=g)}let h=new ne,u=h.addComponent(he);u.geometry=l,u.material=c,e.addChild(h)}this.data=e}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}let Mf=`
7432
+ `;class po{static _workerCode;static _workers=new Map;static async apply(e,t){if(!t.extensions)return;const a=t.extensions.KHR_draco_mesh_compression;if(!a)return;let r=this._workers.get(e.gltf);r||(r=new Worker(await this.initDecoder()),this._workers.set(e.gltf,r)),r.postMessage({type:"init",decoderConfig:{}});let i=e.parseBufferView(a.bufferView);if(!i.result){let n=await new Promise((o,l)=>{r.onmessage=c=>{const f=c.data;f.type=="decode"?o(f.result):f.type=="error"&&l(f.error)},r.postMessage({type:"decoder",buffer:i,attributes:a.attributes},[i])});i.result=n}return i.result}static unload(e){let t=this._workers.get(e);t&&(t.terminate(),this._workers.delete(e))}static async initDecoder(){if(!this._workerCode){const e=new Blob([vf,"",`(${vb})()`],{type:"application/javascript"});this._workerCode=URL.createObjectURL(e)}return this._workerCode}}function vb(){let s,e;onmessage=t=>{const a=t.data;switch(a.type){case"init":s=a.decoderConfig,e=new Promise((n,o)=>{s.onModuleLoaded=l=>{n({draco:l})},DracoDecoderModule(s)});break;case"decoder":const r=a.buffer,i=a.attributes;e.then(n=>{const o=n.draco;let l=new o.Decoder,c=new o.DecoderBuffer;c.Init(new Int8Array(r),r.byteLength);let f,d;try{const h=l.GetEncodedGeometryType(c);h==o.TRIANGULAR_MESH?(d=new o.Mesh,f=l.DecodeBufferToMesh(c,d)):self.postMessage(new Error("INVALID_GEOMETRY_TYPE:"+h)),f.ok()||self.postMessage(new Error("DracoDecode:"+f.error_msg()));let u={};for(const m in i){let g=l.GetAttributeByUniqueId(d,i[m]);const p=g.num_components(),D=d.num_points()*p,B=D*Float32Array.BYTES_PER_ELEMENT,v=o.DT_FLOAT32,x=o._malloc(B);l.GetAttributeDataArrayForAllPoints(d,g,v,B,x);const y=new Float32Array(o.HEAPF32.buffer,x,D).slice();o._free(x),u[m]={data:y,numComponents:p,normalize:!1}}{const g=d.num_faces()*3,p=g*4,A=o._malloc(p);l.GetTrianglesUInt32Array(d,p,A);const D=new Uint32Array(o.HEAPF32.buffer,A,g).slice();o._free(A),u.indices={data:D,numComponents:1,normalize:!1}}self.postMessage({type:"decode",result:u})}catch(h){self.postMessage({type:"error",error:h.message})}finally{o.destroy(d),o.destroy(l),o.destroy(c)}});break}}}class xf{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:a,type:r,perspective:i,orthographic:n}=t;if(r==="perspective"&&i){const{aspectRatio:o,yfov:l,zfar:c,znear:f}=i;t.dcamera=Object.assign({},{name:a,type:r,yfov:l,znear:f,aspectRatio:o,zfar:c})}else if(r==="orthographic"&&n){const{xmag:o,ymag:l,zfar:c,znear:f}=n;t.dcamera=Object.assign({},{name:a,type:r,xmag:o,ymag:l,zfar:c,znear:f})}return t.dcamera}errorMiss(e,t){throw new Error(e+t)}}class Ut extends it{static format=je.JSON;_gltf;async parseJson(e){this._gltf=new Ns,this._gltf={...this._gltf,...e},this._gltf.resources={},await Promise.all([this.load_gltf_bin(),this.load_gltf_textures()]);let t=new Ps,a=await t.parse(this.initUrl,this._gltf,this._gltf.scene);return t.destroy(),t=null,a?(this.data=a.rootNode,a.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 a=this._gltf.buffers[t];if(a.uri.substring(0,5)!=="data:"){let r=It.parseUrl(this.baseUrl,a.uri);this.loaderFunctions?.onUrl&&(r=await this.loaderFunctions.onUrl(r));let i=new Rt().loadBinData(r,this.loaderFunctions).then(n=>{this._gltf.resources[a.uri]=n});e.push(i)}}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 a=this._gltf.images[t];if(a.uri){let r=It.parseUrl(this.baseUrl,a.uri);this.loaderFunctions?.onUrl&&(r=await this.loaderFunctions.onUrl(r));let i=new Rt().loadAsyncBitmapTexture(r,this.loaderFunctions).then(n=>{n.name=It.getURLName(a.uri),this._gltf.resources[n.name]=n});e.push(i)}}await Promise.all(e)}}}class Uf{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 a=t.primitives,r=t.extras,i=[];for(let n=0;n<a.length;n++){const o=a[n],{attributes:l,indices:c,material:f,mode:d,name:h,targets:u,morphTargetsRelative:m,extensions:g}=o;let p=t.name;for(let S in l)p+=S;p+=`indices:${c}`,p+=`material:${f}`;const A={attribArrays:{indices:[]},weights:[],defines:[],material:null,drawMode:null,meshName:null,modelName:null,morphTargetsRelative:!1,targetNames:r?r.targetNames:null};let D=!1,B=0,v=!1,x;g&&g.KHR_draco_mesh_compression&&(x=await po.apply(this.subParser,o));for(const S in l){const F=x?x[S]:this.parseAccessor(l[S]);if(F){let C;switch(S){case"POSITION":C=G.position;break;case"NORMAL":C=G.normal,D=!0;break;case"TEXCOORD_0":C=G.uv,B++;break;case"JOINTS_0":C=G.joints0;break;case"JOINTS_1":C=G.joints1,v=!0;break;case"WEIGHTS_0":C=G.weights0;break;case"WEIGHTS_1":C=G.weights1;break;default:C=S}A.attribArrays[C]=F}}if(D&&A.defines.push(Ut.getHasNormalDefine()),B&&A.defines.push(Ut.getTexCoordDefine(B)),v&&A.defines.push(Ut.getJointVec8Define()),c!==void 0){const S=x?x.indices:this.parseAccessor(c);S&&(A.attribArrays.indices=S)}const y=await this.parseMaterial(f);if(y&&(A.material=y,A.defines=A.defines.concat(y.defines)),A.drawMode=d===void 0?4:d,A.meshName=()=>p,A.modelName=t.name||Ut.getModelNameCounter(),u){A.defines.push(Ut.getMorphTargetsDefine(u.length)),A.morphTargetsRelative=!0;let S=!1,F=!1,C=!1;for(let w=0;w<u.length;w++){const E=u[w];Object.keys(E).forEach(Q=>{const T=this.parseAccessor(E[Q]);if(T){let j;switch(Q){case"POSITION":j=la.MORPH_POSITION_PREFIX+w,S=!0;break;case"NORMAL":j=la.MORPH_NORMAL_PREFIX+w,F=!0;break;case"TANGENT":j=la.MORPH_TANGENT_PREFIX+w,C=!0;break;default:j=!1}j?A.attribArrays[j]=T:console.error(`glTF has unsupported morph target attribute ${Q}`)}})}S&&A.defines.push(Ut.getMorphtargetPositionDefine()),F&&A.defines.push(Ut.getMorphtargetNormalDefine()),C&&A.defines.push(Ut.getMorphtargetTangentDefine()),A.weights=t.weights||new Array(u.length).fill(0)}i.push(A)}return t.dprimitives=i,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 yf{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:a,pbrMetallicRoughness:r,normalTexture:i,occlusionTexture:n,emissiveTexture:o,emissiveFactor:l,alphaMode:c,alphaCutoff:f,doubleSided:d,extensions:h}=t;const u={name:a,defines:[],doubleSided:!!d,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(r){const{baseColorFactor:m,metallicFactor:g,roughnessFactor:p,baseColorTexture:A,metallicRoughnessTexture:D}=r;if(Object.assign(u,{baseColorFactor:m||[1,1,1,1],metallicFactor:g===void 0?1:g,roughnessFactor:p===void 0?.5:p}),A){let B=A.extensions;if(B){let x=B.KHR_texture_transform;if(x){let y=new be(x.offset?x.offset[0]:0,x.offset?x.offset[1]:0,x.scale?x.scale[0]:1,x.scale?x.scale[1]:1);u.baseMapOffsetSize=y}}const v=await this.parseTexture(A.index);v?u.baseColorTexture=v:u.baseColorTexture=_.res.redTexture}if(i){let B=i.extensions;if(B){let x=B.KHR_texture_transform;if(x){let y=new be(x.offset?x.offset[0]:0,x.offset?x.offset[1]:0,x.scale?x.scale[0]:1,x.scale?x.scale[1]:1);u.normalMapOffsetSize=y}}const v=await this.parseTexture(i.index);v?u.normalTexture=v:u.normalTexture=_.res.normalTexture}if(D){let B=D.extensions;if(B){let x=B.KHR_texture_transform;if(x){let y=new be(x.offset?x.offset[0]:0,x.offset?x.offset[1]:0,x.scale?x.scale[0]:1,x.scale?x.scale[1]:1);u.roughnessMapOffsetSize=y}}const v=await this.parseTexture(D.index);v?u.metallicRoughnessTexture=v:u.metallicRoughnessTexture=_.res.blackTexture}}else Object.assign(u,{baseColorFactor:[1,1,1,1],metallicFactor:0,roughnessFactor:.5});if(u.baseColorFactor&&u.baseColorFactor[3]<1&&(c=c==="MASK"?"MASK":"BLEND"),c&&c!=="OPAQUE"&&(c==="MASK"&&(u.defines.push(Ut.getAlphaMaskDefine()),u.alphaCutoff=f===void 0?.5:f),c==="BLEND"&&(u.defines.push(Ut.getAlphaBlendDefine()),u.enableBlend=!0)),i){const m=await this.parseTexture(i.index);m?u.normalTexture=m:u.normalTexture=_.res.normalTexture}if(n){const m=await this.parseTexture(n.index);m&&(u.occlusionTexture=m)}if(l&&(u.emissiveFactor=l),o){const m=await this.parseTexture(o.index);m?u.emissiveTexture=m:u.emissiveTexture=_.res.blackTexture}return h&&(u.extensions=h),t.isParsed=!0,t.dmaterial=u,u}async parseTexture(e){return this.subParser.parseTexture(e)}errorMiss(e,t){throw new Error(e+t)}}class Cf{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:a,joints:r,inverseBindMatrices:i,skeleton:n}=t;if(!r)return this.errorMiss("skin.joints",e);t.isParsed=!0,t.dskin=!1;let o={name:a,skeleton:null,inverseBindMatrices:null,joints:r,defines:[Ut.getJointsNumDefine(r.length)]};if(n)o.skeleton=n;else{var l=-1;for(let c=0;c<this.gltf.nodes.length;c++)if(this.gltf.nodes[c].name=="root"){l=c;break}if(l==-1){let c=this.gltf.scenes[this.gltf.scene];l=c.nodes[c.nodes.length-1]}o.skeleton=l}if(o.inverseBindMatrices=la.IDENTITY_INVERSE_BIND_MATRICES,i!==void 0){const c=this.parseAccessor(i);if(c){const f=c.data,d=[];for(let h=0;h<f.length;h+=16)d.push(f.slice(h,h+16));o.inverseBindMatrices=d}else o=null}return t.dskin=o,t.dskin}parseAccessor(e){return this.subParser.parseAccessor(e)}errorMiss(e,t){throw new Error(e+t)}}class Sf{name="";index=0;instanceID="";parent=null;scale=new b;rotation=new se;translation=new b;constructor(e=""){this.name=e}}class mo{index;worldMatrix;constructor(e,t=!1){this.index=e,this.worldMatrix=new R(!t)}}class Ri{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 a=0;a<e.numJoint;a++){let r=new mo(a,t);this._jointsPose[a]=r,this.mJointMatrixIndexTable[a]=r.worldMatrix.index}}buildSkeletonPose(e){let t=new b,a=new se,r=new b,i=new Array(this._skeleton.numJoint);this.time=e[11]>0?e[11]:e[24];for(let n=0;n<this._skeleton.numJoint;n++){let o=12*n*4,l=new Float32Array(e.buffer,e.byteOffset+o,12),c=new R;t.set(l[0],l[1],l[2]),a.set(l[4],l[5],l[6],l[7]),r.set(l[8],l[9],l[10]),Es(a.getEulerAngles(),r,t,c),i[n]=c;let f=new mo(n);const d=this._skeleton.getJointParentIndex(n);if(d<0)f.worldMatrix.copyFrom(c);else{let h=this._jointsPose[d];jc(h.worldMatrix,c,f.worldMatrix)}this._jointsPose[n]=f}}get numJoint(){return this._skeleton.numJoint}get joints(){return this._jointsPose}get jointMatrixIndexTable(){return this.mJointMatrixIndexTable}lerp(e,t,a){if(e&&t)for(let r=0;r<this._jointsPose.length;r++){let i=e._jointsPose[r],n=t._jointsPose[r];this._jointsPose[r].worldMatrix.lerp(i.worldMatrix,n.worldMatrix,a)}else for(let r=0;r<this._jointsPose.length;r++){let i=e._jointsPose[r];this._jointsPose[r].worldMatrix.copyFrom(i.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 Ff extends mt{skeletonAnimation;constructor(e,t){super(),this.type=e,this.time=t}}class hn{name="";_skeleton;_skeletonPoses;_animationClipData;_events;constructor(e,t,a,r){if(this.name=e,this._skeleton=t,this._animationClipData=r,a>0&&r){this._skeletonPoses=new Array(a);let i=12*t.numJoint;for(let n=0;n<a;n++){let o=i*n*4;const l=r.buffer instanceof ArrayBuffer?r.buffer:new Uint8Array(r.buffer).buffer;let c=new Float32Array(l,o,i),f=new Ri(t);f.buildSkeletonPose(c),this._skeletonPoses[n]=f}}}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,a,r){let i=this.getSkeletonPose(e),n=this.getSkeletonPose(t);return r.lerp(i,n,a),r}createSubClip(e,t,a){var r=new hn(e,this._skeleton,0,null);const i=Math.max(Math.floor(t/this.frameRate),0),n=Math.min(Math.floor(a/this.frameRate),this._skeletonPoses.length-1);r._skeletonPoses=this._skeletonPoses.slice(i,n);const o=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,i*o,(n-i)*o),r}addEvent(e,t){this._events||(this._events=new Array),this._events.push(new Ff(e,t))}removeEvent(e){this._events&&(this._events=this._events.filter(t=>t.type!=e))}getEvents(){return this._events}}class Ao{gltf;subParser;constructor(e){this.gltf=e.gltf,this.subParser=e}parse(e){let t=new qo;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 a=new fl;a.clipName=t.name,a.useSkeletonPos=!1,a.useSkeletonScale=!1;for(let r of t.channels){let i=t.samplers[r.sampler];const n=this.subParser.parseAccessor(i.input),o=this.subParser.parseAccessor(i.output);let l=r.target.node,c=r.target.path,f=this.gltf.nodes[l];if(!f||!e.boneMap.has(f.name))continue;let d=e.boneMap.get(f.name);switch(c){case"scale":{let h=new Ur(o.numComponents);h.path="",h.attribute="",h.propertys=h.attribute.split("."),h.preInfinity=0,h.postInfinity=0,h.rotationOrder=0,a.useSkeletonScale=!0,a.scaleCurves.set(d.bonePath,h);for(let u=0;u<n.data.length;u++){const m=n.data[u],g=u*o.numComponents;let p=new as(0);p.time=m;const A=new b().set(o.data[g+0],o.data[g+1],o.data[g+2]);p.split(X.vector3,A,"value"),h.addKeyFrame(p)}}break;case"rotation":{let h=new Ur(o.numComponents);h.path="",h.attribute="",h.propertys=h.attribute.split("."),h.preInfinity=0,h.postInfinity=0,h.rotationOrder=0,a.rotationCurves.set(d.bonePath,h);for(let u=0;u<n.data.length;u++){const m=n.data[u],g=u*o.numComponents;let p=new as(0);p.time=m;const A=new se().set(o.data[g+0],o.data[g+1],o.data[g+2],o.data[g+3]);p.split(X.quaternion,A,"value"),h.addKeyFrame(p)}}break;case"translation":{let h=new Ur(o.numComponents);h.path="",h.attribute="",h.propertys=h.attribute.split("."),h.preInfinity=0,h.postInfinity=0,h.rotationOrder=0,a.useSkeletonPos=!0,a.positionCurves.set(d.bonePath,h);for(let u=0;u<n.data.length;u++){const m=n.data[u],g=u*o.numComponents;let p=new as(0);p.time=m;const A=new b().set(o.data[g+0],o.data[g+1],o.data[g+2]);p.split(X.vector3,A,"value"),h.addKeyFrame(p)}}break}}return a}parseSkeletonAnimationOld(e,t){let a=this.subParser.parseAccessor(t.samplers[0].input),r=a.data.length,i=a.data[1]-a.data[0];a.data[a.data.length-1];let n=12*e.numJoint,o=new Float32Array(n*r);for(var l=0;l<e.numJoint;l++)for(var c=0;c<r;c++){var f=n*c+12*l;o[f+0]=1,o[f+1]=1,o[f+2]=1,o[f+3]=1}for(let g of t.channels){let p=t.samplers[g.sampler];const A=this.subParser.parseAccessor(p.input),D=this.subParser.parseAccessor(p.output);let B=g.target.node,v=g.target.path,x=this.gltf.nodes[B];if(!x)continue;let y=e.getJointByName(x.name);if(y)switch(v){case"scale":if(r*D.numComponents==D.data.length)for(var c=0;c<r;c++){var d=c*D.numComponents,f=n*c+12*y.index;o[f+0]=D.data[d+0],o[f+1]=D.data[d+1],o[f+2]=D.data[d+2],o[f+3]=1}else if(A.data.length==2){let S=0;A.data[0];let F=A.data[1];var h=0*D.numComponents;b.HELP_0.set(D.data[h+0],D.data[h+1],D.data[h+2]);var u=1*D.numComponents;b.HELP_1.set(D.data[u+0],D.data[u+1],D.data[u+2]);for(var c=0;c<r;c++){let w=S/F;b.HELP_2.lerp(b.HELP_0,b.HELP_1,w);var f=n*c+12*y.index;o[f+0]=b.HELP_2.x,o[f+1]=b.HELP_2.y,o[f+2]=b.HELP_2.z,o[f+3]=1,S+=i}}else throw new Error("Unsupported animation sampler interpolation.");break;case"rotation":if(r*D.numComponents==D.data.length)for(var c=0;c<r;c++){var d=c*D.numComponents,f=n*c+12*y.index+4;o[f+0]=D.data[d+0],o[f+1]=D.data[d+1],o[f+2]=D.data[d+2],o[f+3]=D.data[d+3]}else if(A.data.length==2){let S=0;A.data[0];let F=A.data[1];var h=0*D.numComponents;b.HELP_0.set(D.data[h+0],D.data[h+1],D.data[h+2],D.data[h+3]);var u=1*D.numComponents;b.HELP_1.set(D.data[u+0],D.data[u+1],D.data[u+2],D.data[u+3]);for(var c=0;c<r;c++){let Q=S/F;b.HELP_2.lerp(b.HELP_0,b.HELP_1,Q);var f=n*c+12*y.index+4;o[f+0]=b.HELP_2.x,o[f+1]=b.HELP_2.y,o[f+2]=b.HELP_2.z,o[f+3]=b.HELP_2.w,S+=i}}else throw new Error("Unsupported animation sampler interpolation.");break;case"translation":if(r*D.numComponents==D.data.length)for(var c=0;c<r;c++){var d=c*D.numComponents,f=n*c+12*y.index+8;o[f+0]=D.data[d+0],o[f+1]=D.data[d+1],o[f+2]=D.data[d+2],o[f+3]=A.data[c*A.numComponents]}else if(A.data.length==2){let S=0;A.data[0];let F=A.data[1];var h=0*D.numComponents;b.HELP_0.set(D.data[h+0],D.data[h+1],D.data[h+2]);var u=1*D.numComponents;b.HELP_1.set(D.data[u+0],D.data[u+1],D.data[u+2]);for(var c=0;c<r;c++){let Q=S/F;b.HELP_2.lerp(b.HELP_0,b.HELP_1,Q);var f=n*c+12*y.index+8;o[f+0]=b.HELP_2.x,o[f+1]=b.HELP_2.y,o[f+2]=b.HELP_2.z,o[f+3]=S,S+=i}}else throw new Error("Unsupported animation sampler interpolation.");break}}return new hn(t.name,e,r,o)}buildSkeleton(e,t,a){let r=this.gltf.nodes[a];r.name||(r.name="Bone"+e.count);let i=new Ko;if(i.boneName=r.name,i.bonePath=t?t.bonePath+"/"+r.name:r.name,i.parentBoneName=t?t.boneName:"",i.boneID=e.count++,i.parentBoneID=t?t.boneID:-1,i.instanceID="",i.parentInstanceID="",i.s=new b(1,1,1),r.scale&&i.s.set(r.scale[0],r.scale[1],r.scale[2]),i.q=new se,r.rotation&&i.q.set(r.rotation[0],r.rotation[1],r.rotation[2],r.rotation[3]),i.t=new b,r.translation&&i.t.set(r.translation[0],r.translation[1],r.translation[2]),e.boneData.push(i),e.boneMap.set(i.boneName,i),r.children)for(let n of r.children)this.buildSkeleton(e,i,n)}buildSkeletonOld(e,t,a,r=0){let i=this.gltf.nodes[a];i.name||(i.name="Node_"+a);let n=new Sf(i.name);if(n.parent=t,i.scale&&n.scale.set(i.scale[0],i.scale[1],i.scale[2]),i.rotation&&n.rotation.set(i.rotation[0],i.rotation[1],i.rotation[2],i.rotation[3]),i.translation&&n.translation.set(i.translation[0],i.translation[1],i.translation[2]),e.addJoint(n),i.children)for(let o of i.children)this.buildSkeletonOld(e,n,o,r+1)}}class Do{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 Qi extends et{name;size=1;lightData;dirFix=1;bindOnChange;needUpdateShadow=!0;realTimeShadow=!0;_castGI=!1;_castShadow=!1;_iesProfiles;constructor(){super()}init(){this.transform.object3D.bound=new Ce(new b,new b),this.lightData=new ws,this.lightData.lightMatrixIndex=this.transform.worldMatrix.index}onChange(){this.bindOnChange&&this.bindOnChange(),this.transform.object3D.bound.setFromCenterAndSize(this.transform.worldPosition,new b(this.size,this.size,this.size)),this._castGI&&(q.instance.state.giLightingChange=!0),this._castShadow?(this.needUpdateShadow=!0,Zt.addShadowLight(this)):Zt.removeShadowLight(this),this.transform.view3D&&_.renderJobs&&_.renderJobs.get(this.transform.view3D).reflectionRenderer&&_.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(),q.instance.addLight(this.transform.scene3D,this)}onDisable(){this.onChange(),q.instance.removeLight(this.transform.scene3D,this),Zt.removeShadowLight(this)}set iesProfiles(e){this._iesProfiles=e,this.lightData.iesIndex=e.index,Ra.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?Do.add(this):Do.remove(this),this._castGI=e,e&&this.onChange()}get direction(){return this.lightData.direction}destroy(e){this.bindOnChange=null,q.instance.removeLight(this.transform.scene3D,this),Zt.removeShadowLight(this),this.transform.eventDispatcher.removeEventListener(Yt.ROTATION_ONCHANGE,this.onRotChange,this),this.transform.eventDispatcher.removeEventListener(Yt.SCALE_ONCHANGE,this.onScaleChange,this),super.destroy(e)}}var xb=Object.getOwnPropertyDescriptor,Ub=(s,e,t,a)=>{for(var r=a>1?void 0:a?xb(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Ti=class extends Qi{shadowCamera;constructor(){super()}init(){super.init(),this.object3D.name==""&&(this.object3D.name="DirectionLight_"+Wt()),this.radius=Number.MAX_SAFE_INTEGER,this.lightData.lightType=ht.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(){}};Ti=Ub([Lt(Ti,"DirectLight")],Ti);var yb=Object.getOwnPropertyDescriptor,Cb=(s,e,t,a)=>{for(var r=a>1?void 0:a?yb(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let li=class extends Qi{constructor(){super()}init(){super.init(),this.lightData.lightType=ht.PointLight,this.object3D.name==""&&(this.object3D.name="PointLight"+Wt())}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){}};li=Cb([Lt(li,"PointLight")],li);var Sb=Object.getOwnPropertyDescriptor,Fb=(s,e,t,a)=>{for(var r=a>1?void 0:a?Sb(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Mi=class extends Qi{constructor(){super()}init(){super.init(),this.lightData.lightType=ht.SpotLight,this.object3D.name==""&&(this.object3D.name="SpotLight"+Wt())}get innerAngle(){return this.lightData.innerAngle/this.lightData.outerAngle*100}set innerAngle(s){this.lightData.innerAngle=Be(s,0,100)/100*this.lightData.outerAngle,this.onChange()}get outerAngle(){return this.lightData.outerAngle*ei*2}set outerAngle(s){this.lightData.outerAngle=Be(s,1,179)*_t*.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=ht.SpotLight}onUpdate(){}onGraphic(s){}debug(){}debugDraw(s){}};Mi=Fb([Lt(Mi,"SpotLight")],Mi);class kf{static apply(e,t,a){let r=t.extensions;if(r&&r.KHR_materials_clearcoat){a.shader.getDefaultColorShader().setDefine("USE_CLEARCOAT",!0);let i=r.KHR_materials_clearcoat;"clearcoatFactor"in i&&(t.clearcoatFactor=i.clearcoatFactor,a.clearcoatFactor=t.clearcoatFactor),"clearcoatRoughnessFactor"in i&&(t.clearcoatRoughnessFactor=i.clearcoatRoughnessFactor,a.clearcoatRoughnessFactor=t.clearcoatRoughnessFactor)}}}class Ef{static apply(e,t,a){let r=t.extensions;r&&r.KHR_materials_emissive_strength?(a.emissiveIntensity=r.KHR_materials_emissive_strength.emissiveStrength,a.emissiveMap==_.res.blackTexture&&(a.emissiveMap=_.res.whiteTexture)):a.emissiveIntensity=1}}class wf{static apply(e,t,a){let r=t.extensions;r&&r.KHR_materials_unlit?a.supportLight=!1:a.supportLight=!0}}class If{gltf;subParser;_testCount=8;_hasCastShadow=!1;constructor(e){this.gltf=e.gltf,this.subParser=e}async convertNodeToObject3D(e,t){const a=new ne;if(a.name=e.name,a[la.GLTF_NODE_INDEX_PROPERTY]=e.nodeId,e.nodeObj=a,e.matrix&&(e.translation=[0,0,0],e.rotation=[0,0,0,1],e.scale=[1,1,1]),e.translation&&(a.transform.x=e.translation[0],a.transform.y=e.translation[1],a.transform.z=e.translation[2]),e.rotation){let r=new se;r.setFromArray(e.rotation),a.transform.localRotQuat=r}return e.scale&&(a.transform.scaleX=e.scale[0],a.transform.scaleY=e.scale[1],a.transform.scaleZ=e.scale[2]),t.addChild(a),e.light&&this.convertLight(e,a),e.primitives&&this.convertprimitives(e,a),e.skeleton&&this.convertSkeletonAnim(a,e.skeleton),a}convertSkeletonAnim(e,t){let a=this.subParser.parseSkeleton(t.skeleton);_.res.addObj(a.name,a);let r=[];for(let n=0;n<this.gltf.animations.length;n++){let o=this.gltf.animations[n];o.name||(o.name=n.toString());let l=this.subParser.parseSkeletonAnimation(a,o);r.push(l)}let i=e.addComponent(er);i.avatar=a.name,i.clips=r}convertLight(e,t){switch(e.light.type){case"directional":let a=t.addComponent(Ti);t.name=e.light.name,a.intensity=e.light.intensity*.1,a.radius=Number.MAX_SAFE_INTEGER,a.dirFix=-1,this._hasCastShadow||(this._hasCastShadow=!0,a.castShadow=this._hasCastShadow),a.lightColor=e.light.color?new J(e.light.color[0],e.light.color[1],e.light.color[2]):new J(1,1,1,1),a.debug();break;case"point":if(this._testCount>0){let i=t.addComponent(li);i.name=e.light.name,i.intensity=e.light.intensity?e.light.intensity*8*2:1,i.radius=8,i.at=2,i.range=e.light.range?e.light.range:8,i.lightColor=e.light.color?new J(e.light.color[0],e.light.color[1],e.light.color[2]):new J(1,1,1,1)}this._testCount--;break;case"spot":let r=t.addComponent(Mi);r.name=e.light.name,r.intensity=e.light.intensity*5,r.radius=1,r.dirFix=-1,r.at=2,r.range=e.light.range?e.light.range:8,r.outerAngle=e.light.spot.outerConeAngle*ei,r.lightColor=e.light.color?new J(e.light.color[0],e.light.color[1],e.light.color[2]):new J(1,1,1,1);break}}convertprimitives(e,t){for(let a=0;a<e.primitives.length;a++){const r=e.primitives[a];r.modelName;let i=r.material;i.name==null&&(i.name=Wt());let n,o=`matkey_${i.name}`;if(i&&this.gltf.resources[o])n=this.gltf.resources[o];else{let u=i;const m=u?.extensions?.KHR_materials_unlit!==void 0;let g=m?new vt:new aa;if(n=g,this.gltf.resources[o]=g,g.name=i.name,u){const{baseColorTexture:p,baseColorFactor:A,metallicFactor:D,roughnessFactor:B,doubleSided:v,metallicRoughnessTexture:x,normalTexture:y,occlusionTexture:S,emissiveTexture:F,emissiveFactor:C,enableBlend:w,alphaCutoff:E}=u;let Q=g=this.applyMaterialExtensions(u,g);if(m){const T=Q;T.baseColor=new J(A[0],A[1],A[2],A[3]),p&&(T.baseMap=p),Q.doubleSide=v,"enableBlend"in u&&(u.enableBlend?(u.defines?.includes("ALPHA_BLEND")?Q.blendMode=De.ALPHA:Q.blendMode=De.NORMAL,Q.castShadow=!1):Q.blendMode=De.NONE),"alphaCutoff"in u&&E>0&&E<1&&(Q.setUniformFloat("alphaCutoff",E),Q.blendMode=De.NORMAL,Q.transparent=!0)}else if("enableBlend"in u&&(u.enableBlend?(u.defines?.includes("ALPHA_BLEND")?Q.blendMode=De.ALPHA:Q.blendMode=De.NORMAL,Q.castShadow=!1):Q.blendMode=De.NONE),"alphaCutoff"in u&&E>0&&E<1&&(Q.setUniformFloat("alphaCutoff",E),Q.blendMode=De.NORMAL,Q.transparent=!0),u.baseMapOffsetSize&&Q.setUniformVector4("baseMapOffsetSize",u.baseMapOffsetSize),u.normalMapOffsetSize&&Q.setUniformVector4("normalMapOffsetSize",u.normalMapOffsetSize),u.emissiveMapOffsetSize&&Q.setUniformVector4("emissiveMapOffsetSize",u.emissiveMapOffsetSize),u.roughnessMapOffsetSize&&Q.setUniformVector4("roughnessMapOffsetSize",u.roughnessMapOffsetSize),u.metallicMapOffsetSize&&Q.setUniformVector4("metallicMapOffsetSize",u.metallicMapOffsetSize),u.aoMapOffsetSize&&Q.setUniformVector4("aoMapOffsetSize",u.aoMapOffsetSize),Q.setUniformColor("baseColor",new J(A[0],A[1],A[2],A[3])),Q.setUniformFloat("roughness",B??1),Q.setUniformFloat("metallic",D??0),Q.setUniformFloat("ao",1),Q.doubleSide=v,p&&Q.setTexture("baseMap",p),y&&Q.setTexture("normalMap",y),x?(Q.setTexture("maskMap",x),Q.shader.setDefine("USE_ROUGHNESS_G",!0),Q.shader.setDefine("USE_METALLIC_B",!0)):(Q.shader.setDefine("USE_ROUGHNESS_G",!1),Q.shader.setDefine("USE_METALLIC_B",!1)),F&&Q.setTexture("emissiveMap",F),C&&(C[0]>0||C[1]>0||C[2]>0)){Q.shader.getTexture("emissiveMap")||Q.shader.setTexture("emissiveMap",_.res.whiteTexture),Q.shader.setDefine("USE_EMISSIVEMAP",!0),Q.setUniformColor("emissiveColor",new J(C[0],C[1],C[2],C[3])),Q.blendMode!=De.NONE&&(Q.blendMode=De.ADD);let T=n.getUniformFloat("emissiveIntensity");(!T||T<=0)&&n.setUniformFloat("emissiveIntensity",1)}}}const{attribArrays:l,modelName:c,drawMode:f}=r;let d;if(!l.indices.data){let u=[],m=l.position.data.length/3/3;for(let g=0;g<m;g++){let p=g*3;u.push(p+2),u.push(p+0),u.push(p+1)}l.indices={data:new Uint8Array(u),normalize:!1,numComponents:1}}let h=!l.normal;if(h){let u=[],m=l.position.data.length/3;for(let g=0;g<m;g++)u.push(0),u.push(0),u.push(0);l.normal={data:new Float32Array(u),normalize:!1,numComponents:3}}if(l.indices.data&&l.indices.data.length>3){let u=r.meshName();this.gltf.resources[u]&&(d=this.gltf.resources[u]);const m=new ne;if(m.name=c+a,this.gltf.animations&&l[G.joints0]!=null){d||=this.createGeometryBase(c,l,r,e.skin),this.gltf.resources[u]=d,h&&l.indices?.data&&l.indices.data.length>0&&d.computeNormals();let g=this.gltf.nodes[e.skin.skeleton];g.dnode&&g.dnode.nodeObj?this.convertSkeletonAnim(t,e.skin):g.dnode.skeleton=e.skin;let p=m.addComponent(Dr);p.geometry=d,p.material=n}else{d||=this.createGeometryBase(c,l,r),this.gltf.resources[u]=d,h&&l.indices?.data&&l.indices.data.length>0&&d.computeNormals(),d.hasAttribute(G.joints0)&&d.vertexAttributeMap.delete(G.joints0);let g=m.addComponent(he);g.castShadow=!0,g.castGI=!0,g.geometry=d,g.material=n}e.skin&&e.skin.defines,t.addChild(m)}}}createGeometryBase(e,t,a,r){"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 i=new Le;if(i.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)),a.morphTargetsRelative){let l=new tl,c=a.targetNames;if(c&&c.length>0){l.shapeNames=[],l.shapeIndexs=[];for(let f=0;f<c.length;f++)l.shapeNames.push(c[f]),l.shapeIndexs.push(f)}l.vertexCount=t.position.data.length/3,l.blendCount=l.shapeNames.length,l.blendShapePropertyDatas=[],l.blendShapeMap=new Map;for(let f=0;f<l.blendCount;f++){let d=new el;d.shapeName=l.shapeNames[f],d.shapeIndex=l.shapeIndexs[f],d.frameCount=1,d.blendPositionList=t[la.MORPH_POSITION_PREFIX+f].data,d.blendNormalList=t[la.MORPH_NORMAL_PREFIX+f].data,l.blendShapePropertyDatas.push(d),l.blendShapeMap.set(d.shapeName,d)}i.blendShapeData=l}i.morphTargetsRelative=a.morphTargetsRelative;let n=a.targetNames;if(n&&n.length>0){let l=i.morphTargetDictionary={};for(let c=0;c<n.length;c++)l[n[c]]=c}if(i.morphTargetDictionary){let l=t.position.data.length/3,c=new Float32Array(l);for(let f=0;f<l;f++)c[f]=f;t.vIndex={data:c,normalize:!1,numComponents:1}}for(const l in t){let c=t[l];i.setAttribute(l,c.data)}if(r){i.skinNames=new Array(r.joints.length);for(let l=0;l<r.joints.length;l++){const c=r.joints[l],f=this.gltf.nodes[c];i.skinNames[l]=f.name}i.bindPose=new Array(r.inverseBindMatrices.length);for(let l=0;l<r.inverseBindMatrices.length;l++){const c=r.inverseBindMatrices[l];let f=new R;f.rawData.set(c),i.bindPose[l]=f}}let o=i.getAttribute(G.indices);return i.addSubGeometry({indexStart:0,indexCount:o.data.length,vertexStart:0,index:0,vertexCount:0,firstStart:0,topology:0}),i}applyMaterialExtensions(e,t){return e.extensions&&(kf.apply(this.gltf,e,t),wf.apply(this.gltf,e,t),Ef.apply(this.gltf,e,t)),t}parseSkinJoints(e){let t=[];for(let a of e.joints){let r=this.gltf.nodes[a];t.push(r.name)}return t}}class Ps{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,a){this.gltf=t,this.initUrl=e;const{version:r,generator:i}=this.gltf.asset;if(this._generator=i,r!=="2.0")return console.error(`GLTFParser only support glTF 2.0 for now! Received glTF version: ${this.version}`),!1;const n={nodes:await this.parseScene(a),animations:this.parseAnimations(),name:this.currentSceneName};return await this.convertToNode(n)}destroy(){po.unload(this.gltf),this.gltf=null}async parseScene(e){const t=e||this.gltf.scene||0,a=this.gltf.scenes[t];if(typeof a>"u")return this.errorMiss("scene",t);this.currentSceneName=a.name||"GLTF_NO_NAME_SCENE";const r=[],i=a.nodes;for(let n=0;n<i.length;n++){const o=await this.parseNode(i[n]);o&&r.push(o)}return r}async parseNode(e){const t=this.gltf.nodes[e];if(!t)return this.errorMiss("node",e);if(t.isParsed)return t.dnode;const{name:a,matrix:r,translation:i,rotation:n,scale:o}=t,l={name:a,matrix:r,translation:i,rotation:n,scale:o,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 c=this.parseSkin(t.skin);c&&(l.skin=c)}if(l.children=[],t.children)for(let c=0;c<t.children.length;c++)l.children.push(await this.parseNode(t.children[c]));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 xf(this.gltf)),this._cameraParser.parse(e)}async parseMesh(e){return this._meshParser||(this._meshParser=new Uf(this)),this._meshParser.parse(e)}async parseTexture(e){let t=this.gltf.textures[e];if(t&&!t.dtexture){if(t&&t.source!=null){let a=this.gltf.images[t.source];if(a.uri){let r=a.uri;r=It.getURLName(r),t.dtexture=this.gltf.resources[r]}else if(a.bufferView){let r=this.parseBufferView(a.bufferView),i=new $a,n=new Blob([r],{type:a.mimeType});await i.loadFromBlob(n),t.dtexture=i}else t.dtexture=this.gltf.resources[a.name]}else if(t.name){let a=It.getURLName(t.name);t.dtexture=this.gltf.resources[a]}}return t.dtexture||console.log("miss texture , please check texture!",e,t),t.dtexture}async parseMaterial(e){return this._materialParser||(this._materialParser=new yf(this)),this._materialParser.parse(e)}parseAnimations(){return[]}async parseObject3D(e,t){return this._converter||(this._converter=new If(this)),this._converter.convertNodeToObject3D(e,t)}parseSkeleton(e){return this._skeletonParser||(this._skeletonParser=new Ao(this)),this._skeletonParser.parse(e)}parseSkeletonAnimation(e,t){return this._skeletonParser||(this._skeletonParser=new Ao(this)),this._skeletonParser.parseSkeletonAnimation(e,t)}async traverse(e,t){for(let a=0;a<t.length;a++){const r=await this.parseObject3D(t[a],e);await this.traverse(r,t[a].children)}}async convertToNode(e){const t=new ne;t.name=e.name;const a=e.nodes;e.animations;const r=[],i=[];return await this.traverse(t,a),{rootNode:t,textures:r,animations:void 0,cameras:i}}parseSkin(e){return this._skinParser||(this._skinParser=new Cf(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 a=!!t.normalized,r=this.gltf.bufferViews[t.bufferView],i=r&&r.byteStride,n=go(t.componentType);let o=1;switch(t.type){case"SCALAR":o=1;break;case"VEC2":o=2;break;case"VEC3":o=3;break;case"VEC4":case"MAT2":o=4;break;case"MAT3":o=9;break;case"MAT4":o=16;break;default:o=0;break}if(o===0)return console.error(`glTF has unknown data type in accessor: ${t.type}`),!1;const l=o*n.BYTES_PER_ELEMENT;let c;if(r!==void 0){if(c=this.parseBufferView(t.bufferView),!c)return t.daccessor}else c=new Uint8Array(l*t.count).buffer;let f=this.getTypedArrayFromArrayBuffer(c,i,t.byteOffset||0,n,o,t.count);if(t.sparse){const{count:d,indices:h,values:u}=t.sparse;f=new n(f);const m=h.byteOffset||0,g=this.gltf.bufferViews[h.bufferView],p=go(h.componentType),A=this.parseBufferView(h.bufferView),D=this.getTypedArrayFromArrayBuffer(A,g.byteStride,m,p,1,d),B=u.byteOffset||0,v=this.gltf.bufferViews[u.bufferView],x=this.parseBufferView(u.bufferView),y=this.getTypedArrayFromArrayBuffer(x,v.byteStride,B,n,o,d);for(let S=0;S<D.length;S++)f.set(y.slice(S*o,S*o+o),D[S]*o)}return t.computeResult={typedArray:f,arrayType:n,numComponents:o},t.daccessor={data:f,numComponents:o,normalize:a},t.daccessor}getTypedArrayFromArrayBuffer(e,t,a,r,i,n){let o;const l=i*r.BYTES_PER_ELEMENT;if(t&&l!==t){const c=i*n;o=new r(c);for(let f=0;f<n;f++){const d=new r(e,a+f*t,i);for(let h=0;h<i;h++)o[f*i+h]=d[h]}}else o=new r(e,a,n*i);return o}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 a=this.parseBuffer(t.buffer);if(a){const{byteOffset:r,byteLength:i}=t,n=new Uint8Array(a,r||0,i);t.dbufferView=new Uint8Array(n).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 a=t.uri,r=this.gltf.resources[a];r?r.byteLength===t.byteLength?t.dbuffer=this.gltf.resources[a]:console.error(`load gltf resource "${a}" at buffers[${e} failed, ArrayBuffer.byteLength not equals buffer's byteLength]`):console.error(`load gltf resource "${a}" at buffers[${e}] failed`)}else{const a=t.uri.indexOf(this._BASE64_MARKER)+this._BASE64_MARKER.length,r=window.atob(t.uri.substring(a)),i=new Uint8Array(r.length);for(let n=0;n<r.length;n++)i[n]=r.charCodeAt(n);t.dbuffer=i.buffer}return t.dbuffer}getLight(e){return this.gltf.extensions.KHR_lights_punctual.lights[e]}applyNodeExtensions(e,t){let a=e.extensions;a.KHR_lights_punctual&&this.gltf.extensions.KHR_lights_punctual&&(t.light=this.getLight(a.KHR_lights_punctual.light))}}class Rf{magic;version;length}class Qf{chunkLength;chunkType;chunkData}class _o extends it{static format=je.BIN;_gltf;async parseBuffer(e){let t=new Uint8Array(e);t.pos=0;const a=this.parseHeader(t);if(a.magic!=1179937895)return console.error("invalid GLB file"),!1;if(a.version!==2)return console.error(`GLBParser only support glTF 2.0 for now! Received glTF version: ${a.version}`),!1;let r=[];for(;t.pos<t.length;){let d=this.parseChunk(t);r.push(d)}if(r[0].chunkType!=1313821514)return console.error("invalid GLBChunk"),!1;let i="",n=65535,o=r[0].chunkData;for(let d=0;d<o.length;d+=n){let h=o.length-d;h=Math.min(h,n);let u=o.subarray(d,d+h);i+=String.fromCharCode(...u)}let l=JSON.parse(i);this._gltf=new Ns,this._gltf={...this._gltf,...l},this._gltf.resources={};for(let d=0;d<this._gltf.buffers.length;d++){let h=this._gltf.buffers[d];h.isParsed=!0,h.dbuffer=r[d+1].chunkData.buffer}if(this._gltf.images)for(let d=0;d<this._gltf.images.length;d++){let h=this._gltf.images[d];h.name=h.name||"bufferView_"+h.bufferView.toString();const u=this._gltf.bufferViews[h.bufferView],m=this._gltf.buffers[u.buffer];let g=new Uint8Array(m.dbuffer,u.byteOffset,u.byteLength),p=new Blob([g],{type:h.mimeType}),A=new $a;await A.loadFromBlob(p),A.name=h.name,this._gltf.resources[h.name]=A}let c=new Ps,f=await c.parse(this.initUrl,this._gltf,this._gltf.scene);return c.destroy(),f?(this.data=f.rootNode,f.rootNode):null}async parseJsonAndBuffer(e,t){this._gltf=new Ns,this._gltf={...this._gltf,...e},this._gltf.resources={};let a=this._gltf.buffers[0];if(a.isParsed=!0,a.dbuffer=t,this._gltf.images)for(let n=0;n<this._gltf.images.length;n++){let o=this._gltf.images[n];o.name=o.name||"bufferView_"+o.bufferView.toString();const l=this._gltf.bufferViews[o.bufferView],c=this._gltf.buffers[l.buffer];let f=new Uint8Array(c.dbuffer,l.byteOffset,l.byteLength),d=new Blob([f],{type:o.mimeType}),h=new $a;await h.loadFromBlob(d),h.name=o.name,this._gltf.resources[o.name]=h}let r=new Ps,i=await r.parse(this.initUrl,this._gltf,this._gltf.scene);return r.destroy(),i?(this.data=i.rootNode,i.rootNode):null}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}parseHeader(e){let t=e.pos,a=new Rf,r=new Uint32Array(e.buffer,t,3);return e.pos+=r.byteLength,a.magic=r[0],a.version=r[1],a.length=r[2],a}parseChunk(e){let t=e.pos,a=new Qf,r=new Uint32Array(e.buffer,t,2);t=e.pos+=r.byteLength,a.chunkLength=r[0],a.chunkType=r[1],a.chunkData=new Uint8Array(e.buffer,t,a.chunkLength);const i=new Uint8Array(a.chunkLength);for(let n=0;n<a.chunkLength;n++)i[n]=a.chunkData[n];return a.chunkData=i,e.pos+=a.chunkLength,a}}class Tf extends Dt{constructor(){super();let e=new qe("PBRLItShader","PBRLItShader");e.setShaderEntry("VertMain","FragMain"),e.passType=fe.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 J(.75,.75,.75,1)),this.setUniformColor("emissiveColor",new J(0,0,0)),this.setUniformVector4("materialF0",new be(.04,.04,.04,1)),this.setUniformColor("specularColor",new J(.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 J(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this.setUniformFloat("clearcoatIor",1.5),this.setUniformVector4("baseMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("normalMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("emissiveMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("roughnessMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("metallicMapOffsetSize",new be(0,0,1,1)),this.setUniformVector4("aoMapOffsetSize",new be(0,0,1,1)),this.baseMap=_.res.whiteTexture,this.normalMap=_.res.normalTexture,this.maskMap=_.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!=_.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 aa extends xt{constructor(){super();let e=new Tf;this.shader=e}clone(){let e=new aa,t=e.shader.getDefaultColorShader(),a=this.shader.getDefaultColorShader();return t.defineValue={...a.defineValue},t.setUniform("shadowBias",a.getUniform("shadowBias")),t.setUniform("baseColor",a.getUniform("baseColor")),t.setUniform("specularColor",a.getUniform("specularColor")),t.setUniform("emissiveColor",a.getUniform("emissiveColor")),t.setUniform("materialF0",a.getUniform("materialF0")),t.setUniform("envIntensity",a.getUniform("envIntensity")),t.setUniform("normalScale",a.getUniform("normalScale")),t.setUniform("roughness",a.getUniform("roughness")),t.setUniform("metallic",a.getUniform("metallic")),t.setUniform("ao",a.getUniform("ao")),t.setUniform("roughness_min",a.getUniform("roughness_min")),t.setUniform("roughness_max",a.getUniform("roughness_max")),t.setUniform("metallic_min",a.getUniform("metallic_min")),t.setUniform("metallic_max",a.getUniform("metallic_max")),t.setUniform("emissiveIntensity",a.getUniform("emissiveIntensity")),t.setUniform("alphaCutoff",a.getUniform("alphaCutoff")),t.setUniform("ior",a.getUniform("ior")),t.setUniform("clearcoatFactor",a.getUniform("clearcoatFactor")),t.setUniform("clearcoatRoughnessFactor",a.getUniform("clearcoatRoughnessFactor")),t.setUniform("clearcoatColor",a.getUniform("clearcoatColor")),t.setUniform("clearcoatWeight",a.getUniform("clearcoatWeight")),t.setUniform("clearcoatIor",a.getUniform("clearcoatIor")),t.setTexture("baseMap",a.getTexture("baseMap")),t.setTexture("normalMap",a.getTexture("normalMap")),t.setTexture("emissiveMap",a.getTexture("emissiveMap")),t.setTexture("aoMap",a.getTexture("aoMap")),t.setTexture("maskMap",a.getTexture("maskMap")),t.setTexture("empty",a.getTexture("empty")),t.setUniform("baseMapOffsetSize",a.getUniform("baseMapOffsetSize")),t.setUniform("normalMapOffsetSize",a.getUniform("normalMapOffsetSize")),t.setUniform("emissiveMapOffsetSize",a.getUniform("emissiveMapOffsetSize")),t.setUniform("roughnessMapOffsetSize",a.getUniform("roughnessMapOffsetSize")),t.setUniform("metallicMapOffsetSize",a.getUniform("metallicMapOffsetSize")),t.setUniform("aoMapOffsetSize",a.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 Ds extends it{static format=je.TEXT;static cloudImageProcessParam="";textData="";source_vertices;source_normals;source_tangents;source_textureCoords;matLibs;geometrys;activeGeo;currentObjectName;currentMaterialName;facesMaterialsIndex;mtl;mtlUrl;async parseString(e){return this.source_vertices=[],this.source_normals=[],this.source_tangents=[],this.source_textureCoords=[],this.currentObjectName="default",this.currentMaterialName="",this.matLibs={},this.geometrys={},this.activeGeo=void 0,this.textData=e,await Promise.all([this.parserOBJ(),this.loadMTL()]),this.parser_mesh(),"null"}applyVector2(e,t,a){e>=0&&t[e]&&t[e].length>0?(a.push(t[e][0]),a.push(-t[e][1])):(a.push(0),a.push(0))}applyVector3(e,t,a){e>=0&&t[e]&&t[e].length>0?(a.push(t[e][0]),a.push(t[e][1]),a.push(t[e][2])):(a.push(0),a.push(0),a.push(0))}applyVector4(e,t,a){a.push(t[e][0]),a.push(t[e][1]),a.push(t[e][2]),a.push(t[e][3])}parseUVIndex(e,t){const a=parseInt(e,10);return a>=0?a-1:t+a}parseVertexIndex(e,t){const a=parseInt(e,10);return a>=0?a-1:t+a}parseNormalIndex(e,t){const a=parseInt(e,10);return a>=0?a-1:t+a}calculateFaceNormal(e,t,a){const r=[t[0]-e[0],t[1]-e[1],t[2]-e[2]],i=[a[0]-e[0],a[1]-e[1],a[2]-e[2]],n=[r[1]*i[2]-r[2]*i[1],r[2]*i[0]-r[0]*i[2],r[0]*i[1]-r[1]*i[0]],o=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);return o>0&&(n[0]/=o,n[1]/=o,n[2]/=o),n}async loadMTL(){let t=await new Rt().loadTxt(this.baseUrl+this.mtlUrl),a=t.data,r,i=a.split(/\r?\n/);for(let c=0;c<i.length;c++){let f=i[c];var n=f.indexOf("#");n!=-1&&(f=f.substring(0,n)),f=f.trim();var o=f.split(/\s+/);o[0]==="newmtl"?(r={name:o[1]},this.matLibs[o[1]]=r):o[0].indexOf("map_")!=-1?(r[o[0]]=o[1],r.textures||(r.textures=[o[o.length-1]]),r.textures.push(o[o.length-1])):o.length==2?r[o[0]]=Number(o[1]):o.length==3?r[o[0]]=[Number(o[1]),Number(o[2])]:o.length==4&&(r[o[0]]=[Number(o[1]),Number(o[2]),Number(o[3])])}const l=[];for(const c in this.matLibs){const f=this.matLibs[c];if(f.textures&&f.textures.length>0)for(let d=0;d<f.textures.length;d++){const h=It.normalizePath(this.baseUrl+f.textures[d]);l.push(_.res.loadTexture(h+Ds.cloudImageProcessParam).catch(u=>(console.error(`Failed to load texture: ${h}`,u),null)))}}return await Promise.all(l),t=null,!0}async load_textures(){}getGeometryKey(e,t){const a=(e??this.currentObjectName??"default")||"default",r=t??this.currentMaterialName??"",i=r.length>0?r:"default";return`${a}::${i}`}ensureActiveGeo(e,t){const a=(e??this.currentObjectName??"default")||"default",r=t??this.currentMaterialName??"",i=this.getGeometryKey(a,r);this.geometrys[i]?this.geometrys[i].source_mat!==r&&(this.geometrys[i].source_mat=r):this.geometrys[i]={type:a,name:i,source_mat:r,source_faces:[]},this.activeGeo=this.geometrys[i]}parserLine(e){var t=e.indexOf("#");if(t!=-1){if(e.indexOf("# object")!=-1){const m=e.split(/\s+/),g=m[1]||"default",p=m[2]||"default";this.currentObjectName=p,this.activeGeo=void 0,this.ensureActiveGeo(p,this.currentMaterialName),this.activeGeo&&(this.activeGeo.type=g)}e=e.substring(0,t)}e=e.trim();var a=e.split(/\s+/);if(a[0]==="v"){var r=[Number(a[1]),Number(a[2]),Number(a[3]),a[4]?1:Number(a[4])];this.source_vertices.push(r)}else if(a[0]==="vt"){var i=[Number(a[1]),Number(a[2]),a[3]?1:Number(a[3])];this.source_textureCoords.push(i)}else if(a[0]==="vn"){var n=[Number(a[1]),Number(a[2]),Number(a[3])];this.source_normals.push(n)}else if(a[0]==="f"){for(var o={indices:[],texture:[],normal:[]},l=1;l<a.length;++l){var c=a[l];if(c.length!==0){var f=c.split("/"),d=f[0]||"",h=f.length>=2&&f[1]||"",u=f.length>=3&&f[2]||"";d.length!==0&&(o.indices.push(d),o.texture.push(h),o.normal.push(u))}}this.ensureActiveGeo(),this.activeGeo.source_faces.push(o)}else a[0]==="usemtl"?(this.currentMaterialName=a[1]||"",this.ensureActiveGeo(this.currentObjectName,this.currentMaterialName)):a[0]==="mtllib"&&(this.mtlUrl=a[1])}async parserOBJ(){let e=this.textData.split(/\r?\n/);for(let t=0;t<e.length;t++){const a=e[t];this.parserLine(a)}return this.textData="",!0}async parser_mesh(){let e=new ne;for(const t in this.geometrys){const a=this.geometrys[t];a.vertex_arr=[],a.normal_arr=[],a.uv_arr=[],a.indeice_arr=[];let r=0;const i=this.source_vertices.length,n=this.source_normals.length,o=this.source_textureCoords.length;for(let m=0;m<a.source_faces.length;m++){const g=a.source_faces[m];let p=this.parseVertexIndex(g.indices[0],i),A=this.parseVertexIndex(g.indices[1],i),D=this.parseVertexIndex(g.indices[2],i);const B=T=>{if(!T||T.length===0)return-1;const j=this.parseNormalIndex(T,n);return Number.isFinite(j)&&j>=0&&j<n?j:-1},v=T=>{if(!T||T.length===0)return-1;const j=this.parseUVIndex(T,o);return Number.isFinite(j)&&j>=0&&j<o?j:-1};let x=B(g.normal[0]),y=B(g.normal[1]),S=B(g.normal[2]);const F=x<0||y<0||S<0;let C=null;F&&p>=0&&A>=0&&D>=0&&this.source_vertices[p]&&this.source_vertices[A]&&this.source_vertices[D]&&(C=this.calculateFaceNormal(this.source_vertices[p],this.source_vertices[A],this.source_vertices[D]));let w=v(g.texture[0]),E=v(g.texture[1]),Q=v(g.texture[2]);if(this.applyVector3(p,this.source_vertices,a.vertex_arr),x>=0?this.applyVector3(x,this.source_normals,a.normal_arr):C?a.normal_arr.push(C[0],C[1],C[2]):a.normal_arr.push(0,0,0),w>=0?this.applyVector2(w,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,this.applyVector3(A,this.source_vertices,a.vertex_arr),y>=0?this.applyVector3(y,this.source_normals,a.normal_arr):C?a.normal_arr.push(C[0],C[1],C[2]):a.normal_arr.push(0,0,0),E>=0?this.applyVector2(E,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,this.applyVector3(D,this.source_vertices,a.vertex_arr),S>=0?this.applyVector3(S,this.source_normals,a.normal_arr):C?a.normal_arr.push(C[0],C[1],C[2]):a.normal_arr.push(0,0,0),Q>=0?this.applyVector2(Q,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,g.indices.length>3){let T=this.parseVertexIndex(g.indices[3],i),j=B(g.normal[3]),ue=v(g.texture[3]),ee=null;(x<0||S<0||j<0)&&p>=0&&D>=0&&T>=0&&this.source_vertices[p]&&this.source_vertices[D]&&this.source_vertices[T]&&(ee=this.calculateFaceNormal(this.source_vertices[p],this.source_vertices[D],this.source_vertices[T])),this.applyVector3(p,this.source_vertices,a.vertex_arr),x>=0?this.applyVector3(x,this.source_normals,a.normal_arr):ee?a.normal_arr.push(ee[0],ee[1],ee[2]):a.normal_arr.push(0,0,0),w>=0?this.applyVector2(w,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,this.applyVector3(D,this.source_vertices,a.vertex_arr),S>=0?this.applyVector3(S,this.source_normals,a.normal_arr):ee?a.normal_arr.push(ee[0],ee[1],ee[2]):a.normal_arr.push(0,0,0),Q>=0?this.applyVector2(Q,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++,this.applyVector3(T,this.source_vertices,a.vertex_arr),j>=0?this.applyVector3(j,this.source_normals,a.normal_arr):ee?a.normal_arr.push(ee[0],ee[1],ee[2]):a.normal_arr.push(0,0,0),ue>=0?this.applyVector2(ue,this.source_textureCoords,a.uv_arr):a.uv_arr.push(0,0),a.indeice_arr[r]=r++}}let l=new Le;l.setIndices(new Uint32Array(a.indeice_arr)),l.setAttribute(G.position,new Float32Array(a.vertex_arr)),l.setAttribute(G.normal,new Float32Array(a.normal_arr)),l.setAttribute(G.uv,new Float32Array(a.uv_arr)),l.setAttribute(G.TEXCOORD_1,new Float32Array(a.uv_arr)),l.addSubGeometry({indexStart:0,indexCount:a.indeice_arr.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let c=new aa;const f=a.source_mat,d=f?this.matLibs[f]:void 0;if(d&&d.map_Kd){const m=It.normalizePath(this.baseUrl+d.map_Kd),g=_.res.getTexture(m+Ds.cloudImageProcessParam);g&&(c.baseMap=g)}let h=new ne,u=h.addComponent(he);u.geometry=l,u.material=c,e.addChild(h)}this.data=e}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}let Mf=`
7433
7433
  struct ImageSize {
7434
7434
  srcWidth: i32,
7435
7435
  srcHeight: i32,
@@ -7827,7 +7827,7 @@ else if (typeof exports === 'object')
7827
7827
  var oc:vec4<f32> = multiSample(worldDirection, blurSetting.x);
7828
7828
  textureStore(outputBuffer0, coord, i32(GlobalInvocationID.z), oc);
7829
7829
  }
7830
- `;class Wf{static configBuffer=null;static quaternionBuffer=null;static blurSettingBuffer=null;static pipeline;static importantSample(e,t,a,r){const i=I.device;this.pipeline==null&&(this.pipeline=i.createComputePipeline({layout:"auto",compute:{module:i.createShaderModule({code:zf}),entryPoint:"main"}}));const n=this.pipeline,o=16;this.configBuffer||=i.createBuffer({size:o,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i.queue.writeBuffer(this.configBuffer,0,new Uint32Array([e.width,e.height,t,t]));const l=24;if(!this.quaternionBuffer){this.quaternionBuffer=i.createBuffer({size:l*4*6,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});let p=new Float32Array(24);for(let A=0;A<6;A++){let D=vo.getRotationToFace(A);p[A*4+0]=D.x,p[A*4+1]=D.y,p[A*4+2]=D.z,p[A*4+3]=D.w}i.queue.writeBuffer(this.quaternionBuffer,0,p)}this.blurSettingBuffer||=i.createBuffer({size:o,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i.queue.writeBuffer(this.blurSettingBuffer,0,new Float32Array([a,0,0,0]));const c=e.erpTexture;let f=[{binding:0,resource:{buffer:this.configBuffer,size:16}},{binding:1,resource:{buffer:this.quaternionBuffer,size:l*4}},{binding:2,resource:c.gpuSampler},{binding:3,resource:c.getGPUView()}],d=[{binding:0,resource:{buffer:this.blurSettingBuffer,size:16}},{binding:1,resource:r}];const h=i.createBindGroup({layout:n.getBindGroupLayout(0),entries:f}),u=i.createBindGroup({layout:n.getBindGroupLayout(1),entries:d}),m=k.beginCommandEncoder(),g=m.beginComputePass();g.setPipeline(n),g.setBindGroup(0,h),g.setBindGroup(1,u),g.dispatchWorkgroups(t/8,t/8,6),g.end(),k.endCommandEncoder(m)}}class Co{faceTextureRef;_texture;constructor(e){this._texture=e,this.faceTextureRef={}}uploadTexture(e,t){let a=this.getGpuSource(e);return Xt.makeTextureCube(t,this._texture.width,a.v),this}uploadErpTexture(e){let t=this.getGpuSource(0);return Xt.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,a=3){let r=this._texture.width/Math.pow(2,e),i={width:r,height:r,erpTexture:t},n=(e+1)/this._texture.mipmapCount;n=Math.pow(n,a);let o=this.getGpuSource(e);Wf.importantSample(i,r,n,o.v)}}class Os extends Vs{_url;_faceData;constructor(){super(),this.useMipmap=!0,this.format=oe.rgba16float,this.isHDRTexture=!0,this._faceData=new Co(this)}createFromHDRData(e,t){let a=new Te(t.width,t.height,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),r=new Float32Array(t.array);return Xt.convertRGBE2RGBA(a,r),this.createFromTexture(e,a),this}createFromTexture(e,t){this.width=this.height=e,this.textureBindingLayout.viewDimension="cube";let a=this.width;for(this.mipmapCount=1;a>16;)a/=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=I.device.createSampler(this),this._faceData.uploadErpTexture(t),this}async load(e,t){return this._url=e,(await new Rt().load(e,yo,t)).getCubeTexture()}}function Jf(s){return new TextDecoder().decode(s)}class Ni{buffer;binOffset;binLength;_header;get header(){return this._header}constructor(e,t,a,r){this.buffer=e,this.binOffset=t+a,this.binLength=r;let i=null;if(a!==0){const n=new Uint8Array(e,t,a);i=JSON.parse(Jf(n))}else i={};this._header=i}getKeys(){return Object.keys(this._header)}getData(e,t,a=null,r=null){const i=this._header;if(!(e in i))return null;const n=i[e];if(n instanceof Object){if(Array.isArray(n))return n;{const{buffer:o,binOffset:l,binLength:c}=this,f=n.byteOffset||0,d=n.type||r,h=n.componentType||a;if("type"in n&&r&&n.type!==r)throw new Error("FeatureTable: Specified type does not match expected type.");let u;switch(d){case"SCALAR":u=1;break;case"VEC2":u=2;break;case"VEC3":u=3;break;case"VEC4":u=4;break;default:throw new Error(`FeatureTable : Feature type not provided for "${e}".`)}let m;const g=l+f,p=t*u;switch(h){case"BYTE":m=new Int8Array(o,g,p);break;case"UNSIGNED_BYTE":m=new Uint8Array(o,g,p);break;case"SHORT":m=new Int16Array(o,g,p);break;case"UNSIGNED_SHORT":m=new Uint16Array(o,g,p);break;case"INT":m=new Int32Array(o,g,p);break;case"UNSIGNED_INT":m=new Uint32Array(o,g,p);break;case"FLOAT":m=new Float32Array(o,g,p);break;case"DOUBLE":m=new Float64Array(o,g,p);break;default:throw new Error(`FeatureTable : Feature component type not provided for "${e}".`)}if(g+p*m.BYTES_PER_ELEMENT>l+c)throw new Error("FeatureTable: Feature data read outside binary body length.");return m}}else return n}destroy(){this.buffer=null,this._header=null,this.binOffset=null,this.binLength=null}}class Ls extends Ni{batchSize;constructor(e,t,a,r,i){super(e,a,r,i),this.batchSize=t}getData(e,t=null,a=null){return super.getData(e,this.batchSize,t,a)}}function ci(s){let e;if(s instanceof DataView?e=s:e=new DataView(s),String.fromCharCode(e.getUint8(0))==="{")return null;let t="";for(let a=0;a<4;a++)t+=String.fromCharCode(e.getUint8(a));return t}class jf{async parse(e){const t=new DataView(e),a=ci(t);console.assert(a==="b3dm");const r=t.getUint32(4,!0);console.assert(r===1);const i=t.getUint32(8,!0);console.assert(i===e.byteLength);const n=t.getUint32(12,!0),o=t.getUint32(16,!0),l=t.getUint32(20,!0),c=t.getUint32(24,!0),f=28,d=new Ni(e,f,n,o),h=f+n+o,u=new Ls(e,d.getData("BATCH_LENGTH"),h,l,c),m=h+l+c,g=new Uint8Array(e,m,i-m);return{version:r,featureTable:d,batchTable:u,glbBytes:g}}}class rr extends jf{adjustmentTransform;gltfBuffer;static tempMatrix;constructor(){super(),this.adjustmentTransform=new R().identity(),rr.tempMatrix||=new R().identity()}async parse(e){const t=await super.parse(e);this.gltfBuffer=t.glbBytes.slice().buffer;let r=await new ko().parseBinary(this.gltfBuffer),{batchTable:i,featureTable:n}=t;const o=n.getData("RTC_CENTER");o&&(r.x+=o[0],r.y+=o[1],r.z+=o[2]);let l=r.getComponent(Yt);l.updateWorldMatrix();let c=rr.tempMatrix;c.compose(l.localPosition,l.localRotQuat,l.localScale),c.multiply(this.adjustmentTransform);let f=c.decompose(oa.QUATERNION);return l.localRotQuat.copyFrom(f[1]),l.localRotQuat=l.localRotQuat,l.localPosition.copyFrom(f[0]),l.localPosition=l.localPosition,l.localScale.copyFrom(f[2]),l.localScale=l.localScale,l.updateWorldMatrix(),r.batchTable=i,r.featureTable=n,r}static decodeText(e){if(typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let a=0,r=e.length;a<r;a++)t+=String.fromCharCode(e[a]);try{return decodeURIComponent(escape(t))}catch{return t}}}class So extends it{static format=je.BIN;async parseBuffer(e){let t=new rr;this.userData&&(t.adjustmentTransform=this.userData),this.data=await t.parse(e)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}const Zf="glTF",Pi=12,Yf={JSON:1313821514,BIN:5130562},Fo={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 Xf{name;content;body;header;constructor(e){this.name=Fo.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,Pi);if(this.header={magic:rr.decodeText(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Zf)throw new Error("GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("GLTFLoader: Legacy binary file detected.");const a=this.header.length-Pi,r=new DataView(e,Pi);let i=0;for(;i<a;){const n=r.getUint32(i,!0);i+=4;const o=r.getUint32(i,!0);if(i+=4,o===Yf.JSON){const l=new Uint8Array(e,Pi+i,n);this.content=rr.decodeText(l)}else if(o===Yf.BIN){const l=Pi+i;this.body=e.slice(l,l+n)}i+=n}if(this.content===null)throw new Error("GLTFLoader: JSON content not found.")}}class ko{_binary;async parseBinary(e){this._binary=e;const t=rr.decodeText(new Uint8Array(this._binary,0,4)),a={};let r,i;if(t===Zf){try{i=a[Fo.KHR_BINARY_GLTF]=new Xf(this._binary)}catch{return}r=a[Fo.KHR_BINARY_GLTF].content}else r=rr.decodeText(new Uint8Array(this._binary));const n=JSON.parse(r);return await this.parseGLB(n,i.body)}async parseGLB(e,t){return await new _o().parseJsonAndBuffer(e,t)}}class Hf{async parse(e){const t=new DataView(e),a=ci(t);console.assert(a==="i3dm");const r=t.getUint32(4,!0);console.assert(r===1);const i=t.getUint32(8,!0);console.assert(i===e.byteLength);const n=t.getUint32(12,!0),o=t.getUint32(16,!0),l=t.getUint32(20,!0),c=t.getUint32(24,!0);t.getUint32(28,!0);const f=32,d=new Ni(e,f,n,o),h=f+n+o,u=new Ls(e,d.getData("INSTANCES_LENGTH"),h,l,c),m=h+l+c,g=new Uint8Array(e,m,i-m);return{version:r,featureTable:d,batchTable:u,glbBytes:g}}}class Kf extends ne{_geometry;_material;_instanceList;constructor(e,t,a){super(),this._geometry=e,this._material=t,this._instanceList=[];for(let r=0;r<a;r++){let i,n=new ne;i=n.addComponent(he),i.geometry=this._geometry,i.material=this._material,this.addChild(n),this._instanceList.push(n)}}setMatrixAt(e,t){let a=this._instanceList[e],r=t.decompose(oa.QUATERNION),i=a.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}}class Ea extends Hf{static tempFwd;static tempUp;static tempRight;static tempPos;static tempQuat;static tempSca;static tempMat;adjustmentTransform;_gltfBuffer;constructor(){super(),Ea.tempFwd||=new b,Ea.tempUp||=new b,Ea.tempRight||=new b,Ea.tempPos||=new b,Ea.tempQuat||=new se,Ea.tempSca||=new b,Ea.tempMat||=new R,this.adjustmentTransform=new R().identity()}async parse(e){const t=await super.parse(e);this._gltfBuffer=t.glbBytes.slice().buffer;let r=await new ko().parseBinary(this._gltfBuffer),{batchTable:i,featureTable:n}=t;const o=this.adjustmentTransform,l=n.getData("INSTANCES_LENGTH"),c=n.getData("POSITION",l,"FLOAT","VEC3"),f=n.getData("NORMAL_UP",l,"FLOAT","VEC3"),d=n.getData("NORMAL_RIGHT",l,"FLOAT","VEC3"),h=n.getData("SCALE_NON_UNIFORM",l,"FLOAT","VEC3"),u=n.getData("SCALE",l,"FLOAT","SCALAR"),m=new Map,g=[];r.traverse(D=>{let B;if(B=D?D.getComponent(he):null,B){const{geometry:v,material:U}=B,y=new Kf(v,U,l);y.localPosition=y.localPosition.copy(D.localPosition),y.localRotation=y.localRotation.copy(D.localRotation),y.localScale=y.localScale.copy(D.localScale),g.push(y),m.set(D,y)}});const p=new b;for(let D=0;D<l;D++)p.x+=c[D*3+0]/l,p.y+=c[D*3+1]/l,p.z+=c[D*3+2]/l;m.forEach((D,B)=>{const v=B.parent?B.parentObject:null;v&&(v.removeChild(B),v.addChild(D),D.transform.updateWorldMatrix(),D.transform.worldMatrix.transformVector4(p,D.localPosition))});const A=Ea;for(let D=0;D<l;D++){A.tempMat.identity(),A.tempPos.set(c[D*3+0]-p.x,c[D*3+1]-p.y,c[D*3+2]-p.z),f?(A.tempUp.set(f[D*3+0],f[D*3+1],f[D*3+2]),A.tempRight.set(d[D*3+0],d[D*3+1],d[D*3+2]),A.tempRight.crossProduct(A.tempUp,A.tempFwd).normalize(),A.tempMat.makeBasis(A.tempRight,A.tempUp,A.tempFwd),A.tempQuat.setFromRotationMatrix(A.tempMat)):A.tempQuat.set(0,0,0,1),u?A.tempSca.setScalar(u[D]):h?A.tempSca.set(h[D*3+0],h[D*3+1],h[D*3+2]):A.tempSca.set(1,1,1),A.tempMat.compose(A.tempPos,A.tempQuat,A.tempSca),A.tempMat.multiplyMatrices(A.tempMat,o);for(let B=0,v=g.length;B<v;B++)g[B].setMatrixAt(D,A.tempMat)}return r.batchTable=i,r.featureTable=n,r}}class Eo extends it{static format=je.BIN;async parseBuffer(e){let t=new Ea;t.adjustmentTransform=this.userData,this.data=await t.parse(e)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}class Gs extends Vs{_faceData;_url;get ldrImageUrl(){return this._url}constructor(){super(),this.useMipmap=!0,this.format=oe.rgba16float,this._faceData=new Co(this)}async load(e,t){this._url=e;let a=new $a(!1);return await a.load(e,t),this.createFromLDRTexture(a),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 a=this.width;for(this.mipmapCount=1;a>16;)a/=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=I.device.createSampler(this),this._faceData.uploadErpTexture(t),this}}let qf=`
7830
+ `;class Wf{static configBuffer=null;static quaternionBuffer=null;static blurSettingBuffer=null;static pipeline;static importantSample(e,t,a,r){const i=I.device;this.pipeline==null&&(this.pipeline=i.createComputePipeline({layout:"auto",compute:{module:i.createShaderModule({code:zf}),entryPoint:"main"}}));const n=this.pipeline,o=16;this.configBuffer||=i.createBuffer({size:o,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i.queue.writeBuffer(this.configBuffer,0,new Uint32Array([e.width,e.height,t,t]));const l=24;if(!this.quaternionBuffer){this.quaternionBuffer=i.createBuffer({size:l*4*6,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});let p=new Float32Array(24);for(let A=0;A<6;A++){let D=vo.getRotationToFace(A);p[A*4+0]=D.x,p[A*4+1]=D.y,p[A*4+2]=D.z,p[A*4+3]=D.w}i.queue.writeBuffer(this.quaternionBuffer,0,p)}this.blurSettingBuffer||=i.createBuffer({size:o,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i.queue.writeBuffer(this.blurSettingBuffer,0,new Float32Array([a,0,0,0]));const c=e.erpTexture;let f=[{binding:0,resource:{buffer:this.configBuffer,size:16}},{binding:1,resource:{buffer:this.quaternionBuffer,size:l*4}},{binding:2,resource:c.gpuSampler},{binding:3,resource:c.getGPUView()}],d=[{binding:0,resource:{buffer:this.blurSettingBuffer,size:16}},{binding:1,resource:r}];const h=i.createBindGroup({layout:n.getBindGroupLayout(0),entries:f}),u=i.createBindGroup({layout:n.getBindGroupLayout(1),entries:d}),m=k.beginCommandEncoder(),g=m.beginComputePass();g.setPipeline(n),g.setBindGroup(0,h),g.setBindGroup(1,u),g.dispatchWorkgroups(t/8,t/8,6),g.end(),k.endCommandEncoder(m)}}class Co{faceTextureRef;_texture;constructor(e){this._texture=e,this.faceTextureRef={}}uploadTexture(e,t){let a=this.getGpuSource(e);return Xt.makeTextureCube(t,this._texture.width,a.v),this}uploadErpTexture(e){let t=this.getGpuSource(0);return Xt.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,a=3){let r=this._texture.width/Math.pow(2,e),i={width:r,height:r,erpTexture:t},n=(e+1)/this._texture.mipmapCount;n=Math.pow(n,a);let o=this.getGpuSource(e);Wf.importantSample(i,r,n,o.v)}}class Os extends Vs{_url;_faceData;constructor(){super(),this.useMipmap=!0,this.format=oe.rgba16float,this.isHDRTexture=!0,this._faceData=new Co(this)}createFromHDRData(e,t){let a=new Te(t.width,t.height,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),r=new Float32Array(t.array);return Xt.convertRGBE2RGBA(a,r),this.createFromTexture(e,a),this}createFromTexture(e,t){this.width=this.height=e,this.textureBindingLayout.viewDimension="cube";let a=this.width;for(this.mipmapCount=1;a>16;)a/=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=I.device.createSampler(this),this._faceData.uploadErpTexture(t),this}async load(e,t){return this._url=e,(await new Rt().load(e,yo,t)).getCubeTexture()}}function Jf(s){return new TextDecoder().decode(s)}class Ni{buffer;binOffset;binLength;_header;get header(){return this._header}constructor(e,t,a,r){this.buffer=e,this.binOffset=t+a,this.binLength=r;let i=null;if(a!==0){const n=new Uint8Array(e,t,a);i=JSON.parse(Jf(n))}else i={};this._header=i}getKeys(){return Object.keys(this._header)}getData(e,t,a=null,r=null){const i=this._header;if(!(e in i))return null;const n=i[e];if(n instanceof Object){if(Array.isArray(n))return n;{const{buffer:o,binOffset:l,binLength:c}=this,f=n.byteOffset||0,d=n.type||r,h=n.componentType||a;if("type"in n&&r&&n.type!==r)throw new Error("FeatureTable: Specified type does not match expected type.");let u;switch(d){case"SCALAR":u=1;break;case"VEC2":u=2;break;case"VEC3":u=3;break;case"VEC4":u=4;break;default:throw new Error(`FeatureTable : Feature type not provided for "${e}".`)}let m;const g=l+f,p=t*u;switch(h){case"BYTE":m=new Int8Array(o,g,p);break;case"UNSIGNED_BYTE":m=new Uint8Array(o,g,p);break;case"SHORT":m=new Int16Array(o,g,p);break;case"UNSIGNED_SHORT":m=new Uint16Array(o,g,p);break;case"INT":m=new Int32Array(o,g,p);break;case"UNSIGNED_INT":m=new Uint32Array(o,g,p);break;case"FLOAT":m=new Float32Array(o,g,p);break;case"DOUBLE":m=new Float64Array(o,g,p);break;default:throw new Error(`FeatureTable : Feature component type not provided for "${e}".`)}if(g+p*m.BYTES_PER_ELEMENT>l+c)throw new Error("FeatureTable: Feature data read outside binary body length.");return m}}else return n}destroy(){this.buffer=null,this._header=null,this.binOffset=null,this.binLength=null}}class Ls extends Ni{batchSize;constructor(e,t,a,r,i){super(e,a,r,i),this.batchSize=t}getData(e,t=null,a=null){return super.getData(e,this.batchSize,t,a)}}function ci(s){let e;if(s instanceof DataView?e=s:e=new DataView(s),String.fromCharCode(e.getUint8(0))==="{")return null;let t="";for(let a=0;a<4;a++)t+=String.fromCharCode(e.getUint8(a));return t}class jf{async parse(e){const t=new DataView(e),a=ci(t);console.assert(a==="b3dm");const r=t.getUint32(4,!0);console.assert(r===1);const i=t.getUint32(8,!0);console.assert(i===e.byteLength);const n=t.getUint32(12,!0),o=t.getUint32(16,!0),l=t.getUint32(20,!0),c=t.getUint32(24,!0),f=28,d=new Ni(e,f,n,o),h=f+n+o,u=new Ls(e,d.getData("BATCH_LENGTH"),h,l,c),m=h+l+c,g=new Uint8Array(e,m,i-m);return{version:r,featureTable:d,batchTable:u,glbBytes:g}}}class rr extends jf{adjustmentTransform;gltfBuffer;static tempMatrix;constructor(){super(),this.adjustmentTransform=new R().identity(),rr.tempMatrix||=new R().identity()}async parse(e){const t=await super.parse(e);this.gltfBuffer=t.glbBytes.slice().buffer;let r=await new ko().parseBinary(this.gltfBuffer),{batchTable:i,featureTable:n}=t;const o=n.getData("RTC_CENTER");o&&(r.x+=o[0],r.y+=o[1],r.z+=o[2]);let l=r.getComponent(Yt);l.updateWorldMatrix();let c=rr.tempMatrix;c.compose(l.localPosition,l.localRotQuat,l.localScale),c.multiply(this.adjustmentTransform);let f=c.decompose(oa.QUATERNION);return l.localRotQuat.copyFrom(f[1]),l.localRotQuat=l.localRotQuat,l.localPosition.copyFrom(f[0]),l.localPosition=l.localPosition,l.localScale.copyFrom(f[2]),l.localScale=l.localScale,l.updateWorldMatrix(),r.batchTable=i,r.featureTable=n,r}static decodeText(e){if(typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let a=0,r=e.length;a<r;a++)t+=String.fromCharCode(e[a]);try{return decodeURIComponent(escape(t))}catch{return t}}}class So extends it{static format=je.BIN;async parseBuffer(e){let t=new rr;this.userData&&(t.adjustmentTransform=this.userData),this.data=await t.parse(e)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}const Zf="glTF",Pi=12,Yf={JSON:1313821514,BIN:5130562},Fo={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 Xf{name;content;body;header;constructor(e){this.name=Fo.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,Pi);if(this.header={magic:rr.decodeText(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Zf)throw new Error("GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("GLTFLoader: Legacy binary file detected.");const a=this.header.length-Pi,r=new DataView(e,Pi);let i=0;for(;i<a;){const n=r.getUint32(i,!0);i+=4;const o=r.getUint32(i,!0);if(i+=4,o===Yf.JSON){const l=new Uint8Array(e,Pi+i,n);this.content=rr.decodeText(l)}else if(o===Yf.BIN){const l=Pi+i;this.body=e.slice(l,l+n)}i+=n}if(this.content===null)throw new Error("GLTFLoader: JSON content not found.")}}class ko{_binary;async parseBinary(e){this._binary=e;const t=rr.decodeText(new Uint8Array(this._binary,0,4)),a={};let r,i;if(t===Zf){try{i=a[Fo.KHR_BINARY_GLTF]=new Xf(this._binary)}catch{return}r=a[Fo.KHR_BINARY_GLTF].content}else r=rr.decodeText(new Uint8Array(this._binary));const n=JSON.parse(r);return await this.parseGLB(n,i.body)}async parseGLB(e,t){return await new _o().parseJsonAndBuffer(e,t)}}class Hf{async parse(e){const t=new DataView(e),a=ci(t);console.assert(a==="i3dm");const r=t.getUint32(4,!0);console.assert(r===1);const i=t.getUint32(8,!0);console.assert(i===e.byteLength);const n=t.getUint32(12,!0),o=t.getUint32(16,!0),l=t.getUint32(20,!0),c=t.getUint32(24,!0);t.getUint32(28,!0);const f=32,d=new Ni(e,f,n,o),h=f+n+o,u=new Ls(e,d.getData("INSTANCES_LENGTH"),h,l,c),m=h+l+c,g=new Uint8Array(e,m,i-m);return{version:r,featureTable:d,batchTable:u,glbBytes:g}}}class Kf extends ne{_geometry;_material;_instanceList;constructor(e,t,a){super(),this._geometry=e,this._material=t,this._instanceList=[];for(let r=0;r<a;r++){let i,n=new ne;i=n.addComponent(he),i.geometry=this._geometry,i.material=this._material,this.addChild(n),this._instanceList.push(n)}}setMatrixAt(e,t){let a=this._instanceList[e],r=t.decompose(oa.QUATERNION),i=a.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}}class Ea extends Hf{static tempFwd;static tempUp;static tempRight;static tempPos;static tempQuat;static tempSca;static tempMat;adjustmentTransform;_gltfBuffer;constructor(){super(),Ea.tempFwd||=new b,Ea.tempUp||=new b,Ea.tempRight||=new b,Ea.tempPos||=new b,Ea.tempQuat||=new se,Ea.tempSca||=new b,Ea.tempMat||=new R,this.adjustmentTransform=new R().identity()}async parse(e){const t=await super.parse(e);this._gltfBuffer=t.glbBytes.slice().buffer;let r=await new ko().parseBinary(this._gltfBuffer),{batchTable:i,featureTable:n}=t;const o=this.adjustmentTransform,l=n.getData("INSTANCES_LENGTH"),c=n.getData("POSITION",l,"FLOAT","VEC3"),f=n.getData("NORMAL_UP",l,"FLOAT","VEC3"),d=n.getData("NORMAL_RIGHT",l,"FLOAT","VEC3"),h=n.getData("SCALE_NON_UNIFORM",l,"FLOAT","VEC3"),u=n.getData("SCALE",l,"FLOAT","SCALAR"),m=new Map,g=[];r.traverse(D=>{let B;if(B=D?D.getComponent(he):null,B){const{geometry:v,material:x}=B,y=new Kf(v,x,l);y.localPosition=y.localPosition.copy(D.localPosition),y.localRotation=y.localRotation.copy(D.localRotation),y.localScale=y.localScale.copy(D.localScale),g.push(y),m.set(D,y)}});const p=new b;for(let D=0;D<l;D++)p.x+=c[D*3+0]/l,p.y+=c[D*3+1]/l,p.z+=c[D*3+2]/l;m.forEach((D,B)=>{const v=B.parent?B.parentObject:null;v&&(v.removeChild(B),v.addChild(D),D.transform.updateWorldMatrix(),D.transform.worldMatrix.transformVector4(p,D.localPosition))});const A=Ea;for(let D=0;D<l;D++){A.tempMat.identity(),A.tempPos.set(c[D*3+0]-p.x,c[D*3+1]-p.y,c[D*3+2]-p.z),f?(A.tempUp.set(f[D*3+0],f[D*3+1],f[D*3+2]),A.tempRight.set(d[D*3+0],d[D*3+1],d[D*3+2]),A.tempRight.crossProduct(A.tempUp,A.tempFwd).normalize(),A.tempMat.makeBasis(A.tempRight,A.tempUp,A.tempFwd),A.tempQuat.setFromRotationMatrix(A.tempMat)):A.tempQuat.set(0,0,0,1),u?A.tempSca.setScalar(u[D]):h?A.tempSca.set(h[D*3+0],h[D*3+1],h[D*3+2]):A.tempSca.set(1,1,1),A.tempMat.compose(A.tempPos,A.tempQuat,A.tempSca),A.tempMat.multiplyMatrices(A.tempMat,o);for(let B=0,v=g.length;B<v;B++)g[B].setMatrixAt(D,A.tempMat)}return r.batchTable=i,r.featureTable=n,r}}class Eo extends it{static format=je.BIN;async parseBuffer(e){let t=new Ea;t.adjustmentTransform=this.userData,this.data=await t.parse(e)}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}}class Gs extends Vs{_faceData;_url;get ldrImageUrl(){return this._url}constructor(){super(),this.useMipmap=!0,this.format=oe.rgba16float,this._faceData=new Co(this)}async load(e,t){this._url=e;let a=new $a(!1);return await a.load(e,t),this.createFromLDRTexture(a),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 a=this.width;for(this.mipmapCount=1;a>16;)a/=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=I.device.createSampler(this),this._faceData.uploadErpTexture(t),this}}let qf=`
7831
7831
  var<private>PI: f32 = 3.141592653589793;
7832
7832
 
7833
7833
  fn hammersley(i : u32, N : u32) -> vec2<f32>{
@@ -7919,7 +7919,7 @@ else if (typeof exports === 'object')
7919
7919
  `;class $f{compute;constructor(){this.compute=new Fe(qf)}generateBRDFLUTTexture(){let e=new Te(256,256,oe.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=k.beginCommandEncoder();return k.computeCommand(t,[this.compute]),k.endCommandEncoder(t),e}}class fi{id;guiTexture;uvRec=new be(0,0,1,1);uvBorder=new be(0,0,0,0);offsetSize=new be(0,0,4,4);borderSize=new be(0,0,0,0);trimSize=new de;isSliced=!1;height=4;width=4;xadvance=0;xoffset=0;yoffset=0;constructor(e){this.guiTexture=e||_.res.defaultGUITexture}}class kr{static _maxUid=-1;_staticId=-1;dynamicId=-1;texture;width=1;height=1;get staticId(){return this._staticId}constructor(e){e||=_.res.whiteTexture,e.addressModeU="clamp-to-edge",e.addressModeV="clamp-to-edge",this.texture=e,kr._maxUid++,this._staticId=kr._maxUid,this.init()}init(){this.dynamicId=-1,this.width=this.texture.width,this.height=this.texture.height}}class kb{fntCache={};fntData={};addFontData(e,t,a){this.fntData[`${e}${t}`]=a}getFontData(e,t){return this.fntData[`${e}${t}`]}addFnt(e,t,a,r){let i=`${e}${t}`;this.fntCache[i]||(this.fntCache[i]={}),this.fntCache[i][a]=r}getFnt(e,t,a){let r=`${e}${t}`,i=this.fntCache[r];return i?i[a]:this.fntCache[" "]}}let di=new kb;class ed{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 td{id=0;file=""}class ad{id=-1;x=0;y=0;width=0;height=0;xoffset=0;yoffset=0;xadvance=0;page=0;chnl=0}class ir extends it{static format=je.TEXT;static parseSprite(e,t){for(const a in t.fontChar)if(Object.prototype.hasOwnProperty.call(t.fontChar,a)){const r=t.fontChar[a];let i=new fi;i.id=r.id.toString(),i.offsetSize.set(0,0,r.width,r.height),i.trimSize.set(r.width,r.height),i.width=r.width,i.height=r.height,i.xadvance=r.xadvance,i.xoffset=r.xoffset,i.yoffset=r.yoffset,i.guiTexture=e[r.page],i.uvRec.set(r.x/t.scaleW,(t.scaleH-(r.y+r.height))/t.scaleH,r.width/t.scaleW,r.height/t.scaleH),di.addFnt(t.face,t.size,i.id,i)}}verification(){if(this.data)return!0;throw new Error("Method not implemented.")}async parseString(e){let t=this.getNewLine(e),a=e,r=new ed;a.trim().split(t).forEach((i,n)=>{if(n<2)ir.readLineProperty(i,r);else if(n<r.pages+2){let o=new td;ir.readLineProperty(i,o),r.fontPage.push(o)}else if(n<r.pages+3)ir.readLineProperty(i,r);else if(r.count>0){let o=new ad;ir.readLineProperty(i,o),r.fontChar[o.id]=o,r.count--}}),a="",this.data=r,await this.loadFontTextures()}getNewLine(e){return e.indexOf(`\r
7920
7920
  `)!=-1?`\r
7921
7921
  `:e.indexOf("\r")!=-1?"\r":`
7922
- `}async loadFontTextures(){let e=[],t=this.data;for(const a of t.fontPage){let r=this.baseUrl+a.file;await _.res.loadTexture(r,null,!0);let i=_.res.getTexture(r),n=new kr(i);e.push(n)}ir.parseSprite(e,t),t.fontChar[" "]||ir.insertSpaceChar(t,e[0])}static insertSpaceChar(e,t){let a=new fi,r=e.size*.5,i=e.lineHeight*.5;a.id=" ",a.offsetSize.set(0,0,e.size,e.size),a.trimSize.set(r,i),a.width=r,a.height=i,a.xadvance=0,a.xoffset=0,a.yoffset=0,a.guiTexture=t,a.uvRec.set(0,0,1e-6,1e-6),di.addFnt(e.face,e.size,a.id,a)}static readLineProperty(e,t){e.trim().split(" ").forEach((a,r)=>{let i=a.split("=");if(i.length>1){let n=i[0],o=i[1];Object.prototype.hasOwnProperty.call(t,n)&&(o.indexOf('"')==-1?t[n]=parseFloat(i[1]):t[n]=o.replace('"',"").replace('"',""))}})}}function Eb(s,e){let t=new fi;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 kr(e),t.uvRec.set(0,0,1,1),e.isVideoTexture||(e.flipY=!0),t}function rd(s,e,t){let a=new fi;a.guiTexture=s,a.id=e,a.uvRec.copyFrom(t.textureRect),a.trimSize.x=t.textureRect.z,a.trimSize.y=t.textureRect.w,a.offsetSize.x=t.textureRectOffset.x,a.offsetSize.y=t.textureRectOffset.y,a.offsetSize.z=t.size.x,a.offsetSize.w=t.size.y,a.width=t.size.x,a.height=t.size.y;let r=1/s.width,i=1/s.height;a.uvRec.set(a.uvRec.x*r,a.uvRec.y*i,a.uvRec.z*r,a.uvRec.w*i);let n=.1;return t.border.x<=n&&t.border.y<=n&&t.border.z<=n&&t.border.x<=n?a.isSliced=!1:(a.borderSize.copyFrom(t.border),a.uvBorder.copyFrom(t.border),a.uvBorder.x-=t.textureRectOffset.x,a.uvBorder.y-=t.textureRectOffset.y,a.uvBorder.z=t.border.z-(t.size.x-t.textureRect.z-t.textureRectOffset.x),a.uvBorder.w=t.border.w-(t.size.y-t.textureRect.w-t.textureRectOffset.y),a.uvBorder.x/=t.textureRect.z,a.uvBorder.z/=t.textureRect.z,a.uvBorder.y/=t.textureRect.w,a.uvBorder.w/=t.textureRect.w,a.isSliced=!0),a}class id{_spriteMap=new Map;_spriteList=[];textureSize=new de;name;constructor(e){this.textureSize.set(e.x,e.y)}setTexture(e,t,a){let r=rd(e,t,a);return this._spriteMap.set(r.id,r),this._spriteList.push(r),r}getSprite(e){return this._spriteMap.get(e)}get spriteList(){return this._spriteList}}class sd extends it{static format=je.TEXT;_json;_texture;async parseString(e){this._json=JSON.parse(e);let t=this.userData.replace(".json",".png");this._texture=await _.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 id(this._json.size),t=new kr(this._texture),a=this._json.atlas;for(const r in a)e.setTexture(t,r,a[r]);_.res.addAtlas(this.baseUrl,e),this.data=e}}var $t=Uint8Array,hi=Uint16Array,wb=Int32Array,nd=new $t([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]),od=new $t([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]),Ib=new $t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ld=function(s,e){for(var t=new hi(31),a=0;a<31;++a)t[a]=e+=1<<s[a-1];for(var r=new wb(t[30]),a=1;a<30;++a)for(var i=t[a];i<t[a+1];++i)r[i]=i-t[a]<<5|a;return{b:t,r}},cd=ld(nd,2),fd=cd.b,Rb=cd.r;fd[28]=258,Rb[258]=28;for(var Qb=ld(od,0),Tb=Qb.b,wo=new hi(32768),Ke=0;Ke<32768;++Ke){var gr=(Ke&43690)>>1|(Ke&21845)<<1;gr=(gr&52428)>>2|(gr&13107)<<2,gr=(gr&61680)>>4|(gr&3855)<<4,wo[Ke]=((gr&65280)>>8|(gr&255)<<8)>>1}for(var Vi=(function(s,e,t){for(var a=s.length,r=0,i=new hi(e);r<a;++r)s[r]&&++i[s[r]-1];var n=new hi(e);for(r=1;r<e;++r)n[r]=n[r-1]+i[r-1]<<1;var o;if(t){o=new hi(1<<e);var l=15-e;for(r=0;r<a;++r)if(s[r])for(var c=r<<4|s[r],f=e-s[r],d=n[s[r]-1]++<<f,h=d|(1<<f)-1;d<=h;++d)o[wo[d]>>l]=c}else for(o=new hi(a),r=0;r<a;++r)s[r]&&(o[r]=wo[n[s[r]-1]++]>>15-s[r]);return o}),Oi=new $t(288),Ke=0;Ke<144;++Ke)Oi[Ke]=8;for(var Ke=144;Ke<256;++Ke)Oi[Ke]=9;for(var Ke=256;Ke<280;++Ke)Oi[Ke]=7;for(var Ke=280;Ke<288;++Ke)Oi[Ke]=8;for(var dd=new $t(32),Ke=0;Ke<32;++Ke)dd[Ke]=5;var Mb=Vi(Oi,9,1),Nb=Vi(dd,5,1),Io=function(s){for(var e=s[0],t=1;t<s.length;++t)s[t]>e&&(e=s[t]);return e},xa=function(s,e,t){var a=e/8|0;return(s[a]|s[a+1]<<8)>>(e&7)&t},Ro=function(s,e){var t=e/8|0;return(s[t]|s[t+1]<<8|s[t+2]<<16)>>(e&7)},Pb=function(s){return(s+7)/8|0},Qo=function(s,e,t){return(e==null||e<0)&&(e=0),(t==null||t>s.length)&&(t=s.length),new $t(s.subarray(e,t))},Vb=["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"],fa=function(s,e,t){var a=new Error(e||Vb[s]);if(a.code=s,Error.captureStackTrace&&Error.captureStackTrace(a,fa),!t)throw a;return a},Ob=function(s,e,t,a){var r=s.length,i=a?a.length:0;if(!r||e.f&&!e.l)return t||new $t(0);var n=!t,o=n||e.i!=2,l=e.i;n&&(t=new $t(r*3));var c=function(ie){var le=t.length;if(ie>le){var ge=new $t(Math.max(le*2,ie));ge.set(t),t=ge}},f=e.f||0,d=e.p||0,h=e.b||0,u=e.l,m=e.d,g=e.m,p=e.n,A=r*8;do{if(!u){f=xa(s,d,1);var D=xa(s,d+1,3);if(d+=3,D)if(D==1)u=Mb,m=Nb,g=9,p=5;else if(D==2){var y=xa(s,d,31)+257,S=xa(s,d+10,15)+4,F=y+xa(s,d+5,31)+1;d+=14;for(var C=new $t(F),w=new $t(19),E=0;E<S;++E)w[Ib[E]]=xa(s,d+E*3,7);d+=S*3;for(var Q=Io(w),T=(1<<Q)-1,j=Vi(w,Q,1),E=0;E<F;){var ue=j[xa(s,d,T)];d+=ue&15;var B=ue>>4;if(B<16)C[E++]=B;else{var ee=0,N=0;for(B==16?(N=3+xa(s,d,3),d+=2,ee=C[E-1]):B==17?(N=3+xa(s,d,7),d+=3):B==18&&(N=11+xa(s,d,127),d+=7);N--;)C[E++]=ee}}var M=C.subarray(0,y),O=C.subarray(y);g=Io(M),p=Io(O),u=Vi(M,g,1),m=Vi(O,p,1)}else fa(1);else{var B=Pb(d)+4,v=s[B-4]|s[B-3]<<8,U=B+v;if(U>r){l&&fa(0);break}o&&c(h+v),t.set(s.subarray(B,U),h),e.b=h+=v,e.p=d=U*8,e.f=f;continue}if(d>A){l&&fa(0);break}}o&&c(h+131072);for(var W=(1<<g)-1,ae=(1<<p)-1,z=d;;z=d){var ee=u[Ro(s,d)&W],K=ee>>4;if(d+=ee&15,d>A){l&&fa(0);break}if(ee||fa(2),K<256)t[h++]=K;else if(K==256){z=d,u=null;break}else{var $=K-254;if(K>264){var E=K-257,re=nd[E];$=xa(s,d,(1<<re)-1)+fd[E],d+=re}var ce=m[Ro(s,d)&ae],Ae=ce>>4;ce||fa(3),d+=ce&15;var O=Tb[Ae];if(Ae>3){var re=od[Ae];O+=Ro(s,d)&(1<<re)-1,d+=re}if(d>A){l&&fa(0);break}o&&c(h+131072);var Qe=h+$;if(h<O){var Ve=i-O,H=Math.min(O,Qe);for(Ve+h<0&&fa(3);h<H;++h)t[h]=a[Ve+h]}for(;h<Qe;++h)t[h]=t[h-O]}}e.l=u,e.p=z,e.b=h,e.f=f,u&&(f=1,e.m=g,e.d=m,e.n=p)}while(!f);return h!=t.length&&n?Qo(t,0,h):t.subarray(0,h)},Lb=new $t(0),La=function(s,e){return s[e]|s[e+1]<<8},Ua=function(s,e){return(s[e]|s[e+1]<<8|s[e+2]<<16|s[e+3]<<24)>>>0},To=function(s,e){return Ua(s,e)+Ua(s,e+4)*4294967296};function Gb(s,e){return Ob(s,{i:2},e&&e.out,e&&e.dictionary)}var Mo=typeof TextDecoder<"u"&&new TextDecoder,zb=0;try{Mo.decode(Lb,{stream:!0}),zb=1}catch{}var Wb=function(s){for(var e="",t=0;;){var a=s[t++],r=(a>127)+(a>223)+(a>239);if(t+r>s.length)return{s:e,r:Qo(s,t-1)};r?r==3?(a=((a&15)<<18|(s[t++]&63)<<12|(s[t++]&63)<<6|s[t++]&63)-65536,e+=String.fromCharCode(55296|a>>10,56320|a&1023)):r&1?e+=String.fromCharCode((a&31)<<6|s[t++]&63):e+=String.fromCharCode((a&15)<<12|(s[t++]&63)<<6|s[t++]&63):e+=String.fromCharCode(a)}};function hd(s,e){if(e){for(var t="",a=0;a<s.length;a+=16384)t+=String.fromCharCode.apply(null,s.subarray(a,a+16384));return t}else{if(Mo)return Mo.decode(s);var r=Wb(s),i=r.s,t=r.r;return t.length&&fa(8),i}}var Jb=function(s,e){return e+30+La(s,e+26)+La(s,e+28)},jb=function(s,e,t){var a=La(s,e+28),r=hd(s.subarray(e+46,e+46+a),!(La(s,e+8)&2048)),i=e+46+a,n=Ua(s,e+20),o=t&&n==4294967295?Zb(s,i):[n,Ua(s,e+24),Ua(s,e+42)],l=o[0],c=o[1],f=o[2];return[La(s,e+10),l,c,r,i+La(s,e+30)+La(s,e+32),f]},Zb=function(s,e){for(;La(s,e)!=1;e+=4+La(s,e+2));return[To(s,e+12),To(s,e+4),To(s,e+20)]};function Yb(s,e){for(var t={},a=s.length-22;Ua(s,a)!=101010256;--a)(!a||s.length-a>65558)&&fa(13);var r=La(s,a+8);if(!r)return{};var i=Ua(s,a+16),n=i==4294967295||r==65535;if(n){var o=Ua(s,a-12);n=Ua(s,o)==101075792,n&&(r=Ua(s,o+32),i=Ua(s,o+48))}for(var l=0;l<r;++l){var c=jb(s,i,n),f=c[0],d=c[1],h=c[2],u=c[3],m=c[4],g=c[5],p=Jb(s,g);i=m,f?f==8?t[u]=Gb(s.subarray(p,p+d),{out:new $t(h)}):fa(14,"unknown compression type "+f):t[u]=Qo(s,p,p+d)}return t}class vt extends xt{constructor(){super(),this.shader=new qi,this.baseMap=_.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 Pr extends Le{shape_vertices=[];shape_indices=[];radius;widthSegments;heightSegments;phiStart;phiLength;thetaStart;thetaLength;constructor(e,t,a,r,i,n,o){super(),this.radius=e,this.widthSegments=t,this.heightSegments=a,this.phiStart=r,this.phiLength=i,this.thetaStart=n,this.thetaLength=o,this.buildGeometry()}buildGeometry(){var e,t,a=0;let r=this.heightSegments,i=this.widthSegments,n=this.radius;var o=(r+1)*(i+1);let l=new Float32Array(o*3),c=new Float32Array(o*3),f=new Float32Array(o*2),d=new Uint16Array(i*r*2*3),h=0,u=0,m=0;for(t=0;t<=r;++t){var g=Math.PI*t/r,p=n*Math.cos(g),A=n*Math.sin(g);for(e=0;e<=i;++e){var D=2*Math.PI*e/i,B=A*Math.cos(D),v=A*Math.sin(D),U=1/Math.sqrt(B*B+p*p+v*v);if(l[h++]=B,l[h++]=p,l[h++]=v,c[u++]=B*U,c[u++]=p*U,c[u++]=v*U,f[m++]=e/i,f[m++]=t/r,e>0&&t>0){var y=(i+1)*t+e,S=(i+1)*t+e-1,F=(i+1)*(t-1)+e-1,C=(i+1)*(t-1)+e;t==r?(d[a++]=y,d[a++]=F,d[a++]=C):t==1?(d[a++]=y,d[a++]=S,d[a++]=F):(d[a++]=y,d[a++]=S,d[a++]=F,d[a++]=y,d[a++]=F,d[a++]=C)}}}this.setIndices(d),this.setAttribute(G.position,l),this.setAttribute(G.normal,c),this.setAttribute(G.uv,f),this.setAttribute(G.TEXCOORD_1,f),this.addSubGeometry({indexStart:0,indexCount:d.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0}),this.bounds=new Ce(b.ZERO,new b(this.radius*2,this.radius*2,this.radius*2))}}class _s extends ne{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 b(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),_s.register3DRepresentation)this.marker=_s.register3DRepresentation(this),this.marker&&this.addChild(this.marker);else{this.marker=new ne;const e=this.marker.addComponent(he);e.geometry=new Pr(.1,32,16),e.material=new vt,e.material.baseColor=this.positionValid?new J(0,1,0,1):new J(1,0,0,1),this.addChild(this.marker),this.marker.name="WayPoint3DMarker"}}}class Bs extends ne{static register3DRepresentation=null;line;constructor(e){super(),this.parseWayLineFile(e),this.setup3DRepresentation()}parseWayLineFile(e){for(const t of e.Folder.Placemark){const a=new _s(t);this.addChild(a)}this.entityChildren=this.entityChildren.sort((t,a)=>t.positionIndex-a.positionIndex)}setup3DRepresentation(){this.line&&(this.removeChild(this.line),this.line=null),Bs.register3DRepresentation?(this.line=Bs.register3DRepresentation(this),this.line&&this.addChild(this.line)):(this.line=this.createMultiLine(this.entityChildren.map(e=>e.localPosition),new J(1,1,1,1)),this.addChild(this.line),this.line.name="WayLines3DLine")}createMultiLine(e,t){if(e.length<2)return null;const a=new Le,r=new Float32Array(e.length*3);for(let c=0;c<e.length;c++)r[c*3]=e[c].x,r[c*3+1]=e[c].y,r[c*3+2]=e[c].z;const i=new Uint16Array((e.length-1)*2);for(let c=0;c<e.length-1;c++)i[c*2]=c,i[c*2+1]=c+1;a.setIndices(i),a.setAttribute(G.position,r),a.addSubGeometry({indexStart:0,indexCount:i.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});const n=new ne,o=n.addComponent(he),l=new vt;return l.topology="line-list",l.baseColor=t,l.blendMode=De.ADD,l.castReflection=!1,o.geometry=a,o.material=l,n}}class ud extends it{static format=je.BIN;parseBuffer(e){try{const t={template:null,waylines:null},a=Yb(new Uint8Array(e));for(const i in a){const n=a[i],l=new DOMParser().parseFromString(hd(n),"application/xml"),c={};this.parseNode(l,c);const f=i.replace("wpmz/","").split(".")[0];Object.assign(t,{[f]:c["#document"].kml.Document})}const r=new Bs(t.waylines);this.data=r}catch(t){this.parserError(`KMZ parsing failed: ${t}`,-1)}}parseNode(e,t){const a=["Placemark","actionGroup","action"],r=e.nodeName.replace("wpml:","");if(!e.childNodes.length)t[r]=void 0;else{let i=null,n=!1;for(let o=0;o<e.childNodes.length;++o){const l=e.childNodes[o];if(l.nodeType==Node.TEXT_NODE){const c=l.nodeValue?.trim();c&&c.length>0&&(i=c)}else l.nodeType==Node.ELEMENT_NODE&&(n=!0)}if(i&&!n)t[r]=i;else if(n){a.includes(r)?t[r]?.length?t[r].push({}):t[r]=[{}]:t[r]={};for(let o=0;o<e.childNodes.length;++o){const l=e.childNodes[o];l.nodeType==Node.ELEMENT_NODE&&this.parseNode(l,Array.isArray(t[r])?t[r].at(-1):t[r])}}else t[r]=void 0}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class bd{_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 a=t.getSprite(e);if(a)return a}return null}async load(e,t,a){return(await new Rt().load(e,t,a)).data}async loadGltf(e,t){if(this._prefabPool.has(e))return this._prefabPool.get(e);let a,r=e.substring(e.lastIndexOf(".")).toLowerCase(),i=new Rt;r==".gltf"?a=await i.load(e,Ut,t):a=await i.load(e,_o,t);let n=a.data;return this._prefabPool.set(e,n),this._gltfPool.set(e,a.gltf),n}async loadObj(e,t){if(this._prefabPool.has(e))return this._prefabPool.get(e);let a,r=e.substring(e.lastIndexOf(".")).toLowerCase(),i=new Rt;r==".obj"&&(a=await i.load(e,Ds,t));let n=a.data;return this._prefabPool.set(e,n),n}async loadB3DM(e,t,a){if(this._prefabPool.has(e))return this._prefabPool.get(e);let n=(await new Rt().load(e,So,t,a)).data;return this._prefabPool.set(e,n),n}async loadI3DM(e,t,a){if(this._prefabPool.has(e))return this._prefabPool.get(e);let n=(await new Rt().load(e,Eo,t,a)).data;return this._prefabPool.set(e,n),n}async loadTexture(e,t,a){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new $a;r.flipY=a;try{await r.load(e,t)}catch(i){return console.error(`Failed to load texture: ${e}`,i),null}return this._texturePool.set(e,r),r}destroyTexture(e){const t=this._texturePool.get(e);return t?ke.getInstance().hasReference(t)?!1:(t.isDestroyed||t.destroy(),this._texturePool.delete(e),!0):!1}destroyTextureAllUnUsed(){for(const[e,t]of this._texturePool.entries())this.destroyTexture(e)}async loadTextureCount(e,t,a,r){return new Promise(async(i,n)=>{let o=0,l=[];t==0&&i(l);for(let c=0;c<t;c++){const f=e.shift();this.loadTexture(f,a,r).then(d=>{l.push(d),o++,o==t&&i(l)})}})}async loadBitmapTextures(e,t=5,a,r){let i=[],n=Math.floor(e.length/t)+1,o=Math.floor(e.length%t);for(let l=0;l<n;l++){let c=await this.loadTextureCount(e,l==n-1?o:t,a,r);i.push(...c)}return i}async loadHDRTexture(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let a=new xo;return a=await a.load(e,t),this._texturePool.set(e,a),a}async loadHDRTextureCube(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let a=new Os;return a=await a.load(e,t),this._texturePool.set(e,a),a}async loadLDRTextureCube(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let a=new Gs;return a=await a.load(e,t),this._texturePool.set(e,a),a}async loadTextureCubeMaps(e){let t=e[0];if(this._texturePool.has(t))return this._texturePool.get(t);let a=new Bo;return await a.load(e),this._texturePool.set(e[0],a),a}async loadTextureCubeStd(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let a=new Bo;return await a.loadStd(e),a}async loadJSON(e,t){return await new Rt().loadJson(e,t).then(async a=>a).catch(a=>{console.log(a)})}async loadFont(e,t,a){let i=await new Rt().load(e,ir,t,a),n=i.data;return di.addFontData(n.face,n.size,n),i.data}async loadAtlas(e,t){return(await new Rt().load(e,sd,t,e)).data}async loadKMZ(e,t){return(await new Rt().load(e,ud,t)).data}normalTexture;maskTexture;whiteTexture;blackTexture;redTexture;blueTexture;greenTexture;yellowTexture;grayTexture;defaultSky;defaultGUITexture;defaultGUISprite;defaultMaterial;createTexture(e,t,a,r,i,n,o){let l=32,c=32,f=new Uint8Array(l*c*4);this.fillColor(f,e,t,a,r,i,n);let d=new ki;return d.name=o,d.create(16,16,f,!0),o&&this.addTexture(o,d),d}fillColor(e,t,a,r,i,n,o){for(let l=0;l<t;l++)for(let c=0;c<a;c++){let f=c*t+l;e[f*4+0]=r,e[f*4+1]=i,e[f*4+2]=n,e[f*4+3]=o}}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 $f().generateBRDFLUTTexture(),a=t.name="BRDFLUT";this.addTexture(a,t),this.defaultSky=new Os,this.defaultSky.createFromTexture(128,this.blackTexture),ke.getInstance().attached(this.defaultSky,this),ke.getInstance().attached(t,this),ke.getInstance().attached(this.normalTexture,this),ke.getInstance().attached(this.maskTexture,this),ke.getInstance().attached(this.whiteTexture,this),ke.getInstance().attached(this.blackTexture,this),ke.getInstance().attached(this.redTexture,this),ke.getInstance().attached(this.blueTexture,this),ke.getInstance().attached(this.greenTexture,this),ke.getInstance().attached(this.yellowTexture,this),ke.getInstance().attached(this.grayTexture,this),this.defaultGUITexture=new kr(this.whiteTexture),this.defaultGUISprite=new fi(this.defaultGUITexture),this.defaultGUISprite.trimSize.set(4,4),this.defaultMaterial=new aa}}class gd extends et{_postList;init(e){this._postList=new Map}start(){}stop(){}onEnable(){this.activePost()}onDisable(){this.unActivePost()}activePost(){let e=this.transform.view3D,t=_.getRenderJob(e);this._postList.forEach(a=>{t.addPost(a)})}unActivePost(){let e=this.transform.view3D,t=_.getRenderJob(e);this._postList.forEach(a=>{t.removePost(a)})}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 a=this.transform.view3D;_.getRenderJob(a).removePost(t)}getPost(e){return this._postList.has(e)?this._postList.get(e):null}}const Xb="1.0.46";class _{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 I.presentationSize}static get aspect(){return I.aspect}static get width(){return I.windowWidth}static get height(){return I.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 J(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",Xb),window.isSecureContext||console.warn("WebGPU is only supported in secure contexts (HTTPS or localhost)"),this.setting={...this.setting,...e.engineSetting},await Re.init(R.allocCount,this.setting.doublePrecision),await I.init(e.canvasConfig),this.setting.reflectionSetting.width=this.setting.reflectionSetting.reflectionProbeSize*6,this.setting.reflectionSetting.height=this.setting.reflectionSetting.reflectionProbeSize*this.setting.reflectionSetting.reflectionProbeMaxCount,ve.getGBufferFrame(ve.reflections_GBuffer,this.setting.reflectionSetting.width,this.setting.reflectionSetting.height,!1),Y.init(),Ka.init(),xe.init(),Nt.init(),Zt.init(),this.res=new bd,this.res.initDefault(),this._beforeRender=e.beforeRender,this._renderLoop=e.renderLoop,this._lateRender=e.lateRender,this.inputSystem=new Sl,this.inputSystem.initCanvas(I.canvas)}static startRenderJob(e){let t=new hf(e);return this.renderJobs.set(e,t),this.setting.pick.mode=="pixel"&&e.scene.getOrAddComponent(gd).addPost(so),(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 a=performance.now();await new Promise(r=>{setTimeout(()=>{e+=performance.now()-a,r(!0)},this._frameRateValue-t)})}this._time=e}await this.updateFrame(e),this._requestAnimationFrameID=0,this.resume()}static async updateFrame(e){We.delta=e-We.time,We.time=e,We.frame+=1,Fr.tick(We.delta);let t=this.views,a=0;for(a=0;a<t.length;a++){const n=t[a];n.scene.waitUpdate();let[o,l]=I.presentationSize;n.camera.viewPort.setTo(0,0,o,l)}this._beforeRender&&await this._beforeRender();for(const n of Oe.componentsBeforeUpdateList){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];f.enable&&d(o)}}let r=I.device.createCommandEncoder();for(const n of Oe.componentsComputeList){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];f.enable&&d(o,r)}}I.device.queue.submit([r.finish()]);for(const n of Oe.componentsUpdateList){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];f.enable&&d(o)}}for(const n of Oe.graphicComponent){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];o&&f.enable&&d(o)}}this._renderLoop&&await this._renderLoop(),Re.updateAllContinueTransform(0,R.useCount,16),xe.modelMatrixBindGroup.writeBuffer(R.useCount*16),this.renderJobs.forEach((n,o)=>{n.renderState||n.start(),n.renderFrame()});for(const n of Oe.componentsLateUpdateList){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];f.enable&&d(o)}}this._lateRender&&await this._lateRender()}}let zs=`
7922
+ `}async loadFontTextures(){let e=[],t=this.data;for(const a of t.fontPage){let r=this.baseUrl+a.file;await _.res.loadTexture(r,null,!0);let i=_.res.getTexture(r),n=new kr(i);e.push(n)}ir.parseSprite(e,t),t.fontChar[" "]||ir.insertSpaceChar(t,e[0])}static insertSpaceChar(e,t){let a=new fi,r=e.size*.5,i=e.lineHeight*.5;a.id=" ",a.offsetSize.set(0,0,e.size,e.size),a.trimSize.set(r,i),a.width=r,a.height=i,a.xadvance=0,a.xoffset=0,a.yoffset=0,a.guiTexture=t,a.uvRec.set(0,0,1e-6,1e-6),di.addFnt(e.face,e.size,a.id,a)}static readLineProperty(e,t){e.trim().split(" ").forEach((a,r)=>{let i=a.split("=");if(i.length>1){let n=i[0],o=i[1];Object.prototype.hasOwnProperty.call(t,n)&&(o.indexOf('"')==-1?t[n]=parseFloat(i[1]):t[n]=o.replace('"',"").replace('"',""))}})}}function Eb(s,e){let t=new fi;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 kr(e),t.uvRec.set(0,0,1,1),e.isVideoTexture||(e.flipY=!0),t}function rd(s,e,t){let a=new fi;a.guiTexture=s,a.id=e,a.uvRec.copyFrom(t.textureRect),a.trimSize.x=t.textureRect.z,a.trimSize.y=t.textureRect.w,a.offsetSize.x=t.textureRectOffset.x,a.offsetSize.y=t.textureRectOffset.y,a.offsetSize.z=t.size.x,a.offsetSize.w=t.size.y,a.width=t.size.x,a.height=t.size.y;let r=1/s.width,i=1/s.height;a.uvRec.set(a.uvRec.x*r,a.uvRec.y*i,a.uvRec.z*r,a.uvRec.w*i);let n=.1;return t.border.x<=n&&t.border.y<=n&&t.border.z<=n&&t.border.x<=n?a.isSliced=!1:(a.borderSize.copyFrom(t.border),a.uvBorder.copyFrom(t.border),a.uvBorder.x-=t.textureRectOffset.x,a.uvBorder.y-=t.textureRectOffset.y,a.uvBorder.z=t.border.z-(t.size.x-t.textureRect.z-t.textureRectOffset.x),a.uvBorder.w=t.border.w-(t.size.y-t.textureRect.w-t.textureRectOffset.y),a.uvBorder.x/=t.textureRect.z,a.uvBorder.z/=t.textureRect.z,a.uvBorder.y/=t.textureRect.w,a.uvBorder.w/=t.textureRect.w,a.isSliced=!0),a}class id{_spriteMap=new Map;_spriteList=[];textureSize=new de;name;constructor(e){this.textureSize.set(e.x,e.y)}setTexture(e,t,a){let r=rd(e,t,a);return this._spriteMap.set(r.id,r),this._spriteList.push(r),r}getSprite(e){return this._spriteMap.get(e)}get spriteList(){return this._spriteList}}class sd extends it{static format=je.TEXT;_json;_texture;async parseString(e){this._json=JSON.parse(e);let t=this.userData.replace(".json",".png");this._texture=await _.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 id(this._json.size),t=new kr(this._texture),a=this._json.atlas;for(const r in a)e.setTexture(t,r,a[r]);_.res.addAtlas(this.baseUrl,e),this.data=e}}var $t=Uint8Array,hi=Uint16Array,wb=Int32Array,nd=new $t([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]),od=new $t([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]),Ib=new $t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ld=function(s,e){for(var t=new hi(31),a=0;a<31;++a)t[a]=e+=1<<s[a-1];for(var r=new wb(t[30]),a=1;a<30;++a)for(var i=t[a];i<t[a+1];++i)r[i]=i-t[a]<<5|a;return{b:t,r}},cd=ld(nd,2),fd=cd.b,Rb=cd.r;fd[28]=258,Rb[258]=28;for(var Qb=ld(od,0),Tb=Qb.b,wo=new hi(32768),Ke=0;Ke<32768;++Ke){var gr=(Ke&43690)>>1|(Ke&21845)<<1;gr=(gr&52428)>>2|(gr&13107)<<2,gr=(gr&61680)>>4|(gr&3855)<<4,wo[Ke]=((gr&65280)>>8|(gr&255)<<8)>>1}for(var Vi=(function(s,e,t){for(var a=s.length,r=0,i=new hi(e);r<a;++r)s[r]&&++i[s[r]-1];var n=new hi(e);for(r=1;r<e;++r)n[r]=n[r-1]+i[r-1]<<1;var o;if(t){o=new hi(1<<e);var l=15-e;for(r=0;r<a;++r)if(s[r])for(var c=r<<4|s[r],f=e-s[r],d=n[s[r]-1]++<<f,h=d|(1<<f)-1;d<=h;++d)o[wo[d]>>l]=c}else for(o=new hi(a),r=0;r<a;++r)s[r]&&(o[r]=wo[n[s[r]-1]++]>>15-s[r]);return o}),Oi=new $t(288),Ke=0;Ke<144;++Ke)Oi[Ke]=8;for(var Ke=144;Ke<256;++Ke)Oi[Ke]=9;for(var Ke=256;Ke<280;++Ke)Oi[Ke]=7;for(var Ke=280;Ke<288;++Ke)Oi[Ke]=8;for(var dd=new $t(32),Ke=0;Ke<32;++Ke)dd[Ke]=5;var Mb=Vi(Oi,9,1),Nb=Vi(dd,5,1),Io=function(s){for(var e=s[0],t=1;t<s.length;++t)s[t]>e&&(e=s[t]);return e},xa=function(s,e,t){var a=e/8|0;return(s[a]|s[a+1]<<8)>>(e&7)&t},Ro=function(s,e){var t=e/8|0;return(s[t]|s[t+1]<<8|s[t+2]<<16)>>(e&7)},Pb=function(s){return(s+7)/8|0},Qo=function(s,e,t){return(e==null||e<0)&&(e=0),(t==null||t>s.length)&&(t=s.length),new $t(s.subarray(e,t))},Vb=["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"],fa=function(s,e,t){var a=new Error(e||Vb[s]);if(a.code=s,Error.captureStackTrace&&Error.captureStackTrace(a,fa),!t)throw a;return a},Ob=function(s,e,t,a){var r=s.length,i=a?a.length:0;if(!r||e.f&&!e.l)return t||new $t(0);var n=!t,o=n||e.i!=2,l=e.i;n&&(t=new $t(r*3));var c=function(ie){var le=t.length;if(ie>le){var ge=new $t(Math.max(le*2,ie));ge.set(t),t=ge}},f=e.f||0,d=e.p||0,h=e.b||0,u=e.l,m=e.d,g=e.m,p=e.n,A=r*8;do{if(!u){f=xa(s,d,1);var D=xa(s,d+1,3);if(d+=3,D)if(D==1)u=Mb,m=Nb,g=9,p=5;else if(D==2){var y=xa(s,d,31)+257,S=xa(s,d+10,15)+4,F=y+xa(s,d+5,31)+1;d+=14;for(var C=new $t(F),w=new $t(19),E=0;E<S;++E)w[Ib[E]]=xa(s,d+E*3,7);d+=S*3;for(var Q=Io(w),T=(1<<Q)-1,j=Vi(w,Q,1),E=0;E<F;){var ue=j[xa(s,d,T)];d+=ue&15;var B=ue>>4;if(B<16)C[E++]=B;else{var ee=0,N=0;for(B==16?(N=3+xa(s,d,3),d+=2,ee=C[E-1]):B==17?(N=3+xa(s,d,7),d+=3):B==18&&(N=11+xa(s,d,127),d+=7);N--;)C[E++]=ee}}var M=C.subarray(0,y),O=C.subarray(y);g=Io(M),p=Io(O),u=Vi(M,g,1),m=Vi(O,p,1)}else fa(1);else{var B=Pb(d)+4,v=s[B-4]|s[B-3]<<8,x=B+v;if(x>r){l&&fa(0);break}o&&c(h+v),t.set(s.subarray(B,x),h),e.b=h+=v,e.p=d=x*8,e.f=f;continue}if(d>A){l&&fa(0);break}}o&&c(h+131072);for(var W=(1<<g)-1,ae=(1<<p)-1,z=d;;z=d){var ee=u[Ro(s,d)&W],K=ee>>4;if(d+=ee&15,d>A){l&&fa(0);break}if(ee||fa(2),K<256)t[h++]=K;else if(K==256){z=d,u=null;break}else{var $=K-254;if(K>264){var E=K-257,re=nd[E];$=xa(s,d,(1<<re)-1)+fd[E],d+=re}var ce=m[Ro(s,d)&ae],Ae=ce>>4;ce||fa(3),d+=ce&15;var O=Tb[Ae];if(Ae>3){var re=od[Ae];O+=Ro(s,d)&(1<<re)-1,d+=re}if(d>A){l&&fa(0);break}o&&c(h+131072);var Qe=h+$;if(h<O){var Ve=i-O,H=Math.min(O,Qe);for(Ve+h<0&&fa(3);h<H;++h)t[h]=a[Ve+h]}for(;h<Qe;++h)t[h]=t[h-O]}}e.l=u,e.p=z,e.b=h,e.f=f,u&&(f=1,e.m=g,e.d=m,e.n=p)}while(!f);return h!=t.length&&n?Qo(t,0,h):t.subarray(0,h)},Lb=new $t(0),La=function(s,e){return s[e]|s[e+1]<<8},Ua=function(s,e){return(s[e]|s[e+1]<<8|s[e+2]<<16|s[e+3]<<24)>>>0},To=function(s,e){return Ua(s,e)+Ua(s,e+4)*4294967296};function Gb(s,e){return Ob(s,{i:2},e&&e.out,e&&e.dictionary)}var Mo=typeof TextDecoder<"u"&&new TextDecoder,zb=0;try{Mo.decode(Lb,{stream:!0}),zb=1}catch{}var Wb=function(s){for(var e="",t=0;;){var a=s[t++],r=(a>127)+(a>223)+(a>239);if(t+r>s.length)return{s:e,r:Qo(s,t-1)};r?r==3?(a=((a&15)<<18|(s[t++]&63)<<12|(s[t++]&63)<<6|s[t++]&63)-65536,e+=String.fromCharCode(55296|a>>10,56320|a&1023)):r&1?e+=String.fromCharCode((a&31)<<6|s[t++]&63):e+=String.fromCharCode((a&15)<<12|(s[t++]&63)<<6|s[t++]&63):e+=String.fromCharCode(a)}};function hd(s,e){if(e){for(var t="",a=0;a<s.length;a+=16384)t+=String.fromCharCode.apply(null,s.subarray(a,a+16384));return t}else{if(Mo)return Mo.decode(s);var r=Wb(s),i=r.s,t=r.r;return t.length&&fa(8),i}}var Jb=function(s,e){return e+30+La(s,e+26)+La(s,e+28)},jb=function(s,e,t){var a=La(s,e+28),r=hd(s.subarray(e+46,e+46+a),!(La(s,e+8)&2048)),i=e+46+a,n=Ua(s,e+20),o=t&&n==4294967295?Zb(s,i):[n,Ua(s,e+24),Ua(s,e+42)],l=o[0],c=o[1],f=o[2];return[La(s,e+10),l,c,r,i+La(s,e+30)+La(s,e+32),f]},Zb=function(s,e){for(;La(s,e)!=1;e+=4+La(s,e+2));return[To(s,e+12),To(s,e+4),To(s,e+20)]};function Yb(s,e){for(var t={},a=s.length-22;Ua(s,a)!=101010256;--a)(!a||s.length-a>65558)&&fa(13);var r=La(s,a+8);if(!r)return{};var i=Ua(s,a+16),n=i==4294967295||r==65535;if(n){var o=Ua(s,a-12);n=Ua(s,o)==101075792,n&&(r=Ua(s,o+32),i=Ua(s,o+48))}for(var l=0;l<r;++l){var c=jb(s,i,n),f=c[0],d=c[1],h=c[2],u=c[3],m=c[4],g=c[5],p=Jb(s,g);i=m,f?f==8?t[u]=Gb(s.subarray(p,p+d),{out:new $t(h)}):fa(14,"unknown compression type "+f):t[u]=Qo(s,p,p+d)}return t}class vt extends xt{constructor(){super(),this.shader=new qi,this.baseMap=_.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 Pr extends Le{shape_vertices=[];shape_indices=[];radius;widthSegments;heightSegments;phiStart;phiLength;thetaStart;thetaLength;constructor(e,t,a,r,i,n,o){super(),this.radius=e,this.widthSegments=t,this.heightSegments=a,this.phiStart=r,this.phiLength=i,this.thetaStart=n,this.thetaLength=o,this.buildGeometry()}buildGeometry(){var e,t,a=0;let r=this.heightSegments,i=this.widthSegments,n=this.radius;var o=(r+1)*(i+1);let l=new Float32Array(o*3),c=new Float32Array(o*3),f=new Float32Array(o*2),d=new Uint16Array(i*r*2*3),h=0,u=0,m=0;for(t=0;t<=r;++t){var g=Math.PI*t/r,p=n*Math.cos(g),A=n*Math.sin(g);for(e=0;e<=i;++e){var D=2*Math.PI*e/i,B=A*Math.cos(D),v=A*Math.sin(D),x=1/Math.sqrt(B*B+p*p+v*v);if(l[h++]=B,l[h++]=p,l[h++]=v,c[u++]=B*x,c[u++]=p*x,c[u++]=v*x,f[m++]=e/i,f[m++]=t/r,e>0&&t>0){var y=(i+1)*t+e,S=(i+1)*t+e-1,F=(i+1)*(t-1)+e-1,C=(i+1)*(t-1)+e;t==r?(d[a++]=y,d[a++]=F,d[a++]=C):t==1?(d[a++]=y,d[a++]=S,d[a++]=F):(d[a++]=y,d[a++]=S,d[a++]=F,d[a++]=y,d[a++]=F,d[a++]=C)}}}this.setIndices(d),this.setAttribute(G.position,l),this.setAttribute(G.normal,c),this.setAttribute(G.uv,f),this.setAttribute(G.TEXCOORD_1,f),this.addSubGeometry({indexStart:0,indexCount:d.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0}),this.bounds=new Ce(b.ZERO,new b(this.radius*2,this.radius*2,this.radius*2))}}class _s extends ne{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 b(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),_s.register3DRepresentation)this.marker=_s.register3DRepresentation(this),this.marker&&this.addChild(this.marker);else{this.marker=new ne;const e=this.marker.addComponent(he);e.geometry=new Pr(.1,32,16),e.material=new vt,e.material.baseColor=this.positionValid?new J(0,1,0,1):new J(1,0,0,1),this.addChild(this.marker),this.marker.name="WayPoint3DMarker"}}}class Bs extends ne{static register3DRepresentation=null;line;constructor(e){super(),this.parseWayLineFile(e),this.setup3DRepresentation()}parseWayLineFile(e){for(const t of e.Folder.Placemark){const a=new _s(t);this.addChild(a)}this.entityChildren=this.entityChildren.sort((t,a)=>t.positionIndex-a.positionIndex)}setup3DRepresentation(){this.line&&(this.removeChild(this.line),this.line=null),Bs.register3DRepresentation?(this.line=Bs.register3DRepresentation(this),this.line&&this.addChild(this.line)):(this.line=this.createMultiLine(this.entityChildren.map(e=>e.localPosition),new J(1,1,1,1)),this.addChild(this.line),this.line.name="WayLines3DLine")}createMultiLine(e,t){if(e.length<2)return null;const a=new Le,r=new Float32Array(e.length*3);for(let c=0;c<e.length;c++)r[c*3]=e[c].x,r[c*3+1]=e[c].y,r[c*3+2]=e[c].z;const i=new Uint16Array((e.length-1)*2);for(let c=0;c<e.length-1;c++)i[c*2]=c,i[c*2+1]=c+1;a.setIndices(i),a.setAttribute(G.position,r),a.addSubGeometry({indexStart:0,indexCount:i.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});const n=new ne,o=n.addComponent(he),l=new vt;return l.topology="line-list",l.baseColor=t,l.blendMode=De.ADD,l.castReflection=!1,o.geometry=a,o.material=l,n}}class ud extends it{static format=je.BIN;parseBuffer(e){try{const t={template:null,waylines:null},a=Yb(new Uint8Array(e));for(const i in a){const n=a[i],l=new DOMParser().parseFromString(hd(n),"application/xml"),c={};this.parseNode(l,c);const f=i.replace("wpmz/","").split(".")[0];Object.assign(t,{[f]:c["#document"].kml.Document})}const r=new Bs(t.waylines);this.data=r}catch(t){this.parserError(`KMZ parsing failed: ${t}`,-1)}}parseNode(e,t){const a=["Placemark","actionGroup","action"],r=e.nodeName.replace("wpml:","");if(!e.childNodes.length)t[r]=void 0;else{let i=null,n=!1;for(let o=0;o<e.childNodes.length;++o){const l=e.childNodes[o];if(l.nodeType==Node.TEXT_NODE){const c=l.nodeValue?.trim();c&&c.length>0&&(i=c)}else l.nodeType==Node.ELEMENT_NODE&&(n=!0)}if(i&&!n)t[r]=i;else if(n){a.includes(r)?t[r]?.length?t[r].push({}):t[r]=[{}]:t[r]={};for(let o=0;o<e.childNodes.length;++o){const l=e.childNodes[o];l.nodeType==Node.ELEMENT_NODE&&this.parseNode(l,Array.isArray(t[r])?t[r].at(-1):t[r])}}else t[r]=void 0}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class bd{_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 a=t.getSprite(e);if(a)return a}return null}async load(e,t,a){return(await new Rt().load(e,t,a)).data}async loadGltf(e,t){if(this._prefabPool.has(e))return this._prefabPool.get(e);let a,r=e.substring(e.lastIndexOf(".")).toLowerCase(),i=new Rt;r==".gltf"?a=await i.load(e,Ut,t):a=await i.load(e,_o,t);let n=a.data;return this._prefabPool.set(e,n),this._gltfPool.set(e,a.gltf),n}async loadObj(e,t){if(this._prefabPool.has(e))return this._prefabPool.get(e);let a,r=e.substring(e.lastIndexOf(".")).toLowerCase(),i=new Rt;r==".obj"&&(a=await i.load(e,Ds,t));let n=a.data;return this._prefabPool.set(e,n),n}async loadB3DM(e,t,a){if(this._prefabPool.has(e))return this._prefabPool.get(e);let n=(await new Rt().load(e,So,t,a)).data;return this._prefabPool.set(e,n),n}async loadI3DM(e,t,a){if(this._prefabPool.has(e))return this._prefabPool.get(e);let n=(await new Rt().load(e,Eo,t,a)).data;return this._prefabPool.set(e,n),n}async loadTexture(e,t,a){if(this._texturePool.has(e))return this._texturePool.get(e);let r=new $a;r.flipY=a;try{await r.load(e,t)}catch(i){return console.error(`Failed to load texture: ${e}`,i),null}return this._texturePool.set(e,r),r}destroyTexture(e){const t=this._texturePool.get(e);return t?ke.getInstance().hasReference(t)?!1:(t.isDestroyed||t.destroy(),this._texturePool.delete(e),!0):!1}destroyTextureAllUnUsed(){for(const[e,t]of this._texturePool.entries())this.destroyTexture(e)}async loadTextureCount(e,t,a,r){return new Promise(async(i,n)=>{let o=0,l=[];t==0&&i(l);for(let c=0;c<t;c++){const f=e.shift();this.loadTexture(f,a,r).then(d=>{l.push(d),o++,o==t&&i(l)})}})}async loadBitmapTextures(e,t=5,a,r){let i=[],n=Math.floor(e.length/t)+1,o=Math.floor(e.length%t);for(let l=0;l<n;l++){let c=await this.loadTextureCount(e,l==n-1?o:t,a,r);i.push(...c)}return i}async loadHDRTexture(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let a=new xo;return a=await a.load(e,t),this._texturePool.set(e,a),a}async loadHDRTextureCube(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let a=new Os;return a=await a.load(e,t),this._texturePool.set(e,a),a}async loadLDRTextureCube(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let a=new Gs;return a=await a.load(e,t),this._texturePool.set(e,a),a}async loadTextureCubeMaps(e){let t=e[0];if(this._texturePool.has(t))return this._texturePool.get(t);let a=new Bo;return await a.load(e),this._texturePool.set(e[0],a),a}async loadTextureCubeStd(e,t){if(this._texturePool.has(e))return this._texturePool.get(e);let a=new Bo;return await a.loadStd(e),a}async loadJSON(e,t){return await new Rt().loadJson(e,t).then(async a=>a).catch(a=>{console.log(a)})}async loadFont(e,t,a){let i=await new Rt().load(e,ir,t,a),n=i.data;return di.addFontData(n.face,n.size,n),i.data}async loadAtlas(e,t){return(await new Rt().load(e,sd,t,e)).data}async loadKMZ(e,t){return(await new Rt().load(e,ud,t)).data}normalTexture;maskTexture;whiteTexture;blackTexture;redTexture;blueTexture;greenTexture;yellowTexture;grayTexture;defaultSky;defaultGUITexture;defaultGUISprite;defaultMaterial;createTexture(e,t,a,r,i,n,o){let l=32,c=32,f=new Uint8Array(l*c*4);this.fillColor(f,e,t,a,r,i,n);let d=new ki;return d.name=o,d.create(16,16,f,!0),o&&this.addTexture(o,d),d}fillColor(e,t,a,r,i,n,o){for(let l=0;l<t;l++)for(let c=0;c<a;c++){let f=c*t+l;e[f*4+0]=r,e[f*4+1]=i,e[f*4+2]=n,e[f*4+3]=o}}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 $f().generateBRDFLUTTexture(),a=t.name="BRDFLUT";this.addTexture(a,t),this.defaultSky=new Os,this.defaultSky.createFromTexture(128,this.blackTexture),ke.getInstance().attached(this.defaultSky,this),ke.getInstance().attached(t,this),ke.getInstance().attached(this.normalTexture,this),ke.getInstance().attached(this.maskTexture,this),ke.getInstance().attached(this.whiteTexture,this),ke.getInstance().attached(this.blackTexture,this),ke.getInstance().attached(this.redTexture,this),ke.getInstance().attached(this.blueTexture,this),ke.getInstance().attached(this.greenTexture,this),ke.getInstance().attached(this.yellowTexture,this),ke.getInstance().attached(this.grayTexture,this),this.defaultGUITexture=new kr(this.whiteTexture),this.defaultGUISprite=new fi(this.defaultGUITexture),this.defaultGUISprite.trimSize.set(4,4),this.defaultMaterial=new aa}}class gd extends et{_postList;init(e){this._postList=new Map}start(){}stop(){}onEnable(){this.activePost()}onDisable(){this.unActivePost()}activePost(){let e=this.transform.view3D,t=_.getRenderJob(e);this._postList.forEach(a=>{t.addPost(a)})}unActivePost(){let e=this.transform.view3D,t=_.getRenderJob(e);this._postList.forEach(a=>{t.removePost(a)})}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 a=this.transform.view3D;_.getRenderJob(a).removePost(t)}getPost(e){return this._postList.has(e)?this._postList.get(e):null}}const Xb="1.0.48";class _{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 I.presentationSize}static get aspect(){return I.aspect}static get width(){return I.windowWidth}static get height(){return I.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 J(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",Xb),window.isSecureContext||console.warn("WebGPU is only supported in secure contexts (HTTPS or localhost)"),this.setting={...this.setting,...e.engineSetting},await Re.init(R.allocCount,this.setting.doublePrecision),await I.init(e.canvasConfig),this.setting.reflectionSetting.width=this.setting.reflectionSetting.reflectionProbeSize*6,this.setting.reflectionSetting.height=this.setting.reflectionSetting.reflectionProbeSize*this.setting.reflectionSetting.reflectionProbeMaxCount,ve.getGBufferFrame(ve.reflections_GBuffer,this.setting.reflectionSetting.width,this.setting.reflectionSetting.height,!1),Y.init(),Ka.init(),xe.init(),Nt.init(),Zt.init(),this.res=new bd,this.res.initDefault(),this._beforeRender=e.beforeRender,this._renderLoop=e.renderLoop,this._lateRender=e.lateRender,this.inputSystem=new Sl,this.inputSystem.initCanvas(I.canvas)}static startRenderJob(e){let t=new hf(e);return this.renderJobs.set(e,t),this.setting.pick.mode=="pixel"&&e.scene.getOrAddComponent(gd).addPost(so),(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 a=performance.now();await new Promise(r=>{setTimeout(()=>{e+=performance.now()-a,r(!0)},this._frameRateValue-t)})}this._time=e}await this.updateFrame(e),this._requestAnimationFrameID=0,this.resume()}static async updateFrame(e){We.delta=e-We.time,We.time=e,We.frame+=1,Fr.tick(We.delta);let t=this.views,a=0;for(a=0;a<t.length;a++){const n=t[a];n.scene.waitUpdate();let[o,l]=I.presentationSize;n.camera.viewPort.setTo(0,0,o,l)}this._beforeRender&&await this._beforeRender();for(const n of Oe.componentsBeforeUpdateList){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];f.enable&&d(o)}}let r=I.device.createCommandEncoder();for(const n of Oe.componentsComputeList){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];f.enable&&d(o,r)}}I.device.queue.submit([r.finish()]);for(const n of Oe.componentsUpdateList){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];f.enable&&d(o)}}for(const n of Oe.graphicComponent){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];o&&f.enable&&d(o)}}this._renderLoop&&await this._renderLoop(),Re.updateAllContinueTransform(0,R.useCount,16),xe.modelMatrixBindGroup.writeBuffer(R.useCount*16),this.renderJobs.forEach((n,o)=>{n.renderState||n.start(),n.renderFrame()});for(const n of Oe.componentsLateUpdateList){let o=n[0],l=n[1];for(const c of l){let f=c[0],d=c[1];f.enable&&d(o)}}this._lateRender&&await this._lateRender()}}let zs=`
7923
7923
  struct BloomCfg{
7924
7924
  downSampleStep: f32,
7925
7925
  downSampleBlurSize: f32,
@@ -11815,9 +11815,9 @@ fn frag(){
11815
11815
  }
11816
11816
 
11817
11817
  ${this.fs}
11818
- `}class Wo extends xt{_scissorRect;_screenSize=new de(1024,768);_scissorEnable=!1;constructor(e){super(),Y.register("GUI_shader_view",zo.GUI_shader_view),Y.register("GUI_shader_world",zo.GUI_shader_world);let t=new Dt;this.addColorPass(t,fe.COLOR,e),this.addColorPass(t,fe.UI,e),this.shader=t}addColorPass(e,t,a){let r=a==da.View?"GUI_shader_view":"GUI_shader_world",i=new qe(r,r);i.passType=t,i.setShaderEntry("VertMain","FragMain"),i.setUniformVector4("scissorRect",new be),i.setUniformVector2("screenSize",this._screenSize),i.setUniformFloat("scissorCornerRadius",0),i.setUniformFloat("scissorFadeOutSize",0),i.setUniformFloat("pixelRatio",1),i.setUniformVector3("v3",b.ZERO);let n=i.shaderState;n.depthWriteEnabled=!1,i.blendMode=De.NORMAL,i.depthCompare=a==da.View?nt.always:nt.less_equal,i.cullMode=Gt.back,e.addRenderPass(i)}setPanelRatio(e){this.shader.setUniformFloat("pixelRatio",e)}setScissorRect(e,t,a,r){this._scissorRect||=new be,this._scissorRect.set(e,t,a,r),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 a=e[t]||_.res.whiteTexture;this.shader.setTexture(`tex_${t}`,a),this.setVideoTextureDefine(t,a.isVideoTexture)}}_videoTextureFlags={};setVideoTextureDefine(e,t){let a=!1;t!=this._videoTextureFlags[e]&&(t?this.shader.setDefine(`VideoTexture${e}`,!0):this.shader.deleteDefine(`VideoTexture${e}`),this._videoTextureFlags[e]=t,a=!0),a&&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 hh extends he{_guiGeometry;init(e){super.init(),this.addRendererMask(Ne.UI),this.removeRendererMask(Ne.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,a,r){for(let i=0;i<this.materials.length;i++){let o=this.materials[i].getPass(t),l=this._guiGeometry.getPositionBuffer(),c=this._guiGeometry.getSpriteBuffer(),f=this._guiGeometry.getColorBuffer();if(o)for(let d=0;d<o.length;d++){const h=o[d];h.pipeline||(h.setStorageBuffer("vPositionBuffer",l),h.setStorageBuffer("vSpriteBuffer",c),h.setStorageBuffer("vColorBuffer",f))}}super.nodeUpdate(e,t,a,r)}onUpdate(e){}}class uh{_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 a;return this._unUse.length>0?(a=this._unUse[0],this._unUse.splice(0,1),this._use.push(a),a):(a=new e(t),this._use.push(a),a)}hasFree(){return this._unUse.length>0}}let ji;class ja{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=_.res.defaultGUISprite;_color=new J(1,1,1,1);_imageType=ui.Simple;dirtyAttributes=lt.MAX;cacheTextureId=-1;static textPool;static get quadPool(){return this.textPool||=new uh,this.textPool}static recycleQuad(e){e.sprite=null,e.dirtyAttributes=lt.MAX,e.x=0,e.y=0,e.z=-1,e.cacheTextureId=-1,ja.quadPool.pushBack(e)}static spawnQuad(){return ja.quadPool.getOne(ja)}get imageType(){return this._imageType}set imageType(e){this._imageType=e,this.setAttrChange(lt.SPRITE|lt.POSITION)}get color(){return this._color}set color(e){this._color.copyFrom(e),this.setAttrChange(lt.COLOR)}get visible(){return this._visible}set visible(e){e!=this._visible&&(this._visible=e,this.setAttrChange(lt.SPRITE))}get sprite(){return this._sprite}set sprite(e){this._sprite!=e&&(this._sprite=e,this.setAttrChange(lt.SPRITE|lt.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(lt.POSITION)}setXY(e,t){this.x=e,this.y=t,this.setAttrChange(lt.POSITION)}setAttrChange(e){this.dirtyAttributes=this.dirtyAttributes|e}applyTransform(e){this.setAttrChange(lt.POSITION);let t=this._sprite,a=e.getWorldMatrix();(this.x!=0||this.y!=0)&&(a=this.getQuadMatrix(a));let r=a.getScaleX(),i=a.getScaleY(),n=t.isSliced&&this._imageType==ui.Sliced;if(this._offsetX=e.width*.5*r,this._offsetY=e.height*.5*i,n)this._globalWidth=r*(e.width-(t.offsetSize.z-t.trimSize.x)),this._globalHeight=i*(e.height-(t.offsetSize.w-t.trimSize.y)),this._globalX=a.tx+t.offsetSize.x*r,this._globalY=a.ty+t.offsetSize.y*i;else{let o=this.width/t.offsetSize.z,l=this.height/t.offsetSize.w;this._globalWidth=r*t.trimSize.x*o,this._globalHeight=i*t.trimSize.y*l,this._globalX=a.tx+t.offsetSize.x*o*r,this._globalY=a.ty+t.offsetSize.y*l*i}return this}getQuadMatrix(e){return ji||=new zr,ji.identity(),ji.setTranslate(this.x,this.y),ji.mul(e),ji}writeToGeometry(e,t){return e.fillQuad(this,t),this.dirtyAttributes=lt.NONE,this}}class Jo extends et{_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(or),this._uiTransform.setNeedUpdateUIPanel()}copyComponent(e){return this.visible=e.visible,this}}class Zi extends Jo{_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 a=this.object3D.components.values();if(!e)for(let r of a){let i=r;if(!(i.isShadowless||i.isUIShadow)&&i.mainQuads){e=i;break}}if(!t)for(let r of a){let i=r;if(i.isUIShadow&&i.mainQuads){t=i;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),ja.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 Wr extends Zi{init(e){super.init?.(e),this.attachQuad(ja.spawnQuad()),this.sprite=_.res.defaultGUISprite}cloneTo(e){e.getOrAddComponent(Wr).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||=_.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 hs extends Wr{space=da.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(hs).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(I.canvas.width,I.canvas.height),this.create(this.space),this.visible=!1}updateDrawCallSegment(e,t,a){this._geometry.updateSubGeometry(e,t,a);let r=this._uiRenderer.material,i=this._uiRenderer.materials[e];if(!i){i=new Wo(this.space);let n=this._uiRenderer.materials.slice();n.push(i),this._uiRenderer.materials=n,i.cullMode=r.cullMode,i.depthCompare=r.depthCompare}}create(e){this._maxCount=this.space==da.World?Vr.quadMaxCountForWorld:Vr.quadMaxCountForView,this._uiRenderer=this.object3D.addComponent(hh),this._geometry=this._uiRenderer.geometry=new ch(this._maxCount).create(),this._uiRenderer.material=new Wo(e),this._uiRenderer.renderOrder=Vr.SortOrderStartWorld,this._rebuild=new dh,this.object3D.bound=new Ce(new b,new b(1,1,1).multiplyScalar(Number.MAX_VALUE*.1))}get quadMaxCount(){return this._maxCount}get renderer(){return this._uiRenderer}set billboard(e){this.space==da.View&&(e=pr.None,console.warn("Cannot enable billboard in view space")),e==pr.BillboardXYZ||e==pr.BillboardY?(this._billboard=this.object3D.getOrAddComponent(fs),this._billboard.type=e):(this.object3D.removeComponent(fs),this._billboard=null)}get billboard(){return this._billboard?this._billboard.type:pr.None}set cullMode(e){if(this.space==da.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,a=t._collectTransform;if(a.length=0,t.object3D.getComponents(or,a),a.length>0){t._rebuild.build(a,t,t.needUpdateGeometry);for(const o of a)o.needUpdateQuads=!1}let r=t.object3D.getComponentFromParent(ds),i=r?r.index:0;t._uiRenderer.enable=a.length>0;let n=t.isViewPanel?Vr.SortOrderStartView:Vr.SortOrderStartWorld;if(t._uiRenderer.renderOrder=i*Vr.SortOrderCanvasSpan+n+t.panelOrder,t._uiRenderer.needSortOnCameraZ=t.needSortOnCameraZ,this.space==da.View){let o=I.canvas.clientWidth,l=I.canvas.clientHeight,c=this._uiTransform.width,f=this._uiTransform.height;this.panelRatio=this.updateGUIPixelRatio(o,l,c,f)}else this.panelRatio=1;for(let o of t._uiRenderer.materials){let l=o;if(l.setPanelRatio(this.panelRatio),l.setScreenSize(I.canvas.clientWidth,I.canvas.clientHeight),l.setScissorEnable(t.scissorEnable),t.scissorEnable){let c=t.mainQuads[0];l.setScissorRect(c.left,c.bottom,c.right,c.top),l.setScissorCorner(t.scissorCornerRadius,t.scissorFadeOutSize)}}t.needUpdateGeometry=!1}updateGUIPixelRatio(e,t,a,r){let i=a/r,n=e/t,o=1;return i<n?o=t/r:o=e/a,o}}class bn extends hs{isViewPanel=!0;space=da.View;constructor(){super()}cloneTo(e){e.getOrAddComponent(bn).copyComponent(this)}}class gn extends hs{isWorldPanel=!0;space=da.World;_depthTest=!0;constructor(){super()}cloneTo(e){e.getOrAddComponent(gn).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?nt.less_equal:nt.always;for(let a of this._uiRenderer.materials)a.depthCompare=t}}}let bh;class or extends et{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 zr,this._worldMatrix=new zr}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((a,r)=>{let i=a;if(i.onUITransformVisible)if(i==this)for(let n of this.object3D.entityChildren){let o=n.getComponent(or);o&&o.onUITransformVisible(this._globalVisible)}else i.onUITransformVisible(this._globalVisible)}))}onParentChange(e,t){this.parent?.setNeedUpdateUIPanel(),this.parent=t?.getComponent(or),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 a of this.object3D.components.values())a.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 a=this.object3D.localPosition;a.set(e,t,a.z),this.object3D.localPosition=a,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(or,this._tempTransforms,!0);for(let a of t)a._onChange=!0,a.needUpdateQuads=!0}}onEnable(){this.setNeedUpdateUIPanel(),this.onChange=!0}onDisable(){this.setNeedUpdateUIPanel(),this.onChange=!0}setNeedUpdateUIPanel(){let e;e=this.object3D.getComponentFromParent(gn),e||(e=this.object3D.getComponentFromParent(bn)),e&&(e.needUpdateGeometry=!0)}cloneTo(e){let t=e.getOrAddComponent(or);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)&&(bh||=new zr().identity(),e.mul(bh.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 gh{_ray;_mouseCode;_clickEvent;_outEvent;_overEvent;_upEvent;_downEvent;_view;init(e){this._view=e,this._ray=new ba,this._clickEvent=new Ct(Ct.PICK_CLICK_GUI),this._outEvent=new Ct(Ct.PICK_OUT_GUI),this._overEvent=new Ct(Ct.PICK_OVER_GUI),this._upEvent=new Ct(Ct.PICK_UP_GUI),this._downEvent=new Ct(Ct.PICK_DOWN_GUI),_.inputSystem.addEventListener(Z.POINTER_DOWN,this.onTouchDown,this,null,1),_.inputSystem.addEventListener(Z.POINTER_UP,this.onTouchUp,this,null,1),_.inputSystem.addEventListener(Z.POINTER_MOVE,this.onTouchMove,this,null,1),_.inputSystem.addEventListener(Z.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 a=t.collider;a!=this._lastOverTarget&&(a.mouseStyle=at.OVER,Object.assign(this._overEvent,e),this._overEvent.type=Ct.PICK_OVER_GUI,this._overEvent.target=a.object3D,this._overEvent.data=t,a.object3D.dispatchEvent(this._overEvent),this._lastOverTarget&&(this._lastOverTarget.mouseStyle=at.NORMAL,Object.assign(this._outEvent,e),this._outEvent.type=Ct.PICK_OUT_GUI,this._outEvent.target=a.object3D,this._outEvent.data=t,this._lastOverTarget.object3D.dispatchEvent(this._outEvent))),this._lastOverTarget=a}else this._lastOverTarget&&(this._lastOverTarget.mouseStyle=at.NORMAL,Object.assign(this._outEvent,e),this._outEvent.type=Ct.PICK_OUT_GUI,this._outEvent.target=this._lastOverTarget.object3D,this._outEvent.data=t,this._lastOverTarget.object3D.dispatchEvent(this._outEvent),this._lastOverTarget=null)}_lastDownPosition=new de;_calcDistanceVec2=new de;_lastDownTime=0;_clickTimeSpan=200;_clickDistanceSpan=10;onTouchDown(e){this._lastDownTime=We.time,this._lastDownPosition.set(e.mouseX,e.mouseY),this._mouseCode=e.mouseCode,this.collectEntities();let t=this.pick(this._colliderOut);t&&e.stopImmediatePropagation();let a=t?t.collider:null;a&&(a.mouseStyle=at.DOWN,Object.assign(this._downEvent,e),this._downEvent.type=Ct.PICK_DOWN_GUI,this._downEvent.target=a.object3D,this._downEvent.data=t,a.object3D.dispatchEvent(this._downEvent)),this._lastDownTarget=a}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 a=t?t.collider:null;this._lastDownTarget&&this._lastDownTarget.enable&&(this._lastDownTarget.mouseStyle=at.NORMAL),a&&a==this._lastDownTarget&&We.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=Ct.PICK_CLICK_GUI,this._clickEvent.target=a.object3D,this._clickEvent.data=t,a.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 a=t.object3D.getComponentsByProperty("isUIPanel",!0,!0);a.sort((r,i)=>{let n=r._uiRenderer.__renderOrder,o=i._uiRenderer.__renderOrder;return n>o?-1:1});for(let r of a){this._transformList.length=0,r.object3D.getComponents(or,this._transformList),this._transformList.reverse();for(const i of this._transformList){let n=i.uiInteractiveList;if(n&&n.length>0)for(let o of n)this._colliderOut.push(o),this._iteractive2PanelDict.set(o,r)}}}}),this._colliderOut}pick(e){this._ray=this._view.camera.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY);let t=new de(_.inputSystem.mouseX,_.inputSystem.mouseY),a=new de(I.canvas.clientWidth,I.canvas.clientHeight),r;for(const i of e)if(i.interactive&&i.enable&&i.interactiveVisible){let n=this._iteractive2PanelDict.get(i);if(r=i.rayPick(this._ray,n,t,a),r)return r.collider=i,r}return null}}var ph=(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))(ph||{}),mh=(s=>(s[s.ON_LINE=0]="ON_LINE",s[s.LEFT_SIDE=1]="LEFT_SIDE",s[s.RIGHT_SIDE=2]="RIGHT_SIDE",s))(mh||{});class yt{static cacluteLine0=new yt(null,null);static cacluteLine1=new yt(null,null);start;end;color=new J(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=b.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 a=0;a<e.length;a++){let r=a,i=Pn(a+1,e.length),n=e[r],o=e[i];t.push(new yt(n,o))}return t}intersection(e,t=null){var a=(e.end.z-e.start.z)*(this.end.x-this.start.x)-(e.end.x-e.start.x)*(this.end.z-this.start.z),r=(e.end.x-e.start.x)*(this.start.z-e.start.z)-(e.end.z-e.start.z)*(this.start.x-e.start.x),i=(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(a==0)return r==0&&i==0?0:5;r=r/a,i=i/a;var n=this.start.x+r*(this.end.x-this.start.x),o=this.start.z+r*(this.end.z-this.start.z);return t!=null&&(t.x=n,t.y=0,t.z=o),r>=0&&r<=1&&i>=0&&i<=1?2:i>=0&&i<=1?3:r>=0&&r<=1?4:1}getDirection(){var e=this.end.subtract(this.start),t=new b(e.x,e.y);return t.normalize()}copyFrom(e){this.start||(this.start=new b),this.end||(this.end=new b),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,a){let r=e.start,i=e.end,n=t.start,o=t.end,l=r.x,c=r.y,f=r.z,d=i.x,h=i.y,u=i.z,m=n.x,g=n.y,p=n.z,A=o.x,D=o.y,B=o.z,v=d-l,U=h-c,y=u-f,S=A-m,F=D-g,C=B-p,w=l-m,E=c-g,Q=f-p,T=v*v+U*U+y*y,j=v*S+U*F+y*C,ue=S*S+F*F+C*C,ee=v*w+U*E+y*Q,N=S*w+F*E+C*Q,M=T*ue-j*j,O=M,W=M,ae=0,z=0;this.IsEqual(M,0)?(ae=0,O=1,z=N,W=ue):(ae=j*N-ue*ee,z=T*N-j*ee,ae<0?(ae=0,z=N,W=ue):ae>O&&(ae=O,z=N+j,W=ue)),z<0?(z=0,-ee<0?ae=0:-ee>T?ae=O:(ae=-ee,O=T)):z>W&&(z=W,-ee+j<0?ae=0:-ee+j>T?ae=O:(ae=-ee+j,O=T));let K=0,$=0;this.IsEqual(ae,0)?K=0:K=ae/O,this.IsEqual(z,0)?$=0:$=z/W;let re=w+K*v-$*S,ce=E+K*U-$*F,Ae=Q+K*y-$*C;return re*re+ce*ce+Ae*Ae}isNear(e,t=0,a){let r=b.HELP_0,i=b.HELP_1;r.copyFrom(e.origin),i.copyFrom(e.direction),i.scaleBy(9999),i.add(r,i),yt.cacluteLine0.set(r,i),yt.cacluteLine1.copyFrom(this),a&&(a.perspectiveMultiplyPoint3(yt.cacluteLine1.start,yt.cacluteLine1.start),a.perspectiveMultiplyPoint3(yt.cacluteLine1.end,yt.cacluteLine1.end));let n=yt.squreDistanceSegmentToSegment(yt.cacluteLine0,yt.cacluteLine1,a);return n+1e-4<=t?(e.length=n,!0):(e.length=-999999,!1)}}class us{static ID=-1;v1;v2;v3;u1;u2;u3;n1;n2;n3;t0;t;u;v;min=new b;max=new b;id=0;constructor(e,t,a){this.id=us.ID+++200,e&&t&&a&&this.set(e,t,a)}set(e,t,a){this.v1=e,this.v2=t,this.v3=a;let r=this.min,i=this.max;return r.x=Math.min(this.v1.x,this.v2.x,this.v3.x),r.y=Math.min(this.v1.y,this.v2.y,this.v3.y),r.z=Math.min(this.v1.z,this.v2.z,this.v3.z),i.x=Math.max(this.v1.x,this.v2.x,this.v3.x),i.y=Math.max(this.v1.y,this.v2.y,this.v3.y),i.z=Math.max(this.v1.z,this.v2.z,this.v3.z),this}getNormal(){let e=this.v1,t=this.v2,a=this.v3,r=new b(t.x-e.x,t.y-e.y,t.z-e.z),n=new b(a.x-e.x,a.y-e.y,a.z-e.z).crossProduct(r);return n.normalize(),n}turnBack(){let e=this.v3;this.v3=this.v1,this.v1=e}getLines(){let e=this.v1,t=this.v2,a=this.v3;return[new yt(e,t),new yt(t,a),new yt(a,e)]}equals(e){let t=this.getLines(),a=e.getLines(),r=0;for(let i=0;i<t.length;i++)for(let n=0;n<a.length;n++)t[i].equals(a[n])&&r++;return r==3}getCenter(){let e=this.min,t=this.max,a=new b;return a.x=(e.x+t.x)*.5,a.y=(e.y+t.y)*.5,a.z=(e.z+t.z)*.5,a}intersects(e){var t=this.max,a=this.min,r=e.max,i=e.min;return a.x<=r.x&&t.x>=i.x&&a.y<=r.y&&t.y>=i.y&&a.z<=r.z&&t.z>=i.z}sign2D(e,t,a){return(e.x-a.x)*(t.z-a.z)-(t.x-a.x)*(e.z-a.z)}pointInTriangle2D(e){let t=this.v1,a=this.v2,r=this.v3,i,n,o,l,c;return i=this.sign2D(e,t,a),n=this.sign2D(e,a,r),o=this.sign2D(e,r,t),l=i<0||n<0||o<0,c=i>0||n>0||o>0,!(l&&c)}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 Ah{static _pt0;static _pt1;static _pt2;static _pt3;static _hitPoint;static _worldMatrix;static _ray;static _triangle;static _isInit;static init(){this._pt0=new b,this._pt1=new b,this._pt2=new b,this._pt3=new b,this._ray=new ba,this._triangle=new us,this._hitPoint=new b,this._worldMatrix=new R}static rayPick(e,t,a,r,i,n,o){this._isInit||(this.init(),this._isInit=!0);let l=this._worldMatrix;if(r==da.World){let c;this.calculateHotArea_World(n,this._pt0,this._pt1,this._pt2,this._pt3),l.copyFrom(o).invert();let f=this._ray;if(f.copy(e).applyMatrix(l),this._triangle.set(this._pt0,this._pt1,this._pt2),c=f.intersectTriangle(f.origin,f.direction,this._triangle),c||(this._triangle.set(this._pt1,this._pt2,this._pt3),c=f.intersectTriangle(f.origin,f.direction,this._triangle)),c)return{distance:0,intersectPoint:c}}else{this.calculateHotArea_View(n,i,this._pt0,this._pt1,this._pt2,this._pt3);let c=a.x,f=a.y,d=Math.min(this._pt0.x,this._pt1.x,this._pt2.x,this._pt3.x)+c*.5,h=Math.min(this._pt0.y,this._pt1.y,this._pt2.y,this._pt3.y)+f*.5,u=Math.max(this._pt0.x,this._pt1.x,this._pt2.x,this._pt3.x)+c*.5,m=Math.max(this._pt0.y,this._pt1.y,this._pt2.y,this._pt3.y)+f*.5;return t.x<=u&&t.x>=d&&t.y<=m&&t.y>=h?(this._hitPoint.set(t.x,t.y,0),{distance:0,intersectPoint:this._hitPoint}):null}return null}static calculateHotArea_View(e,t,a,r,i,n){let o=e.getWorldMatrix(),l=o.getScaleX(),c=o.getScaleY(),f=e.width*.5*l,d=e.height*.5*c;a.set(-f,-d,0),r.set(f,-d,0),i.set(-f,d,0),n.set(f,d,0);let h=o.tx;a.x+=h,r.x+=h,i.x+=h,n.x+=h,h=o.ty,a.y-=h,r.y-=h,i.y-=h,n.y-=h,a.multiplyScalar(t),r.multiplyScalar(t),i.multiplyScalar(t),n.multiplyScalar(t)}static calculateHotArea_World(e,t,a,r,i){let n=e.getWorldMatrix(),o=n.getScaleX(),l=n.getScaleY(),c=e.width*.5*o,f=e.height*.5*l;t.set(-c,f,0),a.set(c,f,0),r.set(-c,-f,0),i.set(c,-f,0);let d=n.tx;t.x+=d,a.x+=d,r.x+=d,i.x+=d,d=n.ty,t.y+=d,a.y+=d,r.y+=d,i.y+=d}}var Dh=(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))(Dh||{}),_h=(s=>(s[s.Upper=0]="Upper",s[s.Middle=1]="Middle",s[s.Lower=2]="Lower",s))(_h||{}),Bh=(s=>(s[s.Left=0]="Left",s[s.Center=1]="Center",s[s.Right=2]="Right",s))(Bh||{});class vh{charList=[];quadList=[];width=0;index=0}class xh{layout(e){let t=[],a=e.originSize,r=di.getFontData(e.font,a),i=e.fontSize/a;return this.makeTextLine(e.uiTransform,e.alignment,t,e.font,r,e.text,i,a,e.lineSpacing),t}makeTextLine(e,t,a,r,i,n,o,l,c){let f=-1,d=0,h=l*o,u=h*.5,m=e.width/o,g=e.height/o,p=0,A=e.height,D=()=>{d=0,f++;let y=new vh;return y.index=f,a.push(y),y},B=(y,S)=>{const F=y.charCodeAt(0).toString();let C=di.getFnt(r,l,F),w=null;return C?(w=ja.spawnQuad(),w.sprite=C,w.x=(d+C.xoffset)*o-p,w.y=(i.base-C.height-C.yoffset-i.base)*o+A,w.width=C.offsetSize.width*o,w.height=C.offsetSize.height*o,d+=C.xadvance):y==`
11818
+ `}class Wo extends xt{_scissorRect;_screenSize=new de(1024,768);_scissorEnable=!1;constructor(e){super(),Y.register("GUI_shader_view",zo.GUI_shader_view),Y.register("GUI_shader_world",zo.GUI_shader_world);let t=new Dt;this.addColorPass(t,fe.COLOR,e),this.addColorPass(t,fe.UI,e),this.shader=t}addColorPass(e,t,a){let r=a==da.View?"GUI_shader_view":"GUI_shader_world",i=new qe(r,r);i.passType=t,i.setShaderEntry("VertMain","FragMain"),i.setUniformVector4("scissorRect",new be),i.setUniformVector2("screenSize",this._screenSize),i.setUniformFloat("scissorCornerRadius",0),i.setUniformFloat("scissorFadeOutSize",0),i.setUniformFloat("pixelRatio",1),i.setUniformVector3("v3",b.ZERO);let n=i.shaderState;n.depthWriteEnabled=!1,i.blendMode=De.NORMAL,i.depthCompare=a==da.View?nt.always:nt.less_equal,i.cullMode=Gt.back,e.addRenderPass(i)}setPanelRatio(e){this.shader.setUniformFloat("pixelRatio",e)}setScissorRect(e,t,a,r){this._scissorRect||=new be,this._scissorRect.set(e,t,a,r),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 a=e[t]||_.res.whiteTexture;this.shader.setTexture(`tex_${t}`,a),this.setVideoTextureDefine(t,a.isVideoTexture)}}_videoTextureFlags={};setVideoTextureDefine(e,t){let a=!1;t!=this._videoTextureFlags[e]&&(t?this.shader.setDefine(`VideoTexture${e}`,!0):this.shader.deleteDefine(`VideoTexture${e}`),this._videoTextureFlags[e]=t,a=!0),a&&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 hh extends he{_guiGeometry;init(e){super.init(),this.addRendererMask(Ne.UI),this.removeRendererMask(Ne.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,a,r){for(let i=0;i<this.materials.length;i++){let o=this.materials[i].getPass(t),l=this._guiGeometry.getPositionBuffer(),c=this._guiGeometry.getSpriteBuffer(),f=this._guiGeometry.getColorBuffer();if(o)for(let d=0;d<o.length;d++){const h=o[d];h.pipeline||(h.setStorageBuffer("vPositionBuffer",l),h.setStorageBuffer("vSpriteBuffer",c),h.setStorageBuffer("vColorBuffer",f))}}super.nodeUpdate(e,t,a,r)}onUpdate(e){}}class uh{_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 a;return this._unUse.length>0?(a=this._unUse[0],this._unUse.splice(0,1),this._use.push(a),a):(a=new e(t),this._use.push(a),a)}hasFree(){return this._unUse.length>0}}let ji;class ja{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=_.res.defaultGUISprite;_color=new J(1,1,1,1);_imageType=ui.Simple;dirtyAttributes=lt.MAX;cacheTextureId=-1;static textPool;static get quadPool(){return this.textPool||=new uh,this.textPool}static recycleQuad(e){e.sprite=null,e.dirtyAttributes=lt.MAX,e.x=0,e.y=0,e.z=-1,e.cacheTextureId=-1,ja.quadPool.pushBack(e)}static spawnQuad(){return ja.quadPool.getOne(ja)}get imageType(){return this._imageType}set imageType(e){this._imageType=e,this.setAttrChange(lt.SPRITE|lt.POSITION)}get color(){return this._color}set color(e){this._color.copyFrom(e),this.setAttrChange(lt.COLOR)}get visible(){return this._visible}set visible(e){e!=this._visible&&(this._visible=e,this.setAttrChange(lt.SPRITE))}get sprite(){return this._sprite}set sprite(e){this._sprite!=e&&(this._sprite=e,this.setAttrChange(lt.SPRITE|lt.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(lt.POSITION)}setXY(e,t){this.x=e,this.y=t,this.setAttrChange(lt.POSITION)}setAttrChange(e){this.dirtyAttributes=this.dirtyAttributes|e}applyTransform(e){this.setAttrChange(lt.POSITION);let t=this._sprite,a=e.getWorldMatrix();(this.x!=0||this.y!=0)&&(a=this.getQuadMatrix(a));let r=a.getScaleX(),i=a.getScaleY(),n=t.isSliced&&this._imageType==ui.Sliced;if(this._offsetX=e.width*.5*r,this._offsetY=e.height*.5*i,n)this._globalWidth=r*(e.width-(t.offsetSize.z-t.trimSize.x)),this._globalHeight=i*(e.height-(t.offsetSize.w-t.trimSize.y)),this._globalX=a.tx+t.offsetSize.x*r,this._globalY=a.ty+t.offsetSize.y*i;else{let o=this.width/t.offsetSize.z,l=this.height/t.offsetSize.w;this._globalWidth=r*t.trimSize.x*o,this._globalHeight=i*t.trimSize.y*l,this._globalX=a.tx+t.offsetSize.x*o*r,this._globalY=a.ty+t.offsetSize.y*l*i}return this}getQuadMatrix(e){return ji||=new zr,ji.identity(),ji.setTranslate(this.x,this.y),ji.mul(e),ji}writeToGeometry(e,t){return e.fillQuad(this,t),this.dirtyAttributes=lt.NONE,this}}class Jo extends et{_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(or),this._uiTransform.setNeedUpdateUIPanel()}copyComponent(e){return this.visible=e.visible,this}}class Zi extends Jo{_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 a=this.object3D.components.values();if(!e)for(let r of a){let i=r;if(!(i.isShadowless||i.isUIShadow)&&i.mainQuads){e=i;break}}if(!t)for(let r of a){let i=r;if(i.isUIShadow&&i.mainQuads){t=i;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),ja.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 Wr extends Zi{init(e){super.init?.(e),this.attachQuad(ja.spawnQuad()),this.sprite=_.res.defaultGUISprite}cloneTo(e){e.getOrAddComponent(Wr).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||=_.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 hs extends Wr{space=da.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(hs).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(I.canvas.width,I.canvas.height),this.create(this.space),this.visible=!1}updateDrawCallSegment(e,t,a){this._geometry.updateSubGeometry(e,t,a);let r=this._uiRenderer.material,i=this._uiRenderer.materials[e];if(!i){i=new Wo(this.space);let n=this._uiRenderer.materials.slice();n.push(i),this._uiRenderer.materials=n,i.cullMode=r.cullMode,i.depthCompare=r.depthCompare}}create(e){this._maxCount=this.space==da.World?Vr.quadMaxCountForWorld:Vr.quadMaxCountForView,this._uiRenderer=this.object3D.addComponent(hh),this._geometry=this._uiRenderer.geometry=new ch(this._maxCount).create(),this._uiRenderer.material=new Wo(e),this._uiRenderer.renderOrder=Vr.SortOrderStartWorld,this._rebuild=new dh,this.object3D.bound=new Ce(new b,new b(1,1,1).multiplyScalar(Number.MAX_VALUE*.1))}get quadMaxCount(){return this._maxCount}get renderer(){return this._uiRenderer}set billboard(e){this.space==da.View&&(e=pr.None,console.warn("Cannot enable billboard in view space")),e==pr.BillboardXYZ||e==pr.BillboardY?(this._billboard=this.object3D.getOrAddComponent(fs),this._billboard.type=e):(this.object3D.removeComponent(fs),this._billboard=null)}get billboard(){return this._billboard?this._billboard.type:pr.None}set cullMode(e){if(this.space==da.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,a=t._collectTransform;if(a.length=0,t.object3D.getComponents(or,a),a.length>0){t._rebuild.build(a,t,t.needUpdateGeometry);for(const o of a)o.needUpdateQuads=!1}let r=t.object3D.getComponentFromParent(ds),i=r?r.index:0;t._uiRenderer.enable=a.length>0;let n=t.isViewPanel?Vr.SortOrderStartView:Vr.SortOrderStartWorld;if(t._uiRenderer.renderOrder=i*Vr.SortOrderCanvasSpan+n+t.panelOrder,t._uiRenderer.needSortOnCameraZ=t.needSortOnCameraZ,this.space==da.View){let o=I.canvas.clientWidth,l=I.canvas.clientHeight,c=this._uiTransform.width,f=this._uiTransform.height;this.panelRatio=this.updateGUIPixelRatio(o,l,c,f)}else this.panelRatio=1;for(let o of t._uiRenderer.materials){let l=o;if(l.setPanelRatio(this.panelRatio),l.setScreenSize(I.canvas.clientWidth,I.canvas.clientHeight),l.setScissorEnable(t.scissorEnable),t.scissorEnable){let c=t.mainQuads[0];l.setScissorRect(c.left,c.bottom,c.right,c.top),l.setScissorCorner(t.scissorCornerRadius,t.scissorFadeOutSize)}}t.needUpdateGeometry=!1}updateGUIPixelRatio(e,t,a,r){let i=a/r,n=e/t,o=1;return i<n?o=t/r:o=e/a,o}}class bn extends hs{isViewPanel=!0;space=da.View;constructor(){super()}cloneTo(e){e.getOrAddComponent(bn).copyComponent(this)}}class gn extends hs{isWorldPanel=!0;space=da.World;_depthTest=!0;constructor(){super()}cloneTo(e){e.getOrAddComponent(gn).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?nt.less_equal:nt.always;for(let a of this._uiRenderer.materials)a.depthCompare=t}}}let bh;class or extends et{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 zr,this._worldMatrix=new zr}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((a,r)=>{let i=a;if(i.onUITransformVisible)if(i==this)for(let n of this.object3D.entityChildren){let o=n.getComponent(or);o&&o.onUITransformVisible(this._globalVisible)}else i.onUITransformVisible(this._globalVisible)}))}onParentChange(e,t){this.parent?.setNeedUpdateUIPanel(),this.parent=t?.getComponent(or),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 a of this.object3D.components.values())a.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 a=this.object3D.localPosition;a.set(e,t,a.z),this.object3D.localPosition=a,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(or,this._tempTransforms,!0);for(let a of t)a._onChange=!0,a.needUpdateQuads=!0}}onEnable(){this.setNeedUpdateUIPanel(),this.onChange=!0}onDisable(){this.setNeedUpdateUIPanel(),this.onChange=!0}setNeedUpdateUIPanel(){let e;e=this.object3D.getComponentFromParent(gn),e||(e=this.object3D.getComponentFromParent(bn)),e&&(e.needUpdateGeometry=!0)}cloneTo(e){let t=e.getOrAddComponent(or);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)&&(bh||=new zr().identity(),e.mul(bh.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 gh{_ray;_mouseCode;_clickEvent;_outEvent;_overEvent;_upEvent;_downEvent;_view;init(e){this._view=e,this._ray=new ba,this._clickEvent=new Ct(Ct.PICK_CLICK_GUI),this._outEvent=new Ct(Ct.PICK_OUT_GUI),this._overEvent=new Ct(Ct.PICK_OVER_GUI),this._upEvent=new Ct(Ct.PICK_UP_GUI),this._downEvent=new Ct(Ct.PICK_DOWN_GUI),_.inputSystem.addEventListener(Z.POINTER_DOWN,this.onTouchDown,this,null,1),_.inputSystem.addEventListener(Z.POINTER_UP,this.onTouchUp,this,null,1),_.inputSystem.addEventListener(Z.POINTER_MOVE,this.onTouchMove,this,null,1),_.inputSystem.addEventListener(Z.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 a=t.collider;a!=this._lastOverTarget&&(a.mouseStyle=at.OVER,Object.assign(this._overEvent,e),this._overEvent.type=Ct.PICK_OVER_GUI,this._overEvent.target=a.object3D,this._overEvent.data=t,a.object3D.dispatchEvent(this._overEvent),this._lastOverTarget&&(this._lastOverTarget.mouseStyle=at.NORMAL,Object.assign(this._outEvent,e),this._outEvent.type=Ct.PICK_OUT_GUI,this._outEvent.target=a.object3D,this._outEvent.data=t,this._lastOverTarget.object3D.dispatchEvent(this._outEvent))),this._lastOverTarget=a}else this._lastOverTarget&&(this._lastOverTarget.mouseStyle=at.NORMAL,Object.assign(this._outEvent,e),this._outEvent.type=Ct.PICK_OUT_GUI,this._outEvent.target=this._lastOverTarget.object3D,this._outEvent.data=t,this._lastOverTarget.object3D.dispatchEvent(this._outEvent),this._lastOverTarget=null)}_lastDownPosition=new de;_calcDistanceVec2=new de;_lastDownTime=0;_clickTimeSpan=200;_clickDistanceSpan=10;onTouchDown(e){this._lastDownTime=We.time,this._lastDownPosition.set(e.mouseX,e.mouseY),this._mouseCode=e.mouseCode,this.collectEntities();let t=this.pick(this._colliderOut);t&&e.stopImmediatePropagation();let a=t?t.collider:null;a&&(a.mouseStyle=at.DOWN,Object.assign(this._downEvent,e),this._downEvent.type=Ct.PICK_DOWN_GUI,this._downEvent.target=a.object3D,this._downEvent.data=t,a.object3D.dispatchEvent(this._downEvent)),this._lastDownTarget=a}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 a=t?t.collider:null;this._lastDownTarget&&this._lastDownTarget.enable&&(this._lastDownTarget.mouseStyle=at.NORMAL),a&&a==this._lastDownTarget&&We.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=Ct.PICK_CLICK_GUI,this._clickEvent.target=a.object3D,this._clickEvent.data=t,a.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 a=t.object3D.getComponentsByProperty("isUIPanel",!0,!0);a.sort((r,i)=>{let n=r._uiRenderer.__renderOrder,o=i._uiRenderer.__renderOrder;return n>o?-1:1});for(let r of a){this._transformList.length=0,r.object3D.getComponents(or,this._transformList),this._transformList.reverse();for(const i of this._transformList){let n=i.uiInteractiveList;if(n&&n.length>0)for(let o of n)this._colliderOut.push(o),this._iteractive2PanelDict.set(o,r)}}}}),this._colliderOut}pick(e){this._ray=this._view.camera.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY);let t=new de(_.inputSystem.mouseX,_.inputSystem.mouseY),a=new de(I.canvas.clientWidth,I.canvas.clientHeight),r;for(const i of e)if(i.interactive&&i.enable&&i.interactiveVisible){let n=this._iteractive2PanelDict.get(i);if(r=i.rayPick(this._ray,n,t,a),r)return r.collider=i,r}return null}}var ph=(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))(ph||{}),mh=(s=>(s[s.ON_LINE=0]="ON_LINE",s[s.LEFT_SIDE=1]="LEFT_SIDE",s[s.RIGHT_SIDE=2]="RIGHT_SIDE",s))(mh||{});class yt{static cacluteLine0=new yt(null,null);static cacluteLine1=new yt(null,null);start;end;color=new J(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=b.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 a=0;a<e.length;a++){let r=a,i=Pn(a+1,e.length),n=e[r],o=e[i];t.push(new yt(n,o))}return t}intersection(e,t=null){var a=(e.end.z-e.start.z)*(this.end.x-this.start.x)-(e.end.x-e.start.x)*(this.end.z-this.start.z),r=(e.end.x-e.start.x)*(this.start.z-e.start.z)-(e.end.z-e.start.z)*(this.start.x-e.start.x),i=(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(a==0)return r==0&&i==0?0:5;r=r/a,i=i/a;var n=this.start.x+r*(this.end.x-this.start.x),o=this.start.z+r*(this.end.z-this.start.z);return t!=null&&(t.x=n,t.y=0,t.z=o),r>=0&&r<=1&&i>=0&&i<=1?2:i>=0&&i<=1?3:r>=0&&r<=1?4:1}getDirection(){var e=this.end.subtract(this.start),t=new b(e.x,e.y);return t.normalize()}copyFrom(e){this.start||(this.start=new b),this.end||(this.end=new b),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,a){let r=e.start,i=e.end,n=t.start,o=t.end,l=r.x,c=r.y,f=r.z,d=i.x,h=i.y,u=i.z,m=n.x,g=n.y,p=n.z,A=o.x,D=o.y,B=o.z,v=d-l,x=h-c,y=u-f,S=A-m,F=D-g,C=B-p,w=l-m,E=c-g,Q=f-p,T=v*v+x*x+y*y,j=v*S+x*F+y*C,ue=S*S+F*F+C*C,ee=v*w+x*E+y*Q,N=S*w+F*E+C*Q,M=T*ue-j*j,O=M,W=M,ae=0,z=0;this.IsEqual(M,0)?(ae=0,O=1,z=N,W=ue):(ae=j*N-ue*ee,z=T*N-j*ee,ae<0?(ae=0,z=N,W=ue):ae>O&&(ae=O,z=N+j,W=ue)),z<0?(z=0,-ee<0?ae=0:-ee>T?ae=O:(ae=-ee,O=T)):z>W&&(z=W,-ee+j<0?ae=0:-ee+j>T?ae=O:(ae=-ee+j,O=T));let K=0,$=0;this.IsEqual(ae,0)?K=0:K=ae/O,this.IsEqual(z,0)?$=0:$=z/W;let re=w+K*v-$*S,ce=E+K*x-$*F,Ae=Q+K*y-$*C;return re*re+ce*ce+Ae*Ae}isNear(e,t=0,a){let r=b.HELP_0,i=b.HELP_1;r.copyFrom(e.origin),i.copyFrom(e.direction),i.scaleBy(9999),i.add(r,i),yt.cacluteLine0.set(r,i),yt.cacluteLine1.copyFrom(this),a&&(a.perspectiveMultiplyPoint3(yt.cacluteLine1.start,yt.cacluteLine1.start),a.perspectiveMultiplyPoint3(yt.cacluteLine1.end,yt.cacluteLine1.end));let n=yt.squreDistanceSegmentToSegment(yt.cacluteLine0,yt.cacluteLine1,a);return n+1e-4<=t?(e.length=n,!0):(e.length=-999999,!1)}}class us{static ID=-1;v1;v2;v3;u1;u2;u3;n1;n2;n3;t0;t;u;v;min=new b;max=new b;id=0;constructor(e,t,a){this.id=us.ID+++200,e&&t&&a&&this.set(e,t,a)}set(e,t,a){this.v1=e,this.v2=t,this.v3=a;let r=this.min,i=this.max;return r.x=Math.min(this.v1.x,this.v2.x,this.v3.x),r.y=Math.min(this.v1.y,this.v2.y,this.v3.y),r.z=Math.min(this.v1.z,this.v2.z,this.v3.z),i.x=Math.max(this.v1.x,this.v2.x,this.v3.x),i.y=Math.max(this.v1.y,this.v2.y,this.v3.y),i.z=Math.max(this.v1.z,this.v2.z,this.v3.z),this}getNormal(){let e=this.v1,t=this.v2,a=this.v3,r=new b(t.x-e.x,t.y-e.y,t.z-e.z),n=new b(a.x-e.x,a.y-e.y,a.z-e.z).crossProduct(r);return n.normalize(),n}turnBack(){let e=this.v3;this.v3=this.v1,this.v1=e}getLines(){let e=this.v1,t=this.v2,a=this.v3;return[new yt(e,t),new yt(t,a),new yt(a,e)]}equals(e){let t=this.getLines(),a=e.getLines(),r=0;for(let i=0;i<t.length;i++)for(let n=0;n<a.length;n++)t[i].equals(a[n])&&r++;return r==3}getCenter(){let e=this.min,t=this.max,a=new b;return a.x=(e.x+t.x)*.5,a.y=(e.y+t.y)*.5,a.z=(e.z+t.z)*.5,a}intersects(e){var t=this.max,a=this.min,r=e.max,i=e.min;return a.x<=r.x&&t.x>=i.x&&a.y<=r.y&&t.y>=i.y&&a.z<=r.z&&t.z>=i.z}sign2D(e,t,a){return(e.x-a.x)*(t.z-a.z)-(t.x-a.x)*(e.z-a.z)}pointInTriangle2D(e){let t=this.v1,a=this.v2,r=this.v3,i,n,o,l,c;return i=this.sign2D(e,t,a),n=this.sign2D(e,a,r),o=this.sign2D(e,r,t),l=i<0||n<0||o<0,c=i>0||n>0||o>0,!(l&&c)}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 Ah{static _pt0;static _pt1;static _pt2;static _pt3;static _hitPoint;static _worldMatrix;static _ray;static _triangle;static _isInit;static init(){this._pt0=new b,this._pt1=new b,this._pt2=new b,this._pt3=new b,this._ray=new ba,this._triangle=new us,this._hitPoint=new b,this._worldMatrix=new R}static rayPick(e,t,a,r,i,n,o){this._isInit||(this.init(),this._isInit=!0);let l=this._worldMatrix;if(r==da.World){let c;this.calculateHotArea_World(n,this._pt0,this._pt1,this._pt2,this._pt3),l.copyFrom(o).invert();let f=this._ray;if(f.copy(e).applyMatrix(l),this._triangle.set(this._pt0,this._pt1,this._pt2),c=f.intersectTriangle(f.origin,f.direction,this._triangle),c||(this._triangle.set(this._pt1,this._pt2,this._pt3),c=f.intersectTriangle(f.origin,f.direction,this._triangle)),c)return{distance:0,intersectPoint:c}}else{this.calculateHotArea_View(n,i,this._pt0,this._pt1,this._pt2,this._pt3);let c=a.x,f=a.y,d=Math.min(this._pt0.x,this._pt1.x,this._pt2.x,this._pt3.x)+c*.5,h=Math.min(this._pt0.y,this._pt1.y,this._pt2.y,this._pt3.y)+f*.5,u=Math.max(this._pt0.x,this._pt1.x,this._pt2.x,this._pt3.x)+c*.5,m=Math.max(this._pt0.y,this._pt1.y,this._pt2.y,this._pt3.y)+f*.5;return t.x<=u&&t.x>=d&&t.y<=m&&t.y>=h?(this._hitPoint.set(t.x,t.y,0),{distance:0,intersectPoint:this._hitPoint}):null}return null}static calculateHotArea_View(e,t,a,r,i,n){let o=e.getWorldMatrix(),l=o.getScaleX(),c=o.getScaleY(),f=e.width*.5*l,d=e.height*.5*c;a.set(-f,-d,0),r.set(f,-d,0),i.set(-f,d,0),n.set(f,d,0);let h=o.tx;a.x+=h,r.x+=h,i.x+=h,n.x+=h,h=o.ty,a.y-=h,r.y-=h,i.y-=h,n.y-=h,a.multiplyScalar(t),r.multiplyScalar(t),i.multiplyScalar(t),n.multiplyScalar(t)}static calculateHotArea_World(e,t,a,r,i){let n=e.getWorldMatrix(),o=n.getScaleX(),l=n.getScaleY(),c=e.width*.5*o,f=e.height*.5*l;t.set(-c,f,0),a.set(c,f,0),r.set(-c,-f,0),i.set(c,-f,0);let d=n.tx;t.x+=d,a.x+=d,r.x+=d,i.x+=d,d=n.ty,t.y+=d,a.y+=d,r.y+=d,i.y+=d}}var Dh=(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))(Dh||{}),_h=(s=>(s[s.Upper=0]="Upper",s[s.Middle=1]="Middle",s[s.Lower=2]="Lower",s))(_h||{}),Bh=(s=>(s[s.Left=0]="Left",s[s.Center=1]="Center",s[s.Right=2]="Right",s))(Bh||{});class vh{charList=[];quadList=[];width=0;index=0}class xh{layout(e){let t=[],a=e.originSize,r=di.getFontData(e.font,a),i=e.fontSize/a;return this.makeTextLine(e.uiTransform,e.alignment,t,e.font,r,e.text,i,a,e.lineSpacing),t}makeTextLine(e,t,a,r,i,n,o,l,c){let f=-1,d=0,h=l*o,u=h*.5,m=e.width/o,g=e.height/o,p=0,A=e.height,D=()=>{d=0,f++;let y=new vh;return y.index=f,a.push(y),y},B=(y,S)=>{const F=y.charCodeAt(0).toString();let C=di.getFnt(r,l,F),w=null;return C?(w=ja.spawnQuad(),w.sprite=C,w.x=(d+C.xoffset)*o-p,w.y=(i.base-C.height-C.yoffset-i.base)*o+A,w.width=C.offsetSize.width*o,w.height=C.offsetSize.height*o,d+=C.xadvance):y==`
11819
11819
  `||(y==" "?d+=h:d+=u),S.width=d,S.quadList.push(w),S.charList.push(y),w},v=()=>{let y=this.getAlignment(t);switch(y.v){case 0:for(let S=0,F=a.length;S<F;S++){let C=a[S];if(S>0){let w=S*h*c;for(let E=0,Q=C.quadList.length;E<Q;E++){let T=C.quadList[E];T&&(T.y-=w)}}}break;case 1:for(let S=0,F=a.length;S<F;S++){let C=a[S],w=(g-F*l*c)*.5*o+S*h*c;for(let E=0,Q=C.quadList.length;E<Q;E++){let T=C.quadList[E];T&&(T.y-=w)}}break;case 2:for(let S=0,F=a.length;S<F;S++){let C=a[S],w=(g-F*l*c)*o+S*h*c;for(let E=0,Q=C.quadList.length;E<Q;E++){let T=C.quadList[E];T&&(T.y-=w)}}break}switch(y.h){case 0:break;case 1:for(let S=0,F=a.length;S<F;S++){let C=a[S],w=(m-C.width)*.5*o;for(let E=0,Q=C.quadList.length;E<Q;E++){let T=C.quadList[E];T&&(T.x+=w)}}break;case 2:for(let S=0,F=a.length;S<F;S++){let C=a[S],w=(m-C.width)*o;for(let E=0,Q=C.quadList.length;E<Q;E++){let T=C.quadList[E];T&&(T.x+=w)}}break}};(()=>{let y=null,S=n.length;for(let F=0;F<S;F++){y||=D();let C=n.charAt(F);C==`
11820
- `||C==" "?y=null:(B(C,y),y.width+u>=m&&(y=D()))}})(),v()}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 pn extends Jo{_style=at.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,a,r){return Ah.rayPick(e,a,r,t.space,t.panelRatio,this._uiTransform,t.transform.worldMatrix)}cloneTo(e){e.getOrAddComponent(pn).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.enable=e._enable,this.interactive=e._interactive,this.mouseStyle=e._style,this}}var Uh=(s=>(s[s.NONE=0]="NONE",s[s.COLOR=1]="COLOR",s[s.SPRITE=2]="SPRITE",s))(Uh||{});class bl extends pn{_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(Wr),this._isCreateImage=this._image==null,this._image||(this._image=this.object3D.addComponent(Wr)),this.imageType=ui.Sliced}onEnable(){this.mouseStyle=at.NORMAL}onDisable(){this.mouseStyle=at.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(at.NORMAL)}set normalSprite(e){this._spriteMap.set(at.NORMAL,e),this._style==at.NORMAL&&this.validateStyle(this._style,!0)}get overSprite(){return this._spriteMap.get(at.OVER)}set overSprite(e){this._spriteMap.set(at.OVER,e),this._style==at.OVER&&this.validateStyle(this._style,!0)}set downSprite(e){this._spriteMap.set(at.DOWN,e),this._style==at.DOWN&&this.validateStyle(this._style,!0)}get downSprite(){return this._spriteMap.get(at.DOWN)}set disableSprite(e){this._spriteMap.set(at.DISABLE,e),this._style==at.DISABLE&&this.validateStyle(this._style,!0)}get disableSprite(){return this._spriteMap.get(at.DISABLE)}validateStyle(e,t){if(this._transition&2){let a=this._spriteMap.get(e);this._image.sprite=a}if(this._transition&1){let a=this._colorMap.get(e);a&&(this._image.color=a)}}cloneTo(e){e.getOrAddComponent(bl).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.imageType=e.imageType,this.transition=e.transition,e._spriteMap.forEach((t,a)=>{t&&this._spriteMap.set(a,t)}),e._colorMap.forEach((t,a)=>{t&&this._colorMap.set(a,t.clone())}),this.mouseStyle=e.mouseStyle,this}destroy(){this._isCreateImage&&this._image&&(this.object3D.removeComponent(Wr),this._image=null),super.destroy()}}class gl extends Zi{_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(ja.spawnQuad());this._uiTransform.resize(0,0)}getQuad(e){return this._mainQuads[e]}cloneTo(e){e.addComponent(gl,{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||_.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,a){this._mainQuads[e].setSize(t,a),this.setShadowDirty()}setXY(e,t,a){this._mainQuads[e].setXY(t,a),this.setShadowDirty()}getXY(e,t){t||=new de;let a=this._mainQuads[e];return t.x=a.x,t.y=a.y,t}}class pl extends Zi{_shadowQuality=1;_shadowOffset;_shadowRadius;_shadowColor;_subShadowColor;needUpdateShadow=!1;init(e){super.init?.(e),this._shadowRadius=2,this._shadowQuality=1,this._shadowOffset=new de(4,-4),this._shadowColor=new J(.1,.1,.1,.8),this._subShadowColor=this._shadowColor.clone(),this.isUIShadow=!0}cloneTo(e){e.getOrAddComponent(pl).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=Be(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 de(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,a=Math.PI*2;this._subShadowColor.copyFrom(this._shadowColor),this._subShadowColor.a=1/Math.max(1,t);for(let r=0;r<t;r++){let i=ja.spawnQuad(),n=0,o=0;if(r==0)i.color=this._shadowColor;else{let l=a*(r-1)/(t-1);n=Math.sin(l)*this._shadowRadius,o=Math.cos(l)*this._shadowRadius,i.color=this._subShadowColor}i.setXY(n+this._shadowOffset.x+e.x,o+this._shadowOffset.y+e.y),i.setSize(e.width,e.height),i.sprite=e.sprite,i.visible=e.visible,i.imageType=e.imageType,this.attachQuad(i)}}}class ml extends Zi{_font="\u5FAE\u8F6F\u96C5\u9ED1";_fontSize=14;_originSize=42;_alignment=0;_lineSpacing=1;_text="";_color=new J(1,1,1,1);constructor(){super()}cloneTo(e){e.getOrAddComponent(ml).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 xh;layoutText(){this.detachQuads(),this.textLine=this.layoutProxy.layout(this);for(let e=0,t=this.textLine.length;e<t;e++){let a=this.textLine[e];for(let r=0,i=a.quadList.length;r<i;r++){let n=a.quadList[r];n&&this.attachQuad(n)}}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 Vg=Object.getOwnPropertyDescriptor,Og=(s,e,t,a)=>{for(var r=a>1?void 0:a?Vg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let js=class extends Qi{constructor(){super()}init(){super.init(),this.lightData.lightType=ht.PointLight,this.object3D.name==""&&(this.object3D.name="PointLight"+Wt())}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(b.ZERO,this.range,32,b.X_AXIS),t.buildCircle(b.ZERO,this.range,32,b.Y_AXIS),t.buildCircle(b.ZERO,this.range,32,b.Z_AXIS)}debug(){}debugDraw(s){}};js=Og([Lt(js,"Light")],js);var Lg=Object.getOwnPropertyDescriptor,Gg=(s,e,t,a)=>{for(var r=a>1?void 0:a?Lg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Ai=class extends va{_fatLineMaterial=null;_fatLineGeometry=null;_cachedResolution=new de(0,0);constructor(){super()}onEnable(){super.onEnable()}onDisable(){super.onDisable()}cloneTo(s){s.addComponent(Ai).copyComponent(this)}copyComponent(s){return super.copyComponent(s),this}set geometry(s){super.geometry=s,this._fatLineGeometry=s,s&&(this.instanceCount=s.instanceCount,this._fatLineMaterial&&s.instanceBuffer&&this._fatLineMaterial.setInstanceBuffer(s.instanceBuffer))}get geometry(){return this._fatLineGeometry}set material(s){this.materials=[s],this._fatLineMaterial=s,this._fatLineGeometry&&this._fatLineGeometry.instanceBuffer&&s.setInstanceBuffer(this._fatLineGeometry.instanceBuffer)}get material(){return this._fatLineMaterial}nodeUpdate(s,e,t,a){if(this._fatLineMaterial&&this.object3D){this._fatLineMaterial.setModelMatrix(this.object3D.transform.worldMatrix);const r=I.presentationSize[0],i=I.presentationSize[1];r>0&&i>0&&(this._cachedResolution.x!==r||this._cachedResolution.y!==i)&&(this._cachedResolution.set(r,i),this._fatLineMaterial.resolution=this._cachedResolution.clone())}super.nodeUpdate(s,e,t,a)}destroy(s){super.destroy(s)}};Ai=Gg([Lt(Ai,"FatLineRenderer")],Ai);var zg=Object.defineProperty,Wg=Object.getOwnPropertyDescriptor,Jg=(s,e,t)=>e in s?zg(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,jg=(s,e,t,a)=>{for(var r=a>1?void 0:a?Wg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r},Zg=(s,e,t)=>Jg(s,e+"",t);let _r=class extends va{totalCount=0;size=new de;localBoundBox=new Ce;get worldBoundBox(){const s=new Ce;s.makeEmpty();const t=this.object3D.transform.worldMatrix.rawData,a=this.localBoundBox.min,r=this.localBoundBox.max,i=[[a.x,a.y,a.z],[r.x,a.y,a.z],[a.x,r.y,a.z],[r.x,r.y,a.z],[a.x,a.y,r.z],[r.x,a.y,r.z],[a.x,r.y,r.z],[r.x,r.y,r.z]];for(const[n,o,l]of i){const c=t[0]*n+t[4]*o+t[8]*l+t[12],f=t[1]*n+t[5]*o+t[9]*l+t[13],d=t[2]*n+t[6]*o+t[10]*l+t[14];s.expandByPoint(new b(c,f,d))}return s}splatColor;transformA;transformB;texParams;_texParamDirty=!0;splatOrder;gsplatMaterial;_colorData;_transformAData;_transformBData;_orderData;_positions;_splatSetFlags;_validCount=0;_sortWorker;_lastSentTime=0;_minIntervalMs=16;_centersSent=!1;_lastViewMatrixHash=0;_lastCameraSpeed=0;_adaptiveSorting=!0;_lastPixelCullParams="";_texturesInitialized=!1;_minPixelCoverage=4;_maxPixelCoverage=0;_maxPixelCullDistance=0;_batchSize=128;instanceCount=0;_pendingUpdates=new Set;_autoFlushThreshold=100;_frameCount=0;constructor(){super()}initCount(s,e=128){if(s<=0)throw new Error("Total count must be greater than 0");this.totalCount=s,this._batchSize=e,this.size=this.evalTextureSize(s);const t=this.size.x|0,a=this.size.y|0,r=t*a;this._colorData=new Uint8Array(r*4),this._colorData.fill(0),this._transformAData=new Uint32Array(r*4),this._transformAData.fill(0),this._transformBData=new Uint16Array(r*4),this._transformBData.fill(0),this._orderData=new Uint32Array(r);for(let i=0;i<r;i++)this._orderData[i]=i<s?i:s>0?s-1:0;this._positions=new Float32Array(s*3),this._positions.fill(0),this.localBoundBox.makeEmpty(),this._splatSetFlags=new Array(s).fill(!1),this._validCount=0,this.texParams=new Float32Array([this._validCount,this.size.x,0,1]),this.splatColor=new ki().create(t,a,this._colorData,!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",this.transformA=new Hn().create(t,a,this._transformAData),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 Ts().create(t,a,this._transformBData,!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",this.splatOrder=new Qs().create(t,a,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 Yn,this.geometry=new Xn(this._batchSize),this.materials=[this.gsplatMaterial],this.instanceCount=0}setSplatData(s,e){if(s<0||s>=this.totalCount)throw new Error(`Index ${s} out of range [0, ${this.totalCount})`);const t=this._splatSetFlags[s];this._positions[s*3+0]=e.position[0],this._positions[s*3+1]=e.position[1],this._positions[s*3+2]=e.position[2],this.localBoundBox.expandByPoint(new b(e.position[0],e.position[1],e.position[2]));const a=.28209479177387814;let r=.5,i=.5,n=.5;e.sh&&e.sh.coeffs&&e.sh.coeffs.length>=3&&(r=.5+e.sh.coeffs[0]*a,i=.5+e.sh.coeffs[1]*a,n=.5+e.sh.coeffs[2]*a);const o=e.opacity!==void 0?1/(1+Math.exp(-e.opacity)):1,l=s*4;this._colorData[l+0]=Math.max(0,Math.min(255,Math.floor(r*255))),this._colorData[l+1]=Math.max(0,Math.min(255,Math.floor(i*255))),this._colorData[l+2]=Math.max(0,Math.min(255,Math.floor(n*255))),this._colorData[l+3]=Math.max(0,Math.min(255,Math.floor(o*255))),this.updateTransformData(s,e),t||(this._splatSetFlags[s]=!0,this._validCount++),this._pendingUpdates.add(s)}updateTransformData(s,e){const t=s*4,a=new ArrayBuffer(4),r=new Float32Array(a),i=new Uint32Array(a),n=$e=>(r[0]=$e,i[0]),o=e.position[0],l=e.position[1],c=e.position[2];this._transformAData[t+0]=n(o),this._transformAData[t+1]=n(l),this._transformAData[t+2]=n(c);let f=0,d=0,h=0,u=1;if(e.rotation){f=e.rotation[0],d=e.rotation[1],h=e.rotation[2],u=e.rotation[3];const $e=1/Math.hypot(f,d,h,u);f*=$e,d*=$e,h*=$e,u*=$e}let m=1,g=1,p=1;e.scale&&(m=Math.exp(e.scale[0]),g=Math.exp(e.scale[1]),p=Math.exp(e.scale[2]));const A=f+f,D=d+d,B=h+h,v=f*A,U=f*D,y=f*B,S=d*D,F=d*B,C=h*B,w=u*A,E=u*D,Q=u*B,T=1-(S+C),j=U+Q,ue=y-E,ee=U-Q,N=1-(v+C),M=F+w,O=y+E,W=F-w,ae=1-(v+S),z=T*m,K=j*m,$=ue*m,re=ee*g,ce=N*g,Ae=M*g,Qe=O*p,Ve=W*p,H=ae*p,ie=z*z+re*re+Qe*Qe,le=z*K+re*ce+Qe*Ve,ge=z*$+re*Ae+Qe*H,Ie=K*K+ce*ce+Ve*Ve,me=K*$+ce*Ae+Ve*H,ye=$*$+Ae*Ae+H*H,Se=t;this._transformBData[Se+0]=bt(ie)&65535,this._transformBData[Se+1]=bt(le)&65535,this._transformBData[Se+2]=bt(ge)&65535,this._transformBData[Se+3]=bt(ye)&65535;const Me=bt(Ie)&65535,Ze=bt(me)&65535;this._transformAData[t+3]=Me|Ze<<16}flushUpdates(){if(this._pendingUpdates.size===0)return;const s=this.size.x|0,e=this.size.y|0,t=Array.from(this._pendingUpdates);if(t.length===0)return;let a=e,r=0;for(const o of t){const l=Math.floor(o/s);l<a&&(a=l),l>r&&(r=l)}const i=r-a+1;i/e<.5&&i<e?(this.splatColor.updateTexture(s,e,this._colorData,a,i),this.transformA.updateTexture(s,e,this._transformAData,a,i),this.transformB.updateTexture(s,e,this._transformBData,!1,a,i)):(this.splatColor.updateTexture(s,e,this._colorData),this.transformA.updateTexture(s,e,this._transformAData),this.transformB.updateTexture(s,e,this._transformBData,!1)),this.updatePendingWorldPositions(),this._pendingUpdates.clear()}setAutoFlushThreshold(s){this._autoFlushThreshold=Math.max(1,s)}getStreamingStats(){return{totalCount:this.totalCount,validCount:this._validCount,pendingUpdates:this._pendingUpdates.size,progress:this.totalCount>0?this._validCount/this.totalCount*100:0}}updateWorldPositions(){!this._positions||this._validCount===0||(this._centersSent=!1)}updatePendingWorldPositions(){!this._positions||this._validCount===0||(this._centersSent=!1)}scheduleOrder(s){if(this._validCount===0)return;const e=this.object3D.transform.localChange;e&&this.updateWorldPositions();const t=s.rawData,a=t[2],r=t[6],i=t[10],n=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),o=-(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]),c=performance.now(),f=(c-this._lastSentTime)/1e3,d=Math.floor(n*1e3)^Math.floor(o*1e3)^Math.floor(l*1e3),h=Math.floor(a*1e3)^Math.floor(r*1e3)^Math.floor(i*1e3),u=d^h;if(u===this._lastViewMatrixHash&&!e&&this._centersSent)return;let m=this._minIntervalMs;if(this._adaptiveSorting&&this._minIntervalMs>0){const p=Math.abs(u-this._lastViewMatrixHash)/Math.max(f,.001);p<1e3?m=this._minIntervalMs:p<1e4?m=this._minIntervalMs*.5:m=this._minIntervalMs*.2,this._lastCameraSpeed=p}if(!(c-this._lastSentTime<m)){if(this._lastViewMatrixHash=u,this._lastSentTime=c,!this._sortWorker){this._sortWorker=this.createSortWorker(),this._sortWorker.onmessage=U=>{const y=U.data.order,S=this._orderData.buffer;this._sortWorker.postMessage({order:S},[S]);const F=new Uint32Array(y),C=this.size.x*this.size.y,w=Math.min(this._validCount,F.length);if((!this._orderData||this._orderData.length!==C)&&(this._orderData=new Uint32Array(C)),this._orderData.set(F.subarray(0,w),0),w<C){const T=this._validCount>0?this._validCount-1:0;this._orderData.fill(T,w,C)}this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData);const E=Math.max(0,Math.min(this._validCount,U.data.count|0));this.setCount(E),this._updateTexParams();const Q=Math.ceil(E/this._batchSize);this.instanceCount=Q};const g=new Float32Array(this._validCount*3);let p=0;const A=this.object3D.transform.worldMatrix,D=this._positions,B=A.rawData;for(let U=0;U<this._validCount;U++)if(this._splatSetFlags[U]){const y=U*3,S=D[y+0],F=D[y+1],C=D[y+2];g[p*3+0]=B[0]*S+B[4]*F+B[8]*C+B[12],g[p*3+1]=B[1]*S+B[5]*F+B[9]*C+B[13],g[p*3+2]=B[2]*S+B[6]*F+B[10]*C+B[14],p++}const v=new Uint32Array(this.totalCount);for(let U=0;U<this.totalCount;U++)v[U]=U<this._validCount?U:this._validCount>0?this._validCount-1:0;this._sortWorker.postMessage({order:v.buffer,centers:g.buffer},[v.buffer,g.buffer]),this._centersSent=!0}if(!this._centersSent&&this._sortWorker){const g=new Float32Array(this._validCount*3);let p=0;const A=this.object3D.transform.worldMatrix,D=this._positions,B=A.rawData;for(let v=0;v<this._validCount;v++)if(this._splatSetFlags[v]){const U=v*3,y=D[U+0],S=D[U+1],F=D[U+2];g[p*3+0]=B[0]*y+B[4]*S+B[8]*F+B[12],g[p*3+1]=B[1]*y+B[5]*S+B[9]*F+B[13],g[p*3+2]=B[2]*y+B[6]*S+B[10]*F+B[14],p++}this._sortWorker.postMessage({type:"centers",centers:g.buffer},[g.buffer]),this._centersSent=!0}this._sortWorker.postMessage({cameraPosition:{x:n,y:o,z:l},cameraDirection:{x:-a,y:-r,z:-i}})}}createSortWorker(){function s(){let n,o,l,c,f=!1;const d={x:0,y:0,z:0},h={x:0,y:0,z:0},u={x:0,y:0,z:0},m={x:0,y:0,z:0};let g,p;const A=(B,v,U)=>{for(;B<=v;){const y=v+B>>1,S=U(y);if(S>0)B=y+1;else if(S<0)v=y-1;else return y}return~B},D=()=>{if(!n||!o||!l||!c)return;const B=l.x,v=l.y,U=l.z,y=c.x,S=c.y,F=c.z,C=.001;if(!f&&Math.abs(B-d.x)<C&&Math.abs(v-d.y)<C&&Math.abs(U-d.z)<C&&Math.abs(y-h.x)<C&&Math.abs(S-h.y)<C&&Math.abs(F-h.z)<C)return;f=!1,d.x=B,d.y=v,d.z=U,h.x=y,h.y=S,h.z=F;const w=o.length/3;g?.length!==w&&(g=new Uint32Array(w));let E,Q;for(let M=0;M<8;++M){const O=(M&1?u.x:m.x)-B,W=(M&2?u.y:m.y)-v,ae=(M&4?u.z:m.z)-U,z=O*y+W*S+ae*F;M===0?E=Q=z:(E=Math.min(E,z),Q=Math.max(Q,z))}p?p.fill(0):p=new Uint32Array(65537);const T=Q-E,j=T<1e-6?0:1/T*2**16;for(let M=0;M<w;++M){const O=M*3,W=o[O+0]-B,ae=o[O+1]-v,z=o[O+2]-U,K=W*y+ae*S+z*F,$=Math.floor((K-E)*j);g[M]=$,p[$]++}for(let M=1;M<65537;M++)p[M]+=p[M-1];for(let M=0;M<w;M++){const O=g[M],W=--p[O];n[W]=M}const ue=M=>g[n[M]]/j+E,ee=()=>{const M=A(0,w-1,O=>-ue(O));return Math.min(w,Math.abs(M))},N=ue(w-1)>=0?ee():w;self.postMessage({order:n.buffer,count:N},[n.buffer]),n=null};self.onmessage=B=>{if(B.data.order&&(n=new Uint32Array(B.data.order)),B.data.centers){o=new Float32Array(B.data.centers),u.x=m.x=o[0],u.y=m.y=o[1],u.z=m.z=o[2];const v=o.length/3;for(let U=1;U<v;++U){const y=o[U*3+0],S=o[U*3+1],F=o[U*3+2];u.x=Math.min(u.x,y),u.y=Math.min(u.y,S),u.z=Math.min(u.z,F),m.x=Math.max(m.x,y),m.y=Math.max(m.y,S),m.z=Math.max(m.z,F)}f=!0}B.data.cameraPosition&&(l=B.data.cameraPosition),B.data.cameraDirection&&(c=B.data.cameraDirection),D()}}const e=`(${s.toString()})()`,t=new Blob([e],{type:"application/javascript"}),a=URL.createObjectURL(t);return new Worker(a)}setVisBoost(s){this.texParams[3]=Math.max(0,s),this._texParamDirty=!0}setCount(s){this.texParams[0]=Math.max(0,s),this._texParamDirty=!0}_updateTexParams(){this._texParamDirty&&(this.gsplatMaterial.setTexParams(this.texParams),this._texParamDirty=!1)}setSortThrottle(s){this._minIntervalMs=Math.max(0,s|0)}setAdaptiveSorting(s){this._adaptiveSorting=s}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}}getBatchingStats(){return{enabled:!0,batchSize:this._batchSize,instanceCount:this.instanceCount,splatCount:this._validCount,reduction:this._validCount>0?(1-this.instanceCount/this._validCount)*100:0}}evalTextureSize(s){let e=Math.ceil(Math.sqrt(s));const t=64;e=Math.ceil(e/t)*t;const a=Math.ceil(s/e);return new de(e,a)}nodeUpdate(s,e,t,a){this._validCount>0&&s?.camera&&s.camera.viewMatrix&&this.scheduleOrder(s.camera.viewMatrix),this._pendingUpdates.size>0&&this._frameCount>=_r.flushFrameLimit&&this.flushUpdates(),this._frameCount>=_r.flushFrameLimit&&this._pendingUpdates.size===0&&(this._frameCount=0),this._frameCount++,this._updateTexParams();const r=this.object3D.transform.worldMatrix;this.gsplatMaterial.setTransformMatrix(r);const i=`${this._minPixelCoverage},${this._maxPixelCoverage},${this._maxPixelCullDistance},${this._batchSize}`;i!==this._lastPixelCullParams&&(this.gsplatMaterial.setPixelCulling(this._minPixelCoverage,this._maxPixelCoverage,this._maxPixelCullDistance,this._batchSize),this._lastPixelCullParams=i),this._texturesInitialized||(this.gsplatMaterial.setSplatTextures(this.splatColor,this.transformA,this.transformB,this.texParams,this.splatOrder),this._texturesInitialized=!0),super.nodeUpdate(s,e,t,a)}renderPass(s,e,t){const a=t.encoder;for(let r of this.materials){const i=r.getPass(e);if(!(!i||i.length===0))for(const n of i){if(!n.pipeline)continue;n.apply(this.geometry,t.rendererPassState||t),k.bindPipeline(a,n),k.bindGeometryBuffer(a,this.geometry);const l=this.geometry.subGeometries[0].lodLevels[0];this.instanceCount>0?k.drawIndexed(a,l.indexCount,this.instanceCount,l.indexStart,0,0):k.drawIndexed(a,l.indexCount,1,l.indexStart,0,0)}}}destroy(s){this._sortWorker&&(this._sortWorker.terminate(),this._sortWorker=null),this.splatColor&&(this.splatColor.destroy(s),this.splatColor=null),this.transformA&&(this.transformA.destroy(s),this.transformA=null),this.transformB&&(this.transformB.destroy(s),this.transformB=null),this.splatOrder&&(this.splatOrder.destroy(s),this.splatOrder=null),this._positions=null,this._orderData=null,this._colorData=null,this._transformAData=null,this._transformBData=null,this.texParams=null,this._splatSetFlags=null,this._pendingUpdates.clear(),super.destroy(s)}};Zg(_r,"flushFrameLimit",60),_r=jg([Lt(_r,"GSplatStreamRenderer")],_r);class yh extends ne{index=0;drawCallFrame=-1;constructor(){super()}}var jo=(s=>(s[s.CastGI=0]="CastGI",s[s.ReceiveGI=1]="ReceiveGI",s[s.CastDepth=2]="CastDepth",s[s.Other=3]="Other",s))(jo||{});class Ch extends xt{static count=0;constructor(e=0,t=0){super(),Y.register("GIProbeShader",Wd);let a=new Dt,r=new qe("GIProbeShader","GIProbeShader");r.passType=fe.COLOR,a.addRenderPass(r),r.setDefine("USE_BRDF",!0),r.setShaderEntry("VertMain","FragMain"),r.setUniformVector4("probeUniform",new be(t,e,0,0));let i=r.shaderState;i.acceptShadow=!1,i.castShadow=!1,i.receiveEnv=!1,i.acceptGI=!1,i.useLight=!1,a.setTexture("baseMap",_.res.whiteTexture),a.setTexture("normalMap",_.res.normalTexture),a.setTexture("emissiveMap",_.res.blackTexture),this.shader=a}}class Yg extends et{_probes;_volume;_debugMr=[];init(e){e||=_.views[0]?.scene,_.setting.gi.enable=!0,this._volume=xe.getLightEntries(e).irradianceVolume,this.initProbe(e)}initProbe(e){let t=this._volume.setting.probeXCount,a=this._volume.setting.probeYCount,r=this._volume.setting.probeZCount,i=new Pr(4,16,16),n=new b;this._probes=[];for(let o=0;o<t;o++)for(let l=0;l<a;l++)for(let c=0;c<r;c++){let f=o+c*t+l*(t*r),d=new yh;d.index=f,d.name=`${o}_${l}_${c}`;let h=d.addComponent(he);h.material=new Ch(jo.CastGI,f),h.geometry=i,h.castGI=!1,h.castShadow=!1,this._debugMr.push(h),this.object3D.addChild(d),this._volume.calcPosition(o,l,c,n),d.x=n.x,d.y=n.y,d.z=n.z,this._probes[f]=d,this._debugMr.push(h)}for(let o=0;o<this._probes.length;o++)q.instance.addGIProbe(e,this._probes[o]);this.object3D.transform.enable=!1,this._volume.setting.debug&&this.debug()}debug(){}debugProbeRay(e,t){const a=_.setting.gi.rayNumber;let r=new se(0,-.7071067811865475,.7071067811865475,0);for(let i=0;i<a;i++){let n=e*a+i,o=new b(-t[n*4+0],-t[n*4+1],-t[n*4+2],0);r.transformVector(o,o);let l=t[n*4+3],c=this._probes[e].transform.worldPosition.clone(),f=o.scaleBy(l);f.add(c,f)}}changeProbesVolumeData(){this._volume.setVolumeDataChange()}changeProbesPosition(){this._volume.setVolumeDataChange();let e=this._volume.setting.probeXCount,t=this._volume.setting.probeYCount,a=this._volume.setting.probeZCount,r=new b;for(let i=0;i<e;i++)for(let n=0;n<t;n++)for(let o=0;o<a;o++){let l=i+o*e+n*(e*a),c=this._probes[l];this._volume.calcPosition(i,n,o,r),c.x=r.x,c.y=r.y,c.z=r.z}}onUpdate(){_.setting.gi.maxDistance=_.setting.gi.probeSpace*1.5;let e=this.transform.scene3D.view.camera,t=b.distance(e.transform.worldPosition,e.transform.targetPos)/300;if(this._debugMr&&this._debugMr.length>0)for(let a=0;a<this._debugMr.length;a++){const r=this._debugMr[a].transform;r.scaleX=t,r.scaleY=t,r.scaleZ=t}}}class Xg extends va{_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(he,e,!0);for(let t=0;t<e.length;t++){const a=e[t];a.transform.updateWorldMatrix(!0),a.enable=!1;let r=a.geometry.instanceID;for(let i=0;i<a.materials.length;i++){const n=a.materials[i];r+=n.instanceID}if(this._keyRenderGroup.has(r))this._keyRenderGroup.get(r).push(a),this._keyIdsGroup.get(r).push(a.transform.worldMatrix.index);else{let i=new Pe(e.length);i.visibility=GPUShaderStage.VERTEX,this._keyRenderGroup.set(r,[a]),this._keyBufferGroup.set(r,i),this._keyIdsGroup.set(r,[a.transform.worldMatrix.index])}}this._keyBufferGroup.forEach((t,a)=>{let r=this._keyIdsGroup.get(a),i=this._keyBufferGroup.get(a);i.setInt32Array("matrixIDs",new Int32Array(r)),i.apply()})}reset(){this._keyRenderGroup.size>0&&(this._keyRenderGroup.clear(),this._keyBufferGroup.clear(),this._keyIdsGroup.clear(),this.start())}nodeUpdate(e,t,a,r){this._keyRenderGroup.forEach((i,n)=>{let o=this._keyBufferGroup.get(n),l=i[0];for(let c=0;c<l.materials.length;c++){let d=l.materials[c].getPass(t);if(d)for(let h=0;h<d.length;h++){const u=d[h];u.setDefine("USE_INSTANCEDRAW",!0),u.setStorageBuffer("instanceDrawID",o)}}l.nodeUpdate(e,t,a,r)})}renderPass(e,t,a){this._keyRenderGroup.forEach((r,i)=>{let n=r[0];n.instanceCount=r.length,this.renderItem(e,t,n,a)})}renderItem(e,t,a,r){let i=a.transform._worldMatrix;for(let n=0;n<a.materials.length;n++){let l=a.materials[n].getPass(t);if(!(!l||l.length==0))for(let c=0;c<l.length;c++){let f=l[c];k.bindGeometryBuffer(r.encoder,a.geometry);const d=f;d.shaderState.splitTexture&&(r.endRenderPass(),Nt.WriteSplitColorTexture(a.instanceID),r.beginOpaqueRenderPass(),k.bindCamera(r.encoder,e.camera),k.bindGeometryBuffer(r.encoder,a.geometry)),k.bindPipeline(r.encoder,d);let g=a.geometry.subGeometries[n].lodLevels[a.lodLevel];a.instanceCount>0?k.drawIndexed(r.encoder,g.indexCount,a.instanceCount,g.indexStart,0,0):k.drawIndexed(r.encoder,g.indexCount,1,g.indexStart,0,i.index)}}}beforeDestroy(e){this._keyRenderGroup.clear(),this._keyBufferGroup.clear(),this._keyIdsGroup.clear(),this._keyRenderGroup=this._keyBufferGroup=this._keyIdsGroup=void 0,Oe.removeWaitStart(this.object3D,this)}}var Hg=Object.getOwnPropertyDescriptor,Kg=(s,e,t,a)=>{for(var r=a>1?void 0:a?Hg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Zs=class extends he{constructor(){super()}get geometry(){return null}set geometry(s){}cloneTo(s){}set meshURL(s){let e=_.res.getGeometry(s);e?this.geometry=e:console.error("no geometry set",s)}};Zs=Kg([Lt(Zs,"MeshFilter")],Zs);var qg=Object.getOwnPropertyDescriptor,$g=(s,e,t,a)=>{for(var r=a>1?void 0:a?qg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Yi=class extends he{skinJointsName;mInverseBindMatrixData;mInverseBindMatrixBuffer;mSkeletonAnimation;mJointIndexTableBuffer;constructor(){super(),this.addRendererMask(Ne.SkinnedMesh)}start(){if(super.start(),this.skeletonAnimation=this.object3D.getComponent(mr),!this.skeletonAnimation){let s=this.object3D.parentObject.parentObject.getComponentsInChild(mr);s.length>0&&(this.skeletonAnimation=s[0]);let e=this.object3D;for(;!this.skeletonAnimation&&e;)this.skeletonAnimation=e.getComponentFromParent(mr),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 Pe(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 a=t*16,r=s[t];e.set(r,a)}this.mInverseBindMatrixBuffer=new Pe(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(Yi);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,a){for(let r=0;r<this.materials.length;r++){let n=this.materials[r].getPass(e);if(n)for(let o=0;o<n.length;o++){const l=n[o];!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,a)}};Yi=$g([Lt(Yi,"SkinnedMeshRenderer")],Yi);class ep extends pt{radius=2.5;height=10;constructor(){super(),this._shapeType=bi.Capsule}}class mn extends pt{mesh;static triangle;_pickRet;constructor(){super(),this._shapeType=bi.Mesh}rayPick(e,t){if(this.mesh){mn.triangle||=new us(new b,new b,new b);let a=this.mesh.getAttribute(G.position),r=this.mesh.getAttribute(G.indices),i=pt.helpMatrix;i.copyFrom(t).invert();let n=pt.helpRay.copy(e);if(n.applyMatrix(i),n.intersectBox(this.mesh.bounds),!n.intersectBox(this.mesh.bounds,pt.v3_help_0))return null;if(r&&a&&r.data.length>0){let l=a.data;for(let c=0,f=r.data.length/3;c<f;c++){let d=c*3;const h=r.data[d+0]*3,u=r.data[d+1]*3,m=r.data[d+2]*3;let g=mn.triangle,p=g.v1.set(l[h+0],l[h+1],l[h+2]),A=g.v2.set(l[u+0],l[u+1],l[u+2]),D=g.v3.set(l[m+0],l[m+1],l[m+2]);g.set(p,A,D);let B=n.intersectTriangle(n.origin,n.direction,g);if(B){this._pickRet||={intersectPoint:new b,distance:0},this._pickRet.intersectPoint=B,this._pickRet.distance=b.distance(n.origin,B);let v=this.mesh.getAttribute(G.normal);if(v){let U=v.data,y=new b(U[h],U[h+1],U[h+2]);t.transformVector(y,y),y.normalize(),this._pickRet.normal=y}return this._pickRet}}}}return null}}class tp extends pt{_pickRet;box;radius=.5;constructor(e){super(),this._shapeType=bi.Sphere,this.radius=e,this.box=new Gr(new b,1)}rayPick(e,t){this.box.setFromCenterAndSize(this.center,this.radius);let r=pt.helpMatrix;r.copyFrom(t).invert();let i=pt.helpRay.copy(e);i.applyMatrix(r);let n=i.intersectSphere(i.origin,i.direction,this.box.center,this.box.radius);return n?(this._pickRet||(this._pickRet={intersect:!1,intersectPoint:new b,distance:0}),this._pickRet.intersect=!0,this._pickRet.intersectPoint=n,this._pickRet.distance=b.distance(i.origin,pt.v3_help_0),this._pickRet):null}}class ap extends ne{_envMap;skyObject;envMapChange=!0;view;constructor(){super(),this.transform.scene3D=this,this.skyObject=new ne,this.addChild(this.skyObject),this._isScene3D=!0,this.envMap||=_.res.defaultSky}get envMap(){return this._envMap}set envMap(e){this._envMap!=e&&(this.envMapChange=!0),this._envMap=e,q.instance.sky&&"map"in q.instance.sky&&(q.instance.sky.map=e)}get exposure(){return q.instance.sky&&"exposure"in q.instance.sky?q.instance.sky.exposure:0}set exposure(e){q.instance.sky&&"exposure"in q.instance.sky&&(q.instance.sky.exposure=e,_.setting.sky.skyExposure=e)}get roughness(){if(q.instance.sky&&"roughness"in q.instance.sky)return q.instance.sky.roughness}set roughness(e){q.instance.sky&&"roughness"in q.instance.sky&&(q.instance.sky.roughness=e)}}class Sh{_computeShader;_outBuffer;constructor(){}init(){let e=ve.getGBufferFrame(ve.colorPass_GBuffer);this._computeShader=new Fe(Sd),this._outBuffer=new oi(32),this._computeShader.setStorageBuffer("outBuffer",this._outBuffer),this._computeShader.setSamplerTexture("gBufferTexture",e.getCompressGBufferTexture())}compute(e){let t=xe.getCameraGroup(e.camera);this._computeShader.setStorageBuffer("globalUniform",t.uniformGPUBuffer);let a=k.beginCommandEncoder();k.computeCommand(a,[this._computeShader]),k.endCommandEncoder(a),this._outBuffer.readBuffer()}getPickMeshID(){var e=this._outBuffer.outFloat32Array[0]+.1;return Math.floor(e)}getPickWorldPosition(e){e||=new b;var t=this._outBuffer.outFloat32Array[4],a=this._outBuffer.outFloat32Array[5],r=this._outBuffer.outFloat32Array[6];return e.set(t,a,r),e}getPickWorldNormal(e){e||=new b;var t=this._outBuffer.outFloat32Array[8],a=this._outBuffer.outFloat32Array[9],r=this._outBuffer.outFloat32Array[10];return e.set(t*2-1,a*2-1,r*2-1).normalize(),e}getPickScreenUV(e){e||=new de;var t=this._outBuffer.outFloat32Array[2],a=this._outBuffer.outFloat32Array[3];return e.set(t,a),e}}class Fh extends Ya{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 ba,this.mouseEnableMap=new Map,this._pickEvent=new Z(Z.PICK_CLICK),this._outEvent=new Z(Z.PICK_OUT),this._overEvent=new Z(Z.PICK_OVER),this._mouseMove=new Z(Z.PICK_MOVE),this._upEvent=new Z(Z.PICK_UP),this._downEvent=new Z(Z.PICK_DOWN)}start(){_.setting.pick.enable&&(_.inputSystem.addEventListener(Z.POINTER_DOWN,this.onTouchStart,this),_.inputSystem.addEventListener(Z.POINTER_UP,this.onTouchEnd,this),_.inputSystem.addEventListener(Z.POINTER_CLICK,this.onTouchOnce,this),_.inputSystem.addEventListener(Z.POINTER_RIGHT_CLICK,this.onTouchOnce,this),_.inputSystem.addEventListener(Z.POINTER_MOVE,this.onTouchMove,this)),_.setting.pick.mode=="pixel"&&(this._pickCompute=new Sh,this._pickCompute.init())}stop(){_.inputSystem.removeEventListener(Z.POINTER_DOWN,this.onTouchStart,this),_.inputSystem.removeEventListener(Z.POINTER_UP,this.onTouchEnd,this),_.inputSystem.removeEventListener(Z.POINTER_CLICK,this.onTouchOnce,this),_.inputSystem.removeEventListener(Z.POINTER_RIGHT_CLICK,this.onTouchOnce,this),_.inputSystem.removeEventListener(Z.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=Z.PICK_DOWN,this._downEvent.target=t.object3D,this._downEvent.data=this.getPickInfo(),this.dispatchEvent(this._downEvent),t.object3D.containEventListener(Z.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=Z.PICK_UP,this._upEvent.target=t.object3D,this._upEvent.data=this.getPickInfo(),this.dispatchEvent(this._upEvent),t.object3D.containEventListener(Z.PICK_UP)&&t.object3D.dispatchEvent(this._upEvent))}_lastFocus;getPickInfo(){if(_.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=Z.PICK_MOVE,this._mouseMove.target=t.object3D,this._mouseMove.data=this.getPickInfo(),this.dispatchEvent(this._mouseMove),t.object3D.containEventListener(Z.PICK_MOVE)&&t.object3D.dispatchEvent(this._mouseMove)),t!=this._lastFocus&&(this._lastFocus&&this._lastFocus.object3D&&(Object.assign(this._outEvent,e),this._outEvent.type=Z.PICK_OUT,this._outEvent.target=this._lastFocus.object3D,this._outEvent.data=this.getPickInfo(),this.dispatchEvent(this._outEvent),this._lastFocus.object3D.containEventListener(Z.PICK_OUT)&&this._lastFocus.object3D.dispatchEvent(this._outEvent)),t&&(Object.assign(this._overEvent,e),this._overEvent.type=Z.PICK_OVER,this._overEvent.target=t.object3D,this._overEvent.data=this.getPickInfo(),this.dispatchEvent(this._overEvent),t.object3D.containEventListener(Z.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 a=this.getPickInfo();Object.assign(this._pickEvent,e),this._pickEvent.type=Z.PICK_CLICK,this._pickEvent.target=t.object3D,this._pickEvent.data=a,this.dispatchEvent(this._pickEvent),t===this._lastDownTarget&&t.object3D.containEventListener(Z.PICK_CLICK)&&t.object3D.dispatchEvent(this._pickEvent)}this._lastDownTarget=null}findNearestObj(e,t){return e.sort((a,r)=>a.distance>r.distance?1:-1),e[0]?.collider}_interestList=[];pick(e){if(this._interestList.length=0,_.setting.pick.mode=="pixel"){this._pickCompute.compute(this._view);let t=this._pickCompute.getPickMeshID(),a=this.mouseEnableMap.get(t);if(a){let r=this._pickCompute.getPickWorldPosition(),i=b.distance(r,this.ray.origin);this._interestList.push({distance:i,collider:a,intersectPoint:r})}}else if(_.setting.pick.mode=="bound"){this.ray=e.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY);let t,a=Oe.componentsEnablePickerList.get(this._view);if(a)for(const r of a){let i=r[0];i.enable&&(t=i.rayPick(this.ray),t&&(t.collider=i,this._interestList.push(t)))}}}}class rp extends ys{_camera;_scene;_viewPort;_enablePick=!1;_enable=!0;pickFire;guiPick;canvasList;constructor(e=0,t=0,a=0,r=0){super(),this.canvasList=[],this._viewPort=new be(e,t,a,r)}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 Fh(this),this.pickFire.start()),this._enablePick=e}get scene(){return this._scene}set scene(e){this._scene=e,e.view=this,Zt.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 a=new ne;a.name="Canvas "+e,t=a.addComponent(ds),t.index=e,this.canvasList[e]=t}return this.scene.addChild(t.object3D),this.guiPick||(this.guiPick=new gh,this.guiPick.init(this)),t}disableUICanvas(e=0){let t=this.canvasList[e];t&&t.object3D&&t.object3D.removeFromParent()}}class ip{normal;fixNormal;center;rotateShape;distance=0;index;constructor(e){this.index=e,this.rotateShape=[]}}class sp extends Le{vScale;uNegate;sections;build(e,t,a,r=1,i=!0){if(a.length<2)throw new Error("path length is not enough");return this.vScale=r,this.uNegate=i,e=e.slice(),t&&e.push(e[0]),this.sections=this.buildSections(e,a),this.buildGeometry(e,this.sections),this.bounds=new Ce(b.ZERO.clone(),new b(100,100,100)),this}buildSections(e,t){let a,r,i,n=[],o=t.length;for(let c=0;c<o;c++){let f=new ip(c);a=t[c],r=t[c+1],f.center=a.clone(),r==null?(f.normal=i.clone(),f.distance=0):(i=r.subtract(a),f.distance=i.length,f.normal=i.normalize()),n.push(f)}n[0].fixNormal=n[0].normal.clone();for(let c=1;c<o;c++){let f=n[c-1],d=n[c];d.fixNormal=d.normal.add(f.normal).normalize()}let l=new R().identity();for(let c=0;c<o;c++){let f=n[c],d,h;if(c==0)d=b.UP,h=e;else{let u=n[c-1];d=u.fixNormal,h=u.rotateShape}R.fromToRotation(d,f.fixNormal,l);for(let u=0,m=e.length;u<m;u++){let g=l.multiplyPoint3(h[u]);f.rotateShape.push(g)}}return n}buildGeometry(e,t){let a=t.length,r=e.length,i=a*r,n=a-1,o=new Float32Array(i*3),l=new Float32Array(i*3),c=new Float32Array(i*2),f=new Uint32Array(n*(r-1)*6),d=r-1,h=0,u=0,m=[0];for(let p=1;p<r;p++)u+=e[p-1].subtract(e[p]).length,m.push(u);for(let p=0;p<a;p++){let A=t[p];for(let D=0;D<r;D++){let B=(p*r+D)*3,v=A.rotateShape[D].add(A.center);o[B]=v.x,o[B+1]=v.y,o[B+2]=v.z,l[B+1]=1;let U=(p*r+D)*2,y=m[D]/u;c[U]=this.uNegate?1-y:y,c[U+1]=h*this.vScale}h+=A.distance}let g=0;for(let p=0;p<n;p++){let A=p*r;for(let D=0;D<d;D++){let B=D,v=D+1,U=B+r,y=v+r;f[g++]=B+A,f[g++]=v+A,f[g++]=U+A,f[g++]=v+A,f[g++]=y+A,f[g++]=U+A}}return this.setIndices(f),this.setAttribute(G.position,o),this.setAttribute(G.normal,l),this.setAttribute(G.uv,c),this.setAttribute(G.TEXCOORD_1,c),this.addSubGeometry({indexStart:0,indexCount:f.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0}),this.computeNormals(),this}}class kh extends Le{_instanceBuffer;_instanceData;_instanceCount=0;constructor(){super(),this.initBaseGeometry()}initBaseGeometry(){const e=new Float32Array([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0]),t=new Float32Array([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2]),a=new Uint16Array([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]);this.setIndices(a),this.setAttribute(G.position,e),this.setAttribute(G.uv,t),this.addSubGeometry({indexStart:0,indexCount:a.length,vertexStart:0,vertexCount:e.length/3,firstStart:0,index:0,topology:0})}setPositions(e){const t=e instanceof Float32Array?e:new Float32Array(e),r=t.length/3-1;if(r<=0)return console.warn("FatLineGeometry: Need at least 2 points"),this;const i=new Float32Array(r*16);for(let n=0;n<r;n++){const o=n*3,l=(n+1)*3;i[n*16+0]=t[o+0],i[n*16+1]=t[o+1],i[n*16+2]=t[o+2],i[n*16+3]=0,i[n*16+4]=t[l+0],i[n*16+5]=t[l+1],i[n*16+6]=t[l+2],i[n*16+7]=0,i[n*16+8]=1,i[n*16+9]=1,i[n*16+10]=1,i[n*16+11]=0,i[n*16+12]=1,i[n*16+13]=1,i[n*16+14]=1,i[n*16+15]=0}return this._instanceData=i,this._instanceCount=r,this.computeBoundingBox(t),this}setColors(e){const t=e instanceof Float32Array?e:new Float32Array(e);if(!this._instanceData)return console.warn("FatLineGeometry: Must call setPositions() before setColors()"),this;const r=t.length/3-1;if(r!==this._instanceCount)return console.warn("FatLineGeometry: Color array length doesn't match segment count"),this;for(let i=0;i<r;i++){const n=i*3,o=(i+1)*3;this._instanceData[i*16+8]=t[n+0],this._instanceData[i*16+9]=t[n+1],this._instanceData[i*16+10]=t[n+2],this._instanceData[i*16+12]=t[o+0],this._instanceData[i*16+13]=t[o+1],this._instanceData[i*16+14]=t[o+2]}return this}computeBoundingBox(e){const t=new b(1/0,1/0,1/0),a=new b(-1/0,-1/0,-1/0);for(let i=0;i<e.length;i+=3){const n=e[i],o=e[i+1],l=e[i+2];t.x=Math.min(t.x,n),t.y=Math.min(t.y,o),t.z=Math.min(t.z,l),a.x=Math.max(a.x,n),a.y=Math.max(a.y,o),a.z=Math.max(a.z,l)}const r=b.sub(a,t);this.bounds=new Ce(b.ZERO.clone(),r),this.bounds.setFromMinMax(t,a)}get instanceData(){return this._instanceData}get instanceCount(){return this._instanceCount}get instanceBuffer(){return!this._instanceBuffer&&this._instanceData&&(this._instanceBuffer=new Pe(this._instanceData.byteLength),this._instanceBuffer.setFloat32Array("",this._instanceData),this._instanceBuffer.apply()),this._instanceBuffer}updateInstanceBuffer(){this._instanceBuffer&&this._instanceData&&(this._instanceBuffer.setFloat32Array("",this._instanceData),this._instanceBuffer.apply())}}class np{name;offset;size;arrayStride;stepMode;attributes}class op{name;format;offset;shaderLocation;stride}var Eh=(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))(Eh||{});class lp{get data(){return null}entity}class wh{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 Ih{_spaceDesc;getRange(e){return this._spaceDesc[e]}initSpace(e){this._spaceDesc={};for(let t of e)(this._spaceDesc[t]=new wh).set(-Number.MAX_VALUE,Number.MAX_VALUE);return this}isContain(e,t){let a=this._spaceDesc[e];return t>=a.min&&t<a.max}isInterestRange(e,t){let a=this._spaceDesc[e];return a?t.isInterestRange(a):!1}splitSpace(e,t,a){let r=this._spaceDesc[e];return t?r.max=a:r.min=a,this}copySpace(e){for(let t in e._spaceDesc){let a=e._spaceDesc[t];this._spaceDesc[t].copy(a)}return this}}class bs{static MaxEntityCountInLeaf=4;static MaxLayer=10;static ClearLeafLayer=bs.MaxLayer-4}class gs{static UUID=0;uuid="0";constructor(){this.uuid=(gs.UUID++).toString()}}class cp{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 Cr extends gs{_dimensionIndex=0;_dimensions;_dimension;_left;_right;_space;_parent;_entities;layer;get dimension(){return this._dimension}constructor(e=0){super(),this.layer=e,Cr.nodeCount++}initNode(e,t,a){return this._dimensions=t,this._dimensionIndex=a,this._dimension=t[a],this._space=new Ih().initSpace(t),e&&this._space.copySpace(e._space),this._parent=e,this._entities=new cp,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,a=this._dimensions[t];e.isInNode(this._right,a)?this._right.updateEntity(e):e.isInNode(this._left,a)&&this._left.updateEntity(e)}}buildRoot(e){for(const t of e)t.entity.attachTreeNode(this);this.autoSplit()}_splitEntityList=[];autoSplit(){if(this._entities.count>bs.MaxEntityCountInLeaf&&!this._right&&!this._left&&this.layer<bs.MaxLayer){let e=this._splitEntityList,t=(this._dimensionIndex+1)%this._dimensions.length,a=this._dimensions[t],r=0;for(const i in this._entities.map){let n=this._entities.map[i];r+=n.centerValue(a),e.push(n)}r/=this._entities.count,this._left=new Cr(this.layer+1),this._right=new Cr(this.layer+1),this._left.initNode(this,this._dimensions,t),this._right.initNode(this,this._dimensions,t),this._left.setSpace(!0,r),this._right.setSpace(!1,r);for(let i of e)i.isInNode(this._right,a)?i.attachTreeNode(this._right):i.isInNode(this._left,a)&&i.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>bs.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,Cr.nodeCount-=2),e||t}isContain(e){return this._space.isContain(this._dimension,e)}static rangeBox=new Ce(new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE));nodeIntersectsBox(e){let t=this._space.getRange("x"),a=this._space.getRange("y"),r=this._space.getRange("z"),i=Cr.rangeBox;return i.min.set(t.min,a.min,r.min),i.max.set(t.max,a.max,r.max),i.intersectsBox(e)}nodeIntersectsRay(e){let t=this._space.getRange("x"),a=this._space.getRange("y"),r=this._space.getRange("z"),i=Cr.rangeBox;return i.min.set(t.min,a.min,r.min),i.max.set(t.max,a.max,r.max),!0}pointCast(e,t=0,a){if(a=a||[],this._entities.count>0){let r=this._entities.map;for(let i in r){let n=r[i],o=n.entityContainPoint(e);!o&&t>0&&(o=n.squareDistanceTo(e,this._dimensions)<=t),o&&a.push(n)}}this._left&&this._left.isContain(e[this._left.dimension])&&this._left.pointCast(e,t,a),this._right&&this._right.isContain(e[this._right.dimension])&&this._right.pointCast(e,t,a)}boxCast(e,t){if(t=t||[],this._entities.count>0){let a=this._entities.map;for(let r in a){let i=a[r];i.entityIntersectsBox(e)&&t.push(i)}}this._left&&this._left.nodeIntersectsBox(e)&&this._left.boxCast(e,t),this._right&&this._right.nodeIntersectsBox(e)&&this._right.boxCast(e,t)}pointIntersect=new b;rayCast(e,t,a){t=t||[],a=a||[];let r=this.pointIntersect;if(this._entities.count>0){let i=this._entities.map;for(let n in i){let o=i[n];o.entityIntersectsRay(e,r)&&(a.push(new b().copyFrom(r)),t.push(o))}}this._left&&this._left.nodeIntersectsRay(e)&&this._left.rayCast(e,t,a),this._right&&this._right.nodeIntersectsRay(e)&&this._right.rayCast(e,t,a)}}class fp extends gs{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 Pt{minPosX=0;minPosY=0;maxPosX=0;maxPosY=0;testID=0;points;offsetPosition;static TINY=1e-6;constructor(){this.points=new Array,this.offsetPosition=new b(0,0,0,0),this.clear()}setAABox(e,t,a,r){this.minPosX=e-a/2-Pt.TINY,this.maxPosX=e+a/2+Pt.TINY,this.minPosY=t-r/2-Pt.TINY,this.maxPosY=t+r/2+Pt.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,a,r){this.minPosX>e&&(this.minPosX=e),this.minPosY>t&&(this.minPosY=t),this.maxPosX<a&&(this.maxPosX=a),this.maxPosY<r&&(this.maxPosY=r)}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-Pt.TINY),e.x>this.maxPosX&&(this.maxPosX=e.x+Pt.TINY),e.z<this.minPosY&&(this.minPosY=e.z-Pt.TINY),e.z>this.maxPosY&&(this.maxPosY=e.z+Pt.TINY),this.points.push(e))}clone(){var e=new Pt;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,a,r){var i=!1,n=t-r,o=a-e,l=e*r-a*t,c=(-l-n*this.minPosX)/o;c<=this.maxPosY&&c>=this.minPosY&&(i=!0),c=(-l-n*this.maxPosX)/o,c<=this.maxPosY&&c>=this.minPosY&&(i=!0);var f=(-l-o*this.minPosY)/n;return f<=this.maxPosX&&f>=this.minPosX&&(i=!0),f=(-l-o*this.maxPosY)/n,f<=this.maxPosX&&f>=this.minPosX&&(i=!0),i}}class Er{static NUM_CHILDREN=4;childCellIndices;nodeIndices;aabb;points;constructor(e){this.childCellIndices=new Array,this.childCellIndices.length=Er.NUM_CHILDREN,this.nodeIndices=new Array,this.clear(),e?this.aabb=e.clone():this.aabb=new Pt}isLeaf(){return this.childCellIndices[0]==-1}clear(){for(var e=0;e<Er.NUM_CHILDREN;e++)this.childCellIndices[e]=-1;this.nodeIndices.splice(0,this.nodeIndices.length)}}class Rh{_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 Pt}getQuadNode(e){return this._quadNodes[e]}clear(){this._cells.length=0,this._quadNodes.length=0}initNodes(e){this.clear();for(var t=0,a=e.length;t<a;)e[t].calcGlobalQuadAABB(),this._quadNodes.push(e[t]),t++}buildQuadTree(e,t){this._aabb.clear();for(var a of this._quadNodes)if(a.isTriangle)for(var r of a.aabb.points)this._aabb.addPoint(r);else this._aabb.setContainRect(a.aabb.minPosX,a.aabb.minPosY,a.aabb.maxPosX,a.aabb.maxPosY);this._cells.length=0,this._rootCell=new Er(this._aabb),this._cells.push(this._rootCell);for(var i=this._quadNodes.length,n=0;n<i;n++)this._cells[0].nodeIndices[n]=n;var o=new Array;o.push(0);for(var l,c,f;o.length!=0;)if(c=o.pop(),!(this._cells[c].nodeIndices.length<=e||this._cells[c].aabb.radius<t)){for(n=0;n<Er.NUM_CHILDREN;n++){this._cells[c].childCellIndices[n]=this._cells.length,o.push(this._cells.length),this._cells.push(new Er(this.createAABox(this._cells[c].aabb,n))),f=this._cells[this._cells.length-1],i=this._cells[c].nodeIndices.length;for(var d=0;d<i;d++)l=this._cells[c].nodeIndices[d],this.doesNodeIntersectCell(this._quadNodes[l],f)&&f.nodeIndices.push(l)}this._cells[c].nodeIndices.length=0}}createAABox(e,t){var a=e.centreX,r=e.centreY,i=e.sideX,n=e.sideY,o=new Pt;switch(t){case 0:o.setAABox(a+i/4,r+n/4,i/2,n/2);break;case 1:o.setAABox(a-i/4,r+n/4,i/2,n/2);break;case 2:o.setAABox(a-i/4,r-n/4,i/2,n/2);break;case 3:o.setAABox(a+i/4,r-n/4,i/2,n/2);break;default:o.setAABox(a+i/4,r-n/4,i/2,n/2);break}return o}doesNodeIntersectCell(e,t){var a=e.aabb;if(!a.overlapTest(t.aabb))return!1;if(!e.isTriangle)return!0;var r=a.points,i=r[0],n=r[1],o=r[2];if(t.aabb.isPointInside(i)||t.aabb.isPointInside(n)||t.aabb.isPointInside(o))return!0;var l=this.pointInTriangle(t.aabb.minPosX,t.aabb.minPosY,i,n,o)||this.pointInTriangle(t.aabb.minPosX,t.aabb.maxPosY,i,n,o)||this.pointInTriangle(t.aabb.maxPosX,t.aabb.maxPosY,i,n,o)||this.pointInTriangle(t.aabb.maxPosX,t.aabb.minPosY,i,n,o);return l?!0:(l=t.aabb.isIntersectLineSegment(i.x,i.z,n.x,n.z)||t.aabb.isIntersectLineSegment(i.x,i.z,o.x,o.z)||t.aabb.isIntersectLineSegment(n.x,n.z,o.x,o.z),l)}getNodesIntersectingtAABox(e,t){if(this._cells.length==0)return 0;this._cellsToTest.length=0,this._cellsToTest.push(0),this.incrementTestCounter();for(var a,r,i,n,o=0;this._cellsToTest.length!=0;)if(a=this._cellsToTest.pop(),i=this._cells[a],!!t.overlapTest(i.aabb))if(i.isLeaf())for(r=i.nodeIndices.length,o=0;o<r;o++)n=this.getQuadNode(i.nodeIndices[o]).aabb,n.testID!=this._testID&&(n.testID=this._testID,t.overlapTest(n)&&e.push(i.nodeIndices[o]));else for(o=0;o<Er.NUM_CHILDREN;o++)this._cellsToTest.push(i.childCellIndices[o]);return e.length}pointInTriangle(e,t,a,r,i){var n=a,o=r,l=i,c=n.z-o.z,f=o.x-n.x,d=n.x*o.z-o.x*n.z,h=o.z-l.z,u=l.x-o.x,m=o.x*l.z-l.x*o.z,g=l.z-n.z,p=n.x-l.x,A=l.x*n.z-n.x*l.z,D=!1,B=c*e+f*t+d,v=h*e+u*t+m,U=g*e+p*t+A;const y=.01;return(B>=-y&&v>=-y&&U>=-y||B<=y&&v<=y&&U<=y)&&(D=!0),D}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],a="",r=0;r<this.logDeep-1;r++)a+="-|";console.log(a+"i="+e+" "+t.aabb.minPosX.toFixed(2)+" "+t.aabb.maxPosX.toFixed(2)+" "+t.aabb.minPosY.toFixed(2)+" "+t.aabb.maxPosY.toFixed(2));var i;for(i=0;i<t.nodeIndices.length;i++)if(t.nodeIndices[i]>=0){var n=this._quadNodes[t.nodeIndices[i]];console.log(a+" t="+t.nodeIndices[i]+" "+n.aabb.minPosX.toFixed(2)+" "+n.aabb.maxPosX.toFixed(2)+" "+n.aabb.minPosY.toFixed(2)+" "+n.aabb.maxPosY.toFixed(2))}for(i=0;i<t.childCellIndices.length;i++)t.childCellIndices[i]>=0&&this.logTree(t.childCellIndices[i]);this.logDeep--}}}class Qh{_maxNodesPerCell;_minCellSize;_quadTree;_collisionNodesIdx;_segBox;_collisionNodes;constructor(e=10,t=500){this._maxNodesPerCell=e,this._minCellSize=t,this._segBox=new Pt,this._collisionNodesIdx=new Array,this._collisionNodes=new Array}createQuadTree(e){this._quadTree=new Rh,this._quadTree.initNodes(e),this._quadTree.buildQuadTree(this._maxNodesPerCell,this._minCellSize)}getNodesByAABB(e,t,a,r){this._segBox.clear(),this._segBox.maxPosX=a,this._segBox.maxPosY=r,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 i,n=0;n<this._collisionNodesIdx.length;n++)i=this._quadTree.getQuadNode(this._collisionNodesIdx[n]),this._collisionNodes.push(i);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 a=4294967295,r=0,i,n,o,l,c=0;c<this._collisionNodesIdx.length;c++)n=this._quadTree.getQuadNode(this._collisionNodesIdx[c]),l=n.aabb,b.pointInsideTriangle(e,l.points[0],l.points[1],l.points[2])&&(o=n,r=Math.abs(o.plane.distance(e)),!(r>t)&&(n==null||r<=a)&&(i=o,a=r));return i}}var Ys=(s=>(s[s.MOUSE_LEFT=0]="MOUSE_LEFT",s[s.MOUSE_MID=1]="MOUSE_MID",s[s.MOUSE_RIGHT=2]="MOUSE_RIGHT",s))(Ys||{});class dp extends mt{static LOADER_PROGRESS="loaderProgress";static LOADER_COMPLETE="loaderComplete"}class hp extends mt{static ADDED="added";static REMOVED="removed";static CHILD_ADD_EVENT="childAddEvent";static CHILD_REMOVED="childRemoved"}class up extends mt{static SHOW="show";static HIDE="hide";static UPDATE="update"}class bp{static merge(e,t,a,r){let i=0,n=0;i=Math.max(e.width,i),i=Math.max(t.width,i),i=Math.max(a.width,i),i=Math.max(r.width,i),n=Math.max(e.height,n),n=Math.max(t.height,n),n=Math.max(a.height,n),n=Math.max(r.height,n);let o=new Te(i,n,oe.rgba8unorm),l=new Fe(xd);l.setSamplerTexture("textureR",e),l.setSamplerTexture("textureG",t),l.setSamplerTexture("textureB",a),l.setSamplerTexture("textureA",r),l.setStorageTexture("outTex",o),l.workerSizeX=Math.ceil(i/8),l.workerSizeY=Math.ceil(n/8);let c=k.beginCommandEncoder();return k.computeCommand(c,[l]),k.endCommandEncoder(c),o}}class Th{computeShader;setInputes(e,t,a){this.computeShader=new Fe(Vd(e,t,a,8,8,1));for(let r=0;r<t.length;r++)this.computeShader.setSamplerTexture(`source${r}Map`,t[r]);for(let r=0;r<a.length;r++)this.computeShader.setStorageTexture(`dest${r}Map`,a[r]);e&&this.computeShader.setSamplerTexture("colorMap",e),this.computeShader.workerSizeX=a[0].width/8,this.computeShader.workerSizeY=a[0].height/8,this.computeShader.workerSizeZ=1}}class Mh{sourceShader;compute;needUpdate=!0;constructor(e,t){this.sourceShader=t,this.compute=new Fe(e),this.init()}init(){}onUpdate(){this.onFrame&&this.onFrame(),this.onOnce&&this.needUpdate&&(this.needUpdate=!1,this.onFrame())}}class Nh extends Mh{constructor(e){super(Fd,e)}init(){let e=new Te(256,256,oe.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=k.beginCommandEncoder();k.computeCommand(e,[this.compute]),k.endCommandEncoder(e)}}class gp{gpuBuffer;probes;memoryDo;_probeInfoList;initDataUniform(e){this.memoryDo=new cr,this.probes=e,this._probeInfoList=[],this.memoryDo.destroy(),this.memoryDo.allocation(e.length*17*4);for(let a=0;a<e.length;a++){var t=17;let r=this.memoryDo.allocation_node(t*4);this._probeInfoList.push(r);let i=e[a].transform.worldPosition;r.setArray(0,[i.x,i.y,i.z])}this.gpuBuffer=I.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,a=0;const r=5e3*64;for(;a<t;)I.device.queue.writeBuffer(this.gpuBuffer,a,e,a,Math.floor(Math.min(r,t-a))),a+=r}}class pp extends Xa{constructor(e,t,a=0){super(),this.bufferType=Da.StructStorageGPUBuffer,this.createBufferByStruct(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|a,e,t)}}class mp{static codeMax=`
11820
+ `||C==" "?y=null:(B(C,y),y.width+u>=m&&(y=D()))}})(),v()}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 pn extends Jo{_style=at.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,a,r){return Ah.rayPick(e,a,r,t.space,t.panelRatio,this._uiTransform,t.transform.worldMatrix)}cloneTo(e){e.getOrAddComponent(pn).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.enable=e._enable,this.interactive=e._interactive,this.mouseStyle=e._style,this}}var Uh=(s=>(s[s.NONE=0]="NONE",s[s.COLOR=1]="COLOR",s[s.SPRITE=2]="SPRITE",s))(Uh||{});class bl extends pn{_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(Wr),this._isCreateImage=this._image==null,this._image||(this._image=this.object3D.addComponent(Wr)),this.imageType=ui.Sliced}onEnable(){this.mouseStyle=at.NORMAL}onDisable(){this.mouseStyle=at.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(at.NORMAL)}set normalSprite(e){this._spriteMap.set(at.NORMAL,e),this._style==at.NORMAL&&this.validateStyle(this._style,!0)}get overSprite(){return this._spriteMap.get(at.OVER)}set overSprite(e){this._spriteMap.set(at.OVER,e),this._style==at.OVER&&this.validateStyle(this._style,!0)}set downSprite(e){this._spriteMap.set(at.DOWN,e),this._style==at.DOWN&&this.validateStyle(this._style,!0)}get downSprite(){return this._spriteMap.get(at.DOWN)}set disableSprite(e){this._spriteMap.set(at.DISABLE,e),this._style==at.DISABLE&&this.validateStyle(this._style,!0)}get disableSprite(){return this._spriteMap.get(at.DISABLE)}validateStyle(e,t){if(this._transition&2){let a=this._spriteMap.get(e);this._image.sprite=a}if(this._transition&1){let a=this._colorMap.get(e);a&&(this._image.color=a)}}cloneTo(e){e.getOrAddComponent(bl).copyComponent(this)}copyComponent(e){return super.copyComponent(e),this.imageType=e.imageType,this.transition=e.transition,e._spriteMap.forEach((t,a)=>{t&&this._spriteMap.set(a,t)}),e._colorMap.forEach((t,a)=>{t&&this._colorMap.set(a,t.clone())}),this.mouseStyle=e.mouseStyle,this}destroy(){this._isCreateImage&&this._image&&(this.object3D.removeComponent(Wr),this._image=null),super.destroy()}}class gl extends Zi{_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(ja.spawnQuad());this._uiTransform.resize(0,0)}getQuad(e){return this._mainQuads[e]}cloneTo(e){e.addComponent(gl,{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||_.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,a){this._mainQuads[e].setSize(t,a),this.setShadowDirty()}setXY(e,t,a){this._mainQuads[e].setXY(t,a),this.setShadowDirty()}getXY(e,t){t||=new de;let a=this._mainQuads[e];return t.x=a.x,t.y=a.y,t}}class pl extends Zi{_shadowQuality=1;_shadowOffset;_shadowRadius;_shadowColor;_subShadowColor;needUpdateShadow=!1;init(e){super.init?.(e),this._shadowRadius=2,this._shadowQuality=1,this._shadowOffset=new de(4,-4),this._shadowColor=new J(.1,.1,.1,.8),this._subShadowColor=this._shadowColor.clone(),this.isUIShadow=!0}cloneTo(e){e.getOrAddComponent(pl).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=Be(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 de(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,a=Math.PI*2;this._subShadowColor.copyFrom(this._shadowColor),this._subShadowColor.a=1/Math.max(1,t);for(let r=0;r<t;r++){let i=ja.spawnQuad(),n=0,o=0;if(r==0)i.color=this._shadowColor;else{let l=a*(r-1)/(t-1);n=Math.sin(l)*this._shadowRadius,o=Math.cos(l)*this._shadowRadius,i.color=this._subShadowColor}i.setXY(n+this._shadowOffset.x+e.x,o+this._shadowOffset.y+e.y),i.setSize(e.width,e.height),i.sprite=e.sprite,i.visible=e.visible,i.imageType=e.imageType,this.attachQuad(i)}}}class ml extends Zi{_font="\u5FAE\u8F6F\u96C5\u9ED1";_fontSize=14;_originSize=42;_alignment=0;_lineSpacing=1;_text="";_color=new J(1,1,1,1);constructor(){super()}cloneTo(e){e.getOrAddComponent(ml).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 xh;layoutText(){this.detachQuads(),this.textLine=this.layoutProxy.layout(this);for(let e=0,t=this.textLine.length;e<t;e++){let a=this.textLine[e];for(let r=0,i=a.quadList.length;r<i;r++){let n=a.quadList[r];n&&this.attachQuad(n)}}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 Vg=Object.getOwnPropertyDescriptor,Og=(s,e,t,a)=>{for(var r=a>1?void 0:a?Vg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let js=class extends Qi{constructor(){super()}init(){super.init(),this.lightData.lightType=ht.PointLight,this.object3D.name==""&&(this.object3D.name="PointLight"+Wt())}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(b.ZERO,this.range,32,b.X_AXIS),t.buildCircle(b.ZERO,this.range,32,b.Y_AXIS),t.buildCircle(b.ZERO,this.range,32,b.Z_AXIS)}debug(){}debugDraw(s){}};js=Og([Lt(js,"Light")],js);var Lg=Object.getOwnPropertyDescriptor,Gg=(s,e,t,a)=>{for(var r=a>1?void 0:a?Lg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Ai=class extends va{_fatLineMaterial=null;_fatLineGeometry=null;_cachedResolution=new de(0,0);constructor(){super()}onEnable(){super.onEnable()}onDisable(){super.onDisable()}cloneTo(s){s.addComponent(Ai).copyComponent(this)}copyComponent(s){return super.copyComponent(s),this}set geometry(s){super.geometry=s,this._fatLineGeometry=s,s&&(this.instanceCount=s.instanceCount,this._fatLineMaterial&&s.instanceBuffer&&this._fatLineMaterial.setInstanceBuffer(s.instanceBuffer))}get geometry(){return this._fatLineGeometry}set material(s){this.materials=[s],this._fatLineMaterial=s,this._fatLineGeometry&&this._fatLineGeometry.instanceBuffer&&s.setInstanceBuffer(this._fatLineGeometry.instanceBuffer)}get material(){return this._fatLineMaterial}nodeUpdate(s,e,t,a){if(this._fatLineMaterial&&this.object3D){this._fatLineMaterial.setModelMatrix(this.object3D.transform.worldMatrix);const r=I.presentationSize[0],i=I.presentationSize[1];r>0&&i>0&&(this._cachedResolution.x!==r||this._cachedResolution.y!==i)&&(this._cachedResolution.set(r,i),this._fatLineMaterial.resolution=this._cachedResolution.clone())}super.nodeUpdate(s,e,t,a)}destroy(s){super.destroy(s)}};Ai=Gg([Lt(Ai,"FatLineRenderer")],Ai);var zg=Object.defineProperty,Wg=Object.getOwnPropertyDescriptor,Jg=(s,e,t)=>e in s?zg(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,jg=(s,e,t,a)=>{for(var r=a>1?void 0:a?Wg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r},Zg=(s,e,t)=>Jg(s,e+"",t);let _r=class extends va{totalCount=0;size=new de;localBoundBox=new Ce;get worldBoundBox(){const s=new Ce;s.makeEmpty();const t=this.object3D.transform.worldMatrix.rawData,a=this.localBoundBox.min,r=this.localBoundBox.max,i=[[a.x,a.y,a.z],[r.x,a.y,a.z],[a.x,r.y,a.z],[r.x,r.y,a.z],[a.x,a.y,r.z],[r.x,a.y,r.z],[a.x,r.y,r.z],[r.x,r.y,r.z]];for(const[n,o,l]of i){const c=t[0]*n+t[4]*o+t[8]*l+t[12],f=t[1]*n+t[5]*o+t[9]*l+t[13],d=t[2]*n+t[6]*o+t[10]*l+t[14];s.expandByPoint(new b(c,f,d))}return s}splatColor;transformA;transformB;texParams;_texParamDirty=!0;splatOrder;gsplatMaterial;_colorData;_transformAData;_transformBData;_orderData;_positions;_splatSetFlags;_validCount=0;_sortWorker;_lastSentTime=0;_minIntervalMs=16;_centersSent=!1;_lastViewMatrixHash=0;_lastCameraSpeed=0;_adaptiveSorting=!0;_lastPixelCullParams="";_texturesInitialized=!1;_minPixelCoverage=4;_maxPixelCoverage=0;_maxPixelCullDistance=0;_batchSize=128;instanceCount=0;_pendingUpdates=new Set;_autoFlushThreshold=100;_frameCount=0;constructor(){super()}initCount(s,e=128){if(s<=0)throw new Error("Total count must be greater than 0");this.totalCount=s,this._batchSize=e,this.size=this.evalTextureSize(s);const t=this.size.x|0,a=this.size.y|0,r=t*a;this._colorData=new Uint8Array(r*4),this._colorData.fill(0),this._transformAData=new Uint32Array(r*4),this._transformAData.fill(0),this._transformBData=new Uint16Array(r*4),this._transformBData.fill(0),this._orderData=new Uint32Array(r);for(let i=0;i<r;i++)this._orderData[i]=i<s?i:s>0?s-1:0;this._positions=new Float32Array(s*3),this._positions.fill(0),this.localBoundBox.makeEmpty(),this._splatSetFlags=new Array(s).fill(!1),this._validCount=0,this.texParams=new Float32Array([this._validCount,this.size.x,0,1]),this.splatColor=new ki().create(t,a,this._colorData,!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",this.transformA=new Hn().create(t,a,this._transformAData),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 Ts().create(t,a,this._transformBData,!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",this.splatOrder=new Qs().create(t,a,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 Yn,this.geometry=new Xn(this._batchSize),this.materials=[this.gsplatMaterial],this.instanceCount=0}setSplatData(s,e){if(s<0||s>=this.totalCount)throw new Error(`Index ${s} out of range [0, ${this.totalCount})`);const t=this._splatSetFlags[s];this._positions[s*3+0]=e.position[0],this._positions[s*3+1]=e.position[1],this._positions[s*3+2]=e.position[2],this.localBoundBox.expandByPoint(new b(e.position[0],e.position[1],e.position[2]));const a=.28209479177387814;let r=.5,i=.5,n=.5;e.sh&&e.sh.coeffs&&e.sh.coeffs.length>=3&&(r=.5+e.sh.coeffs[0]*a,i=.5+e.sh.coeffs[1]*a,n=.5+e.sh.coeffs[2]*a);const o=e.opacity!==void 0?1/(1+Math.exp(-e.opacity)):1,l=s*4;this._colorData[l+0]=Math.max(0,Math.min(255,Math.floor(r*255))),this._colorData[l+1]=Math.max(0,Math.min(255,Math.floor(i*255))),this._colorData[l+2]=Math.max(0,Math.min(255,Math.floor(n*255))),this._colorData[l+3]=Math.max(0,Math.min(255,Math.floor(o*255))),this.updateTransformData(s,e),t||(this._splatSetFlags[s]=!0,this._validCount++),this._pendingUpdates.add(s)}updateTransformData(s,e){const t=s*4,a=new ArrayBuffer(4),r=new Float32Array(a),i=new Uint32Array(a),n=$e=>(r[0]=$e,i[0]),o=e.position[0],l=e.position[1],c=e.position[2];this._transformAData[t+0]=n(o),this._transformAData[t+1]=n(l),this._transformAData[t+2]=n(c);let f=0,d=0,h=0,u=1;if(e.rotation){f=e.rotation[0],d=e.rotation[1],h=e.rotation[2],u=e.rotation[3];const $e=1/Math.hypot(f,d,h,u);f*=$e,d*=$e,h*=$e,u*=$e}let m=1,g=1,p=1;e.scale&&(m=Math.exp(e.scale[0]),g=Math.exp(e.scale[1]),p=Math.exp(e.scale[2]));const A=f+f,D=d+d,B=h+h,v=f*A,x=f*D,y=f*B,S=d*D,F=d*B,C=h*B,w=u*A,E=u*D,Q=u*B,T=1-(S+C),j=x+Q,ue=y-E,ee=x-Q,N=1-(v+C),M=F+w,O=y+E,W=F-w,ae=1-(v+S),z=T*m,K=j*m,$=ue*m,re=ee*g,ce=N*g,Ae=M*g,Qe=O*p,Ve=W*p,H=ae*p,ie=z*z+re*re+Qe*Qe,le=z*K+re*ce+Qe*Ve,ge=z*$+re*Ae+Qe*H,Ie=K*K+ce*ce+Ve*Ve,me=K*$+ce*Ae+Ve*H,ye=$*$+Ae*Ae+H*H,Se=t;this._transformBData[Se+0]=bt(ie)&65535,this._transformBData[Se+1]=bt(le)&65535,this._transformBData[Se+2]=bt(ge)&65535,this._transformBData[Se+3]=bt(ye)&65535;const Me=bt(Ie)&65535,Ze=bt(me)&65535;this._transformAData[t+3]=Me|Ze<<16}flushUpdates(){if(this._pendingUpdates.size===0)return;const s=this.size.x|0,e=this.size.y|0,t=Array.from(this._pendingUpdates);if(t.length===0)return;let a=e,r=0;for(const o of t){const l=Math.floor(o/s);l<a&&(a=l),l>r&&(r=l)}const i=r-a+1;i/e<.5&&i<e?(this.splatColor.updateTexture(s,e,this._colorData,a,i),this.transformA.updateTexture(s,e,this._transformAData,a,i),this.transformB.updateTexture(s,e,this._transformBData,!1,a,i)):(this.splatColor.updateTexture(s,e,this._colorData),this.transformA.updateTexture(s,e,this._transformAData),this.transformB.updateTexture(s,e,this._transformBData,!1)),this.updatePendingWorldPositions(),this._pendingUpdates.clear()}setAutoFlushThreshold(s){this._autoFlushThreshold=Math.max(1,s)}getStreamingStats(){return{totalCount:this.totalCount,validCount:this._validCount,pendingUpdates:this._pendingUpdates.size,progress:this.totalCount>0?this._validCount/this.totalCount*100:0}}updateWorldPositions(){!this._positions||this._validCount===0||(this._centersSent=!1)}updatePendingWorldPositions(){!this._positions||this._validCount===0||(this._centersSent=!1)}scheduleOrder(s){if(this._validCount===0)return;const e=this.object3D.transform.localChange;e&&this.updateWorldPositions();const t=s.rawData,a=t[2],r=t[6],i=t[10],n=-(t[0]*t[12]+t[1]*t[13]+t[2]*t[14]),o=-(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]),c=performance.now(),f=(c-this._lastSentTime)/1e3,d=Math.floor(n*1e3)^Math.floor(o*1e3)^Math.floor(l*1e3),h=Math.floor(a*1e3)^Math.floor(r*1e3)^Math.floor(i*1e3),u=d^h;if(u===this._lastViewMatrixHash&&!e&&this._centersSent)return;let m=this._minIntervalMs;if(this._adaptiveSorting&&this._minIntervalMs>0){const p=Math.abs(u-this._lastViewMatrixHash)/Math.max(f,.001);p<1e3?m=this._minIntervalMs:p<1e4?m=this._minIntervalMs*.5:m=this._minIntervalMs*.2,this._lastCameraSpeed=p}if(!(c-this._lastSentTime<m)){if(this._lastViewMatrixHash=u,this._lastSentTime=c,!this._sortWorker){this._sortWorker=this.createSortWorker(),this._sortWorker.onmessage=x=>{const y=x.data.order,S=this._orderData.buffer;this._sortWorker.postMessage({order:S},[S]);const F=new Uint32Array(y),C=this.size.x*this.size.y,w=Math.min(this._validCount,F.length);if((!this._orderData||this._orderData.length!==C)&&(this._orderData=new Uint32Array(C)),this._orderData.set(F.subarray(0,w),0),w<C){const T=this._validCount>0?this._validCount-1:0;this._orderData.fill(T,w,C)}this.splatOrder.updateTexture(this.size.x,this.size.y,this._orderData);const E=Math.max(0,Math.min(this._validCount,x.data.count|0));this.setCount(E),this._updateTexParams();const Q=Math.ceil(E/this._batchSize);this.instanceCount=Q};const g=new Float32Array(this._validCount*3);let p=0;const A=this.object3D.transform.worldMatrix,D=this._positions,B=A.rawData;for(let x=0;x<this._validCount;x++)if(this._splatSetFlags[x]){const y=x*3,S=D[y+0],F=D[y+1],C=D[y+2];g[p*3+0]=B[0]*S+B[4]*F+B[8]*C+B[12],g[p*3+1]=B[1]*S+B[5]*F+B[9]*C+B[13],g[p*3+2]=B[2]*S+B[6]*F+B[10]*C+B[14],p++}const v=new Uint32Array(this.totalCount);for(let x=0;x<this.totalCount;x++)v[x]=x<this._validCount?x:this._validCount>0?this._validCount-1:0;this._sortWorker.postMessage({order:v.buffer,centers:g.buffer},[v.buffer,g.buffer]),this._centersSent=!0}if(!this._centersSent&&this._sortWorker){const g=new Float32Array(this._validCount*3);let p=0;const A=this.object3D.transform.worldMatrix,D=this._positions,B=A.rawData;for(let v=0;v<this._validCount;v++)if(this._splatSetFlags[v]){const x=v*3,y=D[x+0],S=D[x+1],F=D[x+2];g[p*3+0]=B[0]*y+B[4]*S+B[8]*F+B[12],g[p*3+1]=B[1]*y+B[5]*S+B[9]*F+B[13],g[p*3+2]=B[2]*y+B[6]*S+B[10]*F+B[14],p++}this._sortWorker.postMessage({type:"centers",centers:g.buffer},[g.buffer]),this._centersSent=!0}this._sortWorker.postMessage({cameraPosition:{x:n,y:o,z:l},cameraDirection:{x:-a,y:-r,z:-i}})}}createSortWorker(){function s(){let n,o,l,c,f=!1;const d={x:0,y:0,z:0},h={x:0,y:0,z:0},u={x:0,y:0,z:0},m={x:0,y:0,z:0};let g,p;const A=(B,v,x)=>{for(;B<=v;){const y=v+B>>1,S=x(y);if(S>0)B=y+1;else if(S<0)v=y-1;else return y}return~B},D=()=>{if(!n||!o||!l||!c)return;const B=l.x,v=l.y,x=l.z,y=c.x,S=c.y,F=c.z,C=.001;if(!f&&Math.abs(B-d.x)<C&&Math.abs(v-d.y)<C&&Math.abs(x-d.z)<C&&Math.abs(y-h.x)<C&&Math.abs(S-h.y)<C&&Math.abs(F-h.z)<C)return;f=!1,d.x=B,d.y=v,d.z=x,h.x=y,h.y=S,h.z=F;const w=o.length/3;g?.length!==w&&(g=new Uint32Array(w));let E,Q;for(let M=0;M<8;++M){const O=(M&1?u.x:m.x)-B,W=(M&2?u.y:m.y)-v,ae=(M&4?u.z:m.z)-x,z=O*y+W*S+ae*F;M===0?E=Q=z:(E=Math.min(E,z),Q=Math.max(Q,z))}p?p.fill(0):p=new Uint32Array(65537);const T=Q-E,j=T<1e-6?0:1/T*2**16;for(let M=0;M<w;++M){const O=M*3,W=o[O+0]-B,ae=o[O+1]-v,z=o[O+2]-x,K=W*y+ae*S+z*F,$=Math.floor((K-E)*j);g[M]=$,p[$]++}for(let M=1;M<65537;M++)p[M]+=p[M-1];for(let M=0;M<w;M++){const O=g[M],W=--p[O];n[W]=M}const ue=M=>g[n[M]]/j+E,ee=()=>{const M=A(0,w-1,O=>-ue(O));return Math.min(w,Math.abs(M))},N=ue(w-1)>=0?ee():w;self.postMessage({order:n.buffer,count:N},[n.buffer]),n=null};self.onmessage=B=>{if(B.data.order&&(n=new Uint32Array(B.data.order)),B.data.centers){o=new Float32Array(B.data.centers),u.x=m.x=o[0],u.y=m.y=o[1],u.z=m.z=o[2];const v=o.length/3;for(let x=1;x<v;++x){const y=o[x*3+0],S=o[x*3+1],F=o[x*3+2];u.x=Math.min(u.x,y),u.y=Math.min(u.y,S),u.z=Math.min(u.z,F),m.x=Math.max(m.x,y),m.y=Math.max(m.y,S),m.z=Math.max(m.z,F)}f=!0}B.data.cameraPosition&&(l=B.data.cameraPosition),B.data.cameraDirection&&(c=B.data.cameraDirection),D()}}const e=`(${s.toString()})()`,t=new Blob([e],{type:"application/javascript"}),a=URL.createObjectURL(t);return new Worker(a)}setVisBoost(s){this.texParams[3]=Math.max(0,s),this._texParamDirty=!0}setCount(s){this.texParams[0]=Math.max(0,s),this._texParamDirty=!0}_updateTexParams(){this._texParamDirty&&(this.gsplatMaterial.setTexParams(this.texParams),this._texParamDirty=!1)}setSortThrottle(s){this._minIntervalMs=Math.max(0,s|0)}setAdaptiveSorting(s){this._adaptiveSorting=s}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}}getBatchingStats(){return{enabled:!0,batchSize:this._batchSize,instanceCount:this.instanceCount,splatCount:this._validCount,reduction:this._validCount>0?(1-this.instanceCount/this._validCount)*100:0}}evalTextureSize(s){let e=Math.ceil(Math.sqrt(s));const t=64;e=Math.ceil(e/t)*t;const a=Math.ceil(s/e);return new de(e,a)}nodeUpdate(s,e,t,a){this._validCount>0&&s?.camera&&s.camera.viewMatrix&&this.scheduleOrder(s.camera.viewMatrix),this._pendingUpdates.size>0&&this._frameCount>=_r.flushFrameLimit&&this.flushUpdates(),this._frameCount>=_r.flushFrameLimit&&this._pendingUpdates.size===0&&(this._frameCount=0),this._frameCount++,this._updateTexParams();const r=this.object3D.transform.worldMatrix;this.gsplatMaterial.setTransformMatrix(r);const i=`${this._minPixelCoverage},${this._maxPixelCoverage},${this._maxPixelCullDistance},${this._batchSize}`;i!==this._lastPixelCullParams&&(this.gsplatMaterial.setPixelCulling(this._minPixelCoverage,this._maxPixelCoverage,this._maxPixelCullDistance,this._batchSize),this._lastPixelCullParams=i),this._texturesInitialized||(this.gsplatMaterial.setSplatTextures(this.splatColor,this.transformA,this.transformB,this.texParams,this.splatOrder),this._texturesInitialized=!0),super.nodeUpdate(s,e,t,a)}renderPass(s,e,t){const a=t.encoder;for(let r of this.materials){const i=r.getPass(e);if(!(!i||i.length===0))for(const n of i){if(!n.pipeline)continue;n.apply(this.geometry,t.rendererPassState||t),k.bindPipeline(a,n),k.bindGeometryBuffer(a,this.geometry);const l=this.geometry.subGeometries[0].lodLevels[0];this.instanceCount>0?k.drawIndexed(a,l.indexCount,this.instanceCount,l.indexStart,0,0):k.drawIndexed(a,l.indexCount,1,l.indexStart,0,0)}}}destroy(s){this._sortWorker&&(this._sortWorker.terminate(),this._sortWorker=null),this.splatColor&&(this.splatColor.destroy(s),this.splatColor=null),this.transformA&&(this.transformA.destroy(s),this.transformA=null),this.transformB&&(this.transformB.destroy(s),this.transformB=null),this.splatOrder&&(this.splatOrder.destroy(s),this.splatOrder=null),this._positions=null,this._orderData=null,this._colorData=null,this._transformAData=null,this._transformBData=null,this.texParams=null,this._splatSetFlags=null,this._pendingUpdates.clear(),super.destroy(s)}};Zg(_r,"flushFrameLimit",60),_r=jg([Lt(_r,"GSplatStreamRenderer")],_r);class yh extends ne{index=0;drawCallFrame=-1;constructor(){super()}}var jo=(s=>(s[s.CastGI=0]="CastGI",s[s.ReceiveGI=1]="ReceiveGI",s[s.CastDepth=2]="CastDepth",s[s.Other=3]="Other",s))(jo||{});class Ch extends xt{static count=0;constructor(e=0,t=0){super(),Y.register("GIProbeShader",Wd);let a=new Dt,r=new qe("GIProbeShader","GIProbeShader");r.passType=fe.COLOR,a.addRenderPass(r),r.setDefine("USE_BRDF",!0),r.setShaderEntry("VertMain","FragMain"),r.setUniformVector4("probeUniform",new be(t,e,0,0));let i=r.shaderState;i.acceptShadow=!1,i.castShadow=!1,i.receiveEnv=!1,i.acceptGI=!1,i.useLight=!1,a.setTexture("baseMap",_.res.whiteTexture),a.setTexture("normalMap",_.res.normalTexture),a.setTexture("emissiveMap",_.res.blackTexture),this.shader=a}}class Yg extends et{_probes;_volume;_debugMr=[];init(e){e||=_.views[0]?.scene,_.setting.gi.enable=!0,this._volume=xe.getLightEntries(e).irradianceVolume,this.initProbe(e)}initProbe(e){let t=this._volume.setting.probeXCount,a=this._volume.setting.probeYCount,r=this._volume.setting.probeZCount,i=new Pr(4,16,16),n=new b;this._probes=[];for(let o=0;o<t;o++)for(let l=0;l<a;l++)for(let c=0;c<r;c++){let f=o+c*t+l*(t*r),d=new yh;d.index=f,d.name=`${o}_${l}_${c}`;let h=d.addComponent(he);h.material=new Ch(jo.CastGI,f),h.geometry=i,h.castGI=!1,h.castShadow=!1,this._debugMr.push(h),this.object3D.addChild(d),this._volume.calcPosition(o,l,c,n),d.x=n.x,d.y=n.y,d.z=n.z,this._probes[f]=d,this._debugMr.push(h)}for(let o=0;o<this._probes.length;o++)q.instance.addGIProbe(e,this._probes[o]);this.object3D.transform.enable=!1,this._volume.setting.debug&&this.debug()}debug(){}debugProbeRay(e,t){const a=_.setting.gi.rayNumber;let r=new se(0,-.7071067811865475,.7071067811865475,0);for(let i=0;i<a;i++){let n=e*a+i,o=new b(-t[n*4+0],-t[n*4+1],-t[n*4+2],0);r.transformVector(o,o);let l=t[n*4+3],c=this._probes[e].transform.worldPosition.clone(),f=o.scaleBy(l);f.add(c,f)}}changeProbesVolumeData(){this._volume.setVolumeDataChange()}changeProbesPosition(){this._volume.setVolumeDataChange();let e=this._volume.setting.probeXCount,t=this._volume.setting.probeYCount,a=this._volume.setting.probeZCount,r=new b;for(let i=0;i<e;i++)for(let n=0;n<t;n++)for(let o=0;o<a;o++){let l=i+o*e+n*(e*a),c=this._probes[l];this._volume.calcPosition(i,n,o,r),c.x=r.x,c.y=r.y,c.z=r.z}}onUpdate(){_.setting.gi.maxDistance=_.setting.gi.probeSpace*1.5;let e=this.transform.scene3D.view.camera,t=b.distance(e.transform.worldPosition,e.transform.targetPos)/300;if(this._debugMr&&this._debugMr.length>0)for(let a=0;a<this._debugMr.length;a++){const r=this._debugMr[a].transform;r.scaleX=t,r.scaleY=t,r.scaleZ=t}}}class Xg extends va{_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(he,e,!0);for(let t=0;t<e.length;t++){const a=e[t];a.transform.updateWorldMatrix(!0),a.enable=!1;let r=a.geometry.instanceID;for(let i=0;i<a.materials.length;i++){const n=a.materials[i];r+=n.instanceID}if(this._keyRenderGroup.has(r))this._keyRenderGroup.get(r).push(a),this._keyIdsGroup.get(r).push(a.transform.worldMatrix.index);else{let i=new Pe(e.length);i.visibility=GPUShaderStage.VERTEX,this._keyRenderGroup.set(r,[a]),this._keyBufferGroup.set(r,i),this._keyIdsGroup.set(r,[a.transform.worldMatrix.index])}}this._keyBufferGroup.forEach((t,a)=>{let r=this._keyIdsGroup.get(a),i=this._keyBufferGroup.get(a);i.setInt32Array("matrixIDs",new Int32Array(r)),i.apply()})}reset(){this._keyRenderGroup.size>0&&(this._keyRenderGroup.clear(),this._keyBufferGroup.clear(),this._keyIdsGroup.clear(),this.start())}nodeUpdate(e,t,a,r){this._keyRenderGroup.forEach((i,n)=>{let o=this._keyBufferGroup.get(n),l=i[0];for(let c=0;c<l.materials.length;c++){let d=l.materials[c].getPass(t);if(d)for(let h=0;h<d.length;h++){const u=d[h];u.setDefine("USE_INSTANCEDRAW",!0),u.setStorageBuffer("instanceDrawID",o)}}l.nodeUpdate(e,t,a,r)})}renderPass(e,t,a){this._keyRenderGroup.forEach((r,i)=>{let n=r[0];n.instanceCount=r.length,this.renderItem(e,t,n,a)})}renderItem(e,t,a,r){let i=a.transform._worldMatrix;for(let n=0;n<a.materials.length;n++){let l=a.materials[n].getPass(t);if(!(!l||l.length==0))for(let c=0;c<l.length;c++){let f=l[c];k.bindGeometryBuffer(r.encoder,a.geometry);const d=f;d.shaderState.splitTexture&&(r.endRenderPass(),Nt.WriteSplitColorTexture(a.instanceID),r.beginOpaqueRenderPass(),k.bindCamera(r.encoder,e.camera),k.bindGeometryBuffer(r.encoder,a.geometry)),k.bindPipeline(r.encoder,d);let g=a.geometry.subGeometries[n].lodLevels[a.lodLevel];a.instanceCount>0?k.drawIndexed(r.encoder,g.indexCount,a.instanceCount,g.indexStart,0,0):k.drawIndexed(r.encoder,g.indexCount,1,g.indexStart,0,i.index)}}}beforeDestroy(e){this._keyRenderGroup.clear(),this._keyBufferGroup.clear(),this._keyIdsGroup.clear(),this._keyRenderGroup=this._keyBufferGroup=this._keyIdsGroup=void 0,Oe.removeWaitStart(this.object3D,this)}}var Hg=Object.getOwnPropertyDescriptor,Kg=(s,e,t,a)=>{for(var r=a>1?void 0:a?Hg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Zs=class extends he{constructor(){super()}get geometry(){return null}set geometry(s){}cloneTo(s){}set meshURL(s){let e=_.res.getGeometry(s);e?this.geometry=e:console.error("no geometry set",s)}};Zs=Kg([Lt(Zs,"MeshFilter")],Zs);var qg=Object.getOwnPropertyDescriptor,$g=(s,e,t,a)=>{for(var r=a>1?void 0:a?qg(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Yi=class extends he{skinJointsName;mInverseBindMatrixData;mInverseBindMatrixBuffer;mSkeletonAnimation;mJointIndexTableBuffer;constructor(){super(),this.addRendererMask(Ne.SkinnedMesh)}start(){if(super.start(),this.skeletonAnimation=this.object3D.getComponent(mr),!this.skeletonAnimation){let s=this.object3D.parentObject.parentObject.getComponentsInChild(mr);s.length>0&&(this.skeletonAnimation=s[0]);let e=this.object3D;for(;!this.skeletonAnimation&&e;)this.skeletonAnimation=e.getComponentFromParent(mr),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 Pe(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 a=t*16,r=s[t];e.set(r,a)}this.mInverseBindMatrixBuffer=new Pe(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(Yi);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,a){for(let r=0;r<this.materials.length;r++){let n=this.materials[r].getPass(e);if(n)for(let o=0;o<n.length;o++){const l=n[o];!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,a)}};Yi=$g([Lt(Yi,"SkinnedMeshRenderer")],Yi);class ep extends pt{radius=2.5;height=10;constructor(){super(),this._shapeType=bi.Capsule}}class mn extends pt{mesh;static triangle;_pickRet;constructor(){super(),this._shapeType=bi.Mesh}rayPick(e,t){if(this.mesh){mn.triangle||=new us(new b,new b,new b);let a=this.mesh.getAttribute(G.position),r=this.mesh.getAttribute(G.indices),i=pt.helpMatrix;i.copyFrom(t).invert();let n=pt.helpRay.copy(e);if(n.applyMatrix(i),n.intersectBox(this.mesh.bounds),!n.intersectBox(this.mesh.bounds,pt.v3_help_0))return null;if(r&&a&&r.data.length>0){let l=a.data;for(let c=0,f=r.data.length/3;c<f;c++){let d=c*3;const h=r.data[d+0]*3,u=r.data[d+1]*3,m=r.data[d+2]*3;let g=mn.triangle,p=g.v1.set(l[h+0],l[h+1],l[h+2]),A=g.v2.set(l[u+0],l[u+1],l[u+2]),D=g.v3.set(l[m+0],l[m+1],l[m+2]);g.set(p,A,D);let B=n.intersectTriangle(n.origin,n.direction,g);if(B){this._pickRet||={intersectPoint:new b,distance:0},this._pickRet.intersectPoint=B,this._pickRet.distance=b.distance(n.origin,B);let v=this.mesh.getAttribute(G.normal);if(v){let x=v.data,y=new b(x[h],x[h+1],x[h+2]);t.transformVector(y,y),y.normalize(),this._pickRet.normal=y}return this._pickRet}}}}return null}}class tp extends pt{_pickRet;box;radius=.5;constructor(e){super(),this._shapeType=bi.Sphere,this.radius=e,this.box=new Gr(new b,1)}rayPick(e,t){this.box.setFromCenterAndSize(this.center,this.radius);let r=pt.helpMatrix;r.copyFrom(t).invert();let i=pt.helpRay.copy(e);i.applyMatrix(r);let n=i.intersectSphere(i.origin,i.direction,this.box.center,this.box.radius);return n?(this._pickRet||(this._pickRet={intersect:!1,intersectPoint:new b,distance:0}),this._pickRet.intersect=!0,this._pickRet.intersectPoint=n,this._pickRet.distance=b.distance(i.origin,pt.v3_help_0),this._pickRet):null}}class ap extends ne{_envMap;skyObject;envMapChange=!0;view;constructor(){super(),this.transform.scene3D=this,this.skyObject=new ne,this.addChild(this.skyObject),this._isScene3D=!0,this.envMap||=_.res.defaultSky}get envMap(){return this._envMap}set envMap(e){this._envMap!=e&&(this.envMapChange=!0),this._envMap=e,q.instance.sky&&"map"in q.instance.sky&&(q.instance.sky.map=e)}get exposure(){return q.instance.sky&&"exposure"in q.instance.sky?q.instance.sky.exposure:0}set exposure(e){q.instance.sky&&"exposure"in q.instance.sky&&(q.instance.sky.exposure=e,_.setting.sky.skyExposure=e)}get roughness(){if(q.instance.sky&&"roughness"in q.instance.sky)return q.instance.sky.roughness}set roughness(e){q.instance.sky&&"roughness"in q.instance.sky&&(q.instance.sky.roughness=e)}}class Sh{_computeShader;_outBuffer;constructor(){}init(){let e=ve.getGBufferFrame(ve.colorPass_GBuffer);this._computeShader=new Fe(Sd),this._outBuffer=new oi(32),this._computeShader.setStorageBuffer("outBuffer",this._outBuffer),this._computeShader.setSamplerTexture("gBufferTexture",e.getCompressGBufferTexture())}compute(e){let t=xe.getCameraGroup(e.camera);this._computeShader.setStorageBuffer("globalUniform",t.uniformGPUBuffer);let a=k.beginCommandEncoder();k.computeCommand(a,[this._computeShader]),k.endCommandEncoder(a),this._outBuffer.readBuffer()}getPickMeshID(){var e=this._outBuffer.outFloat32Array[0]+.1;return Math.floor(e)}getPickWorldPosition(e){e||=new b;var t=this._outBuffer.outFloat32Array[4],a=this._outBuffer.outFloat32Array[5],r=this._outBuffer.outFloat32Array[6];return e.set(t,a,r),e}getPickWorldNormal(e){e||=new b;var t=this._outBuffer.outFloat32Array[8],a=this._outBuffer.outFloat32Array[9],r=this._outBuffer.outFloat32Array[10];return e.set(t*2-1,a*2-1,r*2-1).normalize(),e}getPickScreenUV(e){e||=new de;var t=this._outBuffer.outFloat32Array[2],a=this._outBuffer.outFloat32Array[3];return e.set(t,a),e}}class Fh extends Ya{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 ba,this.mouseEnableMap=new Map,this._pickEvent=new Z(Z.PICK_CLICK),this._outEvent=new Z(Z.PICK_OUT),this._overEvent=new Z(Z.PICK_OVER),this._mouseMove=new Z(Z.PICK_MOVE),this._upEvent=new Z(Z.PICK_UP),this._downEvent=new Z(Z.PICK_DOWN)}start(){_.setting.pick.enable&&(_.inputSystem.addEventListener(Z.POINTER_DOWN,this.onTouchStart,this),_.inputSystem.addEventListener(Z.POINTER_UP,this.onTouchEnd,this),_.inputSystem.addEventListener(Z.POINTER_CLICK,this.onTouchOnce,this),_.inputSystem.addEventListener(Z.POINTER_RIGHT_CLICK,this.onTouchOnce,this),_.inputSystem.addEventListener(Z.POINTER_MOVE,this.onTouchMove,this)),_.setting.pick.mode=="pixel"&&(this._pickCompute=new Sh,this._pickCompute.init())}stop(){_.inputSystem.removeEventListener(Z.POINTER_DOWN,this.onTouchStart,this),_.inputSystem.removeEventListener(Z.POINTER_UP,this.onTouchEnd,this),_.inputSystem.removeEventListener(Z.POINTER_CLICK,this.onTouchOnce,this),_.inputSystem.removeEventListener(Z.POINTER_RIGHT_CLICK,this.onTouchOnce,this),_.inputSystem.removeEventListener(Z.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=Z.PICK_DOWN,this._downEvent.target=t.object3D,this._downEvent.data=this.getPickInfo(),this.dispatchEvent(this._downEvent),t.object3D.containEventListener(Z.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=Z.PICK_UP,this._upEvent.target=t.object3D,this._upEvent.data=this.getPickInfo(),this.dispatchEvent(this._upEvent),t.object3D.containEventListener(Z.PICK_UP)&&t.object3D.dispatchEvent(this._upEvent))}_lastFocus;getPickInfo(){if(_.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=Z.PICK_MOVE,this._mouseMove.target=t.object3D,this._mouseMove.data=this.getPickInfo(),this.dispatchEvent(this._mouseMove),t.object3D.containEventListener(Z.PICK_MOVE)&&t.object3D.dispatchEvent(this._mouseMove)),t!=this._lastFocus&&(this._lastFocus&&this._lastFocus.object3D&&(Object.assign(this._outEvent,e),this._outEvent.type=Z.PICK_OUT,this._outEvent.target=this._lastFocus.object3D,this._outEvent.data=this.getPickInfo(),this.dispatchEvent(this._outEvent),this._lastFocus.object3D.containEventListener(Z.PICK_OUT)&&this._lastFocus.object3D.dispatchEvent(this._outEvent)),t&&(Object.assign(this._overEvent,e),this._overEvent.type=Z.PICK_OVER,this._overEvent.target=t.object3D,this._overEvent.data=this.getPickInfo(),this.dispatchEvent(this._overEvent),t.object3D.containEventListener(Z.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 a=this.getPickInfo();Object.assign(this._pickEvent,e),this._pickEvent.type=Z.PICK_CLICK,this._pickEvent.target=t.object3D,this._pickEvent.data=a,this.dispatchEvent(this._pickEvent),t===this._lastDownTarget&&t.object3D.containEventListener(Z.PICK_CLICK)&&t.object3D.dispatchEvent(this._pickEvent)}this._lastDownTarget=null}findNearestObj(e,t){return e.sort((a,r)=>a.distance>r.distance?1:-1),e[0]?.collider}_interestList=[];pick(e){if(this._interestList.length=0,_.setting.pick.mode=="pixel"){this._pickCompute.compute(this._view);let t=this._pickCompute.getPickMeshID(),a=this.mouseEnableMap.get(t);if(a){let r=this._pickCompute.getPickWorldPosition(),i=b.distance(r,this.ray.origin);this._interestList.push({distance:i,collider:a,intersectPoint:r})}}else if(_.setting.pick.mode=="bound"){this.ray=e.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY);let t,a=Oe.componentsEnablePickerList.get(this._view);if(a)for(const r of a){let i=r[0];i.enable&&(t=i.rayPick(this.ray),t&&(t.collider=i,this._interestList.push(t)))}}}}class rp extends ys{_camera;_scene;_viewPort;_enablePick=!1;_enable=!0;pickFire;guiPick;canvasList;constructor(e=0,t=0,a=0,r=0){super(),this.canvasList=[],this._viewPort=new be(e,t,a,r)}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 Fh(this),this.pickFire.start()),this._enablePick=e}get scene(){return this._scene}set scene(e){this._scene=e,e.view=this,Zt.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 a=new ne;a.name="Canvas "+e,t=a.addComponent(ds),t.index=e,this.canvasList[e]=t}return this.scene.addChild(t.object3D),this.guiPick||(this.guiPick=new gh,this.guiPick.init(this)),t}disableUICanvas(e=0){let t=this.canvasList[e];t&&t.object3D&&t.object3D.removeFromParent()}}class ip{normal;fixNormal;center;rotateShape;distance=0;index;constructor(e){this.index=e,this.rotateShape=[]}}class sp extends Le{vScale;uNegate;sections;build(e,t,a,r=1,i=!0){if(a.length<2)throw new Error("path length is not enough");return this.vScale=r,this.uNegate=i,e=e.slice(),t&&e.push(e[0]),this.sections=this.buildSections(e,a),this.buildGeometry(e,this.sections),this.bounds=new Ce(b.ZERO.clone(),new b(100,100,100)),this}buildSections(e,t){let a,r,i,n=[],o=t.length;for(let c=0;c<o;c++){let f=new ip(c);a=t[c],r=t[c+1],f.center=a.clone(),r==null?(f.normal=i.clone(),f.distance=0):(i=r.subtract(a),f.distance=i.length,f.normal=i.normalize()),n.push(f)}n[0].fixNormal=n[0].normal.clone();for(let c=1;c<o;c++){let f=n[c-1],d=n[c];d.fixNormal=d.normal.add(f.normal).normalize()}let l=new R().identity();for(let c=0;c<o;c++){let f=n[c],d,h;if(c==0)d=b.UP,h=e;else{let u=n[c-1];d=u.fixNormal,h=u.rotateShape}R.fromToRotation(d,f.fixNormal,l);for(let u=0,m=e.length;u<m;u++){let g=l.multiplyPoint3(h[u]);f.rotateShape.push(g)}}return n}buildGeometry(e,t){let a=t.length,r=e.length,i=a*r,n=a-1,o=new Float32Array(i*3),l=new Float32Array(i*3),c=new Float32Array(i*2),f=new Uint32Array(n*(r-1)*6),d=r-1,h=0,u=0,m=[0];for(let p=1;p<r;p++)u+=e[p-1].subtract(e[p]).length,m.push(u);for(let p=0;p<a;p++){let A=t[p];for(let D=0;D<r;D++){let B=(p*r+D)*3,v=A.rotateShape[D].add(A.center);o[B]=v.x,o[B+1]=v.y,o[B+2]=v.z,l[B+1]=1;let x=(p*r+D)*2,y=m[D]/u;c[x]=this.uNegate?1-y:y,c[x+1]=h*this.vScale}h+=A.distance}let g=0;for(let p=0;p<n;p++){let A=p*r;for(let D=0;D<d;D++){let B=D,v=D+1,x=B+r,y=v+r;f[g++]=B+A,f[g++]=v+A,f[g++]=x+A,f[g++]=v+A,f[g++]=y+A,f[g++]=x+A}}return this.setIndices(f),this.setAttribute(G.position,o),this.setAttribute(G.normal,l),this.setAttribute(G.uv,c),this.setAttribute(G.TEXCOORD_1,c),this.addSubGeometry({indexStart:0,indexCount:f.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0}),this.computeNormals(),this}}class kh extends Le{_instanceBuffer;_instanceData;_instanceCount=0;constructor(){super(),this.initBaseGeometry()}initBaseGeometry(){const e=new Float32Array([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0]),t=new Float32Array([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2]),a=new Uint16Array([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]);this.setIndices(a),this.setAttribute(G.position,e),this.setAttribute(G.uv,t),this.addSubGeometry({indexStart:0,indexCount:a.length,vertexStart:0,vertexCount:e.length/3,firstStart:0,index:0,topology:0})}setPositions(e){const t=e instanceof Float32Array?e:new Float32Array(e),r=t.length/3-1;if(r<=0)return console.warn("FatLineGeometry: Need at least 2 points"),this;const i=new Float32Array(r*16);for(let n=0;n<r;n++){const o=n*3,l=(n+1)*3;i[n*16+0]=t[o+0],i[n*16+1]=t[o+1],i[n*16+2]=t[o+2],i[n*16+3]=0,i[n*16+4]=t[l+0],i[n*16+5]=t[l+1],i[n*16+6]=t[l+2],i[n*16+7]=0,i[n*16+8]=1,i[n*16+9]=1,i[n*16+10]=1,i[n*16+11]=0,i[n*16+12]=1,i[n*16+13]=1,i[n*16+14]=1,i[n*16+15]=0}return this._instanceData=i,this._instanceCount=r,this.computeBoundingBox(t),this}setColors(e){const t=e instanceof Float32Array?e:new Float32Array(e);if(!this._instanceData)return console.warn("FatLineGeometry: Must call setPositions() before setColors()"),this;const r=t.length/3-1;if(r!==this._instanceCount)return console.warn("FatLineGeometry: Color array length doesn't match segment count"),this;for(let i=0;i<r;i++){const n=i*3,o=(i+1)*3;this._instanceData[i*16+8]=t[n+0],this._instanceData[i*16+9]=t[n+1],this._instanceData[i*16+10]=t[n+2],this._instanceData[i*16+12]=t[o+0],this._instanceData[i*16+13]=t[o+1],this._instanceData[i*16+14]=t[o+2]}return this}computeBoundingBox(e){const t=new b(1/0,1/0,1/0),a=new b(-1/0,-1/0,-1/0);for(let i=0;i<e.length;i+=3){const n=e[i],o=e[i+1],l=e[i+2];t.x=Math.min(t.x,n),t.y=Math.min(t.y,o),t.z=Math.min(t.z,l),a.x=Math.max(a.x,n),a.y=Math.max(a.y,o),a.z=Math.max(a.z,l)}const r=b.sub(a,t);this.bounds=new Ce(b.ZERO.clone(),r),this.bounds.setFromMinMax(t,a)}get instanceData(){return this._instanceData}get instanceCount(){return this._instanceCount}get instanceBuffer(){return!this._instanceBuffer&&this._instanceData&&(this._instanceBuffer=new Pe(this._instanceData.byteLength),this._instanceBuffer.setFloat32Array("",this._instanceData),this._instanceBuffer.apply()),this._instanceBuffer}updateInstanceBuffer(){this._instanceBuffer&&this._instanceData&&(this._instanceBuffer.setFloat32Array("",this._instanceData),this._instanceBuffer.apply())}}class np{name;offset;size;arrayStride;stepMode;attributes}class op{name;format;offset;shaderLocation;stride}var Eh=(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))(Eh||{});class lp{get data(){return null}entity}class wh{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 Ih{_spaceDesc;getRange(e){return this._spaceDesc[e]}initSpace(e){this._spaceDesc={};for(let t of e)(this._spaceDesc[t]=new wh).set(-Number.MAX_VALUE,Number.MAX_VALUE);return this}isContain(e,t){let a=this._spaceDesc[e];return t>=a.min&&t<a.max}isInterestRange(e,t){let a=this._spaceDesc[e];return a?t.isInterestRange(a):!1}splitSpace(e,t,a){let r=this._spaceDesc[e];return t?r.max=a:r.min=a,this}copySpace(e){for(let t in e._spaceDesc){let a=e._spaceDesc[t];this._spaceDesc[t].copy(a)}return this}}class bs{static MaxEntityCountInLeaf=4;static MaxLayer=10;static ClearLeafLayer=bs.MaxLayer-4}class gs{static UUID=0;uuid="0";constructor(){this.uuid=(gs.UUID++).toString()}}class cp{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 Cr extends gs{_dimensionIndex=0;_dimensions;_dimension;_left;_right;_space;_parent;_entities;layer;get dimension(){return this._dimension}constructor(e=0){super(),this.layer=e,Cr.nodeCount++}initNode(e,t,a){return this._dimensions=t,this._dimensionIndex=a,this._dimension=t[a],this._space=new Ih().initSpace(t),e&&this._space.copySpace(e._space),this._parent=e,this._entities=new cp,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,a=this._dimensions[t];e.isInNode(this._right,a)?this._right.updateEntity(e):e.isInNode(this._left,a)&&this._left.updateEntity(e)}}buildRoot(e){for(const t of e)t.entity.attachTreeNode(this);this.autoSplit()}_splitEntityList=[];autoSplit(){if(this._entities.count>bs.MaxEntityCountInLeaf&&!this._right&&!this._left&&this.layer<bs.MaxLayer){let e=this._splitEntityList,t=(this._dimensionIndex+1)%this._dimensions.length,a=this._dimensions[t],r=0;for(const i in this._entities.map){let n=this._entities.map[i];r+=n.centerValue(a),e.push(n)}r/=this._entities.count,this._left=new Cr(this.layer+1),this._right=new Cr(this.layer+1),this._left.initNode(this,this._dimensions,t),this._right.initNode(this,this._dimensions,t),this._left.setSpace(!0,r),this._right.setSpace(!1,r);for(let i of e)i.isInNode(this._right,a)?i.attachTreeNode(this._right):i.isInNode(this._left,a)&&i.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>bs.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,Cr.nodeCount-=2),e||t}isContain(e){return this._space.isContain(this._dimension,e)}static rangeBox=new Ce(new b(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),new b(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE));nodeIntersectsBox(e){let t=this._space.getRange("x"),a=this._space.getRange("y"),r=this._space.getRange("z"),i=Cr.rangeBox;return i.min.set(t.min,a.min,r.min),i.max.set(t.max,a.max,r.max),i.intersectsBox(e)}nodeIntersectsRay(e){let t=this._space.getRange("x"),a=this._space.getRange("y"),r=this._space.getRange("z"),i=Cr.rangeBox;return i.min.set(t.min,a.min,r.min),i.max.set(t.max,a.max,r.max),!0}pointCast(e,t=0,a){if(a=a||[],this._entities.count>0){let r=this._entities.map;for(let i in r){let n=r[i],o=n.entityContainPoint(e);!o&&t>0&&(o=n.squareDistanceTo(e,this._dimensions)<=t),o&&a.push(n)}}this._left&&this._left.isContain(e[this._left.dimension])&&this._left.pointCast(e,t,a),this._right&&this._right.isContain(e[this._right.dimension])&&this._right.pointCast(e,t,a)}boxCast(e,t){if(t=t||[],this._entities.count>0){let a=this._entities.map;for(let r in a){let i=a[r];i.entityIntersectsBox(e)&&t.push(i)}}this._left&&this._left.nodeIntersectsBox(e)&&this._left.boxCast(e,t),this._right&&this._right.nodeIntersectsBox(e)&&this._right.boxCast(e,t)}pointIntersect=new b;rayCast(e,t,a){t=t||[],a=a||[];let r=this.pointIntersect;if(this._entities.count>0){let i=this._entities.map;for(let n in i){let o=i[n];o.entityIntersectsRay(e,r)&&(a.push(new b().copyFrom(r)),t.push(o))}}this._left&&this._left.nodeIntersectsRay(e)&&this._left.rayCast(e,t,a),this._right&&this._right.nodeIntersectsRay(e)&&this._right.rayCast(e,t,a)}}class fp extends gs{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 Pt{minPosX=0;minPosY=0;maxPosX=0;maxPosY=0;testID=0;points;offsetPosition;static TINY=1e-6;constructor(){this.points=new Array,this.offsetPosition=new b(0,0,0,0),this.clear()}setAABox(e,t,a,r){this.minPosX=e-a/2-Pt.TINY,this.maxPosX=e+a/2+Pt.TINY,this.minPosY=t-r/2-Pt.TINY,this.maxPosY=t+r/2+Pt.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,a,r){this.minPosX>e&&(this.minPosX=e),this.minPosY>t&&(this.minPosY=t),this.maxPosX<a&&(this.maxPosX=a),this.maxPosY<r&&(this.maxPosY=r)}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-Pt.TINY),e.x>this.maxPosX&&(this.maxPosX=e.x+Pt.TINY),e.z<this.minPosY&&(this.minPosY=e.z-Pt.TINY),e.z>this.maxPosY&&(this.maxPosY=e.z+Pt.TINY),this.points.push(e))}clone(){var e=new Pt;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,a,r){var i=!1,n=t-r,o=a-e,l=e*r-a*t,c=(-l-n*this.minPosX)/o;c<=this.maxPosY&&c>=this.minPosY&&(i=!0),c=(-l-n*this.maxPosX)/o,c<=this.maxPosY&&c>=this.minPosY&&(i=!0);var f=(-l-o*this.minPosY)/n;return f<=this.maxPosX&&f>=this.minPosX&&(i=!0),f=(-l-o*this.maxPosY)/n,f<=this.maxPosX&&f>=this.minPosX&&(i=!0),i}}class Er{static NUM_CHILDREN=4;childCellIndices;nodeIndices;aabb;points;constructor(e){this.childCellIndices=new Array,this.childCellIndices.length=Er.NUM_CHILDREN,this.nodeIndices=new Array,this.clear(),e?this.aabb=e.clone():this.aabb=new Pt}isLeaf(){return this.childCellIndices[0]==-1}clear(){for(var e=0;e<Er.NUM_CHILDREN;e++)this.childCellIndices[e]=-1;this.nodeIndices.splice(0,this.nodeIndices.length)}}class Rh{_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 Pt}getQuadNode(e){return this._quadNodes[e]}clear(){this._cells.length=0,this._quadNodes.length=0}initNodes(e){this.clear();for(var t=0,a=e.length;t<a;)e[t].calcGlobalQuadAABB(),this._quadNodes.push(e[t]),t++}buildQuadTree(e,t){this._aabb.clear();for(var a of this._quadNodes)if(a.isTriangle)for(var r of a.aabb.points)this._aabb.addPoint(r);else this._aabb.setContainRect(a.aabb.minPosX,a.aabb.minPosY,a.aabb.maxPosX,a.aabb.maxPosY);this._cells.length=0,this._rootCell=new Er(this._aabb),this._cells.push(this._rootCell);for(var i=this._quadNodes.length,n=0;n<i;n++)this._cells[0].nodeIndices[n]=n;var o=new Array;o.push(0);for(var l,c,f;o.length!=0;)if(c=o.pop(),!(this._cells[c].nodeIndices.length<=e||this._cells[c].aabb.radius<t)){for(n=0;n<Er.NUM_CHILDREN;n++){this._cells[c].childCellIndices[n]=this._cells.length,o.push(this._cells.length),this._cells.push(new Er(this.createAABox(this._cells[c].aabb,n))),f=this._cells[this._cells.length-1],i=this._cells[c].nodeIndices.length;for(var d=0;d<i;d++)l=this._cells[c].nodeIndices[d],this.doesNodeIntersectCell(this._quadNodes[l],f)&&f.nodeIndices.push(l)}this._cells[c].nodeIndices.length=0}}createAABox(e,t){var a=e.centreX,r=e.centreY,i=e.sideX,n=e.sideY,o=new Pt;switch(t){case 0:o.setAABox(a+i/4,r+n/4,i/2,n/2);break;case 1:o.setAABox(a-i/4,r+n/4,i/2,n/2);break;case 2:o.setAABox(a-i/4,r-n/4,i/2,n/2);break;case 3:o.setAABox(a+i/4,r-n/4,i/2,n/2);break;default:o.setAABox(a+i/4,r-n/4,i/2,n/2);break}return o}doesNodeIntersectCell(e,t){var a=e.aabb;if(!a.overlapTest(t.aabb))return!1;if(!e.isTriangle)return!0;var r=a.points,i=r[0],n=r[1],o=r[2];if(t.aabb.isPointInside(i)||t.aabb.isPointInside(n)||t.aabb.isPointInside(o))return!0;var l=this.pointInTriangle(t.aabb.minPosX,t.aabb.minPosY,i,n,o)||this.pointInTriangle(t.aabb.minPosX,t.aabb.maxPosY,i,n,o)||this.pointInTriangle(t.aabb.maxPosX,t.aabb.maxPosY,i,n,o)||this.pointInTriangle(t.aabb.maxPosX,t.aabb.minPosY,i,n,o);return l?!0:(l=t.aabb.isIntersectLineSegment(i.x,i.z,n.x,n.z)||t.aabb.isIntersectLineSegment(i.x,i.z,o.x,o.z)||t.aabb.isIntersectLineSegment(n.x,n.z,o.x,o.z),l)}getNodesIntersectingtAABox(e,t){if(this._cells.length==0)return 0;this._cellsToTest.length=0,this._cellsToTest.push(0),this.incrementTestCounter();for(var a,r,i,n,o=0;this._cellsToTest.length!=0;)if(a=this._cellsToTest.pop(),i=this._cells[a],!!t.overlapTest(i.aabb))if(i.isLeaf())for(r=i.nodeIndices.length,o=0;o<r;o++)n=this.getQuadNode(i.nodeIndices[o]).aabb,n.testID!=this._testID&&(n.testID=this._testID,t.overlapTest(n)&&e.push(i.nodeIndices[o]));else for(o=0;o<Er.NUM_CHILDREN;o++)this._cellsToTest.push(i.childCellIndices[o]);return e.length}pointInTriangle(e,t,a,r,i){var n=a,o=r,l=i,c=n.z-o.z,f=o.x-n.x,d=n.x*o.z-o.x*n.z,h=o.z-l.z,u=l.x-o.x,m=o.x*l.z-l.x*o.z,g=l.z-n.z,p=n.x-l.x,A=l.x*n.z-n.x*l.z,D=!1,B=c*e+f*t+d,v=h*e+u*t+m,x=g*e+p*t+A;const y=.01;return(B>=-y&&v>=-y&&x>=-y||B<=y&&v<=y&&x<=y)&&(D=!0),D}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],a="",r=0;r<this.logDeep-1;r++)a+="-|";console.log(a+"i="+e+" "+t.aabb.minPosX.toFixed(2)+" "+t.aabb.maxPosX.toFixed(2)+" "+t.aabb.minPosY.toFixed(2)+" "+t.aabb.maxPosY.toFixed(2));var i;for(i=0;i<t.nodeIndices.length;i++)if(t.nodeIndices[i]>=0){var n=this._quadNodes[t.nodeIndices[i]];console.log(a+" t="+t.nodeIndices[i]+" "+n.aabb.minPosX.toFixed(2)+" "+n.aabb.maxPosX.toFixed(2)+" "+n.aabb.minPosY.toFixed(2)+" "+n.aabb.maxPosY.toFixed(2))}for(i=0;i<t.childCellIndices.length;i++)t.childCellIndices[i]>=0&&this.logTree(t.childCellIndices[i]);this.logDeep--}}}class Qh{_maxNodesPerCell;_minCellSize;_quadTree;_collisionNodesIdx;_segBox;_collisionNodes;constructor(e=10,t=500){this._maxNodesPerCell=e,this._minCellSize=t,this._segBox=new Pt,this._collisionNodesIdx=new Array,this._collisionNodes=new Array}createQuadTree(e){this._quadTree=new Rh,this._quadTree.initNodes(e),this._quadTree.buildQuadTree(this._maxNodesPerCell,this._minCellSize)}getNodesByAABB(e,t,a,r){this._segBox.clear(),this._segBox.maxPosX=a,this._segBox.maxPosY=r,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 i,n=0;n<this._collisionNodesIdx.length;n++)i=this._quadTree.getQuadNode(this._collisionNodesIdx[n]),this._collisionNodes.push(i);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 a=4294967295,r=0,i,n,o,l,c=0;c<this._collisionNodesIdx.length;c++)n=this._quadTree.getQuadNode(this._collisionNodesIdx[c]),l=n.aabb,b.pointInsideTriangle(e,l.points[0],l.points[1],l.points[2])&&(o=n,r=Math.abs(o.plane.distance(e)),!(r>t)&&(n==null||r<=a)&&(i=o,a=r));return i}}var Ys=(s=>(s[s.MOUSE_LEFT=0]="MOUSE_LEFT",s[s.MOUSE_MID=1]="MOUSE_MID",s[s.MOUSE_RIGHT=2]="MOUSE_RIGHT",s))(Ys||{});class dp extends mt{static LOADER_PROGRESS="loaderProgress";static LOADER_COMPLETE="loaderComplete"}class hp extends mt{static ADDED="added";static REMOVED="removed";static CHILD_ADD_EVENT="childAddEvent";static CHILD_REMOVED="childRemoved"}class up extends mt{static SHOW="show";static HIDE="hide";static UPDATE="update"}class bp{static merge(e,t,a,r){let i=0,n=0;i=Math.max(e.width,i),i=Math.max(t.width,i),i=Math.max(a.width,i),i=Math.max(r.width,i),n=Math.max(e.height,n),n=Math.max(t.height,n),n=Math.max(a.height,n),n=Math.max(r.height,n);let o=new Te(i,n,oe.rgba8unorm),l=new Fe(xd);l.setSamplerTexture("textureR",e),l.setSamplerTexture("textureG",t),l.setSamplerTexture("textureB",a),l.setSamplerTexture("textureA",r),l.setStorageTexture("outTex",o),l.workerSizeX=Math.ceil(i/8),l.workerSizeY=Math.ceil(n/8);let c=k.beginCommandEncoder();return k.computeCommand(c,[l]),k.endCommandEncoder(c),o}}class Th{computeShader;setInputes(e,t,a){this.computeShader=new Fe(Vd(e,t,a,8,8,1));for(let r=0;r<t.length;r++)this.computeShader.setSamplerTexture(`source${r}Map`,t[r]);for(let r=0;r<a.length;r++)this.computeShader.setStorageTexture(`dest${r}Map`,a[r]);e&&this.computeShader.setSamplerTexture("colorMap",e),this.computeShader.workerSizeX=a[0].width/8,this.computeShader.workerSizeY=a[0].height/8,this.computeShader.workerSizeZ=1}}class Mh{sourceShader;compute;needUpdate=!0;constructor(e,t){this.sourceShader=t,this.compute=new Fe(e),this.init()}init(){}onUpdate(){this.onFrame&&this.onFrame(),this.onOnce&&this.needUpdate&&(this.needUpdate=!1,this.onFrame())}}class Nh extends Mh{constructor(e){super(Fd,e)}init(){let e=new Te(256,256,oe.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=k.beginCommandEncoder();k.computeCommand(e,[this.compute]),k.endCommandEncoder(e)}}class gp{gpuBuffer;probes;memoryDo;_probeInfoList;initDataUniform(e){this.memoryDo=new cr,this.probes=e,this._probeInfoList=[],this.memoryDo.destroy(),this.memoryDo.allocation(e.length*17*4);for(let a=0;a<e.length;a++){var t=17;let r=this.memoryDo.allocation_node(t*4);this._probeInfoList.push(r);let i=e[a].transform.worldPosition;r.setArray(0,[i.x,i.y,i.z])}this.gpuBuffer=I.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,a=0;const r=5e3*64;for(;a<t;)I.device.queue.writeBuffer(this.gpuBuffer,a,e,a,Math.floor(Math.min(r,t-a))),a+=r}}class pp extends Xa{constructor(e,t,a=0){super(),this.bufferType=Da.StructStorageGPUBuffer,this.createBufferByStruct(GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|a,e,t)}}class mp{static codeMax=`
11821
11821
  @group(0) @binding(0) var inputTexture : texture_2d<f32>;
11822
11822
  @group(0) @binding(1) var inputTextureSampler : sampler;
11823
11823
  @group(0) @binding(2) var outputTexture : texture_storage_2d<rgba8unorm, write>;
@@ -11844,16 +11844,16 @@ fn frag(){
11844
11844
  textureStore(outputTexture, dstCoord, fromColor);
11845
11845
  }
11846
11846
  `;static _pipelineMax;static _pipelineMin;static createMipmap(e,t){const a=I.device;this._pipelineMax||=a.createComputePipeline({layout:"auto",compute:{module:a.createShaderModule({code:this.codeMax}),entryPoint:"main"}}),this._pipelineMin||=a.createComputePipeline({layout:"auto",compute:{module:a.createShaderModule({code:this.codeMin}),entryPoint:"main"}});let r=Math.ceil(e.width*.5),i=Math.ceil(e.height*.5),n={mipmapCount:t,texture:e,srcView:null,mipLevel:1,dstHeight:i,dstWidth:r};n.srcView=e.getGPUTexture().createView({format:e.format,dimension:"2d",baseMipLevel:0,mipLevelCount:1}),e.width>1024&&e.height>1024?this.mipmap(this._pipelineMax,n):this.mipmap(this._pipelineMin,n)}static mipmap(e,t){const a=I.device,r=k.beginCommandEncoder();let i=e==this._pipelineMax,n,o;for(let l=t.mipLevel;l<t.mipmapCount;l++){let c=[],f=0;c.push({binding:f++,resource:t.srcView}),c.push({binding:f++,resource:t.texture.gpuSampler}),n=t.texture.getGPUTexture().createView({format:t.texture.format,dimension:"2d",baseMipLevel:l,mipLevelCount:1}),c.push({binding:f++,resource:n});const d=a.createBindGroup({layout:e.getBindGroupLayout(0),entries:c}),h=r.beginComputePass();h.setPipeline(e),h.setBindGroup(0,d);let u=t.dstWidth,m=t.dstHeight;if(i&&(u=Math.max(1,Math.floor(t.dstWidth/8)),m=Math.max(1,Math.floor(t.dstHeight/8))),h.dispatchWorkgroups(u,m),t.dstHeight*=.5,t.dstWidth*=.5,t.srcView=n,t.mipLevel=l+1,o=i&&(t.dstWidth<8||t.dstHeight<8),h.end(),o)break}k.endCommandEncoder(r),o&&this.mipmap(this._pipelineMin,t)}}class Ph{name="";passMap=new Map}class Vh{passType="";shaderState=new Map;vertexShader="";fragmentShader=""}class Ap{static passKeyword="pass";static shaderKeyword="Shader";static vertexKeyword="vertex";static fragmentKeyword="fragment";static passTypeKeyword="PassType";static parser(e,t){e=_a.filterComment(e);let a=new Ph,r=e.indexOf(this.shaderKeyword),i=e.indexOf("{",r),n=e.substring(r+this.shaderKeyword.length,i).trim();a.name=n.substring(1,n.length-1),n=e.substring(e.indexOf("{")+1,e.lastIndexOf("}"));let o=this.splitPassBlock(n);for(let l of o){let c=this.parserPassBlock(l),f;a.passMap.has(c.passType)?f=a.passMap.get(c.passType):(f=[],a.passMap.set(c.passType,f)),f.push(c),c.vertexShader.length>0&&(c.vertexShader=_a.parse(c.vertexShader,t)),c.fragmentShader.length>0&&(c.fragmentShader=_a.parse(c.fragmentShader,t))}return a}static splitPassBlock(e){let t=0,a=[];for(;t<e.length;){let r=e.indexOf(this.passKeyword,t);if(r==-1){a.push(e.substring(t));break}t!=0&&a.push(e.substring(t,r)),t=r+this.passKeyword.length}return a}static parserPassBlock(e){let t=new Vh,a=e.indexOf(this.passTypeKeyword),r=e.indexOf('"',a);return a=e.indexOf('"',r+1),t.passType=e.substring(a+1,r).trim(),this.parserShaderState(t,e),a=e.indexOf(this.vertexKeyword),a!=-1&&(t.vertexShader=this.extractBlock(e.substring(a+this.vertexKeyword.length),"{","}")),a=e.indexOf(this.fragmentKeyword),a!=-1&&(t.fragmentShader=this.extractBlock(e.substring(a+this.fragmentKeyword.length),"{","}")),t}static parserShaderState(e,t){let a=t.indexOf("ShaderState");if(a==-1)return!1;a=t.indexOf("{",a);let r=t.indexOf("}",a),n=t.substring(a+1,r).split(",");for(let o of n){let l=o.split(":"),c=l[0].trim(),f=this.convertValue(l[1].trim());e.shaderState.set(c,f)}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,a){let r=e.indexOf(t);if(r==-1)return"";let i=0,n=0;e=e.substring(r);for(let l of e){if(l==t?i++:l==a&&i--,i<=0)break;n++}return e.substring(1,n).trim()}}let Oh=new mt("IrradianceDataReaderCompleteEvent");class vs extends Ya{readFlag=!1;probeRenderer;opColorBuffer;opDepthBuffer;srcColorMap;srcDepthMap;opDepthArray;opColorArray;initReader(e,t,a){this.probeRenderer=e,this.srcColorMap=t,this.srcDepthMap=a;let r=_.setting.gi,i=r.octRTMaxSize*r.octRTMaxSize;this.opColorBuffer=I.device.createBuffer({size:i*4*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,mappedAtCreation:!1}),this.opColorArray=new Float32Array(i*4),this.opDepthBuffer=I.device.createBuffer({size:i*4*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,mappedAtCreation:!1}),this.opDepthArray=new Float32Array(i*4),this.probeRenderer.addEventListener(no.type,()=>{this.onProbeRenderComplete()},this),this.probeRenderer.addEventListener(Ms.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 vs.read(this.srcColorMap.getGPUTexture(),this.opColorBuffer,this.opColorArray),await vs.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(Oh)}}static async read(e,t,a){let r=k.beginCommandEncoder();r.copyTextureToBuffer({texture:e},{buffer:t,bytesPerRow:e.width*16},[e.width,e.height]),k.endCommandEncoder(r),await t.mapAsync(GPUMapMode.READ);const i=t.getMappedRange();a.set(new Float32Array(i),0),t.unmap()}}let Dp=new vs;class _p{computeShader;visibleBuffer;texture;constructor(){this.computeShader=new Fe(Ld),this.visibleBuffer=new oi(8192*2),this.computeShader.setStorageBuffer("visibleBuffer",this.visibleBuffer),this.texture=Nt.getTexture(Va.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 a=k.beginCommandEncoder();k.computeCommand(a,[this.computeShader]),this.visibleBuffer.readBuffer(),t.zVisibleList=this.visibleBuffer.outFloat32Array}}class Bp extends Jt{RT_BloomUp;RT_BloomDown;RT_threshold;rendererPassState;thresholdCompute;downSampleComputes;upSampleComputes;postCompute;bloomSetting;rtFrame;constructor(){super()}onAttach(e){_.setting.render.postProcessing.bloom.enable=!0,this.createGUI()}onDetach(e){_.setting.render.postProcessing.bloom.enable=!1,this.removeGUI()}createGUI(){}removeGUI(){}get downSampleBlurSize(){return _.setting.render.postProcessing.bloom.downSampleBlurSize}set downSampleBlurSize(e){_.setting.render.postProcessing.bloom.downSampleBlurSize=e}get downSampleBlurSigma(){return _.setting.render.postProcessing.bloom.downSampleBlurSigma}set downSampleBlurSigma(e){_.setting.render.postProcessing.bloom.downSampleBlurSigma=e}get upSampleBlurSize(){return _.setting.render.postProcessing.bloom.upSampleBlurSize}set upSampleBlurSize(e){_.setting.render.postProcessing.bloom.upSampleBlurSize=e}get upSampleBlurSigma(){return _.setting.render.postProcessing.bloom.upSampleBlurSigma}set upSampleBlurSigma(e){_.setting.render.postProcessing.bloom.upSampleBlurSigma=e}get luminanceThreshole(){return _.setting.render.postProcessing.bloom.luminanceThreshole}set luminanceThreshole(e){_.setting.render.postProcessing.bloom.luminanceThreshole=e}get bloomIntensity(){return _.setting.render.postProcessing.bloom.bloomIntensity}set bloomIntensity(e){_.setting.render.postProcessing.bloom.bloomIntensity=e}get hdr(){return _.setting.render.postProcessing.bloom.hdr}set hdr(e){_.setting.render.postProcessing.bloom.hdr=e}createThreshouldCompute(){this.thresholdCompute=new Fe(md),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=_.setting.render.postProcessing.bloom.downSampleStep;this.downSampleComputes=[];for(let a=0;a<t;a++){let r=new Fe(Ad),i=this.RT_BloomDown[a],n=a==0?this.RT_threshold:this.RT_BloomDown[a-1];r.setSamplerTexture("inTex",n),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.downSampleComputes.push(r)}}createUpSampleComputes(){const t=_.setting.render.postProcessing.bloom.downSampleStep;this.upSampleComputes=[];{let a=new Fe(Vo),r=this.RT_BloomUp[0],i=this.RT_BloomDown[t-2];a.setSamplerTexture("_MainTex",i),a.setSamplerTexture("_PrevMip",this.RT_BloomDown[t-1]),a.setStorageTexture("outTex",r),a.setUniformBuffer("bloomCfg",this.bloomSetting),a.workerSizeX=Math.ceil(r.width/8),a.workerSizeY=Math.ceil(r.height/8),a.workerSizeZ=1,this.upSampleComputes.push(a)}for(let a=1;a<t-1;a++){let r=new Fe(Vo),i=this.RT_BloomUp[a],n=this.RT_BloomDown[t-2-a];r.setSamplerTexture("_MainTex",n),r.setSamplerTexture("_PrevMip",this.RT_BloomUp[a-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)}}createPostCompute(){const t=_.setting.render.postProcessing.bloom.downSampleStep;this.postCompute=new Fe(Dd),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=_.setting.render.postProcessing.bloom;this.bloomSetting=new St(8);let[t,a]=I.presentationSize,r=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING;this.RT_threshold=new Te(t,a,oe.rgba16float,!1,r);const i=e.downSampleStep;{this.RT_BloomDown=[];let o=Math.ceil(t/4),l=Math.ceil(a/4);for(let c=0;c<i;c++)this.RT_BloomDown[c]=new Te(o,l,oe.rgba16float,!1,r),o=Math.ceil(o/2),l=Math.ceil(l/2)}{this.RT_BloomUp=[];for(let o=0;o<i-1;o++){let l=this.RT_BloomDown[i-2-o].width,c=this.RT_BloomDown[i-2-o].height;this.RT_BloomUp[o]=new Te(l,c,oe.rgba16float,!1,r)}}let n=new Je;n.loadOp="load",this.rtFrame=new ct([this.RT_threshold],[n])}render(e,t){this.thresholdCompute||(this.createResource(),this.createThreshouldCompute(),this.createDownSampleComputes(),this.createUpSampleComputes(),this.createPostCompute(),this.rendererPassState=He.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="Bloom");let a=_.setting.render.postProcessing.bloom;this.bloomSetting.setFloat("downSampleStep",a.downSampleStep),this.bloomSetting.setFloat("downSampleBlurSize",a.downSampleBlurSize),this.bloomSetting.setFloat("downSampleBlurSigma",a.downSampleBlurSigma),this.bloomSetting.setFloat("upSampleBlurSize",a.upSampleBlurSize),this.bloomSetting.setFloat("upSampleBlurSigma",a.upSampleBlurSigma),this.bloomSetting.setFloat("luminanceThreshole",a.luminanceThreshole),this.bloomSetting.setFloat("bloomIntensity",a.bloomIntensity),this.bloomSetting.setFloat("hdr",a.hdr),this.bloomSetting.apply(),k.computeCommand(t,[this.thresholdCompute,...this.downSampleComputes,...this.upSampleComputes,this.postCompute]),k.lastRenderPassState=this.rendererPassState}onResize(){let e=_.setting.render.postProcessing.bloom,[t,a]=I.presentationSize;this.RT_threshold.resize(t,a);const r=e.downSampleStep;let i=Math.ceil(t/4),n=Math.ceil(a/4);for(let o=0;o<r;o++)this.RT_BloomDown[o].resize(i,n),i=Math.ceil(i/2),n=Math.ceil(n/2);for(let o=0;o<r-1;o++){let l=this.RT_BloomDown[r-2-o].width,c=this.RT_BloomDown[r-2-o].height;this.RT_BloomUp[o].resize(l,c)}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 o=0;o<r;o++){let l=this.downSampleComputes[o],c=this.RT_BloomDown[o];l.workerSizeX=Math.ceil(c.width/8),l.workerSizeY=Math.ceil(c.height/8),l.workerSizeZ=1}{let o=this.RT_BloomUp[0],l=this.upSampleComputes[0];l.workerSizeX=Math.ceil(o.width/8),l.workerSizeY=Math.ceil(o.height/8),l.workerSizeZ=1}for(let o=1;o<r-1;o++){let l=this.RT_BloomUp[o],c=this.upSampleComputes[o];c.workerSizeX=Math.ceil(l.width/8),c.workerSizeY=Math.ceil(l.height/8),c.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 vp extends Jt{blurTexture1;blurTexture2;rendererPassState;blurComputes;blurSettings;outTexture;rtFrame;constructor(){super()}onAttach(e){_.setting.render.postProcessing.depthOfView.enable=!0}onDetach(e){_.setting.render.postProcessing.depthOfView.enable=!1}get pixelOffset(){return _.setting.render.postProcessing.depthOfView.pixelOffset}set pixelOffset(e){e=Math.max(0,e);let t=_.setting.render.postProcessing.depthOfView;t.pixelOffset=e}get near(){return _.setting.render.postProcessing.depthOfView.near}set near(e){e=Math.max(0,e);let t=_.setting.render.postProcessing.depthOfView;t.near=e}get far(){return _.setting.render.postProcessing.depthOfView.far}set far(e){e=Math.max(0,e);let t=_.setting.render.postProcessing.depthOfView;t.far=e}createBlurCompute(){this.blurSettings=[],this.blurComputes=[];let e=_.setting.render.postProcessing.depthOfView;for(let t=0;t<e.iterationCount;t++){let a=new St(4),r=new Fe(_d);this.blurComputes.push(r),this.blurSettings.push(a),r.setUniformBuffer("blurSetting",a);let i=ve.getGBufferFrame(ve.colorPass_GBuffer);r.setSamplerTexture("gBufferTexture",i.getCompressGBufferTexture());let n=t%2==0?this.blurTexture1:this.blurTexture2,o=t%2==1?this.blurTexture1:this.blurTexture2;r.setSamplerTexture("inTex",n),r.setStorageTexture("outTex",o),r.workerSizeX=Math.ceil(this.blurTexture1.width/8),r.workerSizeY=Math.ceil(this.blurTexture1.height/8),r.workerSizeZ=1,this.outTexture=o}}createResource(){let e=I.presentationSize,t=e[0],a=e[1];this.blurTexture1=new Te(t,a,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.blurTexture1.name="dof1";let r=new Je;r.clearValue=[0,0,0,1],r.loadOp="clear",this.blurTexture2=new Te(t,a,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.blurTexture2.name="dof2";let i=new Je;i.clearValue=[0,0,0,1],i.loadOp="clear",this.rtFrame=new ct([this.blurTexture1,this.blurTexture2],[r,i])}render(e,t){if(!this.blurComputes){this.createResource(),this.createBlurCompute();let r=xe.getCameraGroup(e.camera);for(let i=0;i<this.blurComputes.length;i++)this.blurComputes[i].setUniformBuffer("globalUniform",r.uniformGPUBuffer);this.rendererPassState=He.createRendererPassState(this.rtFrame,null)}this.autoSetColorTexture("inTex",this.blurComputes[0]);let a=_.setting.render.postProcessing.depthOfView;a.far=Math.max(a.near,a.far)+1e-4;for(let r=0;r<a.iterationCount;r++){let i=this.blurComputes[r],n=this.blurSettings[r];n.setFloat("near",a.near),n.setFloat("far",a.far),n.setFloat("pixelOffset",(r+1)*a.pixelOffset),n.apply(),i.setStorageBuffer("blurSetting",n)}k.computeCommand(t,this.blurComputes),k.lastRenderPassState=this.rendererPassState}onResize(){let e=I.presentationSize,t=e[0],a=e[1],r=_.setting.render.postProcessing.depthOfView;r.far=Math.max(r.near,r.far)+1e-4,this.blurTexture1.resize(t,a),this.blurTexture2.resize(t,a);for(let i=0;i<r.iterationCount;i++){let n=this.blurComputes[i];n.workerSizeX=Math.ceil(this.blurTexture1.width/8),n.workerSizeY=Math.ceil(this.blurTexture1.height/8),n.workerSizeZ=1}}}class xp extends Jt{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=ve.getGBufferFrame("ColorPassGBuffer");this.currentRenderTexture=e.getColorTexture(),this.gBufferTexture=e.getCompressGBufferTexture();let[t,a]=I.presentationSize;this.outTexture=new Te(t,a,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="outTexture";let r=new Je;r.loadOp="load",this.rtFrame=new ct([this.outTexture],[r])}createCompute(){this.uniformBuffer=new St(4),this.uniformBuffer.setInt32("state",this._state);let e=xe.getCameraGroup(this.view.camera),a=ve.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture(),r=_.setting.reflectionSetting,n=ve.getGBufferFrame(ve.reflections_GBuffer,r.width,r.height).getCompressGBufferTexture(),o=_.renderJobs.get(this.view).reflectionRenderer.outTexture;this.testCompute=new Fe(Pd),this.testCompute.setUniformBuffer("globalUniform",e.uniformGPUBuffer),this.testCompute.setUniformBuffer("uniformData",this.uniformBuffer),this.testCompute.setSamplerTexture("gBufferTexture",a),this.testCompute.setSamplerTexture("currentRenderTexture",this.currentRenderTexture),this.testCompute.setSamplerTexture("reflectionsGBufferTexture",n),this.testCompute.setSamplerTexture("envMap",o),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=He.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="test");let t=k.beginCommandEncoder();k.computeCommand(t,[this.testCompute]),k.endCommandEncoder(t),k.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=I.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 Up extends Jt{gtaoTexture;rendererPassState;gtaoCompute;gtaoSetting;aoBuffer;directionsBuffer;directionsArray;rtFrame;constructor(){super()}onAttach(e){_.setting.render.postProcessing.gtao.enable=!0}Render;onDetach(e){_.setting.render.postProcessing.gtao.enable=!1}get maxDistance(){return _.setting.render.postProcessing.gtao.maxDistance}set maxDistance(e){e=Be(e,.1,50);let t=_.setting.render.postProcessing.gtao;t.maxDistance=e}get maxPixel(){return _.setting.render.postProcessing.gtao.maxPixel}set maxPixel(e){e=Be(e,5,100);let t=_.setting.render.postProcessing.gtao;t.maxPixel=e}get darkFactor(){return _.setting.render.postProcessing.gtao.darkFactor}set darkFactor(e){e=Be(e,.01,1);let t=_.setting.render.postProcessing.gtao;t.darkFactor=e}get rayMarchSegment(){return _.setting.render.postProcessing.gtao.rayMarchSegment}set rayMarchSegment(e){e=Be(e,4,10);let t=_.setting.render.postProcessing.gtao;t.rayMarchSegment=e}get multiBounce(){return _.setting.render.postProcessing.gtao.multiBounce}set multiBounce(e){let t=_.setting.render.postProcessing.gtao;t.multiBounce=e}get blendColor(){return _.setting.render.postProcessing.gtao.blendColor}set blendColor(e){let t=_.setting.render.postProcessing.gtao;t.blendColor=e}get usePosFloat32(){return _.setting.render.postProcessing.gtao.usePosFloat32}set usePosFloat32(e){let t=_.setting.render.postProcessing.gtao;t.usePosFloat32=e}createCompute(){this.gtaoCompute=new Fe(Bd);let e=new St(8);this.gtaoCompute.setUniformBuffer("gtaoData",e),this.directionsArray=new Float32Array(16),this.directionsBuffer=new Pe(16),this.directionsBuffer.setFloat32Array("array",this.randomDirection()),this.directionsBuffer.apply(),this.gtaoCompute.setStorageBuffer("directions",this.directionsBuffer),this.aoBuffer=new Pe(this.gtaoTexture.width*this.gtaoTexture.height),this.gtaoCompute.setStorageBuffer("aoBuffer",this.aoBuffer);let t=ve.getGBufferFrame(ve.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]=I.presentationSize;this.gtaoTexture=new Te(e,t,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.gtaoTexture.name="gtaoTex";let a=new Je;a.loadOp="load",this.rtFrame=new ct([this.gtaoTexture],[a])}randomCount=0;randomDirection(){this.randomCount=0;let e=Math.PI*2*this.randomCount/16,t=Math.PI*2/8;for(let a=0;a<8;a++){let r=e+a*t;this.directionsArray[a*2]=Math.sin(r),this.directionsArray[a*2+1]=Math.cos(r)}return this.directionsArray}render(e,t){if(!this.gtaoCompute){this.createResource(),this.createCompute(),this.onResize(),this.rendererPassState=He.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="GTAO";let l=xe.getCameraGroup(e.camera);this.gtaoCompute.setUniformBuffer("globalUniform",l.uniformGPUBuffer)}let a=_.setting.render.postProcessing.gtao;this.directionsBuffer.setFloat32Array("array",this.randomDirection()),this.directionsBuffer.apply();let r=1-.2*(We.frame%2),i=a.maxDistance*r,n=a.maxPixel*r;this.gtaoSetting.setFloat("maxDistance",i),this.gtaoSetting.setFloat("maxPixel",n),this.gtaoSetting.setFloat("darkFactor",a.darkFactor),this.gtaoSetting.setFloat("rayMarchSegment",a.rayMarchSegment);let o=e.camera;this.gtaoSetting.setFloat("cameraNear",o.near),this.gtaoSetting.setFloat("cameraFar",o.far),this.gtaoSetting.setFloat("multiBounce",a.multiBounce?1:0),this.gtaoSetting.setFloat("blendColor",a.blendColor?1:0),this.gtaoSetting.apply(),k.computeCommand(t,[this.gtaoCompute]),k.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=I.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 yp extends Jt{fogSetting;fogOpTexture;fogCompute;fogUniform;rendererPassState;constructor(){super(),this.fogSetting=_.setting.render.postProcessing.globalFog}createCompute(e){Y.register("GlobalFog_shader",Oo),this.fogCompute=new Fe(Oo),this.fogUniform=new St(20),this.fogCompute.setUniformBuffer("fogUniform",this.fogUniform);let t=ve.getGBufferFrame(ve.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=He.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="FOG";let a=xe.getLightEntries(e.scene);this.fogCompute.setStorageBuffer("lightBuffer",a.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]=I.presentationSize;this.fogOpTexture=new Te(e,t,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.fogOpTexture.name="fogTex";let a=new Je;a.loadOp="load",this.rtFrame=new ct([this.fogOpTexture],[a])}onAttach(e){_.setting.render.postProcessing.globalFog.enable=!0}onDetach(e){_.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=_.res.defaultSky;return q.instance.sky instanceof Ws&&(e=q.instance.sky.map),e}render(e,t){if(!this.fogCompute){this.createResource(),this.createCompute(e),this.onResize();let r=xe.getCameraGroup(e.camera);this.fogCompute.setUniformBuffer("globalUniform",r.uniformGPUBuffer)}let a=this.getSkyTexture();a!=this._lastSkyTexture&&(this._lastSkyTexture=a,this.fogCompute.setSamplerTexture("prefilterMap",this._lastSkyTexture)),this.fogCompute.setUniformFloat("isSkyHDR",a.isHDRTexture?1:0),this.uploadSetting(),k.computeCommand(t,[this.fogCompute]),k.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=I.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 Cp extends Jt{godRayTexture;rendererPassState;godRayCompute;historyGodRayData;godRaySetting;rtFrame;constructor(){super()}onAttach(e){_.setting.render.postProcessing.godRay.enable=!0,this.createGUI()}Render;onDetach(e){_.setting.render.postProcessing.godRay.enable=!1,this.removeGUI()}get blendColor(){return _.setting.render.postProcessing.godRay.blendColor}set blendColor(e){_.setting.render.postProcessing.godRay.blendColor=e}get rayMarchCount(){return _.setting.render.postProcessing.godRay.rayMarchCount}set rayMarchCount(e){e=Be(e,8,20),_.setting.render.postProcessing.godRay.rayMarchCount=e}get scatteringExponent(){return _.setting.render.postProcessing.godRay.scatteringExponent}set scatteringExponent(e){e=Be(e,1,40),_.setting.render.postProcessing.godRay.scatteringExponent=e}get intensity(){return _.setting.render.postProcessing.godRay.intensity}set intensity(e){e=Be(e,.01,5),_.setting.render.postProcessing.godRay.intensity=e}createGUI(){}removeGUI(){}createCompute(e){this.godRayCompute=new Fe(vd);let t=new St(12);this.godRayCompute.setUniformBuffer("godRayUniform",t),this.historyGodRayData=new Pe(4*this.godRayTexture.width*this.godRayTexture.height),this.godRayCompute.setStorageBuffer("historyGodRayData",this.historyGodRayData);let a=ve.getGBufferFrame(ve.colorPass_GBuffer);this.godRayCompute.setSamplerTexture("gBufferTexture",a.getCompressGBufferTexture()),this.autoSetColorTexture("inTex",this.godRayCompute),this.godRayCompute.setStorageTexture("outTex",this.godRayTexture);let r=_.getRenderJob(e).shadowMapPassRenderer;this.godRayCompute.setSamplerTexture("shadowMap",r.depth2DArrayTexture),this.godRaySetting=t,this.onResize()}createResource(){let e=I.presentationSize,[t,a]=e;this.godRayTexture=new Te(t,a,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.godRayTexture.name="godRayTexture";let r=new Je;r.loadOp="load",this.rtFrame=new ct([this.godRayTexture],[r])}onResize(){let e=I.presentationSize,[t,a]=e;this.godRayTexture.resize(t,a),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 o=xe.getLightEntries(e.scene);this.godRayCompute.setStorageBuffer("lightBuffer",o.storageGPUBuffer),this.godRayCompute.setStorageBuffer("models",xe.modelMatrixBindGroup.matrixBufferDst),this.rendererPassState=He.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="GodRay";let l=xe.getCameraGroup(e.camera);this.godRayCompute.setUniformBuffer("globalUniform",l.uniformGPUBuffer)}let a=_.setting.render.postProcessing.godRay;this.godRaySetting.setFloat("intensity",a.intensity),this.godRaySetting.setFloat("rayMarchCount",a.rayMarchCount);let r=I.presentationSize,[i,n]=r;this.godRaySetting.setFloat("viewPortWidth",i),this.godRaySetting.setFloat("viewPortHeight",n),this.godRaySetting.setFloat("blendColor",a.blendColor?1:0),this.godRaySetting.setFloat("scatteringExponent",a.scatteringExponent),this.godRaySetting.apply(),k.computeCommand(t,[this.godRayCompute]),k.lastRenderPassState=this.rendererPassState}}class Lh{indexList;color;count}class Gh{SlotCount=8;MaxEntities=16;defaultColor=new J(.2,1,1,1);slots=[];dataDirty=!0;constructor(){let e=_.setting.render.postProcessing.outline.groupCount;this.SlotCount=Math.max(1,Math.min(e,this.SlotCount));for(let t=0;t<this.SlotCount;t++){let a=this.slots[t]=new Lh;a.indexList=new Float32Array(this.MaxEntities),a.color=this.defaultColor.clone(),a.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,a){this.dataDirty=!0;let r=this.slots[e];if(r){r.indexList.fill(-1);for(let i=0,n=t.length;i<n;i++)r.indexList[i]=t[i];r.count=t.length,r.color.copyFrom(a)}return this}fetchData(e){return e.dirty=this.dataDirty,e.slots=this.slots,this.dataDirty=!1,this}}let ya=new Gh;class Sp extends Jt{outlineTex;lowTex;rendererPassState;calcWeightCompute;outlineCompute;blendCompute;outlineSetting;slotsBuffer;slotsArray;entitiesArray;entitiesBuffer;weightBuffer;lowTexSize;oldOutlineColor;rtFrame;view;constructor(){super()}onAttach(e){this.view=e,_.setting.render.postProcessing.outline.enable=!0}onDetach(e){_.setting.render.postProcessing.outline.enable=!1}set outlinePixel(e){e=Be(e,0,8);let t=_.setting.render.postProcessing.outline;t.outlinePixel!=e&&(t.outlinePixel=e)}get outlinePixel(){return _.setting.render.postProcessing.outline.outlinePixel}set fadeOutlinePixel(e){let t=_.setting.render.postProcessing.outline;e=Be(e,0,8),t.fadeOutlinePixel!=e&&(t.fadeOutlinePixel=e)}get fadeOutlinePixel(){return _.setting.render.postProcessing.outline.fadeOutlinePixel}set strength(e){e=Be(e,0,1);let t=_.setting.render.postProcessing.outline;t.strength!=e&&(t.strength=e)}get strength(){return _.setting.render.postProcessing.outline.strength}set useAddMode(e){_.setting.render.postProcessing.outline.useAddMode=e}get useAddMode(){return _.setting.render.postProcessing.outline.useAddMode}createGUI(){}createCompute(){let e=ve.getGBufferFrame(ve.colorPass_GBuffer);this.calcWeightCompute=new Fe(yd);let t=xe.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 Fe(Cd),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 Fe(Ud),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=I.presentationSize,t=e[0],a=e[1],r=_.setting.render.postProcessing.outline.textureScale;this.lowTexSize=new de(Math.ceil(t*r),Math.ceil(a*r)),this.lowTex=new Te(this.lowTexSize.x,this.lowTexSize.y,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.lowTex.name="lowTex";let i=new Je;i.clearValue=[0,0,0,1],i.loadOp="clear",this.outlineTex=new Te(t,a,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outlineTex.name="outlineTex";let n=new Je;n.clearValue=[0,0,0,1],n.loadOp="clear",this.rtFrame=new ct([this.outlineTex],[n]),this.outlineSetting=new St(8),this.weightBuffer=new Pe(this.lowTexSize.x*this.lowTexSize.y*4,GPUBufferUsage.COPY_SRC),this.oldOutlineColor=new Pe(this.lowTexSize.x*this.lowTexSize.y*4,GPUBufferUsage.COPY_SRC),this.slotsArray=new Float32Array(ya.SlotCount*4),this.slotsBuffer=new Pe(this.slotsArray.length),this.slotsBuffer.setFloat32Array("slotsArray",this.slotsArray),this.slotsBuffer.apply(),this.entitiesArray=new Float32Array(ya.SlotCount*ya.MaxEntities),this.entitiesBuffer=new Pe(this.entitiesArray.length),this.entitiesBuffer.setFloat32Array("entitiesArray",this.entitiesArray),this.slotsBuffer.apply(),this.fetchData||={}}fetchData;fetchOutlineData(){if(ya.fetchData(this.fetchData),this.fetchData.dirty){let e=ya.SlotCount,t=ya.MaxEntities;for(let a=0;a<e;a++){let r=4*a,i=this.fetchData.slots[a];this.slotsArray[r+0]=i.color.r,this.slotsArray[r+1]=i.color.g,this.slotsArray[r+2]=i.color.b,this.slotsArray[r+3]=i.count,r=t*a,this.entitiesArray.set(i.indexList,r)}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=He.createRendererPassState(this.rtFrame,null)),this.computeList||=[this.calcWeightCompute,this.outlineCompute,this.blendCompute];let a=_.setting.render.postProcessing.outline;this.outlineSetting.setFloat("strength",a.strength),this.outlineSetting.setFloat("useAddMode",a.useAddMode?1:0),this.outlineSetting.setFloat("outlinePixel",a.outlinePixel),this.outlineSetting.setFloat("fadeOutlinePixel",a.fadeOutlinePixel),this.outlineSetting.setFloat("lowTexWidth",this.lowTexSize.x),this.outlineSetting.setFloat("lowTexHeight",this.lowTexSize.y),this.outlineSetting.apply(),this.fetchOutlineData(),k.computeCommand(t,this.computeList),k.lastRenderPassState=this.rendererPassState}onResize(){let e=I.presentationSize,t=e[0],a=e[1],r=_.setting.render.postProcessing.outline.textureScale;this.lowTexSize=new de(Math.ceil(t*r),Math.ceil(a*r)),this.lowTex.resize(this.lowTexSize.x,this.lowTexSize.y),this.outlineTex.resize(t,a),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 Fp extends Jt{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 Pe(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?Cs(e.camera.transform.onPositionChange,(t,a)=>this.onCameraChange(t,a)):(t,a)=>this.onCameraChange(t,a)}onCameraChange(e,t){console.log("a");let a=b.distance(e,t);a=Math.min(.45,a)+.01,this.updateBuffer.setFloat("delay",a)}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=ve.getGBufferFrame("ColorPassGBuffer");this.gBufferTexture=e.getCompressGBufferTexture();let t=I.presentationSize,a=t[0],r=t[1];this.lastPosTexture=new Te(a,r,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.lastPosTexture.name="lastPosTexture",this.outTexture=new Te(a,r,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="outTexture";let i=Math.floor(a*this.downSampleCofe),n=Math.floor(r*this.downSampleCofe);this.newTexture=new Te(i,n,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.newTexture.name="newTexture",this.oldTexture=new Te(i,n,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.oldTexture.name="oldTexture",this.combineTexture=new Te(i,n,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.combineTexture.name="combineTexture";let o=new Je;o.loadOp="load",this.rtFrame=new ct([this.outTexture],[o])}createCompute(){this.ssgiCompute=new Fe(kd),this.delayCompute=new Fe(Nd),this.combineCompute=new Fe(Md);let e=xe.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 Th,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=He.createRendererPassState(this.rtFrame,null),this.rendererPassState.label="SSGI"),this.frameCount=this.frame,this.frame++;let t=k.beginCommandEncoder();switch(parseInt(this.debugChanal)){case 0:k.copyTexture(t,this.combineTexture,this.oldTexture),k.computeCommand(t,[this.ssgiCompute,this.delayCompute,this.combineCompute]);break;case 1:k.copyTexture(t,this.posTexture,this.lastPosTexture),k.copyTexture(t,this.lastPosTexture,this.outTexture);break;case 2:k.copyTexture(t,this.normalTexture,this.outTexture);break;case 3:k.copyTexture(t,this.posTexture,this.outTexture);break;case 4:k.copyTexture(t,this.colorTexture,this.outTexture);break;case 5:k.copyTexture(t,this.gBufferTexture,this.outTexture);break}k.lastRenderPassState=this.rendererPassState,this.updateBuffer.setFloat("delay",.01)}onResize(){let e=I.presentationSize,t=e[0],a=e[1];this.outTexture.resize(t,a),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 kp extends Jt{SSR_RayTraceCompute;SSR_IS_Compute;SSR_Blend_Compute;isRetTexture;finalTexture;rendererPassState;ssrUniformBuffer;rayTraceData;ssrColorData;rtFrame;historyPosition;view;onAttach(e){this.view=e,_.setting.render.postProcessing.ssr.enable=!0}onDetach(e){_.setting.render.postProcessing.ssr.enable=!1}reflectionRatio=.5;get fadeEdgeRatio(){return _.setting.render.postProcessing.ssr.fadeEdgeRatio}set fadeEdgeRatio(e){e=Be(e,0,1);let t=_.setting.render.postProcessing.ssr;t.fadeEdgeRatio=e}get rayMarchRatio(){return _.setting.render.postProcessing.ssr.rayMarchRatio}set rayMarchRatio(e){e=Be(e,0,1);let t=_.setting.render.postProcessing.ssr;t.rayMarchRatio=e}get roughnessThreshold(){return _.setting.render.postProcessing.ssr.roughnessThreshold}set roughnessThreshold(e){e=Be(e,0,1);let t=_.setting.render.postProcessing.ssr;t.roughnessThreshold=e}get fadeDistanceMin(){return _.setting.render.postProcessing.ssr.fadeDistanceMin}set fadeDistanceMin(e){e=Be(e,0,1e4);let t=_.setting.render.postProcessing.ssr;t.fadeDistanceMin=e}get fadeDistanceMax(){return _.setting.render.postProcessing.ssr.fadeDistanceMax}set fadeDistanceMax(e){e=Be(e,0,1e4);let t=_.setting.render.postProcessing.ssr;t.fadeDistanceMax=e}get powDotRN(){return _.setting.render.postProcessing.ssr.powDotRN}set powDotRN(e){e=Be(e,0,1);let t=_.setting.render.postProcessing.ssr;t.powDotRN=e}createRayTraceShader(){let e=xe.getCameraGroup(this.view.camera);this.SSR_RayTraceCompute=new Fe(Id),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 a=ve.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture();this.SSR_RayTraceCompute.setSamplerTexture("gBufferTexture",a),q.instance.sky instanceof Ws&&this.SSR_RayTraceCompute.setSamplerTexture("prefilterMap",q.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 Fe(wd),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=xe.getCameraGroup(this.view.camera);this.SSR_Blend_Compute=new Fe(Ed),this.SSR_Blend_Compute.setStorageBuffer("rayTraceBuffer",this.rayTraceData),this.SSR_Blend_Compute.setUniformBuffer("globalUniform",t.uniformGPUBuffer);let r=ve.getGBufferFrame("ColorPassGBuffer").getCompressGBufferTexture();this.SSR_Blend_Compute.setSamplerTexture("gBufferTexture",r),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]=I.presentationSize;this.finalTexture=new Te(e,t,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),this.finalTexture.name="ssrOutTex";let a=new Je;a.clearValue=[0,0,0,0],a.loadOp="clear";let r=Math.ceil(e*_.setting.render.postProcessing.ssr.pixelRatio),i=Math.ceil(t*_.setting.render.postProcessing.ssr.pixelRatio);this.isRetTexture=new Te(r,i,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING),this.isRetTexture.name="ssrTextureIn";let n=new Je;n.clearValue=[0,0,0,0],n.loadOp="clear",this.rtFrame=new ct([this.finalTexture,this.isRetTexture],[a,n]),this.rayTraceData=new Pe(r*i*8,GPUBufferUsage.COPY_SRC),this.ssrColorData=new Pe(r*i*4,GPUBufferUsage.COPY_SRC),this.historyPosition=new Pe(r*i*4,GPUBufferUsage.COPY_SRC),this.ssrUniformBuffer=new St(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=He.createRendererPassState(this.rtFrame,null);let i=xe.getCameraGroup(e.camera);this.SSR_RayTraceCompute.setUniformBuffer("standUniform",i.uniformGPUBuffer)}let a=_.setting.render.postProcessing.ssr;this.ssrUniformBuffer.setFloat("fadeEdgeRatio",a.fadeEdgeRatio),this.ssrUniformBuffer.setFloat("rayMarchRatio",a.rayMarchRatio),this.ssrUniformBuffer.setFloat("fadeDistanceMin",a.fadeDistanceMin),this.ssrUniformBuffer.setFloat("fadeDistanceMax",a.fadeDistanceMax),this.ssrUniformBuffer.setFloat("mixThreshold",a.mixThreshold),this.ssrUniformBuffer.setFloat("roughnessThreshold",a.roughnessThreshold),this.ssrUniformBuffer.setFloat("reflectionRatio",this.reflectionRatio),this.ssrUniformBuffer.setFloat("powDotRN",a.powDotRN),this.ssrUniformBuffer.setFloat("randomSeedX",Math.random()),this.ssrUniformBuffer.setFloat("randomSeedY",Math.random()),this.ssrUniformBuffer.apply();let r=[this.SSR_RayTraceCompute,this.SSR_IS_Compute,this.SSR_Blend_Compute];k.computeCommand(t,r),k.lastRenderPassState=this.rendererPassState}onResize(){let[e,t]=I.presentationSize,a=Math.ceil(e*_.setting.render.postProcessing.ssr.pixelRatio),r=Math.ceil(t*_.setting.render.postProcessing.ssr.pixelRatio);this.finalTexture.resize(e,t),this.isRetTexture.resize(a,r),this.rayTraceData.resizeBuffer(a*r*8),this.ssrColorData.resizeBuffer(a*r*4),this.historyPosition.resizeBuffer(a*r*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 Ep{static createSeeds(){let e=20,t=32,a=[new b(0,0,e)],r=0,i=.02;for(let n=1;n<t;n++){let o=new b;a.push(o),r+=1-(1-.618)*n/t,i+=n*.01,o.x=Math.sin(r)*i,o.y=Math.cos(r)*i,o.z=1-n/t,o.multiplyScalar(e)}return a}}class wp extends Jt{taaTexture;outTexture;rendererPassState;taaCompute;copyTexCompute;sharpCompute;taaSetting;preColorBuffer;preColorTex;preProjMatrix;preViewMatrix;rtFrame;constructor(){super()}onAttach(e){_.setting.render.postProcessing.taa.enable=!0,e.camera.enableJitterProjection(!0),this.createGUI()}onDetach(e){_.setting.render.postProcessing.taa.enable=!1,e.camera.enableJitterProjection(!1)}get jitterSeedCount(){return _.setting.render.postProcessing.taa.jitterSeedCount}set jitterSeedCount(e){e=Be(e,2,32),e=Math.round(e);let t=_.setting.render.postProcessing.taa;t.jitterSeedCount=e}get blendFactor(){return _.setting.render.postProcessing.taa.blendFactor}set blendFactor(e){e=Be(e,0,1);let t=_.setting.render.postProcessing.taa;t.blendFactor=e}get sharpFactor(){return _.setting.render.postProcessing.taa.sharpFactor}set sharpFactor(e){e=Be(e,.1,.99);let t=_.setting.render.postProcessing.taa;t.sharpFactor=e}get sharpPreBlurFactor(){return _.setting.render.postProcessing.taa.sharpPreBlurFactor}set sharpPreBlurFactor(e){e=Be(e,.1,.99);let t=_.setting.render.postProcessing.taa;t.sharpPreBlurFactor=e}get temporalJitterScale(){return _.setting.render.postProcessing.taa.temporalJitterScale}set temporalJitterScale(e){e=Be(e,0,1);let t=_.setting.render.postProcessing.taa;t.temporalJitterScale=e}createGUI(){}createCompute(e){let t=new Fe(Td),a=new St(44),r=xe.getCameraGroup(e.camera);t.setUniformBuffer("globalUniform",r.uniformGPUBuffer),t.setUniformBuffer("taaData",a),t.setStorageBuffer("preColorBuffer",this.preColorBuffer);let i=ve.getGBufferFrame(ve.colorPass_GBuffer);t.setSamplerTexture("preColorTex",this.preColorTex),t.setSamplerTexture("gBufferTexture",i.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=a,this.copyTexCompute=new Fe(Rd),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 Fe(Qd),this.sharpCompute.setUniformBuffer("taaData",a),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 R().identity(),this.preViewMatrix=new R().identity();let[e,t]=I.presentationSize;this.preColorBuffer=new Pe(e*t*4,GPUBufferUsage.COPY_SRC),this.preColorTex=new Te(e,t,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.preColorTex.name="taaTex";let a=new Je;a.clearValue=[0,0,0,1],a.loadOp="clear",this.taaTexture=new Te(e,t,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.taaTexture.name="taaTex";let r=new Je;r.clearValue=[0,0,0,1],r.loadOp="clear",this.outTexture=new Te(e,t,oe.rgba16float,!1,GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.TEXTURE_BINDING),this.outTexture.name="sharpTaaTex";let i=new Je;i.clearValue=[0,0,0,1],i.loadOp="clear",this.rtFrame=new ct([this.preColorTex,this.taaTexture,this.outTexture],[a,r,i])}render(e,t){this.taaCompute||(this.createResource(),this.createCompute(e),this.rendererPassState=He.createRendererPassState(this.rtFrame,null));let a=_.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",a.blendFactor),this.taaSetting.setFloat("sharpFactor",a.sharpFactor),this.taaSetting.setFloat("sharpPreBlurFactor",a.sharpPreBlurFactor),this.taaSetting.setFloat("jitterX",e.camera.jitterX),this.taaSetting.setFloat("jitterY",e.camera.jitterY),this.taaSetting.apply(),k.computeCommand(t,[this.copyTexCompute,this.taaCompute,this.sharpCompute]),k.lastRenderPassState=this.rendererPassState,this.preProjMatrix.copyFrom(e.camera.projectionMatrix),this.preViewMatrix.copyFrom(e.camera.viewMatrix)}onResize(){let[e,t]=I.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 zh{_tempIndexArray=[];setOutline(e,t){this.setOutlineList([e],t?[t]:null)}setOutlineList(e,t){e||=[];let a=ya.defaultColor,r=ya.SlotCount;for(let i=0;i<r;i++){this._tempIndexArray.length=0;let n=e[i],o=(t?t[i]:null)||a;if(n)for(const l of n)this.getEntityIdList(l,this._tempIndexArray);ya.fillDataAt(i,this._tempIndexArray,o)}}clearOutline(){return ya.clear(),this}_rendererList=[];getEntityIdList(e,t){this._rendererList.length=0;let a=e.getComponents(he,this._rendererList);for(const r of a)t.push(r.object3D.transform._worldMatrix.index)}}let Ip=new zh;class Wh{localPosition=new b;worldPosition=new b;uv=new de;faceIndex;isIn=!1;t=0;u=0;v=0;triangle;v0;v1;v2;pickList;color}class vi{static EPS=1e-4;static FLT_MAX=3402823466e29;static distPtTri(e,t,a,r){let i=new b,n=new b,o=new b;r.subtract(t,i),a.subtract(t,n),e.subtract(t,o);let l=kt(i,i),c=kt(i,n),f=kt(i,o),d=kt(n,n),h=kt(n,o),u=1/(l*d-c*c),m=(d*f-c*h)*u,g=(l*h-c*f)*u;if(m>=-vi.EPS&&g>=-vi.EPS&&m+g<=1+vi.EPS){let p=t[1]+i[1]*m+n[1]*g;return Math.abs(p-e[1])}return vi.FLT_MAX}static _info=new Wh;static IntersectTriangle(e,t,a){let r=t.v1,i=t.v2,n=t.v3,o=i.subtract(r,b.HELP_3),l=n.subtract(r,b.HELP_4),c=e.direction.crossProduct(l,b.HELP_5),f=kt(o,c),d;if(f>0){if(a)return null;d=e.origin.subtract(r,b.HELP_2)}else d=r.subtract(e.origin,b.HELP_2),f=-f;if(f<1e-4)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let h=kt(d,c);if(h<0||h>f)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let u=d.crossProduct(o,b.HELP_1),m=kt(e.direction,u);if(m<0||h+m>f)return this._info.isIn=!1,this._info.t=0,this._info.u=0,this._info.v=0,this._info;let g=kt(l,u),p=1/f;g*=p,h*=p,m*=p,this._info.isIn=!0,this._info.t=g,this._info.u=h,this._info.v=m;let A=1-h-m;return this._u0.copyFrom(t.u1),this._u0.scale(A),this._u1.copyFrom(t.u2),this._u1.scale(h),this._u2.copyFrom(t.u3),this._u2.scale(m),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(g),this._info.localPosition.add(e.origin,this._info.localPosition),this._info}static _u0=new de;static _u1=new de;static _u2=new de}class An extends Ya{static _instance;_maxRetry=3;loadAll(e,t){return new Promise((a,r)=>{let i=e.length,n=[];e.forEach((o,l)=>{let c=new t;this.load(o,t).then(f=>{c.parse(f),n.push(c),i--,i===0&&a(n)})})})}constructor(){if(super(),An._instance)throw new Error("LoadManager is singleton class...")}static getInstance(){return this._instance||(this._instance=new An)}loadUrls(e,t){return new Promise((a,r)=>{let i=e.length,n=[];e.forEach((o,l)=>{this.load(o,t).then(c=>{n.push(c),i--,i===0&&a(n),i<0&&console.error(`loadUrls ${e} error`)})})})}get maxRetry(){return this._maxRetry}set maxRetry(e){this._maxRetry=e}load(e,t){return new Promise((a,r)=>{t.format})}}class Rp extends wr{async loadStream(e,t,a,r){if(t.format!==je.BIN)throw new Error("StreamLoader only supports BIN format parsers");return new Promise(async(i,n)=>{let o=!1,l=null,c=null;const f=()=>{o=!0,l&&(l.cancel().catch(()=>{}),l.releaseLock()),c&&c.abort(),d&&typeof d.cancel=="function"&&d.cancel()};let d=null;try{this.baseUrl=e.substring(0,e.lastIndexOf("/")+1),this.initUrl=e,c=new AbortController;const h=await fetch(e,{headers:a?.headers,signal:c.signal});if(!h.ok)throw new Error(`Request rejected with status ${h.status}`);l=h.body.getReader();const u=+h.headers.get("Content-Length")||0;if(d=new t,d.userData=r,d.baseUrl=this.baseUrl,d.initUrl=e,d.loaderFunctions=a,typeof d.initStream!="function")throw new Error(`Parser ${t.name} does not support streaming. Implement initStream() method.`);let m=!1;await d.initStream(u,()=>{!m&&!o&&d&&d.verification()&&(m=!0,i({parser:d,cancel:f}))});let g=0;for(;!o;){const{done:p,value:A}=await l.read();if(p||o){if(!o&&(typeof d.finalizeStream=="function"&&await d.finalizeStream(),!m&&d))if(d.verification())m=!0,i({parser:d,cancel:f});else throw new Error("Parser verification failed");break}if(o)break;g+=A.length,u>0&&a?.onProgress&&!o&&a.onProgress.call(this,g,u,e,d),!o&&typeof d.processChunk=="function"&&await d.processChunk(A,g,u),!m&&!o&&d&&d.verification()&&(m=!0,i({parser:d,cancel:f}))}!o&&a?.onComplete&&a.onComplete.call(this,e)}catch(h){if(o)return;a?.onError&&a.onError(h),n(h)}finally{if(l&&!o)try{l.releaseLock()}catch{}}})}}function Zo(s){const e=[1/0,1/0,1/0],t=[-1/0,-1/0,-1/0];for(let a=0;a<s.length;a+=3){const r=s[a+0],i=s[a+1],n=s[a+2];r<e[0]&&(e[0]=r),i<e[1]&&(e[1]=i),n<e[2]&&(e[2]=n),r>t[0]&&(t[0]=r),i>t[1]&&(t[1]=i),n>t[2]&&(t[2]=n)}return{min:e,max:t}}var Di=(s=>(s.PLY="ply",s.SPLAT="splat",s.KSPLAT="ksplat",s.UNKNOWN="unknown",s))(Di||{});function Jh(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"}var Ca=(s=>(s[s.Splat=0]="Splat",s[s.PointCloud=1]="PointCloud",s[s.Mesh=2]="Mesh",s))(Ca||{});const Xi=["x","y","z","scale_0","scale_1","scale_2","opacity","rot_0","rot_1","rot_2","rot_3"],Yo=["red","green","blue","f_dc_0","f_dc_1","f_dc_2"];function ea(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 pe(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 Xo(s){const e=Math.round(Math.sqrt(s));return Math.max(0,e-1)}function Hi(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
11847
- `);if(t<0)throw new Error("PLY: Invalid PLY header");const a=e.substring(0,t+11),r=a.split(/\r?\n/);let i="",n=0,o=0;const l=[],c=[],f=[];let d=!1,h=!1;for(const g of r)if(g.startsWith("format "))i=g.split(/\s+/)[1];else if(g.startsWith("comment TextureFile ")){const p=g.substring(20).trim();p&&f.push(p)}else if(g.startsWith("element ")){const p=g.split(/\s+/);d=p[1]==="vertex",h=p[1]==="face",d&&(n=parseInt(p[2]),h=!1),h&&(o=parseInt(p[2]),d=!1)}else if(d&&g.startsWith("property ")){const p=g.split(/\s+/),A=p[1],D=p[2];l.push({name:D,type:A})}else if(h&&g.startsWith("property ")){const p=g.split(/\s+/);if(p[1]==="list"){const A=p[2],D=p[3],B=p[4];c.push({name:B,type:`list ${A} ${D}`})}else{const A=p[1],D=p[2];c.push({name:D,type:A})}}if(i!=="binary_little_endian"&&i!=="ascii")throw new Error(`PLY: Unsupported format: ${i}. Only binary_little_endian and ascii are supported.`);let u=0,m=0;for(const g of l)Xi.includes(g.name)&&u++,Yo.includes(g.name)&&m++;return{format:i,vertexCount:n,faceCount:o,properties:l,faceProperties:c.length>0?c:void 0,textureFiles:f,headerByteLength:a.length,mode:o?Ca.Mesh:u===Xi.length&&m===3?Ca.Splat:Ca.PointCloud}}function Ho(s){const e=Hi(s),{format:t}=e;return t==="ascii"?Tp(s,e):Qp(s,e)}function Qp(s,e){const{vertexCount:t,properties:a,headerByteLength:r}=e,i=new DataView(s,r),n=v=>a.find(U=>U.name===v)!=null,o=v=>a.findIndex(U=>U.name===v),l=new Float32Array(t*3),c=n("scale_0")?new Float32Array(t*3):void 0,f=n("rot_0")?new Float32Array(t*4):void 0,d=n("opacity")?new Float32Array(t):void 0,h=[o("f_dc_0"),o("f_dc_1"),o("f_dc_2")],u=[];for(let v=0;v<a.length;v++)a[v].name.startsWith("f_rest_")&&u.push(v);const m=h[0]>=0&&h[1]>=0&&h[2]>=0;let g,p=0;if(m){const v=1+u.length/3;p=Xo(v),g=new Float32Array(t*v*3)}const A=[];let D=0;for(const v of a)A.push(D),D+=ea(v.type);let B=0;for(let v=0;v<t;v++){const U=B,y=o("x"),S=o("y"),F=o("z");if(y<0||S<0||F<0)throw new Error("PLY: Missing x/y/z for vertex");if(l[v*3+0]=pe(i,U+A[y],a[y].type),l[v*3+1]=pe(i,U+A[S],a[S].type),l[v*3+2]=pe(i,U+A[F],a[F].type),c){const C=o("scale_0"),w=o("scale_1"),E=o("scale_2");c[v*3+0]=pe(i,U+A[C],a[C].type),c[v*3+1]=pe(i,U+A[w],a[w].type),c[v*3+2]=pe(i,U+A[E],a[E].type)}if(f){const C=o("rot_0"),w=o("rot_1"),E=o("rot_2"),Q=o("rot_3"),T=pe(i,U+A[C],a[C].type),j=pe(i,U+A[w],a[w].type),ue=pe(i,U+A[E],a[E].type),ee=pe(i,U+A[Q],a[Q].type);f[v*4+0]=j,f[v*4+1]=ue,f[v*4+2]=ee,f[v*4+3]=T}if(d){const C=o("opacity");d[v]=pe(i,U+A[C],a[C].type)}if(m&&g){const C=1+u.length/3,w=v*C*3;g[w+0]=pe(i,U+A[h[0]],a[h[0]].type),g[w+C+0]=pe(i,U+A[h[1]],a[h[1]].type),g[w+2*C+0]=pe(i,U+A[h[2]],a[h[2]].type);let E=1,Q=1,T=1;for(let j=0;j<u.length;j+=3){const ue=u[j+0],ee=u[j+1],N=u[j+2];g[w+E]=pe(i,U+A[ue],a[ue].type),g[w+C+Q]=pe(i,U+A[ee],a[ee].type),g[w+2*C+T]=pe(i,U+A[N],a[N].type),E++,Q++,T++}}B+=D}return{vertexCount:t,position:l,scale:c,rotation:f,opacity:d,sh:m&&g?{order:p,coeffs:g}:void 0}}function Tp(s,e){const{vertexCount:t,properties:a}=e,r=new TextDecoder("utf-8").decode(s),i=r.indexOf("end_header");if(i<0)throw new Error("PLY: Invalid PLY header");let n=i+10;for(;n<r.length&&(r[n]===" "||r[n]===`
11848
- `||r[n]==="\r");)n++;const l=r.substring(n).split(/\s+/).filter(N=>N.length>0);let c=0;const f=N=>a.find(M=>M.name===N)!=null,d=N=>a.findIndex(M=>M.name===N),h=N=>{if(c>=l.length)throw new Error("PLY: Unexpected end of file");const M=l[c++];switch(N){case"char":case"uchar":case"short":case"ushort":case"int":case"uint":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return parseInt(M);case"float":case"double":case"float32":case"float64":return parseFloat(M);default:return parseFloat(M)}},u=new Float32Array(t*3),m=f("scale_0")?new Float32Array(t*3):void 0,g=f("rot_0")?new Float32Array(t*4):void 0,p=f("opacity")?new Float32Array(t):void 0,A=[d("f_dc_0"),d("f_dc_1"),d("f_dc_2")],D=[];for(let N=0;N<a.length;N++)a[N].name.startsWith("f_rest_")&&D.push(N);const B=A[0]>=0&&A[1]>=0&&A[2]>=0;let v,U=0;if(B){const N=1+D.length/3;U=Xo(N),v=new Float32Array(t*N*3)}const y=d("x"),S=d("y"),F=d("z");if(y<0||S<0||F<0)throw new Error("PLY: Missing x/y/z for vertex");const C=m?d("scale_0"):-1,w=m?d("scale_1"):-1,E=m?d("scale_2"):-1,Q=g?d("rot_0"):-1,T=g?d("rot_1"):-1,j=g?d("rot_2"):-1,ue=g?d("rot_3"):-1,ee=p?d("opacity"):-1;for(let N=0;N<t;N++)for(let M=0;M<a.length;M++){const O=a[M],W=h(O.type);if(M===y?u[N*3+0]=W:M===S?u[N*3+1]=W:M===F&&(u[N*3+2]=W),m&&M===C?m[N*3+0]=W:m&&M===w?m[N*3+1]=W:m&&M===E&&(m[N*3+2]=W),g&&M===Q?g[N*4+3]=W:g&&M===T?g[N*4+0]=W:g&&M===j?g[N*4+1]=W:g&&M===ue&&(g[N*4+2]=W),p&&M===ee&&(p[N]=W),B&&v){const ae=1+D.length/3,z=N*ae*3;M===A[0]?v[z+0]=W:M===A[1]?v[z+ae+0]=W:M===A[2]&&(v[z+2*ae+0]=W);for(let K=0;K<D.length;K+=3){const $=D[K+0],re=D[K+1],ce=D[K+2];M===$?v[z+(K/3+1)]=W:M===re?v[z+ae+(K/3+1)]=W:M===ce&&(v[z+2*ae+(K/3+1)]=W)}}}return{vertexCount:t,position:u,scale:m,rotation:g,opacity:p,sh:B&&v?{order:U,coeffs:v}:void 0}}function jh(s){const e=Hi(s),{format:t,vertexCount:a,faceCount:r,properties:i,faceProperties:n,textureFiles:o,headerByteLength:l}=e;return t==="ascii"?Np(s,e):Mp(s,e)}function Mp(s,e){const{vertexCount:t,faceCount:a,properties:r,faceProperties:i,textureFiles:n,headerByteLength:o}=e,l=new DataView(s,o),c=N=>r.find(M=>M.name===N)!=null,f=N=>r.findIndex(M=>M.name===N),d=i?.some(N=>N.name==="texcoord")||!1,h=i?.some(N=>N.name==="texnumber")||!1;i?.find(N=>N.name==="texcoord"),i?.find(N=>N.name==="texnumber");const u=new Float32Array(t*3),m=c("nx")&&c("ny")&&c("nz"),g=m?new Float32Array(t*3):new Float32Array(t*3),p=(c("red")||c("r"))&&(c("green")||c("g"))&&(c("blue")||c("b"))?new Float32Array(t*3):void 0,A=(c("u")||c("s"))&&(c("v")||c("t")),D=A||d?new Float32Array(t*2):void 0,B=new Map,v=h?new Array(a):[],U=[];let y=0;for(const N of r)U.push(y),y+=ea(N.type);let S=0;for(let N=0;N<t;N++){const M=S,O=f("x"),W=f("y"),ae=f("z");if(O<0||W<0||ae<0)throw new Error("PLY: Missing x/y/z for vertex");if(u[N*3+0]=pe(l,M+U[O],r[O].type),u[N*3+1]=pe(l,M+U[W],r[W].type),u[N*3+2]=pe(l,M+U[ae],r[ae].type),m){const z=f("nx"),K=f("ny"),$=f("nz");g[N*3+0]=pe(l,M+U[z],r[z].type),g[N*3+1]=pe(l,M+U[K],r[K].type),g[N*3+2]=pe(l,M+U[$],r[$].type)}if(p){const z=f("red")>=0?f("red"):f("r"),K=f("green")>=0?f("green"):f("g"),$=f("blue")>=0?f("blue"):f("b");if(z>=0&&K>=0&&$>=0){let re=pe(l,M+U[z],r[z].type),ce=pe(l,M+U[K],r[K].type),Ae=pe(l,M+U[$],r[$].type);(r[z].type==="uchar"||r[z].type==="uint8")&&(re/=255,ce/=255,Ae/=255),p[N*3+0]=re,p[N*3+1]=ce,p[N*3+2]=Ae}}if(D){const z=f("u")>=0?f("u"):f("s"),K=f("v")>=0?f("v"):f("t");z>=0&&K>=0&&(D[N*2+0]=pe(l,M+U[z],r[z].type),D[N*2+1]=pe(l,M+U[K],r[K].type))}S+=y}const F=[],C=[],w=[];let E=S;D&&!A&&!d&&new Array(t).fill(!1);for(let N=0;N<a;N++){let M=E,O=[],W,ae=0,z=0;if(!i||i.length===0)throw new Error("PLY: Face element must have properties");for(const $ of i)if($.name==="vertex_indices"){const re=$.type.split(" ");if(re.length!==3||re[0]!=="list")throw new Error(`PLY: Invalid vertex_indices property type: ${$.type}`);const ce=re[1],Ae=re[2];if(z=pe(l,M,ce),M+=ea(ce),z<3)throw new Error(`PLY: Face ${N} has less than 3 vertices`);const Qe=ea(Ae);O=[];for(let Ve=0;Ve<z;Ve++){const H=pe(l,M,Ae);O.push(H),M+=Qe}}else if($.name==="texcoord"){const re=$.type.split(" ");if(re.length!==3||re[0]!=="list")throw new Error(`PLY: Invalid texcoord property type: ${$.type}`);const ce=re[1],Ae=re[2],Qe=pe(l,M,ce);M+=ea(ce);const Ve=ea(Ae);W=new Float32Array(Qe);for(let H=0;H<Qe;H++)W[H]=pe(l,M,Ae),M+=Ve;B.set(N,W)}else if($.name==="texnumber")ae=pe(l,M,$.type),M+=ea($.type),v[N]=ae;else if($.type.startsWith("list ")){const re=$.type.split(" ");if(re.length===3){const ce=re[1],Ae=re[2],Qe=pe(l,M,ce);M+=ea(ce);const Ve=ea(Ae);M+=Qe*Ve}}else M+=ea($.type);E=M;const K=h?v[N]??0:0;if(z===3)F.push(O[0],O[1],O[2]),h&&C.push(K),d&&W&&W.length>=6&&w.push(W[0],1-W[1],W[2],1-W[3],W[4],1-W[5]);else for(let $=1;$<z-1;$++)F.push(O[0],O[$],O[$+1]),h&&C.push(K),d&&W&&W.length>=z*2&&w.push(W[0],1-W[1],W[$*2+0],1-W[$*2+1],W[($+1)*2+0],1-W[($+1)*2+1])}if(!m){for(let N=0;N<t*3;N++)g[N]=0;for(let N=0;N<F.length;N+=3){const M=F[N],O=F[N+1],W=F[N+2],ae=u[M*3+0],z=u[M*3+1],K=u[M*3+2],$=u[O*3+0],re=u[O*3+1],ce=u[O*3+2],Ae=u[W*3+0],Qe=u[W*3+1],Ve=u[W*3+2],H=$-ae,ie=re-z,le=ce-K,ge=Ae-ae,Ie=Qe-z,me=Ve-K,ye=ie*me-le*Ie,Se=le*ge-H*me,Me=H*Ie-ie*ge;g[M*3+0]+=ye,g[M*3+1]+=Se,g[M*3+2]+=Me,g[O*3+0]+=ye,g[O*3+1]+=Se,g[O*3+2]+=Me,g[W*3+0]+=ye,g[W*3+1]+=Se,g[W*3+2]+=Me}for(let N=0;N<t;N++){const M=g[N*3+0],O=g[N*3+1],W=g[N*3+2],ae=Math.sqrt(M*M+O*O+W*W);ae>1e-5?(g[N*3+0]=M/ae,g[N*3+1]=O/ae,g[N*3+2]=W/ae):(g[N*3+0]=0,g[N*3+1]=1,g[N*3+2]=0)}}let Q=u,T=g,j=p,ue,ee;if(d&&w.length>0){const N=F.length/3,M=new Float32Array(N*3*3),O=new Float32Array(N*3*3),W=p?new Float32Array(N*3*3):void 0;ue=new Float32Array(w);for(let z=0;z<N;z++){const K=z*3,$=F[K+0],re=F[K+1],ce=F[K+2];M[z*9+0]=u[$*3+0],M[z*9+1]=u[$*3+1],M[z*9+2]=u[$*3+2],M[z*9+3]=u[re*3+0],M[z*9+4]=u[re*3+1],M[z*9+5]=u[re*3+2],M[z*9+6]=u[ce*3+0],M[z*9+7]=u[ce*3+1],M[z*9+8]=u[ce*3+2],O[z*9+0]=g[$*3+0],O[z*9+1]=g[$*3+1],O[z*9+2]=g[$*3+2],O[z*9+3]=g[re*3+0],O[z*9+4]=g[re*3+1],O[z*9+5]=g[re*3+2],O[z*9+6]=g[ce*3+0],O[z*9+7]=g[ce*3+1],O[z*9+8]=g[ce*3+2],W&&p&&(W[z*9+0]=p[$*3+0],W[z*9+1]=p[$*3+1],W[z*9+2]=p[$*3+2],W[z*9+3]=p[re*3+0],W[z*9+4]=p[re*3+1],W[z*9+5]=p[re*3+2],W[z*9+6]=p[ce*3+0],W[z*9+7]=p[ce*3+1],W[z*9+8]=p[ce*3+2])}Q=M,T=O,j=W;const ae=new Uint32Array(N*3);for(let z=0;z<N*3;z++)ae[z]=z;ee=ae}else ee=new Uint32Array(F),ue=D;return{vertexCount:d&&w.length>0?Q.length/3:t,faceCount:a,position:Q,normal:T,color:j,uv:ue,indices:ee,textureFiles:n.length>0?n:void 0,triangleTexnumbers:C.length>0?C:void 0}}function Np(s,e){const{vertexCount:t,faceCount:a,properties:r,faceProperties:i,textureFiles:n,headerByteLength:o}=e,l=new TextDecoder("utf-8").decode(s),c=l.indexOf("end_header");if(c<0)throw new Error("PLY: Invalid PLY header");let f=c+10;for(;f<l.length&&(l[f]===" "||l[f]===`
11849
- `||l[f]==="\r");)f++;const h=l.substring(f).split(/\s+/).filter(H=>H.length>0);let u=0;const m=H=>r.find(ie=>ie.name===H)!=null,g=H=>{if(u>=h.length)throw new Error("PLY: Unexpected end of file");const ie=h[u++];switch(H){case"char":case"uchar":case"short":case"ushort":case"int":case"uint":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return parseInt(ie);case"float":case"double":case"float32":case"float64":return parseFloat(ie);default:return parseFloat(ie)}},p=new Float32Array(t*3),A=m("nx")&&m("ny")&&m("nz"),D=A?new Float32Array(t*3):new Float32Array(t*3),B=(m("red")||m("r"))&&(m("green")||m("g"))&&(m("blue")||m("b"))?new Float32Array(t*3):void 0,v=(m("u")||m("s"))&&(m("v")||m("t")),U=i?.some(H=>H.name==="texcoord")||!1,y=v||U?new Float32Array(t*2):void 0,S=new Map,F=i?.some(H=>H.name==="texnumber")||!1,C=F?new Array(a):[],w=[],E=[],Q=[],T=H=>r.findIndex(ie=>ie.name===H),j=T("x"),ue=T("y"),ee=T("z"),N=A?T("nx"):-1,M=A?T("ny"):-1,O=A?T("nz"):-1,W=B?T("red")>=0?T("red"):T("r"):-1,ae=B?T("green")>=0?T("green"):T("g"):-1,z=B?T("blue")>=0?T("blue"):T("b"):-1,K=y&&v?T("u")>=0?T("u"):T("s"):-1,$=y&&v?T("v")>=0?T("v"):T("t"):-1;for(let H=0;H<t;H++)for(let ie=0;ie<r.length;ie++){const le=r[ie],ge=g(le.type);ie===j?p[H*3+0]=ge:ie===ue?p[H*3+1]=ge:ie===ee?p[H*3+2]=ge:ie===N?D[H*3+0]=ge:ie===M?D[H*3+1]=ge:ie===O?D[H*3+2]=ge:ie===W&&B?B[H*3+0]=le.type==="uchar"||le.type==="uint8"?ge/255:ge:ie===ae&&B?B[H*3+1]=le.type==="uchar"||le.type==="uint8"?ge/255:ge:ie===z&&B?B[H*3+2]=le.type==="uchar"||le.type==="uint8"?ge/255:ge:ie===K&&y?y[H*2+0]=ge:ie===$&&y&&(y[H*2+1]=ge)}for(let H=0;H<a;H++){let ie=[],le,ge=0;for(const ye of i||[])if(ye.name==="vertex_indices"){const Se=ye.type.split(" "),Me=Se[1],Ze=Se[2],$e=g(Me);ie=[];for(let ft=0;ft<$e;ft++)ie.push(g(Ze))}else if(ye.name==="texcoord"){const Se=ye.type.split(" "),Me=Se[1],Ze=Se[2],$e=g(Me);le=new Float32Array($e);for(let ft=0;ft<$e;ft++)le[ft]=g(Ze);S.set(H,le)}else ye.name==="texnumber"&&(ge=g(ye.type),C[H]=ge);const Ie=ie.length,me=F?C[H]??0:0;if(Ie===3)w.push(ie[0],ie[1],ie[2]),F&&E.push(me),U&&le&&le.length>=6&&Q.push(le[0],1-le[1],le[2],1-le[3],le[4],1-le[5]);else for(let ye=1;ye<Ie-1;ye++)w.push(ie[0],ie[ye],ie[ye+1]),F&&E.push(me),U&&le&&le.length>=Ie*2&&Q.push(le[0],1-le[1],le[ye*2+0],1-le[ye*2+1],le[(ye+1)*2+0],1-le[(ye+1)*2+1])}if(!A){for(let H=0;H<t*3;H++)D[H]=0;for(let H=0;H<w.length;H+=3){const ie=w[H],le=w[H+1],ge=w[H+2],Ie=p[ie*3+0],me=p[ie*3+1],ye=p[ie*3+2],Se=p[le*3+0],Me=p[le*3+1],Ze=p[le*3+2],$e=p[ge*3+0],ft=p[ge*3+1],Za=p[ge*3+2],ga=Se-Ie,Qa=Me-me,Ht=Ze-ye,Ta=$e-Ie,Ma=ft-me,Vt=Za-ye,pa=Qa*Vt-Ht*Ma,ma=Ht*Ta-ga*Vt,ia=ga*Ma-Qa*Ta;D[ie*3+0]+=pa,D[ie*3+1]+=ma,D[ie*3+2]+=ia,D[le*3+0]+=pa,D[le*3+1]+=ma,D[le*3+2]+=ia,D[ge*3+0]+=pa,D[ge*3+1]+=ma,D[ge*3+2]+=ia}for(let H=0;H<t;H++){const ie=D[H*3+0],le=D[H*3+1],ge=D[H*3+2],Ie=Math.sqrt(ie*ie+le*le+ge*ge);Ie>1e-5?(D[H*3+0]=ie/Ie,D[H*3+1]=le/Ie,D[H*3+2]=ge/Ie):(D[H*3+0]=0,D[H*3+1]=1,D[H*3+2]=0)}}let re=p,ce=D,Ae=B,Qe,Ve;if(U&&Q.length>0){const H=w.length/3,ie=new Float32Array(H*3*3),le=new Float32Array(H*3*3),ge=B?new Float32Array(H*3*3):void 0;Qe=new Float32Array(Q);for(let me=0;me<H;me++){const ye=me*3,Se=w[ye+0],Me=w[ye+1],Ze=w[ye+2];ie[me*9+0]=p[Se*3+0],ie[me*9+1]=p[Se*3+1],ie[me*9+2]=p[Se*3+2],ie[me*9+3]=p[Me*3+0],ie[me*9+4]=p[Me*3+1],ie[me*9+5]=p[Me*3+2],ie[me*9+6]=p[Ze*3+0],ie[me*9+7]=p[Ze*3+1],ie[me*9+8]=p[Ze*3+2],le[me*9+0]=D[Se*3+0],le[me*9+1]=D[Se*3+1],le[me*9+2]=D[Se*3+2],le[me*9+3]=D[Me*3+0],le[me*9+4]=D[Me*3+1],le[me*9+5]=D[Me*3+2],le[me*9+6]=D[Ze*3+0],le[me*9+7]=D[Ze*3+1],le[me*9+8]=D[Ze*3+2],ge&&B&&(ge[me*9+0]=B[Se*3+0],ge[me*9+1]=B[Se*3+1],ge[me*9+2]=B[Se*3+2],ge[me*9+3]=B[Me*3+0],ge[me*9+4]=B[Me*3+1],ge[me*9+5]=B[Me*3+2],ge[me*9+6]=B[Ze*3+0],ge[me*9+7]=B[Ze*3+1],ge[me*9+8]=B[Ze*3+2])}re=ie,ce=le,Ae=ge;const Ie=new Uint32Array(H*3);for(let me=0;me<H*3;me++)Ie[me]=me;Ve=Ie}else Ve=new Uint32Array(w),Qe=y;return{vertexCount:U&&Q.length>0?re.length/3:t,faceCount:a,position:re,normal:ce,color:Ae,uv:Qe,indices:Ve,textureFiles:n.length>0?n:void 0,triangleTexnumbers:E.length>0?E:void 0}}function Zh(s){const e=Hi(s),{format:t}=e;return t==="ascii"?Vp(s,e):Pp(s,e)}function Pp(s,e){const{vertexCount:t,properties:a,headerByteLength:r}=e,i=new DataView(s,r),n=g=>a.find(p=>p.name===g)!=null,o=g=>a.findIndex(p=>p.name===g),l=new Float32Array(t*3),c=(n("red")||n("r"))&&(n("green")||n("g"))&&(n("blue")||n("b")),f=n("alpha")||n("a"),d=c?new Uint8Array(t*4):void 0,h=[];let u=0;for(const g of a)h.push(u),u+=ea(g.type);let m=0;for(let g=0;g<t;g++){const p=m,A=o("x"),D=o("y"),B=o("z");if(A<0||D<0||B<0)throw new Error("PLY: Missing x/y/z for vertex");if(l[g*3+0]=pe(i,p+h[A],a[A].type),l[g*3+1]=pe(i,p+h[D],a[D].type),l[g*3+2]=pe(i,p+h[B],a[B].type),d){const v=o("red")>=0?o("red"):o("r"),U=o("green")>=0?o("green"):o("g"),y=o("blue")>=0?o("blue"):o("b"),S=f?o("alpha")>=0?o("alpha"):o("a"):-1;if(v>=0&&U>=0&&y>=0){let F=pe(i,p+h[v],a[v].type),C=pe(i,p+h[U],a[U].type),w=pe(i,p+h[y],a[y].type),E=255;(a[v].type==="float"||a[v].type==="float32"||a[v].type==="double"||a[v].type==="float64")&&(F=Math.round(F*255),C=Math.round(C*255),w=Math.round(w*255)),S>=0&&(E=pe(i,p+h[S],a[S].type),(a[S].type==="float"||a[S].type==="float32"||a[S].type==="double"||a[S].type==="float64")&&(E=Math.round(E*255))),d[g*4+0]=Math.max(0,Math.min(255,F)),d[g*4+1]=Math.max(0,Math.min(255,C)),d[g*4+2]=Math.max(0,Math.min(255,w)),d[g*4+3]=Math.max(0,Math.min(255,E))}}m+=u}return{vertexCount:t,position:l,color:d}}function Vp(s,e){const{vertexCount:t,properties:a}=e,r=new TextDecoder("utf-8").decode(s),i=r.indexOf("end_header");if(i<0)throw new Error("PLY: Invalid PLY header");let n=i+10;for(;n<r.length&&(r[n]===" "||r[n]===`
11850
- `||r[n]==="\r");)n++;const l=r.substring(n).split(/\s+/).filter(F=>F.length>0);let c=0;const f=F=>a.find(C=>C.name===F)!=null,d=F=>{if(c>=l.length)throw new Error("PLY: Unexpected end of file");const C=l[c++];switch(F){case"char":case"uchar":case"short":case"ushort":case"int":case"uint":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return parseInt(C);case"float":case"double":case"float32":case"float64":return parseFloat(C);default:return parseFloat(C)}},h=new Float32Array(t*3),u=(f("red")||f("r"))&&(f("green")||f("g"))&&(f("blue")||f("b")),m=f("alpha")||f("a"),g=u?new Uint8Array(t*4):void 0,p=F=>a.findIndex(C=>C.name===F),A=p("x"),D=p("y"),B=p("z"),v=u?p("red")>=0?p("red"):p("r"):-1,U=u?p("green")>=0?p("green"):p("g"):-1,y=u?p("blue")>=0?p("blue"):p("b"):-1,S=m?p("alpha")>=0?p("alpha"):p("a"):-1;for(let F=0;F<t;F++){for(let C=0;C<a.length;C++){const w=a[C],E=d(w.type);if(C===A)h[F*3+0]=E;else if(C===D)h[F*3+1]=E;else if(C===B)h[F*3+2]=E;else if(C===v&&g){const Q=w.type==="uchar"||w.type==="uint8"?E:Math.round(E*255);g[F*4+0]=Math.max(0,Math.min(255,Q))}else if(C===U&&g){const Q=w.type==="uchar"||w.type==="uint8"?E:Math.round(E*255);g[F*4+1]=Math.max(0,Math.min(255,Q))}else if(C===y&&g){const Q=w.type==="uchar"||w.type==="uint8"?E:Math.round(E*255);g[F*4+2]=Math.max(0,Math.min(255,Q))}else if(C===S&&g){const Q=w.type==="uchar"||w.type==="uint8"?E:Math.round(E*255);g[F*4+3]=Math.max(0,Math.min(255,Q))}}g&&S<0&&(g[F*4+3]=255)}return{vertexCount:t,position:h,color:g}}class Yh{_header=null;_headerBuffer=new Uint8Array(4096);_headerLength=0;_headerParsed=!1;_dataBuffer=null;_dataOffset=0;_processedVertices=0;_vertexStride=0;_propOffsets=[];_properties=[];_onHeaderParsed=null;_onSplatParsed=null;_batchSize=1e3;_cancelled=!1;constructor(e,t,a=1e3){this._onHeaderParsed=e,this._onSplatParsed=t,this._batchSize=a}processChunk(e){this._cancelled||(this._headerParsed?this._processDataChunk(e):this._processHeaderChunk(e))}cancel(){this._cancelled=!0}isCancelled(){return this._cancelled}_processHeaderChunk(e){const t=this._headerLength+e.length;if(t>this._headerBuffer.length){const i=new Uint8Array(Math.max(t,this._headerBuffer.length*2));i.set(this._headerBuffer.subarray(0,this._headerLength)),this._headerBuffer=i}this._headerBuffer.set(e,this._headerLength),this._headerLength+=e.length;const r=new TextDecoder("utf-8").decode(this._headerBuffer.subarray(0,this._headerLength)).indexOf(`end_header
11847
+ `);if(t<0)throw new Error("PLY: Invalid PLY header");const a=e.substring(0,t+11),r=a.split(/\r?\n/);let i="",n=0,o=0;const l=[],c=[],f=[];let d=!1,h=!1;for(const g of r)if(g.startsWith("format "))i=g.split(/\s+/)[1];else if(g.startsWith("comment TextureFile ")){const p=g.substring(20).trim();p&&f.push(p)}else if(g.startsWith("element ")){const p=g.split(/\s+/);d=p[1]==="vertex",h=p[1]==="face",d&&(n=parseInt(p[2]),h=!1),h&&(o=parseInt(p[2]),d=!1)}else if(d&&g.startsWith("property ")){const p=g.split(/\s+/),A=p[1],D=p[2];l.push({name:D,type:A})}else if(h&&g.startsWith("property ")){const p=g.split(/\s+/);if(p[1]==="list"){const A=p[2],D=p[3],B=p[4];c.push({name:B,type:`list ${A} ${D}`})}else{const A=p[1],D=p[2];c.push({name:D,type:A})}}if(i!=="binary_little_endian"&&i!=="ascii")throw new Error(`PLY: Unsupported format: ${i}. Only binary_little_endian and ascii are supported.`);let u=0,m=0;for(const g of l)Xi.includes(g.name)&&u++,Yo.includes(g.name)&&m++;return{format:i,vertexCount:n,faceCount:o,properties:l,faceProperties:c.length>0?c:void 0,textureFiles:f,headerByteLength:a.length,mode:o?Ca.Mesh:u===Xi.length&&m===3?Ca.Splat:Ca.PointCloud}}function Ho(s){const e=Hi(s),{format:t}=e;return t==="ascii"?Tp(s,e):Qp(s,e)}function Qp(s,e){const{vertexCount:t,properties:a,headerByteLength:r}=e,i=new DataView(s,r),n=v=>a.find(x=>x.name===v)!=null,o=v=>a.findIndex(x=>x.name===v),l=new Float32Array(t*3),c=n("scale_0")?new Float32Array(t*3):void 0,f=n("rot_0")?new Float32Array(t*4):void 0,d=n("opacity")?new Float32Array(t):void 0,h=[o("f_dc_0"),o("f_dc_1"),o("f_dc_2")],u=[];for(let v=0;v<a.length;v++)a[v].name.startsWith("f_rest_")&&u.push(v);const m=h[0]>=0&&h[1]>=0&&h[2]>=0;let g,p=0;if(m){const v=1+u.length/3;p=Xo(v),g=new Float32Array(t*v*3)}const A=[];let D=0;for(const v of a)A.push(D),D+=ea(v.type);let B=0;for(let v=0;v<t;v++){const x=B,y=o("x"),S=o("y"),F=o("z");if(y<0||S<0||F<0)throw new Error("PLY: Missing x/y/z for vertex");if(l[v*3+0]=pe(i,x+A[y],a[y].type),l[v*3+1]=pe(i,x+A[S],a[S].type),l[v*3+2]=pe(i,x+A[F],a[F].type),c){const C=o("scale_0"),w=o("scale_1"),E=o("scale_2");c[v*3+0]=pe(i,x+A[C],a[C].type),c[v*3+1]=pe(i,x+A[w],a[w].type),c[v*3+2]=pe(i,x+A[E],a[E].type)}if(f){const C=o("rot_0"),w=o("rot_1"),E=o("rot_2"),Q=o("rot_3"),T=pe(i,x+A[C],a[C].type),j=pe(i,x+A[w],a[w].type),ue=pe(i,x+A[E],a[E].type),ee=pe(i,x+A[Q],a[Q].type);f[v*4+0]=j,f[v*4+1]=ue,f[v*4+2]=ee,f[v*4+3]=T}if(d){const C=o("opacity");d[v]=pe(i,x+A[C],a[C].type)}if(m&&g){const C=1+u.length/3,w=v*C*3;g[w+0]=pe(i,x+A[h[0]],a[h[0]].type),g[w+C+0]=pe(i,x+A[h[1]],a[h[1]].type),g[w+2*C+0]=pe(i,x+A[h[2]],a[h[2]].type);let E=1,Q=1,T=1;for(let j=0;j<u.length;j+=3){const ue=u[j+0],ee=u[j+1],N=u[j+2];g[w+E]=pe(i,x+A[ue],a[ue].type),g[w+C+Q]=pe(i,x+A[ee],a[ee].type),g[w+2*C+T]=pe(i,x+A[N],a[N].type),E++,Q++,T++}}B+=D}return{vertexCount:t,position:l,scale:c,rotation:f,opacity:d,sh:m&&g?{order:p,coeffs:g}:void 0}}function Tp(s,e){const{vertexCount:t,properties:a}=e,r=new TextDecoder("utf-8").decode(s),i=r.indexOf("end_header");if(i<0)throw new Error("PLY: Invalid PLY header");let n=i+10;for(;n<r.length&&(r[n]===" "||r[n]===`
11848
+ `||r[n]==="\r");)n++;const l=r.substring(n).split(/\s+/).filter(N=>N.length>0);let c=0;const f=N=>a.find(M=>M.name===N)!=null,d=N=>a.findIndex(M=>M.name===N),h=N=>{if(c>=l.length)throw new Error("PLY: Unexpected end of file");const M=l[c++];switch(N){case"char":case"uchar":case"short":case"ushort":case"int":case"uint":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return parseInt(M);case"float":case"double":case"float32":case"float64":return parseFloat(M);default:return parseFloat(M)}},u=new Float32Array(t*3),m=f("scale_0")?new Float32Array(t*3):void 0,g=f("rot_0")?new Float32Array(t*4):void 0,p=f("opacity")?new Float32Array(t):void 0,A=[d("f_dc_0"),d("f_dc_1"),d("f_dc_2")],D=[];for(let N=0;N<a.length;N++)a[N].name.startsWith("f_rest_")&&D.push(N);const B=A[0]>=0&&A[1]>=0&&A[2]>=0;let v,x=0;if(B){const N=1+D.length/3;x=Xo(N),v=new Float32Array(t*N*3)}const y=d("x"),S=d("y"),F=d("z");if(y<0||S<0||F<0)throw new Error("PLY: Missing x/y/z for vertex");const C=m?d("scale_0"):-1,w=m?d("scale_1"):-1,E=m?d("scale_2"):-1,Q=g?d("rot_0"):-1,T=g?d("rot_1"):-1,j=g?d("rot_2"):-1,ue=g?d("rot_3"):-1,ee=p?d("opacity"):-1;for(let N=0;N<t;N++)for(let M=0;M<a.length;M++){const O=a[M],W=h(O.type);if(M===y?u[N*3+0]=W:M===S?u[N*3+1]=W:M===F&&(u[N*3+2]=W),m&&M===C?m[N*3+0]=W:m&&M===w?m[N*3+1]=W:m&&M===E&&(m[N*3+2]=W),g&&M===Q?g[N*4+3]=W:g&&M===T?g[N*4+0]=W:g&&M===j?g[N*4+1]=W:g&&M===ue&&(g[N*4+2]=W),p&&M===ee&&(p[N]=W),B&&v){const ae=1+D.length/3,z=N*ae*3;M===A[0]?v[z+0]=W:M===A[1]?v[z+ae+0]=W:M===A[2]&&(v[z+2*ae+0]=W);for(let K=0;K<D.length;K+=3){const $=D[K+0],re=D[K+1],ce=D[K+2];M===$?v[z+(K/3+1)]=W:M===re?v[z+ae+(K/3+1)]=W:M===ce&&(v[z+2*ae+(K/3+1)]=W)}}}return{vertexCount:t,position:u,scale:m,rotation:g,opacity:p,sh:B&&v?{order:x,coeffs:v}:void 0}}function jh(s){const e=Hi(s),{format:t,vertexCount:a,faceCount:r,properties:i,faceProperties:n,textureFiles:o,headerByteLength:l}=e;return t==="ascii"?Np(s,e):Mp(s,e)}function Mp(s,e){const{vertexCount:t,faceCount:a,properties:r,faceProperties:i,textureFiles:n,headerByteLength:o}=e,l=new DataView(s,o),c=N=>r.find(M=>M.name===N)!=null,f=N=>r.findIndex(M=>M.name===N),d=i?.some(N=>N.name==="texcoord")||!1,h=i?.some(N=>N.name==="texnumber")||!1;i?.find(N=>N.name==="texcoord"),i?.find(N=>N.name==="texnumber");const u=new Float32Array(t*3),m=c("nx")&&c("ny")&&c("nz"),g=m?new Float32Array(t*3):new Float32Array(t*3),p=(c("red")||c("r"))&&(c("green")||c("g"))&&(c("blue")||c("b"))?new Float32Array(t*3):void 0,A=(c("u")||c("s"))&&(c("v")||c("t")),D=A||d?new Float32Array(t*2):void 0,B=new Map,v=h?new Array(a):[],x=[];let y=0;for(const N of r)x.push(y),y+=ea(N.type);let S=0;for(let N=0;N<t;N++){const M=S,O=f("x"),W=f("y"),ae=f("z");if(O<0||W<0||ae<0)throw new Error("PLY: Missing x/y/z for vertex");if(u[N*3+0]=pe(l,M+x[O],r[O].type),u[N*3+1]=pe(l,M+x[W],r[W].type),u[N*3+2]=pe(l,M+x[ae],r[ae].type),m){const z=f("nx"),K=f("ny"),$=f("nz");g[N*3+0]=pe(l,M+x[z],r[z].type),g[N*3+1]=pe(l,M+x[K],r[K].type),g[N*3+2]=pe(l,M+x[$],r[$].type)}if(p){const z=f("red")>=0?f("red"):f("r"),K=f("green")>=0?f("green"):f("g"),$=f("blue")>=0?f("blue"):f("b");if(z>=0&&K>=0&&$>=0){let re=pe(l,M+x[z],r[z].type),ce=pe(l,M+x[K],r[K].type),Ae=pe(l,M+x[$],r[$].type);(r[z].type==="uchar"||r[z].type==="uint8")&&(re/=255,ce/=255,Ae/=255),p[N*3+0]=re,p[N*3+1]=ce,p[N*3+2]=Ae}}if(D){const z=f("u")>=0?f("u"):f("s"),K=f("v")>=0?f("v"):f("t");z>=0&&K>=0&&(D[N*2+0]=pe(l,M+x[z],r[z].type),D[N*2+1]=pe(l,M+x[K],r[K].type))}S+=y}const F=[],C=[],w=[];let E=S;D&&!A&&!d&&new Array(t).fill(!1);for(let N=0;N<a;N++){let M=E,O=[],W,ae=0,z=0;if(!i||i.length===0)throw new Error("PLY: Face element must have properties");for(const $ of i)if($.name==="vertex_indices"){const re=$.type.split(" ");if(re.length!==3||re[0]!=="list")throw new Error(`PLY: Invalid vertex_indices property type: ${$.type}`);const ce=re[1],Ae=re[2];if(z=pe(l,M,ce),M+=ea(ce),z<3)throw new Error(`PLY: Face ${N} has less than 3 vertices`);const Qe=ea(Ae);O=[];for(let Ve=0;Ve<z;Ve++){const H=pe(l,M,Ae);O.push(H),M+=Qe}}else if($.name==="texcoord"){const re=$.type.split(" ");if(re.length!==3||re[0]!=="list")throw new Error(`PLY: Invalid texcoord property type: ${$.type}`);const ce=re[1],Ae=re[2],Qe=pe(l,M,ce);M+=ea(ce);const Ve=ea(Ae);W=new Float32Array(Qe);for(let H=0;H<Qe;H++)W[H]=pe(l,M,Ae),M+=Ve;B.set(N,W)}else if($.name==="texnumber")ae=pe(l,M,$.type),M+=ea($.type),v[N]=ae;else if($.type.startsWith("list ")){const re=$.type.split(" ");if(re.length===3){const ce=re[1],Ae=re[2],Qe=pe(l,M,ce);M+=ea(ce);const Ve=ea(Ae);M+=Qe*Ve}}else M+=ea($.type);E=M;const K=h?v[N]??0:0;if(z===3)F.push(O[0],O[1],O[2]),h&&C.push(K),d&&W&&W.length>=6&&w.push(W[0],1-W[1],W[2],1-W[3],W[4],1-W[5]);else for(let $=1;$<z-1;$++)F.push(O[0],O[$],O[$+1]),h&&C.push(K),d&&W&&W.length>=z*2&&w.push(W[0],1-W[1],W[$*2+0],1-W[$*2+1],W[($+1)*2+0],1-W[($+1)*2+1])}if(!m){for(let N=0;N<t*3;N++)g[N]=0;for(let N=0;N<F.length;N+=3){const M=F[N],O=F[N+1],W=F[N+2],ae=u[M*3+0],z=u[M*3+1],K=u[M*3+2],$=u[O*3+0],re=u[O*3+1],ce=u[O*3+2],Ae=u[W*3+0],Qe=u[W*3+1],Ve=u[W*3+2],H=$-ae,ie=re-z,le=ce-K,ge=Ae-ae,Ie=Qe-z,me=Ve-K,ye=ie*me-le*Ie,Se=le*ge-H*me,Me=H*Ie-ie*ge;g[M*3+0]+=ye,g[M*3+1]+=Se,g[M*3+2]+=Me,g[O*3+0]+=ye,g[O*3+1]+=Se,g[O*3+2]+=Me,g[W*3+0]+=ye,g[W*3+1]+=Se,g[W*3+2]+=Me}for(let N=0;N<t;N++){const M=g[N*3+0],O=g[N*3+1],W=g[N*3+2],ae=Math.sqrt(M*M+O*O+W*W);ae>1e-5?(g[N*3+0]=M/ae,g[N*3+1]=O/ae,g[N*3+2]=W/ae):(g[N*3+0]=0,g[N*3+1]=1,g[N*3+2]=0)}}let Q=u,T=g,j=p,ue,ee;if(d&&w.length>0){const N=F.length/3,M=new Float32Array(N*3*3),O=new Float32Array(N*3*3),W=p?new Float32Array(N*3*3):void 0;ue=new Float32Array(w);for(let z=0;z<N;z++){const K=z*3,$=F[K+0],re=F[K+1],ce=F[K+2];M[z*9+0]=u[$*3+0],M[z*9+1]=u[$*3+1],M[z*9+2]=u[$*3+2],M[z*9+3]=u[re*3+0],M[z*9+4]=u[re*3+1],M[z*9+5]=u[re*3+2],M[z*9+6]=u[ce*3+0],M[z*9+7]=u[ce*3+1],M[z*9+8]=u[ce*3+2],O[z*9+0]=g[$*3+0],O[z*9+1]=g[$*3+1],O[z*9+2]=g[$*3+2],O[z*9+3]=g[re*3+0],O[z*9+4]=g[re*3+1],O[z*9+5]=g[re*3+2],O[z*9+6]=g[ce*3+0],O[z*9+7]=g[ce*3+1],O[z*9+8]=g[ce*3+2],W&&p&&(W[z*9+0]=p[$*3+0],W[z*9+1]=p[$*3+1],W[z*9+2]=p[$*3+2],W[z*9+3]=p[re*3+0],W[z*9+4]=p[re*3+1],W[z*9+5]=p[re*3+2],W[z*9+6]=p[ce*3+0],W[z*9+7]=p[ce*3+1],W[z*9+8]=p[ce*3+2])}Q=M,T=O,j=W;const ae=new Uint32Array(N*3);for(let z=0;z<N*3;z++)ae[z]=z;ee=ae}else ee=new Uint32Array(F),ue=D;return{vertexCount:d&&w.length>0?Q.length/3:t,faceCount:a,position:Q,normal:T,color:j,uv:ue,indices:ee,textureFiles:n.length>0?n:void 0,triangleTexnumbers:C.length>0?C:void 0}}function Np(s,e){const{vertexCount:t,faceCount:a,properties:r,faceProperties:i,textureFiles:n,headerByteLength:o}=e,l=new TextDecoder("utf-8").decode(s),c=l.indexOf("end_header");if(c<0)throw new Error("PLY: Invalid PLY header");let f=c+10;for(;f<l.length&&(l[f]===" "||l[f]===`
11849
+ `||l[f]==="\r");)f++;const h=l.substring(f).split(/\s+/).filter(H=>H.length>0);let u=0;const m=H=>r.find(ie=>ie.name===H)!=null,g=H=>{if(u>=h.length)throw new Error("PLY: Unexpected end of file");const ie=h[u++];switch(H){case"char":case"uchar":case"short":case"ushort":case"int":case"uint":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return parseInt(ie);case"float":case"double":case"float32":case"float64":return parseFloat(ie);default:return parseFloat(ie)}},p=new Float32Array(t*3),A=m("nx")&&m("ny")&&m("nz"),D=A?new Float32Array(t*3):new Float32Array(t*3),B=(m("red")||m("r"))&&(m("green")||m("g"))&&(m("blue")||m("b"))?new Float32Array(t*3):void 0,v=(m("u")||m("s"))&&(m("v")||m("t")),x=i?.some(H=>H.name==="texcoord")||!1,y=v||x?new Float32Array(t*2):void 0,S=new Map,F=i?.some(H=>H.name==="texnumber")||!1,C=F?new Array(a):[],w=[],E=[],Q=[],T=H=>r.findIndex(ie=>ie.name===H),j=T("x"),ue=T("y"),ee=T("z"),N=A?T("nx"):-1,M=A?T("ny"):-1,O=A?T("nz"):-1,W=B?T("red")>=0?T("red"):T("r"):-1,ae=B?T("green")>=0?T("green"):T("g"):-1,z=B?T("blue")>=0?T("blue"):T("b"):-1,K=y&&v?T("u")>=0?T("u"):T("s"):-1,$=y&&v?T("v")>=0?T("v"):T("t"):-1;for(let H=0;H<t;H++)for(let ie=0;ie<r.length;ie++){const le=r[ie],ge=g(le.type);ie===j?p[H*3+0]=ge:ie===ue?p[H*3+1]=ge:ie===ee?p[H*3+2]=ge:ie===N?D[H*3+0]=ge:ie===M?D[H*3+1]=ge:ie===O?D[H*3+2]=ge:ie===W&&B?B[H*3+0]=le.type==="uchar"||le.type==="uint8"?ge/255:ge:ie===ae&&B?B[H*3+1]=le.type==="uchar"||le.type==="uint8"?ge/255:ge:ie===z&&B?B[H*3+2]=le.type==="uchar"||le.type==="uint8"?ge/255:ge:ie===K&&y?y[H*2+0]=ge:ie===$&&y&&(y[H*2+1]=ge)}for(let H=0;H<a;H++){let ie=[],le,ge=0;for(const ye of i||[])if(ye.name==="vertex_indices"){const Se=ye.type.split(" "),Me=Se[1],Ze=Se[2],$e=g(Me);ie=[];for(let ft=0;ft<$e;ft++)ie.push(g(Ze))}else if(ye.name==="texcoord"){const Se=ye.type.split(" "),Me=Se[1],Ze=Se[2],$e=g(Me);le=new Float32Array($e);for(let ft=0;ft<$e;ft++)le[ft]=g(Ze);S.set(H,le)}else ye.name==="texnumber"&&(ge=g(ye.type),C[H]=ge);const Ie=ie.length,me=F?C[H]??0:0;if(Ie===3)w.push(ie[0],ie[1],ie[2]),F&&E.push(me),x&&le&&le.length>=6&&Q.push(le[0],1-le[1],le[2],1-le[3],le[4],1-le[5]);else for(let ye=1;ye<Ie-1;ye++)w.push(ie[0],ie[ye],ie[ye+1]),F&&E.push(me),x&&le&&le.length>=Ie*2&&Q.push(le[0],1-le[1],le[ye*2+0],1-le[ye*2+1],le[(ye+1)*2+0],1-le[(ye+1)*2+1])}if(!A){for(let H=0;H<t*3;H++)D[H]=0;for(let H=0;H<w.length;H+=3){const ie=w[H],le=w[H+1],ge=w[H+2],Ie=p[ie*3+0],me=p[ie*3+1],ye=p[ie*3+2],Se=p[le*3+0],Me=p[le*3+1],Ze=p[le*3+2],$e=p[ge*3+0],ft=p[ge*3+1],Za=p[ge*3+2],ga=Se-Ie,Qa=Me-me,Ht=Ze-ye,Ta=$e-Ie,Ma=ft-me,Vt=Za-ye,pa=Qa*Vt-Ht*Ma,ma=Ht*Ta-ga*Vt,ia=ga*Ma-Qa*Ta;D[ie*3+0]+=pa,D[ie*3+1]+=ma,D[ie*3+2]+=ia,D[le*3+0]+=pa,D[le*3+1]+=ma,D[le*3+2]+=ia,D[ge*3+0]+=pa,D[ge*3+1]+=ma,D[ge*3+2]+=ia}for(let H=0;H<t;H++){const ie=D[H*3+0],le=D[H*3+1],ge=D[H*3+2],Ie=Math.sqrt(ie*ie+le*le+ge*ge);Ie>1e-5?(D[H*3+0]=ie/Ie,D[H*3+1]=le/Ie,D[H*3+2]=ge/Ie):(D[H*3+0]=0,D[H*3+1]=1,D[H*3+2]=0)}}let re=p,ce=D,Ae=B,Qe,Ve;if(x&&Q.length>0){const H=w.length/3,ie=new Float32Array(H*3*3),le=new Float32Array(H*3*3),ge=B?new Float32Array(H*3*3):void 0;Qe=new Float32Array(Q);for(let me=0;me<H;me++){const ye=me*3,Se=w[ye+0],Me=w[ye+1],Ze=w[ye+2];ie[me*9+0]=p[Se*3+0],ie[me*9+1]=p[Se*3+1],ie[me*9+2]=p[Se*3+2],ie[me*9+3]=p[Me*3+0],ie[me*9+4]=p[Me*3+1],ie[me*9+5]=p[Me*3+2],ie[me*9+6]=p[Ze*3+0],ie[me*9+7]=p[Ze*3+1],ie[me*9+8]=p[Ze*3+2],le[me*9+0]=D[Se*3+0],le[me*9+1]=D[Se*3+1],le[me*9+2]=D[Se*3+2],le[me*9+3]=D[Me*3+0],le[me*9+4]=D[Me*3+1],le[me*9+5]=D[Me*3+2],le[me*9+6]=D[Ze*3+0],le[me*9+7]=D[Ze*3+1],le[me*9+8]=D[Ze*3+2],ge&&B&&(ge[me*9+0]=B[Se*3+0],ge[me*9+1]=B[Se*3+1],ge[me*9+2]=B[Se*3+2],ge[me*9+3]=B[Me*3+0],ge[me*9+4]=B[Me*3+1],ge[me*9+5]=B[Me*3+2],ge[me*9+6]=B[Ze*3+0],ge[me*9+7]=B[Ze*3+1],ge[me*9+8]=B[Ze*3+2])}re=ie,ce=le,Ae=ge;const Ie=new Uint32Array(H*3);for(let me=0;me<H*3;me++)Ie[me]=me;Ve=Ie}else Ve=new Uint32Array(w),Qe=y;return{vertexCount:x&&Q.length>0?re.length/3:t,faceCount:a,position:re,normal:ce,color:Ae,uv:Qe,indices:Ve,textureFiles:n.length>0?n:void 0,triangleTexnumbers:E.length>0?E:void 0}}function Zh(s){const e=Hi(s),{format:t}=e;return t==="ascii"?Vp(s,e):Pp(s,e)}function Pp(s,e){const{vertexCount:t,properties:a,headerByteLength:r}=e,i=new DataView(s,r),n=g=>a.find(p=>p.name===g)!=null,o=g=>a.findIndex(p=>p.name===g),l=new Float32Array(t*3),c=(n("red")||n("r"))&&(n("green")||n("g"))&&(n("blue")||n("b")),f=n("alpha")||n("a"),d=c?new Uint8Array(t*4):void 0,h=[];let u=0;for(const g of a)h.push(u),u+=ea(g.type);let m=0;for(let g=0;g<t;g++){const p=m,A=o("x"),D=o("y"),B=o("z");if(A<0||D<0||B<0)throw new Error("PLY: Missing x/y/z for vertex");if(l[g*3+0]=pe(i,p+h[A],a[A].type),l[g*3+1]=pe(i,p+h[D],a[D].type),l[g*3+2]=pe(i,p+h[B],a[B].type),d){const v=o("red")>=0?o("red"):o("r"),x=o("green")>=0?o("green"):o("g"),y=o("blue")>=0?o("blue"):o("b"),S=f?o("alpha")>=0?o("alpha"):o("a"):-1;if(v>=0&&x>=0&&y>=0){let F=pe(i,p+h[v],a[v].type),C=pe(i,p+h[x],a[x].type),w=pe(i,p+h[y],a[y].type),E=255;(a[v].type==="float"||a[v].type==="float32"||a[v].type==="double"||a[v].type==="float64")&&(F=Math.round(F*255),C=Math.round(C*255),w=Math.round(w*255)),S>=0&&(E=pe(i,p+h[S],a[S].type),(a[S].type==="float"||a[S].type==="float32"||a[S].type==="double"||a[S].type==="float64")&&(E=Math.round(E*255))),d[g*4+0]=Math.max(0,Math.min(255,F)),d[g*4+1]=Math.max(0,Math.min(255,C)),d[g*4+2]=Math.max(0,Math.min(255,w)),d[g*4+3]=Math.max(0,Math.min(255,E))}}m+=u}return{vertexCount:t,position:l,color:d}}function Vp(s,e){const{vertexCount:t,properties:a}=e,r=new TextDecoder("utf-8").decode(s),i=r.indexOf("end_header");if(i<0)throw new Error("PLY: Invalid PLY header");let n=i+10;for(;n<r.length&&(r[n]===" "||r[n]===`
11850
+ `||r[n]==="\r");)n++;const l=r.substring(n).split(/\s+/).filter(F=>F.length>0);let c=0;const f=F=>a.find(C=>C.name===F)!=null,d=F=>{if(c>=l.length)throw new Error("PLY: Unexpected end of file");const C=l[c++];switch(F){case"char":case"uchar":case"short":case"ushort":case"int":case"uint":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return parseInt(C);case"float":case"double":case"float32":case"float64":return parseFloat(C);default:return parseFloat(C)}},h=new Float32Array(t*3),u=(f("red")||f("r"))&&(f("green")||f("g"))&&(f("blue")||f("b")),m=f("alpha")||f("a"),g=u?new Uint8Array(t*4):void 0,p=F=>a.findIndex(C=>C.name===F),A=p("x"),D=p("y"),B=p("z"),v=u?p("red")>=0?p("red"):p("r"):-1,x=u?p("green")>=0?p("green"):p("g"):-1,y=u?p("blue")>=0?p("blue"):p("b"):-1,S=m?p("alpha")>=0?p("alpha"):p("a"):-1;for(let F=0;F<t;F++){for(let C=0;C<a.length;C++){const w=a[C],E=d(w.type);if(C===A)h[F*3+0]=E;else if(C===D)h[F*3+1]=E;else if(C===B)h[F*3+2]=E;else if(C===v&&g){const Q=w.type==="uchar"||w.type==="uint8"?E:Math.round(E*255);g[F*4+0]=Math.max(0,Math.min(255,Q))}else if(C===x&&g){const Q=w.type==="uchar"||w.type==="uint8"?E:Math.round(E*255);g[F*4+1]=Math.max(0,Math.min(255,Q))}else if(C===y&&g){const Q=w.type==="uchar"||w.type==="uint8"?E:Math.round(E*255);g[F*4+2]=Math.max(0,Math.min(255,Q))}else if(C===S&&g){const Q=w.type==="uchar"||w.type==="uint8"?E:Math.round(E*255);g[F*4+3]=Math.max(0,Math.min(255,Q))}}g&&S<0&&(g[F*4+3]=255)}return{vertexCount:t,position:h,color:g}}class Yh{_header=null;_headerBuffer=new Uint8Array(4096);_headerLength=0;_headerParsed=!1;_dataBuffer=null;_dataOffset=0;_processedVertices=0;_vertexStride=0;_propOffsets=[];_properties=[];_onHeaderParsed=null;_onSplatParsed=null;_batchSize=1e3;_cancelled=!1;_parseTimeoutId=null;_verticesPerChunk=1e7;_useIdleCallback=typeof requestIdleCallback<"u";constructor(e,t,a=1e3){this._onHeaderParsed=e,this._onSplatParsed=t,this._batchSize=a}processChunk(e){this._cancelled||(this._headerParsed?this._processDataChunk(e):this._processHeaderChunk(e))}cancel(){this._cancelled=!0,this._parseTimeoutId!==null&&(this._useIdleCallback?cancelIdleCallback(this._parseTimeoutId):clearTimeout(this._parseTimeoutId),this._parseTimeoutId=null)}isCancelled(){return this._cancelled}_processHeaderChunk(e){const t=this._headerLength+e.length;if(t>this._headerBuffer.length){const i=new Uint8Array(Math.max(t,this._headerBuffer.length*2));i.set(this._headerBuffer.subarray(0,this._headerLength)),this._headerBuffer=i}this._headerBuffer.set(e,this._headerLength),this._headerLength+=e.length;const r=new TextDecoder("utf-8").decode(this._headerBuffer.subarray(0,this._headerLength)).indexOf(`end_header
11851
11851
  `);if(r>=0){const i=r+11,n=this._headerBuffer.subarray(0,i),o=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),l=this._parseHeader(o);this._header=l,this._headerParsed=!0,this._initializeDataParsing(l),this._onHeaderParsed&&this._onHeaderParsed(l);const c=this._headerLength-e.length,f=i-c;if(f>0&&f<e.length){const d=e.subarray(f);this._processDataChunk(d)}else f===0&&this._processDataChunk(e)}}_parseHeader(e){const t=new TextDecoder("utf-8").decode(new Uint8Array(e)),a=t.indexOf(`end_header
11852
- `);if(a<0)throw new Error("PLY: Invalid PLY header");const r=t.substring(0,a+11),i=r.split(/\r?\n/);let n="",o=0,l=0;const c=[],f=[],d=[];let h=!1,u=!1;for(const A of i)if(A.startsWith("format "))n=A.split(/\s+/)[1];else if(A.startsWith("comment TextureFile ")){const D=A.substring(20).trim();D&&d.push(D)}else if(A.startsWith("element ")){const D=A.split(/\s+/);h=D[1]==="vertex",u=D[1]==="face",h&&(o=parseInt(D[2]),u=!1),u&&(l=parseInt(D[2]),h=!1)}else if(h&&A.startsWith("property ")){const D=A.split(/\s+/),B=D[1],v=D[2];c.push({name:v,type:B})}else if(u&&A.startsWith("property ")){const D=A.split(/\s+/);if(D[1]==="list"){const B=D[2],v=D[3],U=D[4];f.push({name:U,type:`list ${B} ${v}`})}else{const B=D[1],v=D[2];f.push({name:v,type:B})}}if(n!=="binary_little_endian"&&n!=="ascii")throw new Error(`PLY: Unsupported format: ${n}`);let m=0,g=0;for(const A of c)Xi.includes(A.name)&&m++,Yo.includes(A.name)&&g++;let p;return l>0?p=Ca.Mesh:m===Xi.length&&g===3?p=Ca.Splat:p=Ca.PointCloud,{format:n,vertexCount:o,faceCount:l,properties:c,faceProperties:f.length>0?f:void 0,textureFiles:d,headerByteLength:r.length,mode:p}}_initializeDataParsing(e){this._properties=e.properties,this._propOffsets=[],this._vertexStride=0;for(const a of this._properties)this._propOffsets.push(this._vertexStride),this._vertexStride+=ea(a.type);const t=e.vertexCount*this._vertexStride;this._dataBuffer=new Uint8Array(Math.min(t,1024*1024*10)),this._dataOffset=0,this._processedVertices=0}_processDataChunk(e){if(!this._header||!this._dataBuffer)return;const t=this._dataOffset+e.length;if(t>this._dataBuffer.length){const a=Math.max(t,this._dataBuffer.length*2),r=new Uint8Array(a);r.set(this._dataBuffer),this._dataBuffer=r}this._dataBuffer.set(e,this._dataOffset),this._dataOffset+=e.length,this._parseVertices()}_parseVertices(){if(!this._header||!this._dataBuffer)return;const e=new DataView(this._dataBuffer.buffer,this._dataBuffer.byteOffset,this._dataBuffer.byteLength),t=this._header.vertexCount,a=i=>this._properties.find(n=>n.name===i)!=null,r=i=>this._properties.findIndex(n=>n.name===i);for(;this._processedVertices<t&&!this._cancelled;){const i=this._processedVertices,n=i*this._vertexStride;if(n+this._vertexStride>this._dataOffset||this._cancelled)break;const o=r("x"),l=r("y"),c=r("z");if(o<0||l<0||c<0)throw new Error("PLY: Missing required x/y/z properties for vertex");const f={position:[pe(e,n+this._propOffsets[o],this._properties[o].type),pe(e,n+this._propOffsets[l],this._properties[l].type),pe(e,n+this._propOffsets[c],this._properties[c].type)]};if(a("scale_0")&&(f.scale=[pe(e,n+this._propOffsets[r("scale_0")],this._properties[r("scale_0")].type),pe(e,n+this._propOffsets[r("scale_1")],this._properties[r("scale_1")].type),pe(e,n+this._propOffsets[r("scale_2")],this._properties[r("scale_2")].type)]),a("rot_0")){const h=pe(e,n+this._propOffsets[r("rot_0")],this._properties[r("rot_0")].type),u=pe(e,n+this._propOffsets[r("rot_1")],this._properties[r("rot_1")].type),m=pe(e,n+this._propOffsets[r("rot_2")],this._properties[r("rot_2")].type),g=pe(e,n+this._propOffsets[r("rot_3")],this._properties[r("rot_3")].type);f.rotation=[u,m,g,h]}a("opacity")&&(f.opacity=pe(e,n+this._propOffsets[r("opacity")],this._properties[r("opacity")].type));const d=[r("f_dc_0"),r("f_dc_1"),r("f_dc_2")];if(d[0]>=0&&d[1]>=0&&d[2]>=0){const h=[];for(let D=0;D<this._properties.length;D++)this._properties[D].name.startsWith("f_rest_")&&h.push(D);const u=1+h.length/3,m=new Float32Array(u*3);m[0]=pe(e,n+this._propOffsets[d[0]],this._properties[d[0]].type),m[u+0]=pe(e,n+this._propOffsets[d[1]],this._properties[d[1]].type),m[2*u+0]=pe(e,n+this._propOffsets[d[2]],this._properties[d[2]].type);let g=1,p=1,A=1;for(let D=0;D<h.length;D+=3){const B=h[D+0],v=h[D+1],U=h[D+2];m[g]=pe(e,n+this._propOffsets[B],this._properties[B].type),m[u+p]=pe(e,n+this._propOffsets[v],this._properties[v].type),m[2*u+A]=pe(e,n+this._propOffsets[U],this._properties[U].type),g++,p++,A++}f.sh={order:Math.floor(Math.sqrt(u)),coeffs:m}}if(this._onSplatParsed&&this._onSplatParsed(f,i),this._processedVertices++,this._processedVertices%this._batchSize===0){setTimeout(()=>{this._parseVertices()},0);return}}}getProgress(){const e=this._header?.vertexCount||0;return{processed:this._processedVertices,total:e,percentage:e>0?this._processedVertices/e*100:0}}}class Op extends it{static format=je.BIN;async parseBuffer(e){const t=Jh(e);let a;switch(t){case Di.PLY:{const r=Ho(e);a={count:r.vertexCount,position:r.position,rotation:r.rotation,scale:r.scale,opacity:r.opacity,sh:r.sh},a.bbox=Zo(r.position);break}case Di.SPLAT:throw new Error("SPLAT format is not yet supported");case Di.KSPLAT:throw new Error("KSPLAT format is not yet supported");case Di.UNKNOWN:default:throw new Error("Unknown or unsupported Gaussian Splatting file format")}return this.data=a,a}verification(){return!!this.data&&this.data.count>0}}class Lp extends it{static format=je.BIN;_streamParser=null;_streamingRenderer=null;_rendererObject=null;_chunksPerBatch=1e3;_headerParsed=!1;_onHeaderParsed=null;_cancelled=!1;async initStream(e,t){this._onHeaderParsed=t||null,this._rendererObject=new ne,this._rendererObject.name="StreamingGaussianSplat",this._streamingRenderer=this._rendererObject.addComponent(_r),this._streamParser=new Yh(a=>{this._streamingRenderer&&this._streamingRenderer.initCount(a.vertexCount),this._rendererObject&&(this.data=this._rendererObject),this._headerParsed=!0,this._onHeaderParsed&&this._onHeaderParsed()},(a,r)=>{this._streamingRenderer&&this._streamingRenderer.setSplatData(r,a)},this._chunksPerBatch)}async processChunk(e,t,a){this._cancelled||!this._streamParser||this._streamParser.processChunk(e)}cancel(){this._cancelled=!0,this._streamParser&&this._streamParser.cancel()}isCancelled(){return this._cancelled}async finalizeStream(){this._rendererObject&&(this.data=this._rendererObject)}getProgress(){return this._streamParser?this._streamParser.getProgress():{processed:0,total:0,percentage:0}}verification(){return this._headerParsed&&!!this.data&&!!this._streamingRenderer}}var Xs=(s=>(s.Point="Point",s.LineString="LineString",s.MultiPolygon="MultiPolygon",s))(Xs||{});class Gp extends it{static format=je.JSON;json;async parseString(e){this.json=e,this.data=JSON.parse(e)}}class zp{static getPath(e){let t=[];for(let a=0;a<e.features.length;a++){const r=e.features[a];switch(r.geometry.type){case Xs.LineString:break;case Xs.MultiPolygon:let i=[];for(let n=0;n<r.geometry.coordinates.length;n++){const o=r.geometry.coordinates[n];for(const l of o)for(const c of l){let f=new b(c[0],0,c[1]);i.push(f)}}t.push(i);break}}return t}}class Wp{name;defines;doubleSided;baseColorFactor;emissiveFactor;metallicFactor;roughnessFactor;alphaCutoff;enableBlend;baseColorTexture;metallicRoughnessTexture;normalTexture;occlusionTexture;emissiveTexture;extensions;baseMapOffsetSize;normalMapOffsetSize;emissiveMapOffsetSize;roughnessMapOffsetSize;metallicMapOffsetSize;aoMapOffsetSize}class Jp{}class jp{}class jt{static chunk(e,t){const a=[];let r=0;for(;r<e.length;)a.push(e.slice(r,r+t)),r+=t;return a}static removeComment(e){return e.split(`
11852
+ `);if(a<0)throw new Error("PLY: Invalid PLY header");const r=t.substring(0,a+11),i=r.split(/\r?\n/);let n="",o=0,l=0;const c=[],f=[],d=[];let h=!1,u=!1;for(const A of i)if(A.startsWith("format "))n=A.split(/\s+/)[1];else if(A.startsWith("comment TextureFile ")){const D=A.substring(20).trim();D&&d.push(D)}else if(A.startsWith("element ")){const D=A.split(/\s+/);h=D[1]==="vertex",u=D[1]==="face",h&&(o=parseInt(D[2]),u=!1),u&&(l=parseInt(D[2]),h=!1)}else if(h&&A.startsWith("property ")){const D=A.split(/\s+/),B=D[1],v=D[2];c.push({name:v,type:B})}else if(u&&A.startsWith("property ")){const D=A.split(/\s+/);if(D[1]==="list"){const B=D[2],v=D[3],x=D[4];f.push({name:x,type:`list ${B} ${v}`})}else{const B=D[1],v=D[2];f.push({name:v,type:B})}}if(n!=="binary_little_endian"&&n!=="ascii")throw new Error(`PLY: Unsupported format: ${n}`);let m=0,g=0;for(const A of c)Xi.includes(A.name)&&m++,Yo.includes(A.name)&&g++;let p;return l>0?p=Ca.Mesh:m===Xi.length&&g===3?p=Ca.Splat:p=Ca.PointCloud,{format:n,vertexCount:o,faceCount:l,properties:c,faceProperties:f.length>0?f:void 0,textureFiles:d,headerByteLength:r.length,mode:p}}_initializeDataParsing(e){this._properties=e.properties,this._propOffsets=[],this._vertexStride=0;for(const a of this._properties)this._propOffsets.push(this._vertexStride),this._vertexStride+=ea(a.type);const t=e.vertexCount*this._vertexStride;this._dataBuffer=new Uint8Array(Math.min(t,1024*1024*10)),this._dataOffset=0,this._processedVertices=0}_processDataChunk(e){if(!this._header||!this._dataBuffer)return;const t=this._dataOffset+e.length;if(t>this._dataBuffer.length){const a=Math.max(t,this._dataBuffer.length*2),r=new Uint8Array(a);r.set(this._dataBuffer),this._dataBuffer=r}this._dataBuffer.set(e,this._dataOffset),this._dataOffset+=e.length,this._parseVertices()}_parseVertices(){!this._header||!this._dataBuffer||this._parseTimeoutId===null&&this._parseVerticesChunk()}_parseVerticesChunk(){if(!this._header||!this._dataBuffer||this._cancelled){this._parseTimeoutId=null;return}const e=new DataView(this._dataBuffer.buffer,this._dataBuffer.byteOffset,this._dataBuffer.byteLength),t=this._header.vertexCount,a=l=>this._properties.find(c=>c.name===l)!=null,r=l=>this._properties.findIndex(c=>c.name===l),i=performance.now(),n=5;let o=0;for(;this._processedVertices<t&&!this._cancelled;){const l=this._processedVertices,c=l*this._vertexStride;if(c+this._vertexStride>this._dataOffset){this._parseTimeoutId=null;return}const f=r("x"),d=r("y"),h=r("z");if(f<0||d<0||h<0)throw new Error("PLY: Missing required x/y/z properties for vertex");const u={position:[pe(e,c+this._propOffsets[f],this._properties[f].type),pe(e,c+this._propOffsets[d],this._properties[d].type),pe(e,c+this._propOffsets[h],this._properties[h].type)]};if(a("scale_0")&&(u.scale=[pe(e,c+this._propOffsets[r("scale_0")],this._properties[r("scale_0")].type),pe(e,c+this._propOffsets[r("scale_1")],this._properties[r("scale_1")].type),pe(e,c+this._propOffsets[r("scale_2")],this._properties[r("scale_2")].type)]),a("rot_0")){const g=pe(e,c+this._propOffsets[r("rot_0")],this._properties[r("rot_0")].type),p=pe(e,c+this._propOffsets[r("rot_1")],this._properties[r("rot_1")].type),A=pe(e,c+this._propOffsets[r("rot_2")],this._properties[r("rot_2")].type),D=pe(e,c+this._propOffsets[r("rot_3")],this._properties[r("rot_3")].type);u.rotation=[p,A,D,g]}a("opacity")&&(u.opacity=pe(e,c+this._propOffsets[r("opacity")],this._properties[r("opacity")].type));const m=[r("f_dc_0"),r("f_dc_1"),r("f_dc_2")];if(m[0]>=0&&m[1]>=0&&m[2]>=0){const g=[];for(let x=0;x<this._properties.length;x++)this._properties[x].name.startsWith("f_rest_")&&g.push(x);const p=1+g.length/3,A=new Float32Array(p*3);A[0]=pe(e,c+this._propOffsets[m[0]],this._properties[m[0]].type),A[p+0]=pe(e,c+this._propOffsets[m[1]],this._properties[m[1]].type),A[2*p+0]=pe(e,c+this._propOffsets[m[2]],this._properties[m[2]].type);let D=1,B=1,v=1;for(let x=0;x<g.length;x+=3){const y=g[x+0],S=g[x+1],F=g[x+2];A[D]=pe(e,c+this._propOffsets[y],this._properties[y].type),A[p+B]=pe(e,c+this._propOffsets[S],this._properties[S].type),A[2*p+v]=pe(e,c+this._propOffsets[F],this._properties[F].type),D++,B++,v++}u.sh={order:Math.floor(Math.sqrt(p)),coeffs:A}}if(this._onSplatParsed&&this._onSplatParsed(u,l),this._processedVertices++,o++,this._processedVertices%this._batchSize===0){this._scheduleNextChunk();return}if(o>=this._verticesPerChunk){if(performance.now()-i>n){this._scheduleNextChunk();return}o=0}}this._parseTimeoutId=null}_scheduleNextChunk(){if(this._cancelled){this._parseTimeoutId=null;return}this._useIdleCallback?this._parseTimeoutId=requestIdleCallback(e=>{this._parseTimeoutId=null,!this._cancelled&&e.timeRemaining()>0?this._parseVerticesChunk():this._cancelled||(this._parseTimeoutId=setTimeout(()=>{this._parseTimeoutId=null,this._parseVerticesChunk()},0))},{timeout:100}):this._parseTimeoutId=setTimeout(()=>{this._parseTimeoutId=null,this._parseVerticesChunk()},0)}getProgress(){const e=this._header?.vertexCount||0;return{processed:this._processedVertices,total:e,percentage:e>0?this._processedVertices/e*100:0}}}class Op extends it{static format=je.BIN;async parseBuffer(e){const t=Jh(e);let a;switch(t){case Di.PLY:{const r=Ho(e);a={count:r.vertexCount,position:r.position,rotation:r.rotation,scale:r.scale,opacity:r.opacity,sh:r.sh},a.bbox=Zo(r.position);break}case Di.SPLAT:throw new Error("SPLAT format is not yet supported");case Di.KSPLAT:throw new Error("KSPLAT format is not yet supported");case Di.UNKNOWN:default:throw new Error("Unknown or unsupported Gaussian Splatting file format")}return this.data=a,a}verification(){return!!this.data&&this.data.count>0}}class Lp extends it{static format=je.BIN;_streamParser=null;_streamingRenderer=null;_rendererObject=null;_chunksPerBatch=1e3;_headerParsed=!1;_onHeaderParsed=null;_cancelled=!1;async initStream(e,t){this._onHeaderParsed=t||null,this._rendererObject=new ne,this._rendererObject.name="StreamingGaussianSplat",this._streamingRenderer=this._rendererObject.addComponent(_r),this._streamParser=new Yh(a=>{this._streamingRenderer&&this._streamingRenderer.initCount(a.vertexCount),this._rendererObject&&(this.data=this._rendererObject),this._headerParsed=!0,this._onHeaderParsed&&this._onHeaderParsed()},(a,r)=>{this._streamingRenderer&&this._streamingRenderer.setSplatData(r,a)},this._chunksPerBatch)}async processChunk(e,t,a){this._cancelled||!this._streamParser||this._streamParser.processChunk(e)}cancel(){this._cancelled=!0,this._streamParser&&this._streamParser.cancel()}isCancelled(){return this._cancelled}async finalizeStream(){this._rendererObject&&(this.data=this._rendererObject)}getProgress(){return this._streamParser?this._streamParser.getProgress():{processed:0,total:0,percentage:0}}verification(){return this._headerParsed&&!!this.data&&!!this._streamingRenderer}}var Xs=(s=>(s.Point="Point",s.LineString="LineString",s.MultiPolygon="MultiPolygon",s))(Xs||{});class Gp extends it{static format=je.JSON;json;async parseString(e){this.json=e,this.data=JSON.parse(e)}}class zp{static getPath(e){let t=[];for(let a=0;a<e.features.length;a++){const r=e.features[a];switch(r.geometry.type){case Xs.LineString:break;case Xs.MultiPolygon:let i=[];for(let n=0;n<r.geometry.coordinates.length;n++){const o=r.geometry.coordinates[n];for(const l of o)for(const c of l){let f=new b(c[0],0,c[1]);i.push(f)}}t.push(i);break}}return t}}class Wp{name;defines;doubleSided;baseColorFactor;emissiveFactor;metallicFactor;roughnessFactor;alphaCutoff;enableBlend;baseColorTexture;metallicRoughnessTexture;normalTexture;occlusionTexture;emissiveTexture;extensions;baseMapOffsetSize;normalMapOffsetSize;emissiveMapOffsetSize;roughnessMapOffsetSize;metallicMapOffsetSize;aoMapOffsetSize}class Jp{}class jp{}class jt{static chunk(e,t){const a=[];let r=0;for(;r<e.length;)a.push(e.slice(r,r+t)),r+=t;return a}static removeComment(e){return e.split(`
11853
11853
  `).filter(t=>t.trim().charAt(0)!=="#").join(`
11854
- `)}static convertToValue(e){return+e||/^0|0$/.test(e)?+e:e}static parseSection(e,t){const a=new RegExp(`~${t}(?:\\w*\\s*)*\\n\\s*`,"i"),r=e.split(a);return r.length>1?r[1].split(/~/)[0]:""}static parseParameterLine(e){const t=e.trim();if(!t)return{mnemonic:"",unit:"",value:"",description:""};const a=t.indexOf(":"),r=a>=0?t.substring(0,a).trim():t,i=a>=0?t.substring(a+1).trim():"none",n=r.split(/\s{2,}|\s+/),o=n[0]||"",l=o.indexOf(".");let c="",f="none";l>=0?(c=o.substring(0,l).trim(),f=o.substring(l+1).trim()||"none"):c=o.trim();const d=n.length>1?n[n.length-1].trim():"";return{mnemonic:c.toUpperCase(),unit:f,value:d,description:i||"none"}}}class Xh{async parse(e){if(e instanceof ArrayBuffer){const t=new DataView(e);if(ci(t)==="LASF")return await this.parseBinary(e);{const i=new TextDecoder("utf-8",{fatal:!1}).decode(e);return await this.parseText(i)}}else return await this.parseText(e)}async parseText(e){const t=this.parseMetadata(e),a=this.parseWellParams(e),r=this.parseCurveParams(e),i=this.parseHeaders(e),n=a.NULL?.value,o=typeof n=="string"?+n:n,l=this.parseData(e,i,o||-999.25);return{headers:i,data:l,wellParams:a,curveParams:r,metadata:t,nullValue:o||-999.25}}async parseBinary(e){const t=new DataView(e),a=ci(t);if(a!=="LASF")throw new Error(`LASLoader: Invalid binary LAS file, expected 'LASF' magic bytes, got '${a}'`);const r=t.getUint8(24),n=t.getUint8(25)+r/10,o=t.getUint8(104),l=t.getUint32(107,!0),c=t.getFloat64(131,!0),f=t.getFloat64(139,!0),d=t.getFloat64(147,!0),h=t.getFloat64(155,!0),u=t.getFloat64(163,!0),m=t.getFloat64(171,!0),g=t.getFloat64(187,!0),p=t.getFloat64(195,!0),A=t.getFloat64(203,!0),D=t.getFloat64(211,!0),B=t.getFloat64(219,!0),v=t.getFloat64(227,!0),U=t.getUint32(96,!0),y=t.getUint32(100,!0);let S=U;for(let T=0;T<y;T++){const j=t.getUint16(S+54,!0);S+=54+j}const C=[20,28,26,34,57,63,30,36,38,59,67][o]||20;if(o>10)throw new Error(`LASLoader: Unsupported point data format ${o}`);const w=new Float32Array(l*3),E=new Uint8Array(l*4);let Q=S;for(let T=0;T<l;T++){const j=Q+T*C;let ue,ee,N;o>=6?(ue=Number(t.getBigInt64(j,!0)),ee=Number(t.getBigInt64(j+8,!0)),N=Number(t.getBigInt64(j+16,!0))):(ue=t.getInt32(j,!0),ee=t.getInt32(j+4,!0),N=t.getInt32(j+8,!0));const M=ue*c+h,O=ee*f+u,W=N*d+m;w[T*3+0]=M,w[T*3+1]=O,w[T*3+2]=W;let ae;o>=6?ae=j+24:ae=j+12;const z=t.getUint16(ae,!0);if([2,3,5,7,8,9,10].includes(o)){let K;const $=j+C;if(o===5?K=j+28:o===10?K=j+59:K=$-6,K>=j&&K+6<=$&&K+6<=e.byteLength)try{const re=t.getUint16(K,!0),ce=t.getUint16(K+2,!0),Ae=t.getUint16(K+4,!0);E[T*4+0]=re<256?re:re>>8,E[T*4+1]=ce<256?ce:ce>>8,E[T*4+2]=Ae<256?Ae:Ae>>8,E[T*4+3]=255}catch(re){console.warn(`LASLoader: Failed to read RGB at offset ${K} (format ${o}, record length ${C}), using intensity instead. Error: ${re}`);const ce=Math.min(z/65535,1);E[T*4+0]=Math.floor(ce*255),E[T*4+1]=Math.floor(ce*255),E[T*4+2]=Math.floor(ce*255),E[T*4+3]=255}else{console.warn(`LASLoader: RGB offset ${K} out of bounds (offset: ${j}, record end: ${$}, buffer size: ${e.byteLength}, format: ${o}), using intensity instead`);const re=Math.min(z/65535,1);E[T*4+0]=Math.floor(re*255),E[T*4+1]=Math.floor(re*255),E[T*4+2]=Math.floor(re*255),E[T*4+3]=255}}else{const K=Math.min(z/65535,1);E[T*4+0]=Math.floor(K*255),E[T*4+1]=Math.floor(K*255),E[T*4+2]=Math.floor(K*255),E[T*4+3]=255}}return{format:"binary",version:n,pointDataFormat:o,numPoints:l,positions:w,colors:E,bbox:{xMin:g,xMax:p,yMin:A,yMax:D,zMin:B,zMax:v},scale:{x:c,y:f,z:d},offset:{x:h,y:u,z:m}}}parseMetadata(e){const t=jt.parseSection(e,"V");if(!t)throw new Error("LASLoader: ~VERSION section not found");const r=jt.removeComment(t).split(`
11854
+ `)}static convertToValue(e){return+e||/^0|0$/.test(e)?+e:e}static parseSection(e,t){const a=new RegExp(`~${t}(?:\\w*\\s*)*\\n\\s*`,"i"),r=e.split(a);return r.length>1?r[1].split(/~/)[0]:""}static parseParameterLine(e){const t=e.trim();if(!t)return{mnemonic:"",unit:"",value:"",description:""};const a=t.indexOf(":"),r=a>=0?t.substring(0,a).trim():t,i=a>=0?t.substring(a+1).trim():"none",n=r.split(/\s{2,}|\s+/),o=n[0]||"",l=o.indexOf(".");let c="",f="none";l>=0?(c=o.substring(0,l).trim(),f=o.substring(l+1).trim()||"none"):c=o.trim();const d=n.length>1?n[n.length-1].trim():"";return{mnemonic:c.toUpperCase(),unit:f,value:d,description:i||"none"}}}class Xh{async parse(e){if(e instanceof ArrayBuffer){const t=new DataView(e);if(ci(t)==="LASF")return await this.parseBinary(e);{const i=new TextDecoder("utf-8",{fatal:!1}).decode(e);return await this.parseText(i)}}else return await this.parseText(e)}async parseText(e){const t=this.parseMetadata(e),a=this.parseWellParams(e),r=this.parseCurveParams(e),i=this.parseHeaders(e),n=a.NULL?.value,o=typeof n=="string"?+n:n,l=this.parseData(e,i,o||-999.25);return{headers:i,data:l,wellParams:a,curveParams:r,metadata:t,nullValue:o||-999.25}}async parseBinary(e){const t=new DataView(e),a=ci(t);if(a!=="LASF")throw new Error(`LASLoader: Invalid binary LAS file, expected 'LASF' magic bytes, got '${a}'`);const r=t.getUint8(24),n=t.getUint8(25)+r/10,o=t.getUint8(104),l=t.getUint32(107,!0),c=t.getFloat64(131,!0),f=t.getFloat64(139,!0),d=t.getFloat64(147,!0),h=t.getFloat64(155,!0),u=t.getFloat64(163,!0),m=t.getFloat64(171,!0),g=t.getFloat64(187,!0),p=t.getFloat64(195,!0),A=t.getFloat64(203,!0),D=t.getFloat64(211,!0),B=t.getFloat64(219,!0),v=t.getFloat64(227,!0),x=t.getUint32(96,!0),y=t.getUint32(100,!0);let S=x;for(let T=0;T<y;T++){const j=t.getUint16(S+54,!0);S+=54+j}const C=[20,28,26,34,57,63,30,36,38,59,67][o]||20;if(o>10)throw new Error(`LASLoader: Unsupported point data format ${o}`);const w=new Float32Array(l*3),E=new Uint8Array(l*4);let Q=S;for(let T=0;T<l;T++){const j=Q+T*C;let ue,ee,N;o>=6?(ue=Number(t.getBigInt64(j,!0)),ee=Number(t.getBigInt64(j+8,!0)),N=Number(t.getBigInt64(j+16,!0))):(ue=t.getInt32(j,!0),ee=t.getInt32(j+4,!0),N=t.getInt32(j+8,!0));const M=ue*c+h,O=ee*f+u,W=N*d+m;w[T*3+0]=M,w[T*3+1]=O,w[T*3+2]=W;let ae;o>=6?ae=j+24:ae=j+12;const z=t.getUint16(ae,!0);if([2,3,5,7,8,9,10].includes(o)){let K;const $=j+C;if(o===5?K=j+28:o===10?K=j+59:K=$-6,K>=j&&K+6<=$&&K+6<=e.byteLength)try{const re=t.getUint16(K,!0),ce=t.getUint16(K+2,!0),Ae=t.getUint16(K+4,!0);E[T*4+0]=re<256?re:re>>8,E[T*4+1]=ce<256?ce:ce>>8,E[T*4+2]=Ae<256?Ae:Ae>>8,E[T*4+3]=255}catch(re){console.warn(`LASLoader: Failed to read RGB at offset ${K} (format ${o}, record length ${C}), using intensity instead. Error: ${re}`);const ce=Math.min(z/65535,1);E[T*4+0]=Math.floor(ce*255),E[T*4+1]=Math.floor(ce*255),E[T*4+2]=Math.floor(ce*255),E[T*4+3]=255}else{console.warn(`LASLoader: RGB offset ${K} out of bounds (offset: ${j}, record end: ${$}, buffer size: ${e.byteLength}, format: ${o}), using intensity instead`);const re=Math.min(z/65535,1);E[T*4+0]=Math.floor(re*255),E[T*4+1]=Math.floor(re*255),E[T*4+2]=Math.floor(re*255),E[T*4+3]=255}}else{const K=Math.min(z/65535,1);E[T*4+0]=Math.floor(K*255),E[T*4+1]=Math.floor(K*255),E[T*4+2]=Math.floor(K*255),E[T*4+3]=255}}return{format:"binary",version:n,pointDataFormat:o,numPoints:l,positions:w,colors:E,bbox:{xMin:g,xMax:p,yMin:A,yMax:D,zMin:B,zMax:v},scale:{x:c,y:f,z:d},offset:{x:h,y:u,z:m}}}parseMetadata(e){const t=jt.parseSection(e,"V");if(!t)throw new Error("LASLoader: ~VERSION section not found");const r=jt.removeComment(t).split(`
11855
11855
  `).filter(Boolean);let i=2,n=!1;for(const o of r){const l=o.split(/\s{2,}|\s*:/).filter(Boolean);if(l.length>=2){const c=l[0].trim().toUpperCase(),f=l[1].trim().toUpperCase();if(c==="VERS"||c==="VERSION"){const d=f.match(/(\d+\.?\d*)/);d&&(i=+d[1])}else(c==="WRAP"||c==="WRAP.")&&(n=f==="YES"||f==="Y")}}return{version:i,wrap:n}}parseWellParams(e){const t=jt.parseSection(e,"W");if(!t)return{};const r=jt.removeComment(t).split(`
11856
11856
  `).filter(Boolean),i={};for(const n of r){const o=jt.parseParameterLine(n);o.mnemonic&&(i[o.mnemonic]={unit:o.unit,value:jt.convertToValue(o.value),description:o.description})}return i}parseCurveParams(e){const t=jt.parseSection(e,"C");if(!t)return{};const r=jt.removeComment(t).split(`
11857
11857
  `).filter(Boolean),i={};for(const n of r){const o=jt.parseParameterLine(n);o.mnemonic&&(i[o.mnemonic]={unit:o.unit,value:o.value,description:o.description})}return i}parseHeaders(e){const t=jt.parseSection(e,"C");if(!t)throw new Error("LASLoader: ~CURVE section not found");const r=jt.removeComment(t).split(`
11858
- `).filter(Boolean),i=[];for(const n of r){const o=jt.parseParameterLine(n);o.mnemonic&&i.push(o.mnemonic)}if(i.length===0)throw new Error("LASLoader: No headers found in ~CURVE section");return i}parseData(e,t,a){const r=e.match(/~A(?:[\x20-\x7E])*(?:\r\n|\r|\n)([\s\S]*?)(?=~|$)/);if(!r||!r[1])throw new Error("LASLoader: ~A data section not found");const i=r[1].trim();if(!i)throw new Error("LASLoader: Data section is empty");const n=i.split(/\s+/).filter(c=>c.trim().length>0).map(c=>jt.convertToValue(c.trim()));if(n.length===0)throw new Error("LASLoader: No data values found");const o=Math.floor(n.length/t.length);if(o===0)throw new Error("LASLoader: Insufficient data values");const l=[];for(let c=0;c<o;c++){const f=[];for(let d=0;d<t.length;d++){const h=c*t.length+d;h<n.length&&f.push(n[h])}f.length===t.length&&l.push(f)}return l}}var _i=(s=>(s.PointCloud="pointcloud",s.Curve="curve",s.WellTrajectory="trajectory",s))(_i||{}),Zp=Object.getOwnPropertyDescriptor,Yp=(s,e,t,a)=>{for(var r=a>1?void 0:a?Zp(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Ki=class extends Dt{constructor(){super();const s=new qe("FatLine_VS","FatLine_FS");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);const e=s.shaderState;e.acceptShadow=!1,e.castShadow=!1,e.receiveEnv=!1,e.acceptGI=!1,e.useLight=!1,e.cullMode=Gt.none,e.depthWriteEnabled=!0,this.setDefault()}setDefault(){this.setUniformColor("baseColor",new J(1,1,1,1)),this.setUniformFloat("lineWidth",1),this.setUniformFloat("opacity",1),this.setUniformVector2("resolution",new de(1920,1080));const s=new R;this.getDefaultColorShader().setUniform("modelMatrix",s.rawData)}};Ki=Yp([Pa(Ki,"FatLineShader")],Ki);class Hh extends xt{constructor(){super(),this.shader=new Ki,this.transparent=!0}setInstanceBuffer(e){this.shader.setStorageBuffer("instances",e)}setModelMatrix(e){this.shader.getDefaultColorShader().setUniform("modelMatrix",e.rawData)}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set lineWidth(e){this.shader.setUniformFloat("lineWidth",e)}get lineWidth(){return this.shader.getUniformFloat("lineWidth")}set opacity(e){this.shader.setUniformFloat("opacity",e)}get opacity(){return this.shader.getUniformFloat("opacity")}set resolution(e){this.shader.setUniformVector2("resolution",e)}get resolution(){return this.shader.getUniformVector2("resolution")}}class Xp extends it{static format=je.BIN;visualizationMode=_i.PointCloud;async parseBuffer(e){const a=await new Xh().parse(e);await this.createVisualization(a)}async createVisualization(e){if("format"in e&&e.format==="binary")this.data=this.createBinaryPointCloudVisualization(e);else{const t=e;let a;switch(this.visualizationMode){case _i.PointCloud:a=this.createPointCloudVisualization(t);break;case _i.Curve:a=this.createCurveVisualization(t);break;case _i.WellTrajectory:a=this.createWellTrajectoryVisualization(t);break;default:a=this.createPointCloudVisualization(t)}a.lasData=t,a.wellParams=t.wellParams,a.curveParams=t.curveParams,this.data=a}}createBinaryPointCloudVisualization(e){const t=new ne;t.name="LASPointCloud";const a=new ne;a.name="LASPointCloudRoot",t.addChild(a);const r=a.addComponent(qa);return r.initFromData(e.positions,e.colors,e.numPoints),r.setPointShape("circle"),r.setPointSize(4),t.lasFormat="binary",t.lasVersion=e.version,t.numPoints=e.numPoints,t.pointDataFormat=e.pointDataFormat,t.bbox=e.bbox,t}verification(){if(this.data)return!0;throw new Error("LASParser: Parse failed")}createPointCloudVisualization(e){const{headers:t,data:a,nullValue:r}=e,i=t.findIndex(A=>A.toUpperCase()==="DEPTH"||A.toUpperCase()==="DEPT");if(i<0)throw new Error("LASParser: DEPTH column not found");const n=t.map((A,D)=>D).filter(A=>A!==i).slice(0,2),o=a.filter(A=>!A.some(D=>D===r||D===+r));if(o.length===0)throw new Error("LASParser: No valid data points after filtering");const l=o.length,c=new Float32Array(l*3),f=new Uint8Array(l*4);let d=1/0,h=-1/0,u=1/0,m=-1/0;if(n.length>0){const A=o.map(D=>+D[n[0]]).filter(D=>!isNaN(D));if(d=Math.min(...A),h=Math.max(...A),n.length>1){const D=o.map(B=>+B[n[1]]).filter(B=>!isNaN(B));u=Math.min(...D),m=Math.max(...D)}}for(let A=0;A<o.length;A++){const D=o[A],B=A*3,v=A*4;if(c[B+2]=+D[i],n.length>0){const U=+D[n[0]],y=h!==d?(U-d)/(h-d):0;if(c[B+0]=y*10,n.length>1){const S=+D[n[1]],F=m!==u?(S-u)/(m-u):0;c[B+1]=F*10}else c[B+1]=0}else c[B+0]=0,c[B+1]=0;if(n.length>0){const U=+D[n[0]],y=h!==d?(U-d)/(h-d):0;this.mapValueToColor(y,f,v)}else f[v+0]=255,f[v+1]=255,f[v+2]=255,f[v+3]=255}const g=new ne;g.name="LASPointCloud";const p=g.addComponent(qa);return p.initFromData(c,f,l),p.setPointShape("circle"),p.setPointSize(4),g}createCurveVisualization(e){const{headers:t,data:a,nullValue:r}=e,i=t.findIndex(A=>A.toUpperCase()==="DEPTH"||A.toUpperCase()==="DEPT");if(i<0)throw new Error("LASParser: DEPTH column not found");const n=t.map((A,D)=>D).find(A=>A!==i);if(n===void 0)throw new Error("LASParser: No curve column found");const o=a.filter(A=>{const D=+A[i],B=+A[n];return!isNaN(D)&&!isNaN(B)&&B!==r&&B!==+r});if(o.length===0)throw new Error("LASParser: No valid data points");const l=o.map(A=>+A[n]),c=Math.min(...l),d=Math.max(...l)-c,h=new Float32Array(o.length*3);for(let A=0;A<o.length;A++){const D=o[A],B=A*3,v=+D[i],U=+D[n];h[B+2]=v;const y=d>0?(U-c)/d:0;h[B+0]=y*10,h[B+1]=0}const u=new kh;u.setPositions(h);const m=new Hh;m.baseColor=new J(1,0,0,1),m.lineWidth=2;const g=new ne;g.name=`LASCurve_${t[n]}`;const p=g.addComponent(Ai);return p.geometry=u,p.material=m,g}createWellTrajectoryVisualization(e){throw new Error("LASParser: Well trajectory visualization not yet implemented")}normalizeValue(e,t,a){const r=t.map(o=>+o[a]).filter(o=>!isNaN(o)),i=Math.min(...r),n=Math.max(...r);return n!==i?(e-i)/(n-i):0}mapValueToColor(e,t,a){const r=Math.floor(e*255),i=Math.floor((1-e)*255);t[a+0]=r,t[a+1]=0,t[a+2]=i,t[a+3]=255}}class Al extends it{static format=je.BIN;static cloudImageProcessParam="";async parseBuffer(e){switch(Hi(e).mode){case Ca.Splat:{const a=Ho(e),r={count:a.vertexCount,position:a.position,rotation:a.rotation,scale:a.scale,opacity:a.opacity,sh:a.sh};r.bbox=Zo(a.position);const i=new ne;i.name="GaussianSplat",i.addComponent(si).initAsset(r),this.data=i;break}case Ca.PointCloud:{const a=Zh(e),r=new ne;r.name="PLYPointCloud";const i=new ne;i.name="PLYPointCloudRoot",r.addChild(i);const n=i.addComponent(qa);if(a.color)n.initFromData(a.position,a.color,a.vertexCount);else{const o=new Uint8Array(a.vertexCount*4);o.fill(255),n.initFromData(a.position,o,a.vertexCount)}n.setPointShape("circle"),n.setPointSize(4),this.data=r;break}case Ca.Mesh:{const a=jh(e),r=new ne;r.name="PLYMesh";const i=new Map;if(a.triangleTexnumbers&&a.triangleTexnumbers.length>0)for(let o=0;o<a.triangleTexnumbers.length;o++){const l=a.triangleTexnumbers[o];i.has(l)||i.set(l,[]),i.get(l).push(o)}else{const o=a.indices.length/3,l=[];for(let c=0;c<o;c++)l.push(c);i.set(0,l)}const n=new Map;if(a.textureFiles&&a.textureFiles.length>0){const o=[];for(let l=0;l<a.textureFiles.length;l++){const c=new aa,f=It.normalizePath(this.baseUrl+a.textureFiles[l]);o.push(_.res.loadTexture(f+Al.cloudImageProcessParam).then(d=>{c.baseMap=d,n.set(l,c)}))}await Promise.all(o)}n.size===0&&n.set(0,new aa);for(const[o,l]of i){const c=[];for(const m of l){const g=m*3;c.push(a.indices[g+0],a.indices[g+1],a.indices[g+2])}const f=new Le;f.setAttribute(G.position,a.position),f.setAttribute(G.normal,a.normal),a.uv&&f.setAttribute(G.uv,a.uv),a.color&&f.setAttribute(G.color,a.color),f.setIndices(new Uint32Array(c)),f.addSubGeometry({indexStart:0,indexCount:c.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let d=n.get(o);d||(d=n.values().next().value||new aa);const h=new ne;h.name=`PLYMesh_Texture_${o}`;const u=h.addComponent(he);u.geometry=f,u.material=d,r.addChild(h)}this.data=r;break}}}verification(){return!!this.data}}class Kh{async parse(e){const t=new DataView(e),a=ci(t);console.assert(a==="pnts");const r=t.getUint32(4,!0);console.assert(r===1);const i=t.getUint32(8,!0);console.assert(i===e.byteLength);const n=t.getUint32(12,!0),o=t.getUint32(16,!0),l=t.getUint32(20,!0),c=t.getUint32(24,!0),f=28,d=new Ni(e,f,n,o),h=f+n+o,u=d.header.POINTS_LENGTH||0,m=new Ls(e,u,h,l,c);return{version:r,featureTable:d,batchTable:m}}}class qh extends Kh{async parse(e){const t=await super.parse(e),{featureTable:a,batchTable:r}=t,i=a.header.POINTS_LENGTH;if(!i||i<=0)throw new Error("PNTSLoader: POINTS_LENGTH must be defined and greater than zero");const o=a.header.extensions?.["3DTILES_draco_point_compression"];let l,c;if(o){const u=await this.parseDraco(a,o,i);l=u.positions,c=u.colors,u.normals}else l=this.parsePositions(a,i),c=this.parseColors(a,i),this.parseNormals(a,i);const f=new ne,d=f.addComponent(qa);d.initFromData(l,c,i),d.setPointShape("circle"),d.setPointSize(4);const h=a.getData("RTC_CENTER",1,"FLOAT","VEC3");return h&&f.transform.localPosition.set(h[0],h[1],h[2]),f.batchTable=r,f.featureTable=a,f}parsePositions(e,t){let a=e.getData("POSITION",t,"FLOAT","VEC3");if(a)return a;const r=e.getData("POSITION_QUANTIZED",t,"UNSIGNED_SHORT","VEC3");if(!r)throw new Error("PNTSLoader: Either POSITION or POSITION_QUANTIZED must be defined");const i=e.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),n=e.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3");if(!i||!n)throw new Error("PNTSLoader: QUANTIZED_VOLUME_SCALE and QUANTIZED_VOLUME_OFFSET must be defined for quantized positions");const o=new Float32Array(t*3),l=65535;for(let c=0;c<t;c++){const f=c*3;o[f+0]=r[f+0]/l*i[0]+n[0],o[f+1]=r[f+1]/l*i[1]+n[1],o[f+2]=r[f+2]/l*i[2]+n[2]}return o}parseColors(e,t){let a=e.getData("RGBA",t,"UNSIGNED_BYTE","VEC4");if(a)return a;const r=e.getData("RGB",t,"UNSIGNED_BYTE","VEC3");if(r){const l=new Uint8Array(t*4);for(let c=0;c<t;c++){const f=c*3,d=c*4;l[d+0]=r[f+0],l[d+1]=r[f+1],l[d+2]=r[f+2],l[d+3]=255}return l}const i=e.getData("RGB565",t,"UNSIGNED_SHORT","SCALAR");if(i){const l=new Uint8Array(t*4);for(let c=0;c<t;c++){const f=this.decodeRGB565(i[c]),d=c*4;l[d+0]=f[0],l[d+1]=f[1],l[d+2]=f[2],l[d+3]=255}return l}const n=e.getData("CONSTANT_RGBA",1,"UNSIGNED_BYTE","VEC4");if(n){const l=new Uint8Array(t*4);for(let c=0;c<t;c++){const f=c*4;l[f+0]=n[0],l[f+1]=n[1],l[f+2]=n[2],l[f+3]=n[3]}return l}const o=new Uint8Array(t*4);return o.fill(255),o}parseNormals(e,t){let a=e.getData("NORMAL",t,"FLOAT","VEC3");if(a)return a;const r=e.getData("NORMAL_OCT16P",t,"UNSIGNED_BYTE","VEC2");return r?this.decodeOctNormals(r,t):null}decodeRGB565(e){const t=(e>>11&31)<<3,a=(e>>5&63)<<2,r=(e&31)<<3;return[t,a,r]}decodeOctNormals(e,t){const a=new Float32Array(t*3);for(let r=0;r<t;r++){const i=r*2,n=e[i]/255,o=e[i+1]/255,l=n*2-1,c=o*2-1,f=1-Math.abs(l)-Math.abs(c);let d,h;f<0?(d=(l>=0?1:-1)*(1-Math.abs(c)),h=(c>=0?1:-1)*(1-Math.abs(l))):(d=l,h=c);const u=Math.sqrt(d*d+h*h+f*f),m=r*3;a[m+0]=d/u,a[m+1]=h/u,a[m+2]=f/u}return a}async parseDraco(e,t,a){throw new Error("Draco compression not yet implemented")}}class $h extends it{static format=je.BIN;async parseBuffer(e){const a=await new qh().parse(e),r=new ne;r.name="PNTS",r.addChild(a),this.data=r}verification(){if(this.data)return!0;throw new Error("PNTSParser: Parse failed")}}class Ko{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 qo{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 a=new Ko;a.formBytes(e.readBytesArray()),this.boneData[t]=a,this.boneMap.set(a.boneName,a)}}}class eu extends it{static format=je.BIN;static parser(e,t){let a=e.readInt32();for(let r=0;r<a;r++){let i=new qo;i.formBytes(e.readBytesArray()),_.res.addObj(i.name,i)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}G.position,G.normal,G.color,G.TANGENT,G.uv,G.TEXCOORD_1,G.TEXCOORD_2,G.TEXCOORD_2,G.TEXCOORD_4,G.TEXCOORD_5,G.TEXCOORD_6,G.TEXCOORD_7,G.joints0,G.weights0;var X=(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))(X||{});class Hs{static GetMaterial(e){let t=e,a=t.split("/");t=a[a.length-1],a=t.split("."),t=a[a.length-1];let r=El(t);if(r){let i=new xt;return i.shader=new r,i}else throw new Error("not found shader, shader name is "+t)}static applyMaterialTexture(e,t){for(let a=0;a<t.length;a++){const r=t[a];r.property in e?e[r.property]=r.texture:r.property in e.shader?e.shader[r.property]=r.texture:e.setTexture(r.property,r.texture)}}static applyMaterialProperties(e,t){for(let a=0;a<t.length;a++){const r=t[a],i=r.key;switch(r.type){case X.color:case X.color32:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformColor(i,n)}break;case X.single:case X.float:case X.int:case X.int16:case X.int32:case X.uint:case X.uint32:case X.uint64:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformFloat(i,n)}break;case X.singleArray:{let n=r.getValue()[0];i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformFloat(i,n)}break;case X.vector2:case X.vector2Int:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformVector2(i,n)}break;case X.vector3:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformVector3(i,n)}break;case X.vector4:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformVector4(i,n)}break}}}}class Ja{static parser(e){switch(e.readInt32()){case X.single:return{t:X.single,v:e.readFloat32()};case X.boolean:return{t:X.boolean,v:e.readBoolean()};case X.int:return{t:X.int,v:e.readInt32()};case X.int16:return{t:X.int16,v:e.readInt16()};case X.int32:return{t:X.int32,v:e.readInt32()};case X.float:return{t:X.float,v:e.readFloat32()};case X.long:return{t:X.long,v:e.readFloat64()};case X.uint:return{t:X.uint,v:e.readUnit32()};case X.uint32:return{t:X.uint32,v:e.readUnit32()};case X.uint64:return{t:X.uint64,v:e.readUnit32()};case X.double:return{t:X.double,v:e.readFloat64()};case X.string:return{t:X.string,v:e.readUTF()};case X.singleArray:return{t:X.singleArray,v:e.readFloatArray()};case X.stringArray:return{t:X.stringArray,v:e.readStringArray()};case X.floatArray:return{t:X.floatArray,v:e.readFloatArray()};case X.vector2:return{t:X.vector2,v:e.readVector2()};case X.vector3:return{t:X.vector3,v:e.readVector3()};case X.vector4:return{t:X.vector4,v:e.readVector4()};case X.color:return{t:X.color,v:e.readColor()};case X.color32:return{t:X.color32,v:e.readColor()};case X.animationCurve:return{t:X.animationCurve,v:null};case X.quaternion:return{t:X.quaternion,v:e.readQuaternion()};case X.matrix4x4:return{t:X.matrix4x4,v:null};case X.mesh:{let o=e.readUTF(),l=_.res.getGeometry(o);return{t:X.mesh,v:l}}case X.texture:{let o=e.readUTF(),l=_.res.getTexture(o);return{t:X.texture,v:l}}case X.material:{let o=e.readUTF(),l=_.res.getMat(o);return{t:X.material,v:l}}case X.materials:{let o=e.readStringArray(),l=[];for(let c=0;c<o.length;c++){const f=o[c];let d=_.res.getMat(f);l.push(d)}return{t:X.materials,v:l}}case X.skeleton:break;case X.animClip:{let o=[],l=e.readInt32();for(let c=0;c<l;c++){let f=new fl;f.formBytes(e),o.push(f)}return{t:X.animClip,v:o}}case X.vector2Int:return{t:X.vector2Int,v:e.readVector2int()};case X.int32List:return{t:X.int32List,v:e.readInt32List()};case X.colorList:let a=e.readInt32(),r=[];for(let o=0;o<a;o++){const l=Ja.parser(e).v;r.push(l)}return{t:X.colorList,v:r};case X.color32List:let i=e.readInt32(),n=[];for(let o=0;o<i;o++){const l=Ja.parser(e).v;n.push(l)}return{t:X.color32List,v:n}}}}class $o{key;type;_data;getValue(){return this._data}formBytes(e){this.key=e.readUTF();let{t,v:a}=Ja.parser(e);this.type=t,this._data=a}}class tu{property;name;texture;texelSize;wrapModeU;wrapModeV;wrapModeW;wrapMode;anisoLevel;dimension;filterMode}class au extends it{static format=je.TEXT;static parserMaterial(e,t){let a=e.readInt32();for(let r=0;r<a;r++){let i=e.readBytesArray(),n=i.readUTF(),o=i.readUTF();i.readUTF();let l=i.readStringArray();i.readVector4(),i.readVector4();let c=i.readUTF(),f=[],d=[],h=i.readInt32();for(let g=0;g<h;g++){let p=new $o;p.formBytes(i),f.push(p)}let u=i.readInt32();for(let g=0;g<u;g++){let p=i.readBytesArray(),A=new tu;A.property=p.readUTF(),A.name=p.readUTF(),A.texture=_.res.getTexture(A.name),A.texelSize=p.readVector2(),A.wrapModeU=p.readUnit32(),A.wrapModeV=p.readUnit32(),A.wrapModeW=p.readUnit32(),A.wrapMode=p.readUnit32(),A.anisoLevel=p.readUnit32(),A.dimension=p.readUnit32(),A.filterMode=p.readUnit32(),d.push(A)}let m=Hs.GetMaterial(c);m.name=n;for(let g=0;g<l.length;g++){const p=l[g];m.shader.setDefine(p,!0)}Hs.applyMaterialTexture(m,d),Hs.applyMaterialProperties(m,f),_.res.addMat(o,m)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class el{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 a=t.readInt32();this.blendPositionList=t.readFloat32Array(a*3);let r=t.readInt32();this.blendNormalList=t.readFloat32Array(r*3)}}class tl{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 a=0;a<this.blendCount;a++){let r=new el;r.formBytes(t),this.blendShapePropertyDatas.push(r),this.blendShapeMap.set(r.shapeName,r)}return e}}class ru{name;meshName;meshID;vertexCount;vertexStrip;vertexBuffer;indices;attributes;bones;bindPose;blendShapeData}class iu extends it{static format=je.BIN;async parseBuffer(e){}static parserMeshs(e,t){let a=e.readInt32();for(let r=0;r<a;r++){let i=new ru,n=e.readBytesArray();i.meshName=n.readUTF(),i.meshID=n.readUTF(),n.readFloat32()>0,n.readFloat32()>0,n.readFloat32()>0;let o=n.readFloat32()>0,l=n.readFloat32()>0;o&&(i.bones=n.readStringArray(),i.bindPose=n.readMatrix44Array()),l&&(i.blendShapeData=new tl,i.blendShapeData.formBytes(n));let c=n.readBytesArray(),f=n.readBytesArray(),d=c.readInt32(),h=0,u=[];for(let D=0;D<d;D++)u[D]={},u[D].att=Hp[c.readUTF()],u[D].dim=c.readInt32(),h+=u[D].dim,u[D].format=c.readUTF();i.vertexCount=c.readInt32(),i.vertexBuffer=f.getFloat32Array();let m=n.readInt32Array(),g=[],p=n.readInt32();for(let D=0;D<p;D++){let B=n.readInt32(),v=n.readInt32(),U=n.readInt32(),y=n.readInt32(),S=n.readInt32(),F=n.readInt32();n.readVector3(),n.readVector3();let C={indexStart:v,indexCount:U,vertexStart:y,vertexCount:F,firstStart:S,topology:B,index:D};g.push(C)}m.length>65535?i.indices=new Uint32Array(m):i.indices=new Uint16Array(m);let A=new Le;if(A.vertexDim=h,A.geometryType=Et.compose_bin,A.setIndices(i.indices),A.setAttribute(G.all,i.vertexBuffer),o&&(A.skinNames=i.bones,A.bindPose=i.bindPose),l){A.blendShapeData=i.blendShapeData,A.morphTargetsRelative=!0,A.morphTargetDictionary={};for(let D=0;D<i.blendShapeData.blendCount;D++){A.setAttribute("a_morphPositions_"+D,i.blendShapeData.blendShapePropertyDatas[D].blendPositionList),A.setAttribute("a_morphNormals_"+D,i.blendShapeData.blendShapePropertyDatas[D].blendNormalList);for(let B=0;B<i.blendShapeData.blendCount;B++){let v=i.blendShapeData.shapeNames[B],U=i.blendShapeData.shapeIndexs[B];A.morphTargetDictionary[v]=U}}}for(let D=0;D<u.length;D++){const B=u[D].att;A.setAttribute(B,null)}for(let D=0;D<g.length;D++){const B=g[D];A.addSubGeometry(B)}A.name=i.meshName,_.res.addGeometry(i.meshID,A)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}let Hp={Position:G.position,Normal:G.normal,Color:G.color,Tangent:G.TANGENT,TexCoord0:G.uv,TexCoord1:G.TEXCOORD_1,TexCoord2:G.TEXCOORD_2,TexCoord3:G.TEXCOORD_2,TexCoord4:G.TEXCOORD_4,TexCoord5:G.TEXCOORD_5,TexCoord6:G.TEXCOORD_6,TexCoord7:G.vIndex,BlendIndices:G.joints0,BlendWeight:G.weights0};class Dn 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,a){super(e,t,a),this.position=0,this.position+=this.byteOffset}readUTF(){let e=this.readInt32(),t=e%4;t>0&&t<4&&(t=4-t);let a="",r=new Int8Array(this.buffer,this.position,e);return this.position+=e*Int8Array.BYTES_PER_ELEMENT,a+=String.fromCharCode.apply(null,r),this.position+=t*Int8Array.BYTES_PER_ELEMENT,a}readStringArray(){let e=[],t=this.readInt32();for(let a=0;a<t;a++)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 Dn(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 a=0;a<e;a++)t.push(this.readInt32());return t}readFloatArray(){let e=this.readInt32(),t=[];for(let a=0;a<e;a++){let r=this.readFloat32();t.push(r)}return t}readIntArray(){let e=this.readInt32(),t=[];for(let a=0;a<e;a++){let r=this.readInt32();t.push(r)}return t}readVector2int(){let e=new de;return e.x=this.readInt32(),e.y=this.readInt32(),e}readVector2(){let e=new de;return e.x=this.readFloat32(),e.y=this.readFloat32(),e}readVector3(){let e=new b;return e.x=this.readFloat32(),e.y=this.readFloat32(),e.z=this.readFloat32(),e}readVector3Array(){let e=[],t=this.readInt32();for(let a=0;a<t;a++)e.push(this.readVector3());return e}readVector4(){let e=new be;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 a=0;a<t;a++)e.push(this.readVector4());return e}readColor(){let e=new J;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 a=0;a<t;a++)e.push(this.readColor());return e}readQuaternion(){let e=new se;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 a=0;a<t;a++)e.push(this.readQuaternion());return e}readMatrix44(){let e=new R,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 a=0;a<e;a++){let r=this.readMatrix44();t.push(r)}return t}readFloat32Array(e){let t=new DataView(this.buffer),a=new Float32Array(e);for(let r=0;r<e;r++)a[r]=t.getFloat32(this.position+r*Float32Array.BYTES_PER_ELEMENT,this.littleEndian);return this.position+=e*Float32Array.BYTES_PER_ELEMENT,a}getFloat32Array(){let e=new Float32Array(this.buffer,this.byteOffset,this.byteLength/Float32Array.BYTES_PER_ELEMENT);return e=e.slice(0,this.byteLength),e}}class su extends it{static format=je.TEXT;static async parserTexture(e,t,a){let r=e.readInt32(),i=[];for(let o=0;o<r;o++){let l=e.readUTF();nu.useWebp?(l=l.replace("png","webp"),l=l.replace("jpb","webp"),i.push(t.baseUrl+"webp/"+l)):i.push(t.baseUrl+l)}let n=await _.res.loadBitmapTextures(i,_.setting.loader.numConcurrent,a,!0);for(const o of n)_.res.addTexture(o.name,o)}verification(){if(this.data)return!0;throw new Error("verify failed.")}}var Kp=Object.getOwnPropertyDescriptor,qp=(s,e,t,a)=>{for(var r=a>1?void 0:a?Kp(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Ks=class extends Dt{constructor(){super(),Y.register("PBRLitSSSShader",Jd);let s=new qe("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 Nh(this)]}setDefault(){this.setUniformFloat("shadowBias",35e-5),this.setUniformVector4("transformUV1",new be(0,0,1,1)),this.setUniformVector4("transformUV2",new be(0,0,1,1)),this.setUniformColor("baseColor",new J),this.setUniformColor("emissiveColor",new J(1,1,1)),this.setUniformVector4("materialF0",new be(.04,.04,.04,1)),this.setUniformColor("specularColor",new J(.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 J(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this.setUniformColor("skinColor",new J(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?Gt.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=De.NONE:e.blendMode=De.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};Ks=qp([Pa(Ks,"LitSSSShader")],Ks);var $p=Object.getOwnPropertyDescriptor,em=(s,e,t,a)=>{for(var r=a>1?void 0:a?$p(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let qs=class extends Dt{constructor(){super();let s=new qe("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 be(0,0,1,1)),this.setUniformVector4("transformUV2",new be(0,0,1,1)),this.setUniformColor("baseColor",new J),this.setUniformColor("emissiveColor",new J(0,0,0)),this.setUniformVector4("materialF0",new be(.04,.04,.04,1)),this.setUniformColor("specularColor",new J(.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 J(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this._MainTex=_.res.grayTexture,this._BumpMap=_.res.normalTexture,this._MaskTex=_.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?Gt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=De.NONE:e.blendMode=De.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};qs=em([Pa(qs,"LitShader")],qs);class _n{comName;data;static parser(e){let t=e.readBytesArray(),a=new _n;a.comName=t.readUTF(),a.data=[];let r=t.readInt32();for(let i=0;i<r;i++){let n=new $o;n.formBytes(t),a.data.push(n)}return a}}class xs{name;parentName;position;rotation;scale;comDatas;child;static parser(e){let t=e.readBytesArray(),a=new xs;a.name=t.readUTF(),a.parentName=t.readUTF(),a.position=t.readVector3(),a.rotation=t.readQuaternion(),a.scale=t.readVector3(),a.comDatas=[],a.child=[];let r=t.readInt32();for(let n=0;n<r;n++){const o=_n.parser(t);a.comDatas.push(o)}let i=t.readInt32();for(let n=0;n<i;n++){const o=xs.parser(t);a.child.push(o)}return a}}class nu extends it{static useWebp=!0;static format=je.BIN;avatarDic;nodeData;async parseBuffer(e){this.avatarDic={};let t=new Dn(e,0);await su.parserTexture(t,this,this.loaderFunctions),eu.parser(t,this),iu.parserMeshs(t,this),au.parserMaterial(t,this),this.nodeData=this.parserPrefabNode(t),this.data=this.data=this.parserNodeTree(this.nodeData)}parserPrefabNode(e){return xs.parser(e)}parserNodeTree(e){let t=new ne;if(t.localPosition=b.serialize(e.position),t.localQuaternion=se.serialize(e.rotation),t.localScale=b.serialize(e.scale),t.name=e.name,e.comDatas)for(let a=0;a<e.comDatas.length;a++){const r=e.comDatas[a];let i=null,n=kl(r.comName);if(n){i=t.getOrAddComponent(n);for(let o=0;o<r.data.length;o++){const l=r.data[o];l.key in i&&(i[l.key]=l.getValue())}}}if(e.child&&e.child.length>0)for(let a=0;a<e.child.length;a++){let r=this.parserNodeTree(e.child[a]);t.addChild(r)}return t}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class tm{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 a=t.split(",");for(let r=0;r<a.length;r++)parseFloat(a[r]);return t}static getStringArray(e){let t=e.replaceAll("[","");t=t.replaceAll("]","");let a=t.split(","),r=[];for(let i=0;i<a.length;i++){const n=a[i];r.push(n)}return r}static getVector2(e){}static getVector3(e){}static getVector4(e){}static getQuaternion(e){}static getColor(e){}}var am=Object.getOwnPropertyDescriptor,rm=(s,e,t,a)=>{for(var r=a>1?void 0:a?am(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let qi=class extends Dt{constructor(){super();let s=new qe("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 be(0,0,1,1)),this.setUniformVector4("transformUV2",new be(0,0,1,1)),this.setUniformColor("baseColor",new J),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?Gt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=De.NONE:e.blendMode=De.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};qi=rm([Pa(qi,"UnLitShader")],qi);var im=Object.getOwnPropertyDescriptor,sm=(s,e,t,a)=>{for(var r=a>1?void 0:a?im(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let $i=class extends Dt{constructor(){super(),Y.register("VertexAttributeIndexShader",Gd),Y.register("UnLitTextureArray",jd);let s=new qe("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 be(0,0,1,1)),this.setUniformVector4("transformUV2",new be(0,0,1,1)),this.setUniformColor("baseColor",new J),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?Gt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=De.NONE:e.blendMode=De.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};$i=sm([Pa($i,"UnLitTexArrayShader")],$i);const Br=-1,vr=0,al=1,ou=2,Ga=3,nm=6378137,om=1/298.257223563,lm=6356752314245179e-9,cm=Symbol("PLUGIN_REGISTERED");class rl{boundingVolume;geometricError;refine;content;contents;transform;extensions;extras;parent=null;children=[];loadingState=vr;used=!1;visible=!1;active=!1;inFrustum=!1;error=1/0;distanceFromCamera=1/0;depth=0;depthFromRenderedParent=0;lastFrameVisited=-1;isLeaf=!1;allChildrenReady=!1;hasContent=!1;hasRenderableContent=!1;hasUnrenderableContent=!1;childrenProcessed=0;usedLastFrame=!1;priority;canTraverse=!1;canTraverseFrame=-1;basePath="";cached={};constructor(e,t=null){if(this.boundingVolume=e.boundingVolume,this.geometricError=e.geometricError,this.refine=e.refine,this.content=e.content,this.contents=e.contents,this.transform=e.transform,this.extensions=e.extensions,this.extras=e.extras,this.parent=t,this.depth=t?t.depth+1:0,this.depthFromRenderedParent=t?.hasContent?0:t?t.depthFromRenderedParent+1:0,this.hasContent=!!(this.content||this.contents&&this.contents.length>0),this.content?.uri){const a=this.content.uri.toLowerCase();this.hasUnrenderableContent=a.endsWith("tileset.json"),this.hasRenderableContent=!this.hasUnrenderableContent}else this.contents&&this.contents.length>0&&(this.hasRenderableContent=!0)}addChild(e){e.parent=this,e.depth=this.depth+1,e.depthFromRenderedParent=this.hasContent?0:this.depthFromRenderedParent+1,this.children.push(e)}resetFrameState(e){this.lastFrameVisited!==e&&(this.lastFrameVisited=e,this.used=!1,this.inFrustum=!1,this.isLeaf=!1,this.visible=!1,this.active=!1,this.error=1/0,this.distanceFromCamera=1/0,this.allChildrenReady=!1)}}const lu=2**30;class cu{minSize=6e3;maxSize=8e3;minBytesSize=.3*lu;maxBytesSize=.4*lu;unloadPercent=.05;autoMarkUnused=!0;_itemSet=new Map;_itemList=[];_usedSet=new Set;_callbacks=new Map;_unloadingHandle=-1;_cachedBytes=0;_bytesMap=new Map;_loadedSet=new Set;_unloadPriorityCallback=null;set unloadPriorityCallback(e){this._unloadPriorityCallback=e}get unloadPriorityCallback(){return this._unloadPriorityCallback}isFull(){return this._itemSet.size>=this.maxSize||this._cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this._bytesMap.get(e)||0}setMemoryUsage(e,t){if(!this._itemSet.has(e))return;const a=this._bytesMap.get(e)||0;this._cachedBytes-=a,this._bytesMap.set(e,t),this._cachedBytes+=t}add(e,t){return this._itemSet.has(e)||this.isFull()?!1:(this._itemList.push(e),this._usedSet.add(e),this._itemSet.set(e,Date.now()),this._callbacks.set(e,t),this._loadedSet.add(e),!0)}has(e){return this._itemSet.has(e)}remove(e){if(!this._itemSet.has(e))return!1;const t=this._bytesMap.get(e)||0;this._cachedBytes-=t,this._bytesMap.delete(e);const a=this._callbacks.get(e);a&&a(e);const r=this._itemList.indexOf(e);return r!==-1&&this._itemList.splice(r,1),this._usedSet.delete(e),this._itemSet.delete(e),this._callbacks.delete(e),this._loadedSet.delete(e),!0}markUsed(e){this._itemSet.has(e)&&(this._usedSet.add(e),this._itemSet.set(e,Date.now()))}markUnused(e){this._usedSet.delete(e)}scheduleUnload(){this._unloadingHandle===-1&&(this._unloadingHandle=requestAnimationFrame(()=>{this._unloadingHandle=-1,this._performUnload()}))}_performUnload(){if(!(this._itemSet.size>this.minSize||this._cachedBytes>this.minBytesSize))return;this.autoMarkUnused&&this._itemSet.forEach((o,l)=>{this._usedSet.has(l)||this.markUnused(l)});const t=[];this._itemList.forEach(o=>{this._usedSet.has(o)||t.push(o)}),this._unloadPriorityCallback&&t.sort(this._unloadPriorityCallback);const a=Math.floor(this._itemSet.size*(1-this.unloadPercent)),r=this._cachedBytes-(this._cachedBytes-this.minBytesSize);let i=0,n=0;for(let o=0;o<t.length;o++){const l=t[o];if(this._itemSet.size-i<=a&&this._cachedBytes-n<=r)break;const c=this._bytesMap.get(l)||0;this.remove(l)&&(i++,n+=c)}}clear(){Array.from(this._itemSet.keys()).forEach(t=>this.remove(t))}getStats(){return{size:this._itemSet.size,bytes:this._cachedBytes,usedCount:this._usedSet.size}}}class il{maxJobs=6;priorityCallback=null;_items=[];_callbacks=new Map;_currJobs=0;get running(){return this._items.length!==0||this._currJobs!==0}sort(){this.priorityCallback&&this._items.sort(this.priorityCallback)}has(e){return this._callbacks.has(e)}add(e,t){if(this._callbacks.has(e))return this._callbacks.get(e).promise;let a,r;const i=new Promise((o,l)=>{a=o,r=l}),n={callback:t,promise:i,resolve:a,reject:r};return this._items.unshift(e),this._callbacks.set(e,n),i}remove(e){const t=this._items.indexOf(e);if(t!==-1){const a=this._callbacks.get(e);a&&(a.promise.catch(()=>{}),a.reject(new Error("PriorityQueue: Item removed."))),this._items.splice(t,1),this._callbacks.delete(e)}}removeByFilter(e){const t=[];this._items.forEach(a=>{e(a)&&t.push(a)}),t.forEach(a=>this.remove(a))}update(){this._tryRunJobs()}_tryRunJobs(){this.sort();const e=this.maxJobs;let t=0;const a=()=>{this._currJobs--};for(;e>this._currJobs&&this._items.length>0&&t<e;){this._currJobs++,t++;const r=this._items.shift(),i=this._callbacks.get(r);this._callbacks.delete(r),Promise.resolve(i.callback(r)).then(()=>{i.resolve(),a()}).catch(n=>{i.reject(n),a()})}}clear(){Array.from(this._items).forEach(t=>this.remove(t))}getStats(){return{queued:this._items.length,running:this._currJobs}}}function fu(s,e=null,t=null){const a=[];for(a.push(s),a.push(null),a.push(0);a.length>0;){const r=a.pop(),i=a.pop(),n=a.pop();if(e&&e(n,i,r)===!0){t&&t(n,i,r);return}const o=n.children;if(o&&o.length>0)for(let l=o.length-1;l>=0;l--)a.push(o[l]),a.push(n),a.push(r+1);if(t&&t(n,i,r)===!0)return}}function fm(s,e){let t=s;for(;t;){const a=t.depth,r=t.parent;e(t,r,a),t=r}}const $s={inView:!1,error:1/0,distanceFromCamera:1/0},du=!0;function hu(s){return s===Ga||s===Br}function xr(s,e){return s.lastFrameVisited===e&&s.used}function uu(s){return s.childrenProcessed===s.children.length}function sl(s){return s.hasUnrenderableContent||s.parent!==null&&s.parent.geometricError<s.geometricError}function nl(s,e){s.lastFrameVisited!==e.frameCount&&(s.usedLastFrame=s.used,s.lastFrameVisited=e.frameCount,s.used=!1,s.inFrustum=!1,s.isLeaf=!1,s.visible=!1,s.active=!1,s.error=1/0,s.distanceFromCamera=1/0,s.allChildrenReady=!1,e.calculateTileViewError(s,$s),s.inFrustum=$s.inView,s.error=$s.error,s.distanceFromCamera=$s.distanceFromCamera)}function ol(s,e,t=!1){s.used||(t||(s.used=!0,e.stats.used++),e.markTileUsed(s),s.inFrustum===!0&&e.stats.inFrustum++)}function dm(s,e){if(s.canTraverse&&s.canTraverseFrame===e.frameCount)return s.canTraverse;let t=!1;return s.error<=e.errorTarget&&!sl(s)||s.depth>=e.maxDepth||!s.children||s.children.length===0?t=!1:t=!0,s.canTraverse=t,s.canTraverseFrame=e.frameCount,t}function ll(s,e,t=!1){if(e.ensureChildrenArePreprocessed(s),nl(s,e),ol(s,e,t),sl(s)&&uu(s)){const a=s.children;for(let r=0,i=a.length;r<i;r++)ll(a[r],e,t)}}function en(s,e){if(e.ensureChildrenArePreprocessed(s),nl(s,e),!s.inFrustum)return;if(!dm(s,e)){ol(s,e);const n=s.children;if(!s.hasContent&&n&&n.length>0)for(let o=0,l=n.length;o<l;o++){const c=n[o];en(c,e)}return}const a=s.children;let r=!1,i=!1;for(let n=0,o=a.length;n<o;n++){const l=a[n];en(l,e),r=r||xr(l,e.frameCount),i=i||l.inFrustum}if(s.refine==="REPLACE"&&!i&&a.length!==0){s.inFrustum=!1;for(let n=0,o=a.length;n<o;n++)ll(a[n],e,!0);return}if(ol(s,e),s.refine==="REPLACE"&&(r&&s.depth!==0||du))for(let n=0,o=a.length;n<o;n++)ll(a[n],e)}function cl(s,e){const t=e.frameCount;if(!xr(s,t))return;const a=s.children;let r=!1;for(let i=0,n=a.length;i<n;i++){const o=a[i];r=r||xr(o,t)}if(!r)s.isLeaf=!0;else{let i=!0;for(let n=0,o=a.length;n<o;n++){const l=a[n];if(cl(l,e),xr(l,t)){const c=!sl(l);let f=!l.hasContent||l.hasRenderableContent&&hu(l.loadingState)||l.hasUnrenderableContent&&l.loadingState===Br;f=c&&f||l.allChildrenReady,i=i&&f}}s.allChildrenReady=i}}function bu(s,e){if(e.ensureChildrenArePreprocessed(s),xr(s,e.frameCount)&&(s.hasContent&&e.queueTileForDownload(s),uu(s))){const t=s.children;for(let a=0,r=t.length;a<r;a++)bu(t[a],e)}}function tn(s,e){const t=e.stats;if(!xr(s,e.frameCount))return;if(s.isLeaf){s.loadingState===Ga?(s.inFrustum&&(s.visible=!0,t.visible++),s.active=!0,t.active++):s.hasContent&&e.queueTileForDownload(s);return}const a=s.children,r=s.hasContent,i=hu(s.loadingState)&&r,n=(e.errorTarget+1)*(e.errorThreshold||1),o=s.error<=n,l=s.refine==="ADD",c=s.allChildrenReady||s.depth===0&&!du;if(r&&(o||l)&&e.queueTileForDownload(s),(o&&i&&!c||i&&l)&&(s.inFrustum&&(s.visible=!0,t.visible++),s.active=!0,t.active++),!l&&o&&!c)for(let f=0,d=a.length;f<d;f++){const h=a[f];xr(h,e.frameCount)&&bu(h,e)}else for(let f=0,d=a.length;f<d;f++)tn(a[f],e)}function an(s,e){const t=xr(s,e.frameCount);if(t||s.usedLastFrame){let a=!1,r=!1;if(t?(a=s.active,r=s.visible):nl(s,e),s.hasRenderableContent&&s.loadingState===Ga){const n=s.__wasSetVisible;s.__wasSetActive!==a&&(e.setTileDelayedActive(s,a),s.__wasSetActive=a),n!==r&&(e.setTileDelayedVisible(s,r),s.__wasSetVisible=r)}s.usedLastFrame=t;const i=s.children;for(let n=0,o=i.length;n<o;n++)an(i[n],e)}}class Hr{static s_tmpMatrix=null;_type;_data;_box;get box(){return this._box}_sphere;_matrix;constructor(e){if(Hr.s_tmpMatrix||(Hr.s_tmpMatrix=new R),this._data=e,e.box)this._type="box",this._parseBox(e.box);else if(e.sphere)this._type="sphere",this._parseSphere(e.sphere);else if(e.region)this._type="region",this._parseRegion(e.region);else throw new Error("BoundingVolume: Invalid bounding volume data")}_parseBox(e){if(e.length!==12)throw new Error("BoundingVolume: Box must have 12 elements");const t=new b(e[0],e[1],e[2]),a=new b(e[3],e[4],e[5]),r=new b(e[6],e[7],e[8]),i=new b(e[9],e[10],e[11]),n=a.length,o=r.length,l=i.length,c=a.clone().normalize(),f=r.clone().normalize(),d=i.clone().normalize();this._matrix=new R;const h=this._matrix.rawData;h[0]=c.x,h[1]=c.y,h[2]=c.z,h[3]=0,h[4]=f.x,h[5]=f.y,h[6]=f.z,h[7]=0,h[8]=d.x,h[9]=d.y,h[10]=d.z,h[11]=0,h[12]=t.x,h[13]=t.y,h[14]=t.z,h[15]=1;const u=new b(n*2,o*2,l*2);this._box=new Ce(new b(0,0,0),u)}_parseSphere(e){if(e.length!==4)throw new Error("BoundingVolume: Sphere must have 4 elements");const t=new b(e[0],e[1],e[2]),a=e[3];this._sphere=new Gr(t,a)}_parseRegion(e){if(e.length!==6)throw new Error("BoundingVolume: Region must have 6 elements");const[t,a,r,i,n,o]=e,l=new b((t+r)/2,(a+i)/2,(n+o)/2),c=new b(Math.abs(r-t),Math.abs(i-a),Math.abs(o-n));this._box=new Ce(l,c),this._matrix=new R,this._matrix.identity()}getAABB(e,t){if(this._type==="sphere"&&this._sphere){const a=this._sphere.center,r=this._sphere.radius,i=new b(a.x-r,a.y-r,a.z-r),n=new b(a.x+r,a.y+r,a.z+r);if(e.setFromMinMax(i,n),t){const o=[new b(i.x,i.y,i.z),new b(n.x,i.y,i.z),new b(i.x,n.y,i.z),new b(n.x,n.y,i.z),new b(i.x,i.y,n.z),new b(n.x,i.y,n.z),new b(i.x,n.y,n.z),new b(n.x,n.y,n.z)];o.forEach(l=>{const c=new b;t.transformPoint(l,c),l.copyFrom(c)}),e.makeEmpty(),o.forEach(l=>{e.expandByPoint(l)})}return e}else if(this._box){const a=Hr.s_tmpMatrix;if(a.identity(),this._matrix?t?a.multiplyMatrices(t,this._matrix):a.copyFrom(this._matrix):t&&a.copyFrom(t),a){const r=this._box,i=[new b(r.min.x,r.min.y,r.min.z),new b(r.max.x,r.min.y,r.min.z),new b(r.min.x,r.max.y,r.min.z),new b(r.max.x,r.max.y,r.min.z),new b(r.min.x,r.min.y,r.max.z),new b(r.max.x,r.min.y,r.max.z),new b(r.min.x,r.max.y,r.max.z),new b(r.max.x,r.max.y,r.max.z)];i.forEach(n=>{const o=new b;a.transformPoint(n,o),n.copyFrom(o)}),e.makeEmpty(),i.forEach(n=>{e.expandByPoint(n)})}else e.setFromMinMax(this._box.min,this._box.max);return e}throw new Error("BoundingVolume: Invalid state")}getOBB(e,t){this._type==="box"&&this._box&&this._matrix?(e.setFromMinMax(this._box.min,this._box.max),t.copyFrom(this._matrix)):(this.getAABB(e),t.identity())}getSphere(e){if(this._type==="sphere"&&this._sphere)return e.center.copyFrom(this._sphere.center),e.radius=this._sphere.radius,e;const t=new Ce;this.getAABB(t);const a=t.center,i=t.size.length*.5;return e.center.copyFrom(a),e.radius=i,e}get type(){return this._type}distanceToPoint(e,t){if(this._type==="sphere"&&this._sphere){const a=this._sphere.center;let r=a;if(t){const o=new b;t.transformPoint(a,o),r=o}const i=this._sphere.radius,n=e.clone().subtract(r).length;return Math.max(0,n-i)}else if(this._box){const a=new Ce;this.getAABB(a,t);const r=a.center,i=a.size,n=Math.max(0,Math.abs(e.x-r.x)-i.x*.5),o=Math.max(0,Math.abs(e.y-r.y)-i.y*.5),l=Math.max(0,Math.abs(e.z-r.z)-i.z*.5);return Math.sqrt(n*n+o*o+l*l)}return 1/0}intersectsFrustum(e,t){if(this._type==="sphere"&&this._sphere){const a=new Ce;return this.getAABB(a,t),e.containsBox2(a)>0}else if(this._box){const a=new Ce;return this.getAABB(a,t),e.containsBox2(a)>0}return!1}}const gu=(s,e)=>{const t=s.priority||0,a=e.priority||0;return t!==a?t>a?1:-1:s.used!==e.used?s.used?1:-1:s.error!==e.error?s.error>e.error?1:-1:s.distanceFromCamera!==e.distanceFromCamera?s.distanceFromCamera>e.distanceFromCamera?-1:1:s.depthFromRenderedParent!==e.depthFromRenderedParent?s.depthFromRenderedParent>e.depthFromRenderedParent?-1:1:0},pu=(s,e)=>{const t=s.priority||0,a=e.priority||0;return t!==a?t>a?1:-1:s.lastFrameVisited!==e.lastFrameVisited?s.lastFrameVisited>e.lastFrameVisited?-1:1:s.depthFromRenderedParent!==e.depthFromRenderedParent?s.depthFromRenderedParent>e.depthFromRenderedParent?1:-1:s.loadingState!==e.loadingState?s.loadingState>e.loadingState?-1:1:s.hasUnrenderableContent!==e.hasUnrenderableContent?s.hasUnrenderableContent?-1:1:s.error!==e.error?s.error>e.error?-1:1:0};class hm{rootLoadingState=vr;rootTileSet=null;rootURL=null;fetchOptions={};frameCount=0;isLoading=!1;lruCache;loadQueue;processNodeQueue;plugins=[];_queuedTiles=[];_cachedSinceLoadComplete=new Set;_processedTiles=new WeakSet;_visibleTiles=new Set;_usedSet=new Set;_cacheHits=0;_cacheMisses=0;stats={parsing:0,downloading:0,failed:0,inFrustum:0,used:0,active:0,visible:0,sceneCount:0,inCacheSinceLoad:0};errorTarget=16;errorThreshold=1;maxDepth=30;displayActiveTiles=!1;onRootTileLoaded;rtcOffset=null;_root=null;_activeTiles=new Set;_delayedHideTiles=new Set;_delayedVisibleTiles=new Set;_delayedActiveTiles=new Set;group;cameras=[];_cameraMap=new Map;_cameraInfo=[];_upRotationMatrix=new R;_ellipsoid;_bytesUsed=new WeakMap;_eventListeners=new Map;performanceStats={updateTime:0,traverseTime:0,markUsedTime:0,markVisibleTime:0,toggleTime:0,queueProcessTime:0};transCdnUrlFunc=null;constructor(e=null){this.rootURL=e,this.lruCache=new cu,this.lruCache.unloadPriorityCallback=pu,this.loadQueue=new il,this.loadQueue.maxJobs=10,this.loadQueue.priorityCallback=gu,this.processNodeQueue=new il,this.processNodeQueue.maxJobs=25,this.group=new ne,this.group.name="TilesRendererGroup"}get root(){return this._root}get loadProgress(){const{stats:e,isLoading:t}=this,a=e.downloading,r=e.inCacheSinceLoad+(t?1:0);return r===0?1:1-a/r}update(){const{lruCache:e,_usedSet:t,stats:a,loadQueue:r,processNodeQueue:i}=this;this.rootLoadingState===vr&&(this.rootLoadingState=al,this.isLoading=!0,this._loadRootTileSet().then(c=>{if(this.rootLoadingState=Ga,this.rootTileSet=c,c.root){const f=this._getBasePath(this.rootURL||""),d=this.preprocessNode(c.root,f,null);this.queueTileForDownload(d),this._root=d;const h=new Hr(d.boundingVolume),u=new Gr;h.getSphere(u);const m=new Ce;if(h.getAABB(m),this.rtcOffset=new b(-u.center.x,-u.center.y,-u.center.z),this.onRootTileLoaded)try{this.onRootTileLoaded({center:u.center,radius:u.radius,boundingBox:m,rtcOffset:this.rtcOffset})}catch(g){console.warn("Failed to calculate bounding volume for root tile:",g)}}this.dispatchEvent({type:"load-tile-set",tileSet:c,url:this.rootURL})}).catch(c=>{this.rootLoadingState=Br,console.error("Failed to load root tileset:",c),this.dispatchEvent({type:"load-error",tile:null,error:c,url:this.rootURL})}));const n=this.root;if(!n)return;a.inFrustum=0,a.used=0,a.active=0,a.visible=0,this.frameCount++,t.forEach(c=>e.markUnused(c)),t.clear(),this.updateCameraInfo(),this._checkDelayedHideTiles(),this._checkDelayedActiveTiles(),this._checkDelayedVisibleTiles(),en(n,this),cl(n,this),tn(n,this),an(n,this);const o=this._queuedTiles;e.unloadPriorityCallback&&o.sort(e.unloadPriorityCallback);for(let c=0,f=o.length;c<f&&!e.isFull();c++)this.requestTileContents(o[c]);o.length=0,r.update(),i.update(),e.scheduleUnload(),(r.running||i.running)===!1&&this.isLoading===!0&&(this._cachedSinceLoadComplete.clear(),a.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1)}traverse(e,t,a=!0){this.root&&fu(this.root,(r,i,n)=>(a&&this.ensureChildrenArePreprocessed(r,!0),e?e(r,i,n):!1),t)}registerPlugin(e){if(this.plugins.includes(e))return;const t=e.priority||0;let a=this.plugins.length;for(let r=0;r<this.plugins.length;r++)if((this.plugins[r].priority||0)>t){a=r;break}this.plugins.splice(a,0,e),e.init&&e.init(this)}unregisterPlugin(e){const t=this.plugins;let a;if(typeof e=="string"?a=t.find(r=>r.name===e):a=e,a&&t.includes(a)){const r=t.indexOf(a);return t.splice(r,1),a.dispose&&a.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}calculateTileViewError(e,t){const a=e.cached,r=this.cameras,i=this._cameraInfo,n=a.boundingVolume;if(!n){t.inView=!1,t.error=1/0,t.distanceFromCamera=1/0;return}let o=!1,l=-1/0,c=1/0,f=-1/0,d=1/0;const h=a.worldTransform;for(let u=0,m=r.length;u<m;u++){const g=i[u];let p,A;if(g.isOrthographic){const B=g.pixelSize;p=e.geometricError/B,A=1/0}else{const B=g.sseDenominator;A=n.distanceToPoint(g.position,h),p=A===0?1/0:e.geometricError/(A*B)}const D=i[u].frustum;n.intersectsFrustum(D,h)&&(o=!0,l=Math.max(l,p),c=Math.min(c,A)),f=Math.max(f,p),d=Math.min(d,A)}o?(t.inView=!0,t.error=l,t.distanceFromCamera=c):(t.inView=!1,t.error=f,t.distanceFromCamera=d)}updateCameraInfo(){this._updateCameraInfo()}_updateCameraInfo(){const e=this.cameras,t=this._cameraInfo,a=this._cameraMap;for(;t.length<e.length;)t.push({position:new b,frustum:new On,isOrthographic:!1});for(let r=0;r<e.length;r++){const i=e[r],n=t[r],o=a.get(i);if(!o)continue;const l=i.transform.worldPosition;if(n.position.copyFrom(l),n.frustum=i.frustum,n.isOrthographic=i.type===ot.ortho,n.isOrthographic){const c=i.frustumSize;n.pixelSize=c/o.height}else{const f=i.fov*Math.PI/180;n.sseDenominator=2*Math.tan(f/2)/o.height}}}preprocessNode(e,t,a=null){if(this._processedTiles.has(e))return e;this._processedTiles.add(e);let r;if(e instanceof rl?r=e:r=new rl(e,a),r.content){const c=r.content;!("uri"in c)&&"url"in c&&(c.uri=c.url,delete c.url)}if(r.basePath=t,r.boundingVolume){const c=new Hr(r.boundingVolume);r.cached.boundingVolume=c}const i=new b(r.boundingVolume.box[0],r.boundingVolume.box[1],r.boundingVolume.box[2]),n=new R;if(r.transform){const c=r.transform;for(let f=0;f<16;f++)n.rawData[f]=c[f]}if(!a){n.copyFrom(this._upRotationMatrix);const c=new b;c.copyFrom(i),c.applyMatrix4(n);const f=r.cached.boundingVolume.box,d=[new b(f.min.x,f.min.y,f.min.z),new b(f.max.x,f.min.y,f.min.z),new b(f.min.x,f.max.y,f.min.z),new b(f.max.x,f.max.y,f.min.z),new b(f.min.x,f.min.y,f.max.z),new b(f.max.x,f.min.y,f.max.z),new b(f.min.x,f.max.y,f.max.z),new b(f.max.x,f.max.y,f.max.z)];for(const m of d)m.applyMatrix4(n);const h=new Ce;d.forEach(m=>{h.expandByPoint(m)}),n.rawData[12]=-c.x,n.rawData[13]=-c.y,n.rawData[14]=-c.z;const u=h.min;n.rawData[13]-=u.y}const o=new R;o.copyFrom(n),a&&a.cached.worldTransform&&o.multiplyMatrices(a.cached.worldTransform,n);const l=new R;if(l.copyFrom(o),l.invert(),r.cached.transfrom=n,r.cached.worldTransform=o,r.cached.transformInverse=l,e.children&&e.children.length>0){r.children=[];for(let c=0;c<e.children.length;c++){const f=e.children[c],d=this.preprocessNode(f,t,r);r.children.push(d)}r.childrenProcessed=r.children.length}return r}ensureChildrenArePreprocessed(e,t=!1){const a=e.children;for(let r=0,i=a.length;r<i;r++){const n=a[r];n.basePath!==void 0&&n.basePath!==""||n.cached.boundingVolume||(t?(this.processNodeQueue.remove(n),this.preprocessNode(n,e.basePath,e)):this.processNodeQueue.has(n)||this.processNodeQueue.add(n,o=>{this.preprocessNode(o,e.basePath,e)}))}}_recordCacheHit(){this._cacheHits++}_recordCacheMiss(){this._cacheMisses++}resetCacheStats(){this._cacheHits=0,this._cacheMisses=0}requestTileContents(e){if(e.loadingState!==vr){this._recordCacheHit();return}if(this.lruCache.isFull()){this._recordCacheMiss();return}this._recordCacheMiss(),e.loadingState=al,this.stats.downloading++;const t=e.content||e.contents&&e.contents[0];if(!t||!t.uri){e.loadingState=Br,this.stats.downloading--,this.stats.failed++;return}const a=e.basePath||"",r=t.uri,i=this._resolveURL(a,r);this.loadQueue.add(e,async n=>{try{await this.parseTileContent(n,r,i),this.stats.downloading--}catch(o){n.loadingState=Br,this.stats.downloading--,this.stats.failed++,console.error("Failed to load tile:",o)}})}async parseTileContent(e,t,a){e.loadingState=ou;const i=(c=>{const f=c.split(".");return f.length>1?f[f.length-1]:""})(t),n=this.transCdnUrlFunc?this.transCdnUrlFunc(a):a;let o=null;const l=new Rt;switch(i.toLowerCase()){case"b3dm":{o=(await l.load(n,So,{onProgress:f=>{},onComplete:f=>{}})).data;break}case"i3dm":{o=(await l.load(n,Eo,{onProgress:f=>{},onComplete:f=>{}})).data;break}case"glb":case"gltf":{o=(await l.load(n,Ut,{onProgress:f=>{},onComplete:f=>{}})).data;break}case"pnts":{o=(await l.load(n,$h,{onProgress:f=>{},onComplete:f=>{}})).data;break}case"json":try{const c=await _.res.loadJSON(n);e.children.length=0,e.childrenProcessed=0;const f=this._getBasePath(n);if(c.root){const d=this.preprocessNode(c.root,f,e);e.children.push(d),e.childrenProcessed=1,this.dispatchEvent({type:"load-tile-set",tileSet:c,url:n})}e.loadingState=Ga;return}catch(c){console.error("Failed to load external tileset:",c),e.loadingState=Br,this.stats.failed++;return}break;default:console.warn(`Unknown tile format: ${i}`);break}if(o){e.cached.scene=o;const c=this._estimateBytesUsed(o);this._bytesUsed.set(o,c),this.lruCache.setMemoryUsage(e,c),this.lruCache.has(e)||this.lruCache.add(e,f=>{if(f.cached.scene){const d=f.cached.scene;d.parent&&d.parent.object3D.removeChild(d),d.destroy(!0),f.cached.scene=null}f.loadingState=vr}),this.setTileImmediateActive(e),e.active=!0,e.__wasSetActive=!0,this.stats.active++,this.setTileImmediateVisible(e),e.visible=!0,e.__wasSetVisible=!0,this.stats.visible++,this.stats.sceneCount++,e.loadingState=Ga,e.usedLastFrame=!0,tn(e,this),an(e,this)}else e.loadingState=Br,this.stats.failed++}markTileUsed(e){this._usedSet.add(e),this.lruCache.markUsed(e)}setTileDelayedActive(e,t){t?(this._activeTiles.add(e),this._delayedHideTiles.has(e)&&this._delayedHideTiles.delete(e),this._delayedActiveTiles.has(e)||this._delayedActiveTiles.add(e)):(this._activeTiles.delete(e),this._delayedHideTiles.has(e)||this._delayedHideTiles.add(e),this._delayedActiveTiles.has(e)&&this._delayedActiveTiles.delete(e))}setTileImmediateActive(e){if(e.hasRenderableContent){const t=e.cached.scene;t&&(this.group.entityChildren.includes(t)||(t.parent&&t.parent.object3D.removeChild(t),this.group.addChild(t)),e.cached.worldTransform&&this._applyWorldTransform(t.transform,e.cached.worldTransform))}}setTileImmediateVisible(e){if(e.hasRenderableContent){const t=e.cached.scene;t&&(t.transform.enable=!0)}}_checkDelayedHideTiles(){if(this.stats.downloading===0)for(const e of this._delayedHideTiles){const t=e.cached.scene;t&&(t.transform.enable=!1,this._delayedHideTiles.delete(e))}}_checkDelayedActiveTiles(){for(const e of this._delayedActiveTiles)if(e.hasRenderableContent){const t=e.cached.scene;t&&(this.group.entityChildren.includes(t)||(t.parent&&t.parent.object3D.removeChild(t),this.group.addChild(t)),e.cached.worldTransform&&this._applyWorldTransform(t.transform,e.cached.worldTransform),this._delayedActiveTiles.delete(e))}else this._delayedActiveTiles.delete(e)}_checkDelayedVisibleTiles(){for(const e of this._delayedVisibleTiles)if(e.hasRenderableContent){const t=e.cached.scene;t&&(t.transform.enable=!0,this._delayedVisibleTiles.delete(e))}else this._delayedVisibleTiles.delete(e)}setTileDelayedVisible(e,t){t?(this._visibleTiles.add(e),this._delayedHideTiles.has(e)&&this._delayedHideTiles.delete(e),this._delayedVisibleTiles.has(e)||this._delayedVisibleTiles.add(e)):(this._visibleTiles.delete(e),this._delayedHideTiles.has(e)||this._delayedHideTiles.add(e),this._delayedVisibleTiles.has(e)&&this._delayedVisibleTiles.delete(e))}queueTileForDownload(e){e.loadingState!==vr||this.lruCache.isFull()||this._queuedTiles.push(e)}dispatchEvent(e){const t=this._eventListeners.get(e.type);t&&t.forEach(a=>{try{a(e)}catch(r){console.error("Error in event listener:",r)}})}async _loadRootTileSet(){if(!this.rootURL)throw new Error("Root URL is not set");const e=await _.res.loadJSON(this.rootURL);return e.asset&&e.asset.gltfUpAxis&&this._setupUpAxisRotation(e.asset.gltfUpAxis),e}_setupUpAxisRotation(e){const t=new R;switch(e.toLowerCase()){case"x":t.makeRotationAxis(b.Y_AXIS,-Math.PI/2);break;case"y":t.identity();break;case"z":t.makeRotationAxis(b.X_AXIS,-Math.PI/2);break;default:console.warn(`Unknown gltfUpAxis: ${e}, using default`),t.identity();break}this._upRotationMatrix=t}_applyLocalTransform(e,t){const a=t.decompose(oa.EULER_ANGLES);e.localPosition=a[0];const r=new se;r.fromEulerAngles(a[1].x,a[1].y,a[1].z),e.localRotQuat=r,e.localScale=a[2]}_applyWorldTransform(e,t){const a=t.decompose(oa.EULER_ANGLES);e.localPosition=a[0];const r=new se;r.fromEulerAngles(a[1].x,a[1].y,a[1].z),e.localRotQuat=r,e.localScale=a[2]}_getBasePath(e){const t=e.lastIndexOf("/");return t!==-1?e.substring(0,t):""}_resolveURL(e,t){return t.startsWith("http://")||t.startsWith("https://")?t:e+"/"+t}_getUrlExtension(e){const t=e.split(".");return t.length>1?t[t.length-1]:""}getMemoryStats(){const e=this.lruCache.getStats(),t=this.lruCache.maxBytesSize,a=e.bytes,r=t-a,i=this._cacheHits+this._cacheMisses,n=i>0?this._cacheHits/i:0;return{totalTiles:e.size,loadedTiles:e.usedCount,cachedTiles:e.size,totalBytes:t,usedBytes:a,freeBytes:r,cacheHitRate:n}}getLoadedTiles(){const e=[];return this.traverse(t=>(t.loadingState===Ga&&e.push(t),!1),null),e}getVisibleTiles(){return Array.from(this._visibleTiles)}getActiveTiles(){return Array.from(this._activeTiles)}getTileTreeStats(){let e=0,t=0,a=0,r=0,i=0,n=0;return this.traverse(o=>(e++,o.loadingState===Ga&&t++,o.visible&&a++,o.active&&r++,i=Math.max(i,o.depth),n+=o.depth,!1),null),{totalTiles:e,loadedTiles:t,visibleTiles:a,activeTiles:r,maxDepth:i,averageDepth:e>0?n/e:0}}printDebugInfo(){const e=this.stats,t=this.getMemoryStats(),a=this.getTileTreeStats(),r=this.performanceStats,i=this.lruCache.getStats();console.log("=== TilesRenderer Debug Info ==="),console.log("Stats:",e),console.log("Memory:",t),console.log("Tree:",a),console.log("Performance:",r),console.log("Cache:",i),console.log("Queues:",{load:this.loadQueue.getStats(),process:this.processNodeQueue.getStats()})}setPerformanceOptions(e){e.lruCacheMinSize!==void 0&&(this.lruCache.minSize=e.lruCacheMinSize),e.lruCacheMaxSize!==void 0&&(this.lruCache.maxSize=e.lruCacheMaxSize),e.lruCacheMinBytes!==void 0&&(this.lruCache.minBytesSize=e.lruCacheMinBytes),e.lruCacheMaxBytes!==void 0&&(this.lruCache.maxBytesSize=e.lruCacheMaxBytes),e.lruCacheUnloadPercent!==void 0&&(this.lruCache.unloadPercent=e.lruCacheUnloadPercent),e.downloadQueueMaxJobs!==void 0&&(this.loadQueue.maxJobs=e.downloadQueueMaxJobs),e.parseQueueMaxJobs!==void 0&&(this.loadQueue.maxJobs=e.parseQueueMaxJobs),e.processQueueMaxJobs!==void 0&&(this.processNodeQueue.maxJobs=e.processQueueMaxJobs),e.enablePerformanceStats!==void 0&&(this._enablePerformanceStats=e.enablePerformanceStats),e.enableCacheStats!==void 0&&(this._enableCacheStats=e.enableCacheStats)}dispose(e){[...this.plugins].forEach(a=>this.unregisterPlugin(a)),this.lruCache.clear(),this.loadQueue.clear(),this.processNodeQueue.clear(),this._root=null,this.rootTileSet=null,this.rootLoadingState=vr,this.frameCount=0,this.isLoading=!1,this.resetCacheStats(),this.group.destroy(e)}setCamera(e,t,a){this.cameras.includes(e)||this.cameras.push(e),this._cameraMap.set(e,{width:t,height:a}),this._updateCameraInfo()}deleteCamera(e){const t=this.cameras.indexOf(e);t!==-1&&this.cameras.splice(t,1),this._cameraMap.delete(e),this._updateCameraInfo()}setResolution(e,t,a){const r=this._cameraMap.get(e);r?(r.width=t,r.height=a):this._cameraMap.set(e,{width:t,height:a}),this._updateCameraInfo()}forEachLoadedModel(e){this.traverse(t=>(t.loadingState===Ga&&t.cached.scene&&e(t.cached.scene,t),!1),null)}_estimateBytesUsed(e){let t=0;return e.forChild(a=>{const r=a.getComponent(he);r&&r.geometry&&(t+=1024),r&&r.material&&(t+=512)}),t}addEventListener(e,t){this._eventListeners.has(e)||this._eventListeners.set(e,[]),this._eventListeners.get(e).push(t)}removeEventListener(e,t){const a=this._eventListeners.get(e);if(a){const r=a.indexOf(t);r!==-1&&a.splice(r,1)}}async loadTileSet(e,t){const r=(e.endsWith("/")?e.slice(0,-1):e)+"/"+t;this.rootURL=r}get modelList(){const e=[];return this.forEachLoadedModel(t=>{e.push(t)}),e}}class um{asset;extras;geometricError;properties;refine;root;extensionsUsed;extensionsRequired;extensions}class bm{boundingVolume;children;geometricError;transform;content;contents;refine;extensions;extras}class gm{boundingVolume;geometricError;refine;content;contents;children;transform;extensions;extras}class pm{uri;group;metadata}class mm{class;properties}function Am(s,e){let t=0,a=null;return function(...r){const i=Date.now(),n=i-t;n>=e?(t=i,s.apply(this,r)):(a!==null&&clearTimeout(a),a=window.setTimeout(()=>{t=Date.now(),s.apply(this,r),a=null},e-n))}}class Dm extends xt{static count=0;constructor(){super(),Y.register("ColorLitShader",zd),this.shader=new Dt;let e=new qe("ColorLitShader","ColorLitShader");e.passType=fe.COLOR,this.shader.addRenderPass(e),e.setDefine("USE_BRDF",!0),e.setShaderEntry("VertMain","FragMain"),e.setUniformColor("baseColor",new J),e.setUniformColor("emissiveColor",new J),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",_.res.normalTexture),e.setTexture("emissiveMap",_.res.blackTexture)}clone(){return null}debug(){}}class _m extends xt{constructor(){super();let e=new qe("LambertShader","LambertShader");e.setShaderEntry("VertMain","FragMain"),e.passType=fe.COLOR,e.setUniformVector4("transformUV1",new be(0,0,1,1)),e.setUniformVector4("transformUV2",new be(0,0,1,1)),e.setUniformColor("baseColor",new J(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 a=new Dt;a.addRenderPass(e),this.shader=a,this.baseMap=_.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 Bm(s,e){}class vm extends xt{constructor(){super(),this.shader=new $i,this.baseMap=_.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 fl{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 r=e.readInt32();for(let i=0;i<r;i++){let n=new Ur;n.formBytes(e),this.positionCurves.set(n.path,n)}}let t=e.readInt32();for(let r=0;r<t;r++){let i=new Ur;i.formBytes(e),this.rotationCurves.set(i.path,i)}if(this.useSkeletonScale){let r=e.readInt32();for(let i=0;i<r;i++){let n=new Ur;n.formBytes(e),this.scaleCurves.set(n.path,n)}}let a=e.readInt32();for(let r=0;r<a;r++){let i=new Ur;i.formBytes(e),this.floatCurves.set(i.attribute,i)}}}class Ur{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 Gi;switch(this.k){case 1:this._cacheValue=0;break;case 2:this._cacheValue=new de;break;case 3:this._cacheValue=new b;break;case 4:this._cacheValue=new be;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),a=t.lhsIndex,r=t.rhsIndex;e=t.time;let i=this.m_curves[0].getKey(a),n=this.m_curves[0].getKey(r);e%=this.m_curves[0].totalTime;let o=(e-i.time)/(n.time-i.time);se.HELP_0.set(this.m_curves[0].getKey(a).value,this.m_curves[1].getKey(a).value,this.m_curves[2].getKey(a).value,this.m_curves[3].getKey(a).value),se.HELP_1.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),se.HELP_2.slerp(se.HELP_0,se.HELP_1,o),this._cacheValue.x=se.HELP_2.x,this._cacheValue.y=se.HELP_2.y,this._cacheValue.z=se.HELP_2.z,this._cacheValue.w=se.HELP_2.w;break}return this._cacheValue}getKeyCount(){return this.m_curves[0].getKeyCount()}getKey(e){let t=[];for(let a=0;a<this.k;a++)t.push(this.m_curves[a].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 a=0;a<t;a++){let r=new as(0);r.formBytes(e),this.addKeyFrame(r)}}}class xm 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 Um{colorArray;constructor(e){this.colorArray=e}getColor(e){let t=e*this.colorArray.length,a=Math.floor(t),r=Math.min(a+1,this.colorArray.length-1),i=this.colorArray[a],n=this.colorArray[r];return J.lerp(t-a,i,n)}}class rn{controlVertices;constructor(e){this.setControlVertices(e)}setControlVertices(e){e.length==4&&(this.controlVertices=e.concat())}getPoint(e){if(!(e>=0&&e<=1))return b.ZERO;let t=1-e,a=t*t*t,r=3*e*t*t,i=3*e*e*t,n=e*e*e;return this.controlVertices[0].mul(a).add(this.controlVertices[1].mul(r)).add(this.controlVertices[2].mul(i)).add(this.controlVertices[3].mul(n))}getTangent(e){if(!(e>=0&&e<=1))return b.ZERO;let t=this.controlVertices,a=t[0].add(t[1].add(t[0]).mul(e)),r=t[1].add(t[2].add(t[1]).mul(e)),i=t[2].add(t[3].add(t[2]).mul(e)),n=a.add(r.subtract(a).mul(e));return r.add(i.subtract(r).mul(e)).subtract(n)}getClosestParam(e,t=1e-6){return this.getClosestParamRec(e,0,1,t)}getClosestParamRec(e,t,a,r){let i=(t+a)/2;if(a-t<r)return i;let n=(t+i)/2,o=(i+a)/2,l=this.getPoint(n),c=this.getPoint(o),f=l.subtract(e).lengthSquared,d=c.subtract(e).lengthSquared;return f<d?a=i:t=i,this.getClosestParamRec(e,t,a,r)}}var mu=(s=>(s[s.Open=0]="Open",s[s.Closed=1]="Closed",s))(mu||{});class ym{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,a=this.controlVertices;for(let r=1;r<e;r++){let i=a[(r-1)*3],n=a[r*3];t+=i.subtract(n).lengthSquared}return t==0?0:t}computeApproxParamPerUnitLength(){let e=this.computeApproxLength();return this.numCurveSegments/e}computeApproxNormParamPerUnitLength(){return 1/this.computeApproxLength()}interpolatePoints(e,t){let a=e.length;a<2&&console.error("point count must great 1"),this.clear(),this.type=t;let r=this.controlVertices;switch(t){case 0:{this.numCurveSegments=a-1,this.numControlVertices=3*a-2,r.length=this.numControlVertices;for(let o=0;o<a;o++)r[o*3]=e[o];let i=e[1].subtract(e[0]).mul(.25);r[1]=e[0].add(i);let n=e[a-2].subtract(e[a-1]).mul(.25);r[this.numControlVertices-2]=e[a-1].add(n);for(let o=1;o<this.numCurveSegments;o++){let l=e[o-1].subtract(e[o]),c=e[o+1].subtract(e[o]),f=l.lengthSquared,d=c.lengthSquared;if(f>0&&d>0){let h=(f+d)/8,u=c.div(d).subtract(l.div(f));u.normalize(),u=u.mul(h),r[o*3-1]=e[o].subtract(u),r[o*3+1]=e[o].add(u)}else r[o*3-1]=e[o],r[o*3+1]=e[o]}break}case 1:{this.numCurveSegments=a,this.numControlVertices=3*a+1,r.length=this.numControlVertices;for(let i=0;i<a;i++)r[i*3]=e[i];r[this.numControlVertices-1]=e[0];for(let i=1;i<=this.numCurveSegments;i++){let n=i-1,o=(i+1)%this.numCurveSegments,l=i%this.numCurveSegments,c=e[n].subtract(e[l]),f=e[o].subtract(e[l]),d=c.lengthSquared,h=f.lengthSquared,u=3*i-1,m=(3*i+1)%(this.numControlVertices-1);if(d>0&&h>0){let g=(d+h)/8,p=f.div(h).subtract(c.div(d));p.normalize(),p=p.mul(g),r[u]=e[l].subtract(p),r[m]=e[l].add(p)}else r[u]=e[l],r[m]=e[l]}break}}}setControlVertices(e,t){let a=e.length;a<=0||t==0&&a<4||t==1&&a<7||(a-1)%3==0&&(this.clear(),this.type=t,this.numControlVertices=a,this.numCurveSegments=(a-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=zt.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 a=[],r=this.controlVertices;return a[0]=r[3*t+0],a[1]=r[3*t+1],a[2]=r[3*t+2],a[3]=r[3*t+3],new rn(a).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=zt.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 a=this.controlVertices,r=[];return r[0]=a[3*t+0],r[1]=a[3*t+1],r[2]=a[3*t+2],r[3]=a[3*t+3],new rn(r).getTangent(e-t)}getTangentNorm(e){return this.getTangent(e*this.numCurveSegments)}computeClosestParam(e,t){let a=Number.MAX_SAFE_INTEGER,r=0,i=[],n=new rn(i);for(let o=0;o<this.controlVertices.length-1;o+=3){for(let d=0;d<4;d++)i[d]=this.controlVertices[o+d];n.setControlVertices(i);let l=n.getClosestParam(e,t),f=n.getPoint(l).subtract(e).lengthSquared;f<a&&(a=f,r=o/3+l)}return r}computeClosestNormParam(e,t){return this.computeClosestParam(e,t*this.numCurveSegments)}}class Cm extends Map{valueList;keyList;isChange=!0;constructor(e,t,a){if(super(e),t&&(this.keyList=[]),a&&(this.valueList=[]),e)for(let r of e)this.valueList?.push(r[1]),this.keyList?.push(r[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 Au=(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))(Au||{});const Sm=3.141592653589793;class Fm{}function Du(s,e,t){let a=.3333333333333333,r=.5,i=s*a,n=i*i,l=n*i-i*e*r+t*r,c=-n+e*a,f=c*c*c,d=f+l*l;if(d>=0){let m=Math.sqrt(d)-l;return m=m>0?Math.pow(m,a):-Math.pow(-m,a),-i-c/m+m}let h=Math.sqrt(-f),u=Math.acos(-l/h);return h=Math.pow(h,a),h=h-c/h,u=-i+h*Math.cos(u*a),u}function sn(s,e,t,a){let r=1e-5;if(Math.abs(s)<r)return Math.abs(e)>r?(a.r0=-t/e,1):0;let i=e*e-4*s*t;if(i<0)return 0;let n=.5/s,o=Math.sqrt(i);return a.r0=(o-e)*n,a.r1=(-o-e)*n,2}function _u(s,e,t,a,r){let i=0;if(Math.abs(e)>=1e-4){let n=t/e,o=a/e,l=r/e;s[0]=Du(n,o,l),i++;let c=e,f=t+e*s[0],d=a+t*s[0]+e*s[0]*s[0];i+=sn(c,f,d,{r0:s[1],r1:s[2]})}else i+=sn(t,a,r,{r0:s[1],r1:s[2]});return i}class za{coeff=[];static EvalSegment(e,t){return e*(e*(e*t[0]+t[1])+t[2])+t[3]}}class nr{static kMaxNumSegments=8;segments=[];integrationCache=[];doubleIntegrationCache=[];times=[];segmentCount;constructor(){this.segments[nr.kMaxNumSegments]=new za,this.integrationCache[nr.kMaxNumSegments]=0,this.doubleIntegrationCache[nr.kMaxNumSegments]=0,this.times[nr.kMaxNumSegments]=0}calculateMinMax(e,t){e.x=Math.min(e.x,t),e.y=Math.max(e.y,t)}findMinMaxDoubleIntegrated(){let e=de.ZERO.clone(),t=20,a=1/t,r=a;for(let i=0;i<t;i++)this.calculateMinMax(e,this.evaluateDoubleIntegrated(r)),r+=a;return e}findMinMaxIntegrated(){let e=de.ZERO.clone(),t=[],a=[];for(let r=0;r<this.segmentCount;r++){let i=4*this.segments[r].coeff[0],n=3*this.segments[r].coeff[1],o=2*this.segments[r].coeff[2],l=1*this.segments[r].coeff[3],c=[],f=_u(c,i,n,o,l);for(let d=0;d<f;d++){let h=c[d]+t[r];h>=t[r]&&h<a[r]&&this.calculateMinMax(e,this.evaluateIntegrated(h))}this.calculateMinMax(e,this.evaluateIntegrated(a[r])),this.times[r]}return e}generateIntegrationCache(e){e.integrationCache[0]=0;let t=e.times[0],a=0;for(let r=1;r<e.segmentCount;r++){let i=e.segments[r-1].coeff;dl(i);let n=t-a;e.integrationCache[r]=e.integrationCache[r-1]+za.EvalSegment(n,i)*n,a=t,t=e.times[r]}}generateDoubleIntegrationCache(e){let t=0,a=0;for(let r=0;r<e.segmentCount;r++){e.doubleIntegrationCache[r]=t;let i=e.times[r]-a;i=Math.max(i,0),t+=za.EvalSegment(i,e.segments[r].coeff)*i*i+e.integrationCache[r]*i,a=e.times[r]}}integrate(){this.generateIntegrationCache(this);for(let e=0;e<this.segmentCount;e++)dl(this.segments[e].coeff)}doubleIntegrate(){this.generateIntegrationCache(this);for(let e=0;e<this.segmentCount;e++)Bu(this.segments[e].coeff);this.generateDoubleIntegrationCache(this)}static isValidCurve(e){let t=e.getKeyCount(),a=t-1;return e.getKey(0).time!=0&&a++,e.getKey(t-1).time!=1&&a++,a<=nr.kMaxNumSegments}evaluateDoubleIntegrated(e){let t=0;for(let a=0;a<this.segmentCount;a++){if(e<=this.times[a]){let r=e-t;return this.doubleIntegrationCache[a]+this.integrationCache[a]*r+za.EvalSegment(r,this.segments[a].coeff)*r*r}t=this.times[a]}return 1}evaluateIntegrated(e){let t=0;for(let a=0;a<this.segmentCount;a++){if(e<=this.times[a]){let r=e-t;return this.integrationCache[a]+za.EvalSegment(r,this.segments[a].coeff)*r}t=this.times[a]}return 1}evaluate(e){let t=0;for(let a=0;a<this.segmentCount;a++){if(e<=this.times[a])return za.EvalSegment(e-t,this.segments[a].coeff);t=this.times[a]}return 1}buildCurve(e,t){let a=e.getKeyCount();this.segmentCount=1;let r=1.01;if(this.segments.length=0,this.integrationCache.length=0,this.doubleIntegrationCache.length=0,this.times.length=0,this.times[0]=r,a!=0)if(a==1)this.segments[0]=new za,this.segments[0].coeff[3]=e.getKey(0).value*t;else{this.segmentCount=a-1;let i=0;e.getKey(0).time!=0&&(this.segments[0].coeff[3]=e.getKey(0).value,this.times[0]=e.getKey(0).time,i=1);for(let n=0;n<this.segmentCount;n++){let o;e.calculateCacheData(o,n,n+1,0),this.segments[n+i].coeff=o.coeff.concat(),this.times[n+i]=e.getKey(n+1).time}this.segmentCount+=i,e.getKey(a-1).time!=1&&(this.segments[this.segmentCount].coeff[3]=e.getKey(a-1).value,this.segmentCount++),this.times[this.segmentCount-1]=r;for(let n=0;n<this.segmentCount;n++)this.segments[n].coeff[0]*=t,this.segments[n].coeff[1]*=t,this.segments[n].coeff[2]*=t,this.segments[n].coeff[3]*=t}return!0}}function Bu(s){s[0]/=20,s[1]/=12,s[2]/=6,s[3]/=2}function dl(s){s[0]/=4,s[1]/=3,s[2]/=2,s[3]/=1}var vu=(s=>(s[s.kEMScalar=0]="kEMScalar",s[s.kEMOptimized=1]="kEMOptimized",s[s.kEMOptimizedMinMax=2]="kEMOptimizedMinMax",s[s.kEMSlow=3]="kEMSlow",s))(vu||{}),xu=(s=>(s[s.kMMCScalar=0]="kMMCScalar",s[s.kMMCCurve=1]="kMMCCurve",s[s.kMMCTwoCurves=2]="kMMCTwoCurves",s[s.kMMCTwoConstants=3]="kMMCTwoConstants",s))(xu||{});class km{max;min}class Em{max;min;integrate(){this.max.integrate(),this.min.integrate()}doubleIntegrate(){this.max.doubleIntegrate(),this.min.doubleIntegrate()}findMinMaxIntegrated(){return null}findMinMaxDoubleIntegrated(){return null}}class Uu{minMaxState;minCurve;maxCurve;_scalar=1;_minScalar;constructor(e=1){this._scalar=e,this.minMaxState=0,this.minCurve=new Gi,this.maxCurve=new Gi}setScalar(e){this._scalar=e}getScalar(){return this._scalar}static evaluateSlow(e,t,a){let r=e.maxCurve.getValue(t)*e.getScalar();return e.minMaxState==2?Nr(e.minCurve.getValue(t)*e.getScalar(),r,a):r}static evaluate(e,t,a=1){if(e.minMaxState==0)return e.getScalar();let r=e.maxCurve.getValue(t)*e.getScalar();return e.minMaxState==1?Nr(e.minCurve.getValue(t)*e.getScalar(),r,a):e.minMaxState==3?Nr(e._minScalar,e._scalar,a):e.minMaxState==2?Nr(e.minCurve.getValue(t)*e.getScalar(),r,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 wm{value=0;mode=0;spread=0;speed=new Uu;unSerialized(e){this.value=e.value,this.mode=e.mode,this.spread=e.spread,this.speed.unSerialized(e.speed)}}function Im(s,e){let t=nr.isValidCurve(s.max);return e!=2&&e!=3?t:t&&nr.isValidCurve(s.min)}function Rm(s,e,t,a){s.max.buildCurve(e.max,t),a!=2&&a!=3?s.min.buildCurve(e.max,t):s.min.buildCurve(e.min,t)}function Qm(s,e){let t=e.getKeyCount();if(t!=0)if(t==1)es(s,e.getKey(0).value);else{let a=t-1;es(s,e.getKey(0).value);for(let r=0;r<a;r++){let i=new Lo;e.calculateCacheData(i,r,r+1,0);let n=3*i.coeff[0],o=2*i.coeff[1],l=1*i.coeff[2],c=e.getKey(r).time,f=e.getKey(r+1).time,d=[],h=sn(n,o,l,{r0:d[0],r1:d[1]});for(let u=0;u<h;u++)d[u]>=0&&d[u]+c<f&&es(s,za.EvalSegment(d[u],i.coeff));es(s,za.EvalSegment(f-c,i.coeff))}}}function es(s,e){s.x=Math.min(s.x,e),s.y=Math.max(s.y,e)}class Or{static BACK=0;static FRONT=1;static IN=0;static OUT=1;static INTERSECT=2}class yu{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,a=0,r=0){this.a=e,this.b=t,this.c=a,this.d=r}setTo(e=0,t=0,a=0,r=0){this.a=e,this.b=t,this.c=a,this.d=r}fromPoints(e,t,a){var r=t.x-e.x,i=t.y-e.y,n=t.z-e.z,o=a.x-e.x,l=a.y-e.y,c=a.z-e.z;this.a=i*c-n*l,this.b=n*o-r*c,this.c=r*l-i*o,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 a=this.distance(e);return a<-t?Or.BACK:a>t?Or.FRONT:Or.INTERSECT}toString(){return"Plane3D [a:"+this.a+", b:"+this.b+", c:"+this.c+", d:"+this.d+"]"}}function Tm(s,e){return Math.random()*e+Math.random()*s+(e-s)*Math.random()}function Mm(s,e,t){let a=t*Math.random();return Math.random()*e*a+Math.random()*s*a+(e-s)*Math.random()*a}function Cu(s,e,t){let a=0,r=0;for(;a===0;)a=Math.random();for(;r===0;)r=Math.random();let i=Math.sqrt(-2*Math.log(a))*Math.cos(2*Math.PI*r);return i=i/10+.5,(i>1||i<0)&&(i=Cu(s,e,t)),i=Math.pow(i,t),i*=e-s,i+=s,i}function Sa(s){return s>0?Math.floor(s):Math.floor(s)-1}let Ue=[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 hl(s,e){let t=s&15,a=1+(t&7);return t&8&&(a=-a),a*e}function nn(s,e,t){let a=s&7,r=a<4?e:t,i=a<4?t:e;return(a&1?-r:r)+(a&2?-2*i:2*i)}function ts(s,e,t,a){let r=s&15,i=r<8?e:t,n=r<4?t:r==12||r==14?e:a;return(r&1?-i:i)+(r&2?-n:n)}function Bi(s,e,t,a,r){let i=s&31,n=i<24?e:t,o=i<16?t:a,l=i<8?a:r;return(i&1?-n:n)+(i&2?-o:o)+(i&4?-l:l)}let ta=[[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 Nm(s){let e=Sa(s),t=e+1,a=s-e,r=a-1,i,n,o=1-a*a;o*=o,i=o*o*hl(Ue[e&255],a);let l=1-r*r;return l*=l,n=l*l*hl(Ue[t&255],r),.25*(i+n)}function Pm(s,e){const t=.366025403,a=.211324865;let r,i,n,o=(s+e)*t,l=s+o,c=e+o,f=Sa(l),d=Sa(c),h=(f+d)*a,u=f-h,m=d-h,g=s-u,p=e-m,A,D;g>p?(A=1,D=0):(A=0,D=1);let B=g-A+a,v=p-D+a,U=g-1+2*a,y=p-1+2*a,S=f&255,F=d&255,C=.5-g*g-p*p;C<0?r=0:(C*=C,r=C*C*nn(Ue[S+Ue[F]],g,p));let w=.5-B*B-v*v;w<0?i=0:(w*=w,i=w*w*nn(Ue[S+A+Ue[F+D]],B,v));let E=.5-U*U-y*y;return E<0?n=0:(E*=E,n=E*E*nn(Ue[S+1+Ue[F+1]],U,y)),40*(r+i+n)}function Vm(s,e,t){const a=.333333333,r=.166666667;let i,n,o,l,c=(s+e+t)*a,f=s+c,d=e+c,h=t+c,u=Sa(f),m=Sa(d),g=Sa(h),p=(u+m+g)*r,A=u-p,D=m-p,B=g-p,v=s-A,U=e-D,y=t-B,S,F,C,w,E,Q;v>=U?U>=y?(S=1,F=0,C=0,w=1,E=1,Q=0):v>=y?(S=1,F=0,C=0,w=1,E=0,Q=1):(S=0,F=0,C=1,w=1,E=0,Q=1):U<y?(S=0,F=0,C=1,w=0,E=1,Q=1):v<y?(S=0,F=1,C=0,w=0,E=1,Q=1):(S=0,F=1,C=0,w=1,E=1,Q=0);let T=v-S+r,j=U-F+r,ue=y-C+r,ee=v-w+2*r,N=U-E+2*r,M=y-Q+2*r,O=v-1+3*r,W=U-1+3*r,ae=y-1+3*r,z=u&255,K=m&255,$=g&255,re=.6-v*v-U*U-y*y;re<0?i=0:(re*=re,i=re*re*ts(Ue[z+Ue[K+Ue[$]]],v,U,y));let ce=.6-T*T-j*j-ue*ue;ce<0?n=0:(ce*=ce,n=ce*ce*ts(Ue[z+S+Ue[K+F+Ue[$+C]]],T,j,ue));let Ae=.6-ee*ee-N*N-M*M;Ae<0?o=0:(Ae*=Ae,o=Ae*Ae*ts(Ue[z+w+Ue[K+E+Ue[$+Q]]],ee,N,M));let Qe=.6-O*O-W*W-ae*ae;return Qe<0?l=0:(Qe*=Qe,l=Qe*Qe*ts(Ue[z+1+Ue[K+1+Ue[$+1]]],O,W,ae)),32*(i+n+o+l)}function Om(s,e,t,a){const r=.309016994,i=.138196601;let n,o,l,c,f,d=(s+e+t+a)*r,h=s+d,u=e+d,m=t+d,g=a+d,p=Sa(h),A=Sa(u),D=Sa(m),B=Sa(g),v=(p+A+D+B)*i,U=p-v,y=A-v,S=D-v,F=B-v,C=s-U,w=e-y,E=t-S,Q=a-F,T=C>w?32:0,j=C>E?16:0,ue=w>E?8:0,ee=C>Q?4:0,N=w>Q?2:0,M=E>Q?1:0,O=T+j+ue+ee+N+M,W,ae,z,K,$,re,ce,Ae,Qe,Ve,H,ie;W=ta[O][0]>=3?1:0,ae=ta[O][1]>=3?1:0,z=ta[O][2]>=3?1:0,K=ta[O][3]>=3?1:0,$=ta[O][0]>=2?1:0,re=ta[O][1]>=2?1:0,ce=ta[O][2]>=2?1:0,Ae=ta[O][3]>=2?1:0,Qe=ta[O][0]>=1?1:0,Ve=ta[O][1]>=1?1:0,H=ta[O][2]>=1?1:0,ie=ta[O][3]>=1?1:0;let le=C-W+i,ge=w-ae+i,Ie=E-z+i,me=Q-K+i,ye=C-$+2*i,Se=w-re+2*i,Me=E-ce+2*i,Ze=Q-Ae+2*i,$e=C-Qe+3*i,ft=w-Ve+3*i,Za=E-H+3*i,ga=Q-ie+3*i,Qa=C-1+4*i,Ht=w-1+4*i,Ta=E-1+4*i,Ma=Q-1+4*i,Vt=p&255,pa=A&255,ma=D&255,ia=B&255,Ir=.6-C*C-w*w-E*E-Q*Q;Ir<0?n=0:(Ir*=Ir,n=Ir*Ir*Bi(Ue[Vt+Ue[pa+Ue[ma+Ue[ia]]]],C,w,E,Q));let Rr=.6-le*le-ge*ge-Ie*Ie-me*me;Rr<0?o=0:(Rr*=Rr,o=Rr*Rr*Bi(Ue[Vt+W+Ue[pa+ae+Ue[ma+z+Ue[ia+K]]]],le,ge,Ie,me));let Qr=.6-ye*ye-Se*Se-Me*Me-Ze*Ze;Qr<0?l=0:(Qr*=Qr,l=Qr*Qr*Bi(Ue[Vt+$+Ue[pa+re+Ue[ma+ce+Ue[ia+Ae]]]],ye,Se,Me,Ze));let Tr=.6-$e*$e-ft*ft-Za*Za-ga*ga;Tr<0?c=0:(Tr*=Tr,c=Tr*Tr*Bi(Ue[Vt+Qe+Ue[pa+Ve+Ue[ma+H+Ue[ia+ie]]]],$e,ft,Za,ga));let Mr=.6-Qa*Qa-Ht*Ht-Ta*Ta-Ma*Ma;return Mr<0?f=0:(Mr*=Mr,f=Mr*Mr*Bi(Ue[Vt+1+Ue[pa+1+Ue[ma+1+Ue[ia+1]]]],Qa,Ht,Ta,Ma)),27*(n+o+l+c+f)}class Dl extends de{static uv_0=new Dl;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,a){let r=Math.floor(e%(t*a)),i=Math.floor(r/t),n=r%t;return new be(i/t,n/a,1/t,1/a)}}class as{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,a){switch(e){case X.single:{let r=this.getKeyFrame(0);r[a]=t}break;case X.float:{let r=this.getKeyFrame(0);r[a]=t}break;case X.vector2:{let r=t,i=this.getKeyFrame(0);i[a]=r.x;let n=this.getKeyFrame(1);n[a]=r.y}break;case X.vector3:{let r=t,i=this.getKeyFrame(0);i[a]=r.x;let n=this.getKeyFrame(1);n[a]=r.y;let o=this.getKeyFrame(2);o[a]=r.z}break;case X.vector4:{let r=t,i=this.getKeyFrame(0);i[a]=r.x;let n=this.getKeyFrame(1);n[a]=r.y;let o=this.getKeyFrame(2);o[a]=r.z;let l=this.getKeyFrame(3);l[a]=r.w}break;case X.quaternion:{let r=t,i=this.getKeyFrame(0);i[a]=r.x;let n=this.getKeyFrame(1);n[a]=r.y;let o=this.getKeyFrame(2);o[a]=r.z;let l=this.getKeyFrame(3);l[a]=r.w}break}}getKeyFrame(e){let t=this.propertyKeyFrame[e];return t||(t=new Js,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:a}=Ja.parser(e);this.split(t,a,"value")}{let{t,v:a}=Ja.parser(e);this.split(t,a,"inSlope")}{let{t,v:a}=Ja.parser(e);this.split(t,a,"outSlope")}this.tangentMode=e.readInt32(),this.weightedMode=e.readInt32();{let{t,v:a}=Ja.parser(e);this.split(t,a,"inWeight")}{let{t,v:a}=Ja.parser(e);this.split(t,a,"outWeight")}}}class Lm{static sub(e,t){switch(e.constructor.name){case"number":return e-t;case"Vector2":{let r=e,i=t;return new de(r.x-i.x,r.y-i.y)}case"Vector3":{let r=e,i=t;return new b(r.x-i.x,r.y-i.y,r.z-i.z)}case"Vector4":{let r=e,i=t;return new be(r.x-i.x,r.y-i.y,r.z-i.z,r.w-i.w)}case"Quaternion":{let r=e,i=t;return new se(r.x-i.x,r.y-i.y,r.z-i.z,r.w-i.w)}}}}class rs{_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 a=this.remove(e);return this._keys.push(e),this._values.push(t),a}remove(e){var t=this._keys.indexOf(e),a;return t>-1&&(a=this._values[t],this._keys.splice(t,1),this._values.splice(t,1)),a}getValues(){return this._values}getKeys(){return this._keys}clear(){this._values.length=0,this._keys.length=0}}class yr{static WalkAble=1}class is{static SetConst(e){this.EPSILON=e,this.POWER_EPSILON=e*e}static EPSILON=.1;static POWER_EPSILON=this.EPSILON*this.EPSILON}class Tt extends b{static CALC_VECTOR3D1=new b;static CALC_VECTOR3D2=new b;static CALC_VECTOR3D3=new b;static CALC_VECTOR3D4=new b;static CALC_VECTOR3D5=new b;_pointId=0;constructor(e,t,a,r){super(t,a,r,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)<is.POWER_EPSILON}static calcDistance(e,t){return Tt.CALC_VECTOR3D3.setTo(e.x-t.x,e.y-t.y,e.z-t.z),Tt.CALC_VECTOR3D3.length}}class Su{_openedList;_closedList;_endNode;_startNode;_triangleChannel;_navMesh;_findIndex=0;constructor(){this._openedList=new Array,this._closedList=new Array}findPath(e,t,a){return this._findIndex++,this._navMesh=e,this._startNode=t,this._endNode=a,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=[],a;e!=this._endNode;){t=e.getNeibourTriangles(t,yr.WalkAble,yr.WalkAble);for(a of t)if(a.closeId!=this._findIndex&&!(a==e||!a.walkAble)){var r=e.gg+Tt.calcDistance(a,e)*a.costMultiplier,i=Tt.calcDistance(a,this._endNode),n=r+i;a.openId==this._findIndex?a.f>n&&(a.f=n,a.gg=r,a.h=i,a.parent=e):(a.f=n,a.gg=r,a.h=i,a.parent=e,a.openId=this._findIndex,this._openedList.push(a))}if(e.closeId=this._findIndex,this._closedList.push(e),this._openedList.length==0)return!1;this._openedList.sort(function(o,l){return o.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 ka extends Tt{_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 ka(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 wa{_edgeMask=0;_edgeSize=0;_pointA;_pointB;_triangleOwners;_centerPoint;_edgeDirA2B;crossPoint;fatPointA;fatPointB;static CALC_FAT_VECTOR=new b;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 b,this._edgeMask=yr.WalkAble,Tt.CALC_VECTOR3D1.setTo(e.x-t.x,e.y-t.y,e.z-t.z),this._edgeSize=Tt.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 ka(this._pointA,this),this.fatPointB=this.fatPointB||new ka(this._pointB,this),this.fatPointA.radius!=e&&(wa.CALC_FAT_VECTOR.copyFrom(this._edgeDirA2B),wa.CALC_FAT_VECTOR.scaleBy(e),wa.CALC_FAT_VECTOR.incrementBy(this._pointA),this.fatPointA.copyFrom(wa.CALC_FAT_VECTOR),this.fatPointA.radius=e),this.fatPointB.radius!=e&&(wa.CALC_FAT_VECTOR.copyFrom(this._edgeDirA2B),wa.CALC_FAT_VECTOR.scaleBy(-e),wa.CALC_FAT_VECTOR.incrementBy(this._pointB),this.fatPointB.copyFrom(wa.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 Tt.equalPoint(e,this._pointA)?this._pointA:Tt.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 Tt.equalPoint(e,this._pointA)?this._pointA:Tt.equalPoint(e,this._pointB)?this._pointB:null}get pointA(){return this._pointA}get pointB(){return this._pointB}get walkAble(){return(this._edgeMask&yr.WalkAble)==yr.WalkAble}testMask(e){return(this._edgeMask&e)==e}}class _e{endPoint;curPoint;rayA;rayB;rayAPoint;rayBPoint;static RAY_1=new b;static RAY_2=new b;static TEST_RAY=new b;static TEST_RAY_1=new b;static TEST_RAY_2=new b;static CALC_CROSS_POINT=new b;static CALC_CROSS_TEST=new b;cornerPoint;cornerEdge;continuePass(e,t,a){this.resetData(),this.curPoint=e,this.endPoint=t,this.cornerEdge=a}passEdge(e,t,a,r){if((this.rayA==null||this.rayB==null)&&(this.rayA=_e.RAY_1,this.rayB=_e.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)),r)return this.checkEndPoint(a);if(_e.TEST_RAY.setTo(a.x-this.curPoint.x,0,a.z-this.curPoint.z),this.isPointAtCenter(_e.TEST_RAY,this.rayA,this.rayB)){this.hasCrossPoint(t.pointA,t.pointB,this.rayAPoint,this.rayA)?(this.rayB.copyFrom(_e.TEST_RAY),a instanceof Tt?this.rayBPoint=a:this.rayBPoint=null):(this.rayA.copyFrom(_e.TEST_RAY),a instanceof Tt?this.rayAPoint=a:this.rayAPoint=null);var i=t.getAnotherPoint(a);_e.TEST_RAY.setTo(i.x-this.curPoint.x,0,i.z-this.curPoint.z),(i==this.rayAPoint||i==this.rayBPoint||this.isPointAtCenter(_e.TEST_RAY,this.rayA,this.rayB))&&(this.cornerEdge=t)}else{var n;if(_e.TEST_RAY_1.copyFrom(t.pointA),_e.TEST_RAY_1.decrementBy(this.curPoint),_e.TEST_RAY_2.copyFrom(t.pointB),_e.TEST_RAY_2.decrementBy(this.curPoint),_e.TEST_RAY_1.y=0,_e.TEST_RAY_2.y=0,this.isPointAtCenter(this.rayA,_e.TEST_RAY_1,_e.TEST_RAY_2)||this.isPointAtCenter(this.rayB,_e.TEST_RAY_1,_e.TEST_RAY_2)?n=!1:n=!0,n)return this.isPointAtCenter(this.rayA,_e.TEST_RAY,this.rayB)?this.cornerPoint=this.rayAPoint:this.cornerPoint=this.rayBPoint,this.cornerEdge.crossPoint=this.cornerPoint,!1}return!0}checkEndPoint(e){return _e.TEST_RAY.setTo(e.x-this.curPoint.x,0,e.z-this.curPoint.z),this.isPointAtCenter(_e.TEST_RAY,this.rayA,this.rayB)?!0:(this.isPointAtCenter(this.rayA,_e.TEST_RAY,this.rayB)?this.cornerPoint=this.rayAPoint:this.cornerPoint=this.rayBPoint,this.cornerEdge.crossPoint=this.cornerPoint,!1)}calcCrossEdge(e,t,a){return this.calcCrossPoint(e.fatPointA,e.fatPointB,t,a)}calcCrossPoint(e,t,a,r){_e.CALC_CROSS_POINT.copyFrom(t),_e.CALC_CROSS_POINT.decrementBy(e);let i=_e.CALC_CROSS_POINT.x*r.z-r.x*_e.CALC_CROSS_POINT.z;var n=0;return i!=0&&(n=((e.z-a.z)*r.x-(e.x-a.x)*r.z)/i),n>1?n=1:n<0&&(n=0),_e.CALC_CROSS_POINT.scaleBy(n),_e.CALC_CROSS_POINT.incrementBy(e),_e.CALC_CROSS_POINT.clone()}calcCrossPointOut(e,t,a,r){_e.CALC_CROSS_POINT.copyFrom(t),_e.CALC_CROSS_POINT.decrementBy(e);var i=((e.z-a.z)*r.x-(e.x-a.x)*r.z)/(_e.CALC_CROSS_POINT.x*r.z-r.x*_e.CALC_CROSS_POINT.z);return i<=1&&i>=0?null:(_e.CALC_CROSS_POINT.scaleBy(i),_e.CALC_CROSS_POINT.incrementBy(e),_e.CALC_CROSS_POINT.clone())}hasCrossPoint(e,t,a,r){_e.CALC_CROSS_TEST.copyFrom(t),_e.CALC_CROSS_TEST.decrementBy(e);var i=((e.z-a.z)*r.x-(e.x-a.x)*r.z)/(_e.CALC_CROSS_TEST.x*r.z-r.x*_e.CALC_CROSS_TEST.z);return i<=1&&i>=0}isPointAtCenter(e,t,a){var r=t.crossProduct(e);if(r.length==0&&e.length<t.length)return!0;var i=a.crossProduct(e);return i.length==0&&e.length<a.length?!0:(r.normalize(),i.normalize(),r.incrementBy(i),r.length<.01)}resetData(){this.cornerEdge=null,this.cornerPoint=null,this.curPoint=null,this.rayA=this.rayB=null,this.rayAPoint=this.rayBPoint=null,_e.RAY_1.setTo(0,0,0),_e.RAY_2.setTo(0,0,0)}}class sr{_aiRadius=0;_router;_result;_tempPublicEdgeList=new Array;_tempSamePlaneList=new Array;static CROSS_TEST_DIRECTION=new b;constructor(){this._router=new _e}searchPath(e,t,a,r=0){return r<=0&&(r=1),this._aiRadius=r*1.5,this.searchEnable(e,t,a)?(this.search(e,t,a),!0):!1}get path(){return this._result}searchEnable(e,t,a){return!(e==null||t==null||a==null||a[0].plane.classifyPoint(e,is.EPSILON)!=Or.INTERSECT||a[a.length-1].plane.classifyPoint(t,is.EPSILON)!=Or.INTERSECT)}search(e,t,a){this._tempPublicEdgeList.length=0,this._tempSamePlaneList.length=0;var r=0,i=a.length-1,n,o,l,c;for(r=0;r<i;r++)o=a[r].getPublicEdge(a[r+1]),o.crossPoint=null,o.initFatPoints(this._aiRadius),this._tempPublicEdgeList.push(o),n=a[r],c=n.plane,n=a[r+1],l=n.getEdgeAgainstPoint(o),this._tempSamePlaneList.push(c.classifyPoint(l,is.EPSILON)==Or.INTERSECT);this._router.continuePass(e,t,this._tempPublicEdgeList[0]),i=this._tempPublicEdgeList.length;var f,d,h,u;for(r=0;r<i;r++)o=this._tempPublicEdgeList[r],n=a[r+1],u=r==i-1,u?l=t:l=n.getEdgeAgainstPoint(o),h=this._router.passEdge(o,this._tempPublicEdgeList[r+1],l,u),h||(f=this._router.cornerPoint,d=this._router.cornerEdge,r=this._tempPublicEdgeList.indexOf(d),this._router.continuePass(f,t,this._tempPublicEdgeList[r+1]));this.pushAllPathPoint2(e,t),this._result.length>=3&&(this.optimusTerminusFat(),this.optimusByRadius());let m=[];for(let g of this._result)m.push(new b().copyFrom(g));this._result=m}optimusTerminusFat(){var e,t,a;a=this._result[1],a instanceof ka&&(e=a),a=this._result[this._result.length-2],a instanceof ka&&(t=a),e&&(this._result[1]=e.scalePoint()),t&&e!=t&&(this._result[this._result.length-2]=t.scalePoint())}pushAllPathPoint2(e,t){var a=this._tempPublicEdgeList.length,r,i;this._result=new Array,this._result.push(e);for(var n=e,o,l,c,f=0;f<a;f++)if(r=this._tempPublicEdgeList[f],l=null,r.crossPoint)l=this.getFatPoint(r,r.crossPoint),l?this._result.push(l):this._result.push(r.crossPoint),n=r.crossPoint;else{i=null,o=null;for(var d=f+1;d<a&&(i=this._tempPublicEdgeList[d],o=i.crossPoint,!o);d++);o==null&&(o=t),l=this.getFatPoint(r,o),l?this._result.push(l):(o==n?c=o.clone():(sr.CROSS_TEST_DIRECTION.setTo(o.x-n.x,0,o.z-n.z),c=this._router.calcCrossEdge(r,n,sr.CROSS_TEST_DIRECTION)),this._result.push(c))}this._result.push(t)}optimusByRadius(){var e=new Array;e.length=this._result.length;var t=this._result.length-2,a,r,i,n,o,l,c,f,d,h,u,m,g;for(g=0;g<t;g++)c=f=d=null,n=o=l=null,u=!1,m=null,a=this._result[g],r=this._result[g+1],i=this._result[g+2],a instanceof ka&&(n=a),r instanceof ka&&(o=r),i instanceof ka&&(l=i),n&&(c=n.ownerPoint),o&&(f=o.ownerPoint),l&&(d=l.ownerPoint),c&&f&&c==f&&f!=d&&(u=!0),d&&f&&d==f&&c!=f&&(u=!0),u&&(sr.CROSS_TEST_DIRECTION.copyFrom(a),sr.CROSS_TEST_DIRECTION.decrementBy(i),h=o.ownerEdge,u=this._router.hasCrossPoint(h.pointA,h.pointB,i,sr.CROSS_TEST_DIRECTION),u&&(m=this._router.calcCrossPointOut(f,r,i,sr.CROSS_TEST_DIRECTION)),m&&(e[g+1]=m))}getFatPoint(e,t){if(e==null)return null;var a;t instanceof ka&&(a=t);var r;return a?r=a.ownerPoint:r=e.getEqualPoint(t),r==null?null:(a=e.getFatPoint(r),a)}}class Fu extends b{_id=0;_plane;_points=new Array;_edges=new Array;_neibourTriangles=new rs;_pointAgainstEdge=new rs;_edgeAgainstPoint=new rs;_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 Pt,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,a,r){super(0,0,0,0),this._id=e,this._mask=yr.WalkAble,this._edges.push(t,a,r);var i;for(i of this._edges)this._points.indexOf(i.pointA)==-1&&this._points.push(i.pointA),this._points.indexOf(i.pointB)==-1&&this._points.push(i.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 yu,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,a=1){e=e||new Array,e.length=0;var r,i,n=this._neibourTriangles.getKeys(),o;for(o of n)i=o,i.testMask(t)&&(r=this._neibourTriangles.getValueByKey(i),r.testMask(a)&&e.push(r));return e}getEdges(e=null,t=1){e=e||new Array,e.length=0;var a;for(a of this._edges)a.testMask(t)&&e.push(a);return e}get walkAble(){return this.testMask(yr.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(),a;for(a of t)if(this._neibourTriangles.getValueByKey(a)==e)return a}return null}loopPublicEdge(e){var t,a;if(e&&e!=this){for(t of this._edges)for(a of e._edges)if(t==a)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 Gm{_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 rs,this.initPoints(e),this.initEdgesAndTriangles(t),this.createConnections(),this._nav3dAstar=new Su,this._nav3dFunnel=new sr,this._terrainQuad=new Qh(8,128),this._terrainQuad.createQuadTree(this._nav3dTriangles)}getTriangleAtPoint(e,t=5){return this._terrainQuad.getTriangleAtPoint(e,t)}findPath(e,t,a=5){this._path=null,this._triangleList=null;var r=this.getTriangleAtPoint(e,10),i=this.getTriangleAtPoint(t,10),n=this._nav3dAstar.findPath(this,r,i);return n?(this._triangleList=this._nav3dAstar.channel,n=this._nav3dFunnel.searchPath(e,t,this._triangleList,a),this._path=this._nav3dFunnel.path,n):!1}initPoints(e){for(var t,a,r=e.length,i=0;i<r;i++)t=e[i],a=new Tt(i,t.x,t.y,t.z),this._nav3dPoints.push(a)}initEdgesAndTriangles(e){for(var t,a,r,i,n,o=e.length,l=0;l<o;l++)t=e[l],a=this.tryCreateEdge(t[0],t[1]),r=this.tryCreateEdge(t[1],t[2]),i=this.tryCreateEdge(t[2],t[0]),!(a==null||r==null||i==null)&&(n=new Fu(l,a,r,i),this._nav3dTriangles.push(n))}tryCreateEdge(e,t){if(e==t)throw new Error("edge point index error!!!");if(e>t){var a=e;e=t,t=a}var r=this._edgesDict.getValueByKey(e+"_"+t);return r==null&&(r=new wa(this._nav3dPoints[e],this._nav3dPoints[t]),this._nav3dEdges.push(r),this._edgesDict.put(e+"_"+t,r)),r}createConnections(){for(var e=this._nav3dTriangles.length,t=this._nav3dTriangles.length,a,r,i,n,o=0;o<e;o++){a=this._nav3dTriangles[o];for(i of a.edges)i.addTriangleOwners(a);for(var l=0;l<t;l++)r=this._nav3dTriangles[l],a!=r&&(n=a.loopPublicEdge(r),n&&(a.addNeibour(n,r),r.addNeibour(n,a)))}}}class _l{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 _l;return e.setTo(this.x,this.y),e}normalize(){var e=length;e!=0&&this.setTo(this.x/e,this.y/e)}}class Wa extends Le{width;height;depth;constructor(e=1,t=1,a=1){super(),this.width=e,this.height=t,this.depth=a,this.initVertex()}initVertex(){let e=this.width/2,t=this.height/2,a=this.depth/2;this.bounds=new Ce(b.ZERO.clone(),new b(this.width,this.height,this.depth));let r=new Float32Array([-e,t,a,e,t,a,e,t,-a,-e,t,-a,-e,t,a,e,t,-a,e,-t,a,-e,-t,a,-e,-t,-a,e,-t,-a,e,-t,a,-e,-t,-a,-e,-t,a,-e,t,a,-e,t,-a,-e,-t,-a,-e,-t,a,-e,t,-a,e,t,a,e,-t,a,e,-t,-a,e,t,-a,e,t,a,e,-t,-a,e,t,a,-e,t,a,-e,-t,a,-e,-t,a,e,-t,a,e,t,a,e,-t,-a,-e,-t,-a,-e,t,-a,e,t,-a,e,-t,-a,-e,t,-a]),i=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]),n=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]),o=[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(o.reverse());this.setIndices(l),this.setAttribute(G.position,r),this.setAttribute(G.normal,i),this.setAttribute(G.uv,n),this.setAttribute(G.TEXCOORD_1,n),this.addSubGeometry({indexStart:0,indexCount:o.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class ku extends Le{radiusTop;radiusBottom;height;radialSegments;heightSegments;openEnded;thetaStart;thetaLength;constructor(e=1,t=1,a=1,r=8,i=8,n=!1,o=0,l=Math.PI*2){super(),this.radiusTop=e,this.radiusBottom=t,this.height=a,this.radialSegments=r,this.heightSegments=i,this.openEnded=n,this.thetaStart=o,this.thetaLength=l,this.instanceID=Wt(),this.buildGeometry()}addGroup(e,t,a){this.addSubGeometry({indexStart:e,indexCount:t,vertexStart:e,vertexCount:0,firstStart:0,index:a,topology:0})}buildGeometry(){const e=this;this.radialSegments=Math.floor(this.radialSegments),this.heightSegments=Math.floor(this.heightSegments);const t=[],a=[],r=[],i=[];let n=0;const o=[],l=this.height/2;let c=0;m(),this.openEnded===!1&&(this.radiusTop>0&&g(!0),this.radiusBottom>0&&g(!1));let f=new Float32Array(t),d=new Float32Array(a),h=new Float32Array(r),u=new Uint16Array(i);this.setAttribute(G.position,f),this.setAttribute(G.normal,d),this.setAttribute(G.uv,h),this.setAttribute(G.TEXCOORD_1,h),this.setIndices(u);function m(){const p=new b,A=new b;let D=0;const B=(e.radiusBottom-e.radiusTop)/e.height;for(let v=0;v<=e.heightSegments;v++){const U=[],y=v/e.heightSegments,S=y*(e.radiusBottom-e.radiusTop)+e.radiusTop;for(let F=0;F<=e.radialSegments;F++){const C=F/e.radialSegments;let w=C*e.thetaLength+e.thetaStart;F==e.radialSegments&&Math.abs(e.thetaLength-e.thetaStart)==Math.PI*2&&(w=0);const E=Math.sin(w),Q=Math.cos(w);A.x=S*E,A.y=-y*e.height+l,A.z=S*Q,t.push(A.x,A.y,A.z),p.set(E,B,Q).normalize(),a.push(p.x,p.y,p.z),r.push(C,1-y),U.push(n++)}o.push(U)}for(let v=0;v<e.radialSegments;v++)for(let U=0;U<e.heightSegments;U++){const y=o[U][v],S=o[U+1][v],F=o[U+1][v+1],C=o[U][v+1];i.push(y,S,C),i.push(S,F,C),D+=6}e.addGroup(c,D,0),c+=D}function g(p){const A=n,D=new de,B=new b;let v=0;const U=p===!0?e.radiusTop:e.radiusBottom,y=p===!0?1:-1;for(let F=1;F<=e.radialSegments;F++)t.push(0,l*y,0),a.push(0,y,0),r.push(.5,.5),n++;const S=n;for(let F=0;F<=e.radialSegments;F++){const w=F/e.radialSegments*e.thetaLength+e.thetaStart,E=Math.cos(w),Q=Math.sin(w);B.x=U*Q,B.y=l*y,B.z=U*E,t.push(B.x,B.y,B.z),a.push(0,y,0),D.x=E*.5+.5,D.y=Q*.5*y+.5,r.push(D.x,D.y),n++}for(let F=0;F<e.radialSegments;F++){const C=A+F,w=S+F;p===!0?i.push(w,w+1,C):i.push(w+1,w,C),v+=3}e.addGroup(c,v,p===!0?1:2),c+=v}}}class Eu extends Le{radius;tube;radialSegments;tubularSegments;constructor(e=.4,t=.1,a=32,r=32){super(),this.radius=e,this.tube=t,this.radialSegments=a,this.tubularSegments=r,this.initVertex()}initVertex(){const e=2*Math.PI,t=this.radius,a=this.tube,r=this.radialSegments,i=this.tubularSegments;this.bounds=new Ce(b.ZERO.clone(),new b(t*2,a*2,t*2));var n=(r+1)*(i+1);let o=new Float32Array(n*3),l=new Float32Array(n*3),c=new Float32Array(n*2),f=new Uint16Array(r*i*2*3),d=0,h=0,u=0,m=0;for(let g=0;g<=r;g++)for(let p=0;p<=i;p++){const A=p/i,D=g/r,B=A*e,v=D*Math.PI*2;if(o[d++]=(t+a*Math.cos(v))*Math.sin(B),o[d++]=a*Math.sin(v),o[d++]=(t+a*Math.cos(v))*Math.cos(B),l[h++]=Math.sin(B)*Math.cos(v),l[h++]=Math.sin(v),l[h++]=Math.cos(B)*Math.cos(v),c[u++]=A,c[u++]=D,p<i&&g<r){const U=i+1,y=U*g+p,S=U*(g+1)+p,F=U*(g+1)+p+1,C=U*g+p+1;f[m++]=y,f[m++]=C,f[m++]=S,f[m++]=C,f[m++]=F,f[m++]=S}}this.setIndices(f),this.setAttribute(G.position,o),this.setAttribute(G.normal,l),this.setAttribute(G.uv,c),this.setAttribute(G.TEXCOORD_1,c),this.addSubGeometry({indexStart:0,indexCount:f.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class zm extends Le{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),a=new Float32Array(this.row*3*2),r=new Float32Array(this.row*2*2);for(let i=0;i<this.row;i++){t[i*3*2+0]=0,t[i*3*2+1]=0,t[i*3*2+2]=0,t[i*3*2+3]=0,t[i*3*2+4]=0,t[i*3*2+5]=0,a[i*3*2+0]=0,a[i*3*2+1]=0,a[i*3*2+2]=1,a[i*3*2+3]=0,a[i*3*2+4]=0,a[i*3*2+5]=1,r[i*2*2+0]=0,r[i*2*2+1]=i/this.segment,r[i*2*2+2]=1,r[i*2*2+3]=i/this.segment;let n=i*2,o=n,l=n+1,c=n+2,f=n+3;e[i*6+0]=o,e[i*6+1]=l,e[i*6+2]=c,e[i*6+3]=l,e[i*6+4]=f,e[i*6+5]=c}this.setIndices(e),this.setAttribute(G.position,t),this.setAttribute(G.normal,a),this.setAttribute(G.uv,r),this.setAttribute(G.TEXCOORD_1,r),this.addSubGeometry({indexStart:0,indexCount:e.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class Wm extends Le{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),a=new Float32Array(this.faceCount*3*3),r=new Float32Array(this.faceCount*3*2),i=new Float32Array(this.faceCount*3*1);for(let n=0;n<this.faceCount;n++){let o=n*3+0,l=n*3+1,c=n*3+2;e[o]=o,e[l]=l,e[c]=c}this.setIndices(e),this.setAttribute(G.position,t),this.setAttribute(G.normal,a),this.setAttribute(G.uv,r),this.setAttribute(G.TEXCOORD_1,r),this.setAttribute(G.vIndex,i),this.addSubGeometry({indexStart:0,indexCount:e.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class Jm extends Gs{_internalTexture;_minSize=32;_skyColor;constructor(e){super(),this._skyColor=e,this._internalTexture=new Ts;let t=[];_.res.fillColor(t,this._minSize,this._minSize,this.color.r,this.color.g,this.color.b,this.color.a);const a=new Uint16Array(t.length);for(let r=0;r<t.length;r++)a[r]=bt(t[r])&65535;return this._internalTexture.create(this._minSize,this._minSize,a,!1),this.createFromTexture(this._minSize,this._internalTexture),this}changeColor(e){this._skyColor=e;const t=[];_.res.fillColor(t,this._minSize,this._minSize,this.color.r,this.color.g,this.color.b,this.color.a);const a=new Uint16Array(t.length);for(let r=0;r<t.length;r++)a[r]=bt(t[r])&65535;return this._internalTexture.updateTexture(this._minSize,this._minSize,a,!1),this._faceData.uploadTexture(0,this._internalTexture),this}get color(){return this._skyColor}set color(e){this.changeColor(e)}}class jm extends ne{length=100;thickness=.1;constructor(e,t=.1){super(),this.length=e,this.thickness=t,this.init()}init(){let e=new ne,t=new ne,a=new ne,r=new Wa(2,2,2),i=new Wa(2,2,2),n=new Wa(2,2,2),o=new vt;o.baseColor=new J(1,0,0);let l=new vt;l.baseColor=new J(0,1,0);let c=new vt;c.baseColor=new J(0,0,1);let f=e.addComponent(he),d=t.addComponent(he),h=a.addComponent(he);f.geometry=r,f.material=o,f.castShadow=!1,d.geometry=i,d.material=l,d.castShadow=!1,h.geometry=n,h.material=c,h.castShadow=!1,e.localScale=new b(this.length,this.thickness,this.thickness),e.x=this.length,t.localScale=new b(this.thickness,this.length,this.thickness),t.y=this.length,a.localScale=new b(this.thickness,this.thickness,this.length),a.z=this.length,this.addChild(e),this.addChild(t),this.addChild(a)}}class Zm{static merge(e,t,a){}static mergeNumber(e,t,a){let r=a||new Le,i=e.getAttribute(G.position).data.length/3,n=new Float32Array(i*t);for(const f of e.vertexAttributeMap){let d=f[1].attribute;if(d==G.indices)continue;let h=e.getAttribute(d).data,u=h.length,m=new Float32Array(u*t);for(let g=0;g<t;g++){m.set(h,u*g);for(let p=0;p<i;p++)n[i*g+p]=g}r.setAttribute(d,m)}r.setAttribute(G.vIndex,n);let o=e.getAttribute(G.indices).data,l=o.length,c=new Uint32Array(o.length*t);for(let f=0;f<t;f++)for(let d=0;d<l;d++){let h=f*i,u=f*l;const m=o[d]+h;c[u+d]=m}return r.setIndices(c),r.addSubGeometry({indexStart:0,indexCount:c.length,vertexStart:0,index:0,vertexCount:0,firstStart:0,topology:0}),r}static generateNormal(){}static generateTangent(){}static packUV(){}}class Ym extends ne{size=100;divisions=10;constructor(e=100,t=10){super(),this.size=e,this.divisions=t,this.buildGeometry(),this.addAxis()}buildGeometry(){const e=[],t=[],a=this.size/this.divisions,r=this.size/2,i=this.divisions/2;for(let c=0,f=-r;c<=this.divisions;c++,f+=a)c!==i&&(e.push(-r,0,f,r,0,f),e.push(f,0,-r,f,0,r));for(let c=0;c<e.length/3;c+=2)t.push(c,c+1);let n=new Le;n.setIndices(t.length>Uint16Array.length?new Uint32Array(t):new Uint16Array(t)),n.setAttribute(G.position,new Float32Array(e)),n.addSubGeometry({indexStart:0,indexCount:t.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let o=new vt;o.topology="line-list",o.baseColor=new J(1,1,1,.15),o.blendMode=De.ADD,o.castReflection=!1;let l=this.addComponent(he);l.geometry=n,l.material=o}addAxis(){const e=this.size/2;let t=new Float32Array([-e,0,0,e,0,0]),a=new Uint16Array([0,1,2,3]),r=new Le;r.setIndices(a),r.setAttribute(G.position,t),r.addSubGeometry({indexStart:0,indexCount:a.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});{let i=new ne,n=i.addComponent(he);n.geometry=r;let o=n.material=new vt;o.baseColor=new J(1,0,0,.5),o.blendMode=De.ADD,o.castReflection=!1,o.topology="line-list",this.addChild(i)}{let i=new ne;i.rotationY=90;let n=i.addComponent(he);n.geometry=r;let o=n.material=new vt;o.baseColor=new J(0,1,0,.5),o.blendMode=De.ADD,o.castReflection=!1,o.topology="line-list",this.addChild(i)}}}class Xm{static color_temperature_to_rgb(e){e<1e3?e=1e3:e>4e4&&(e=4e4);let t=e/100,a=this.get_red(t),r=this.get_green(t),i=this.get_blue(t);return new J(a/255,r/255,i/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,a=255){let r=Math.max(e,t);return Math.min(r,a)}}class Hm{static boxGeo;static planeGeo;static sphere;static material;static materialMap;static initHeap(){this.boxGeo||(this.boxGeo=new Wa),this.planeGeo||(this.planeGeo=new ni(1,1,1,1,b.UP)),this.sphere||(this.sphere=new Pr(1,35,35)),this.material||(this.material=new aa),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 ne,t=e.addComponent(he);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 aa,t.baseMap=e,this.materialMap.set(e,t)),t.clone()}static GetPlane(e){this.initHeap();let t=new ne,a=t.addComponent(he);a.geometry=this.planeGeo;let r=this.GetMaterial(e);return r.blendMode=De.ADD,r.castShadow=!1,a.material=r,a.castGI=!1,a.castReflection=!1,t}static GetSingleCube(e,t,a,r,i,n){this.initHeap();let o=new aa;o.roughness=.5,o.metallic=.1,o.baseColor=new J(r,i,n,1);let l=new ne,c=l.addComponent(he);return c.castGI=!0,c.geometry=new Wa(e,t,a),c.material=o,l}static GetSingleSphere(e,t,a,r){this.initHeap();let i=new aa;i.baseColor=new J(t,a,r,1);let n=new ne,o=n.addComponent(he);return o.castGI=!0,o.geometry=new Pr(e,20,20),o.material=i,n}static get Sphere(){this.initHeap();let e=new ne,t=e.addComponent(he);return t.geometry=this.sphere,t.material=this.material,e}static GetSingleCube2(e,t=10){this.initHeap();let a=new ne,r=a.addComponent(he);return r.castShadow=!1,r.geometry=new Wa(t,t,t),r.material=e,a}static GetPointLight(e,t,a,r,i,n,o=1,l=!0){let c=new ne,f=c.addComponent(li);f.lightColor=new J(r,i,n,1),f.intensity=o,f.range=a,f.at=8,f.radius=0,f.castShadow=l,c.localPosition=e,c.localRotation=t;let d=this.GetSingleSphere(.1,1,1,1);return c.addChild(d),f}}var P=(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))(P||{}),ua=(s=>(s[s.Local=0]="Local",s[s.Global=1]="Global",s))(ua||{});class on extends et{mAxis;mAxisColor;mContainer;mAxisMaterial;mAxisCollider;constructor(){super(),this._enable=!1,this.mAxis=new Array(P.MAX),this.mAxisColor=new Array(P.MAX),this.mAxisMaterial=new Array(P.MAX),this.mAxisCollider=new Array(P.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 ne;let t=new vt;t.baseColor=new J(1,0,0),t.depthCompare=nt.always,this.mAxisColor[P.X]=t.baseColor,this.mAxisMaterial[P.X]=t;let a=new vt;a.baseColor=new J(0,1,0),a.depthCompare=nt.always,this.mAxisColor[P.Y]=a.baseColor,this.mAxisMaterial[P.Y]=a;let r=new vt;r.baseColor=new J(0,0,1),r.depthCompare=nt.always,this.mAxisColor[P.Z]=r.baseColor,this.mAxisMaterial[P.Z]=r;let i=this.createCustomAxis(P.X),n=this.createCustomAxis(P.Y),o=this.createCustomAxis(P.Z);this.mContainer.addChild(this.mAxis[P.X]=i),this.mContainer.addChild(this.mAxis[P.Y]=n),this.mContainer.addChild(this.mAxis[P.Z]=o),this.mAxisCollider[P.X]=i.getComponent(ha),this.mAxisCollider[P.Y]=n.getComponent(ha),this.mAxisCollider[P.Z]=o.getComponent(ha)}start(){}onEnable(e){this.object3D.addChild(this.mContainer),this.reset()}onDisable(e){this.object3D.removeChild(this.mContainer)}reset(){switch(this.transformSpaceMode){case ua.Local:{let t=R.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 ua.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 a=this.object3D.transform.scene3D.view.camera.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY),r,i;for(let n=0;n<=P.MAX;n++){let o=this.mAxisCollider[n];if(o&&(r=o.rayPick(a),r&&(!i||i.distance>r.distance||n==P.XYZ)&&(i={axis:n,obj:o.object3D,distance:r.distance,intersectPoint:r.intersectPoint},n==P.XYZ)))break}return i}currentAxis=P.NONE;beginPoint=new b;beginMousePos=new b;currentPoint=new b;onMouseDown(e){if(e.mouseCode!=Ys.MOUSE_LEFT)return;let t=this.pickAxis();if(!t)return;this.currentAxis=t.axis,e.stopImmediatePropagation();const r=this.object3D.transform.scene3D.view.camera;let i=r.worldToScreenPoint(this.mX.transform.worldPosition),n=r.screenPointToWorld(_.inputSystem.mouseX,_.inputSystem.mouseY,i.z);this.beginPoint.copyFrom(n),this.beginMousePos.x=_.inputSystem.mouseX,this.beginMousePos.y=_.inputSystem.mouseY}lastMoveObj;lastMoveAxis;onMouseMove(e){if(this.currentAxis==P.NONE){let t=this.lastMoveObj.getComponent(he).material;this.lastMoveObj&&"baseColor"in t&&(t.baseColor=this.mAxisColor[this.lastMoveAxis],this.lastMoveObj=null,this.lastMoveAxis==P.XYZ&&(this.mAxis[P.X].getComponent(he).material.setUniformColor("baseColor",this.mAxisColor[P.X]),this.mAxis[P.Y].getComponent(he).material.setUniformColor("baseColor",this.mAxisColor[P.Y]),this.mAxis[P.Z].getComponent(he).material.setUniformColor("baseColor",this.mAxisColor[P.Z])),this.lastMoveAxis=P.NONE);let a=this.pickAxis();if(!a)return;t.setUniformColor("baseColor",new J(1,1,1)),this.lastMoveObj=a.obj,this.lastMoveAxis=a.axis,this.lastMoveAxis==P.XYZ&&(this.mAxis[P.X].getComponent(he).material.setUniformColor("baseColor",new J(1,1,1)),this.mAxis[P.Y].getComponent(he).material.setUniformColor("baseColor",new J(1,1,1)),this.mAxis[P.Z].getComponent(he).material.setUniformColor("baseColor",new J(1,1,1)))}else{const a=this.object3D.transform.scene3D.view.camera;let r=a.worldToScreenPoint(this.mX.transform.worldPosition),i=a.screenPointToWorld(_.inputSystem.mouseX,_.inputSystem.mouseY,r.z);this.currentPoint.copyFrom(i);let n=i.subtract(this.beginPoint);b.HELP_0.set(_.inputSystem.mouseX,_.inputSystem.mouseY,0);let o=b.distance(b.HELP_0,this.beginMousePos);switch(this.beginMousePos.copyFrom(b.HELP_0),this.transformSpaceMode){case ua.Local:this.applyLocalTransform(this.currentAxis,n,o);break;case ua.Global:this.applyGlobalTransform(this.currentAxis,n,o);break}this.beginPoint.copyFrom(i),this.reset()}}onMouseUp(e){e.mouseCode==Ys.MOUSE_LEFT&&(this.currentAxis=P.NONE,this.reset())}onUpdate(e){let a=b.distance(e.camera.transform.worldPosition,this.object3D.transform.worldPosition)/100;if(this.mContainer.scaleX=this.mContainer.scaleY=this.mContainer.scaleZ=a,this.mX){const r=this.mX.transform.worldPosition;this.object3D.x=r.x,this.object3D.y=r.y,this.object3D.z=r.z}}applyLocalTransform(e,t,a){console.warn("not imp")}applyGlobalTransform(e,t,a){console.warn("not imp")}createCustomAxis(e){return this.createAxis(e)}createAxis(e){let t=0,a=0,r=0;switch(e){case P.X:t=1;break;case P.Y:a=1;break;case P.Z:r=1;break}let i=.4+t*20,n=.4+a*20,o=.4+r*20,l=new ne;l.x=i*.5,l.y=n*.5,l.z=o*.5;let c=l.addComponent(he);c.geometry=new Wa(i,n,o),c.material=this.mAxisMaterial[e];let f=l.addComponent(ha),d=new gi;return d.setFromCenterAndSize(new b(0,0,0),new b(i+1,n+1,o+1)),f.shape=d,l}}class wu extends on{init(e){super.init(e);let t=new vt;t.doubleSide=!0,t.baseColor=new J(.9,.9,.9),t.depthCompare=nt.always,this.mAxisColor[P.XYZ]=t.baseColor,this.mAxisMaterial[P.XYZ]=t;let a=new ne,r=a.addComponent(he);r.geometry=new Wa(2,2,2),r.material=this.mAxisMaterial[P.XYZ];let i=a.addComponent(ha),n=new gi;n.setFromCenterAndSize(new b(0,0,0),new b(2,2,2)),i.shape=n,this.mContainer.addChild(this.mAxis[P.XYZ]=a),this.mAxisCollider[P.XYZ]=a.getComponent(ha)}applyLocalTransform(e,t,a){switch(this.currentAxis){case P.XYZ:{let r=0;Math.abs(t.x)>Math.abs(t.y)?Math.abs(t.x)>Math.abs(t.z)?r=t.x:r=t.z:r=t.y,this.mX.scaleX+=r,this.mX.scaleY+=r,this.mX.scaleZ+=r}break;default:this.mX.transform.worldMatrix.transformVector(t,t),(this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ)&&(this.mX.scaleX=Math.abs(this.mX.scaleX+t.x)),(this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ)&&(this.mX.scaleY=Math.abs(this.mX.scaleY+t.y)),(this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ)&&(this.mX.scaleZ=Math.abs(this.mX.scaleZ+t.z));break}}applyGlobalTransform(e,t,a){let r=b.HELP_0;r.set(0,0,0),(this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ)&&(r.x=t.x),(this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ)&&(r.y=t.y),(this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ)&&(r.z=t.z),this.mX.transform.worldMatrix.transformVector(r,b.HELP_1),this.mX.scaleX+=b.HELP_1.x,this.mX.scaleY+=b.HELP_1.y,this.mX.scaleZ+=b.HELP_1.z}createCustomAxis(e){let t=super.createAxis(e),a=this.createBox(e);return t.addChild(a),t}createBox(e){let t=0,a=0,r=0,i=new ne;switch(e){case P.X:t=1,i.rotationZ=-90;break;case P.Y:a=1;break;case P.Z:r=1,i.rotationX=90;break}let n=.2+t*20,o=.2+a*20,l=.2+r*20;i.x=n*.5,i.y=o*.5,i.z=l*.5;let c=i.addComponent(he);return c.geometry=new Wa(2,2,2),c.material=this.mAxisMaterial[e],i}}var At=(s=>(s[s.Scale=0]="Scale",s[s.Rotation=1]="Rotation",s[s.Translation=2]="Translation",s[s.NONE=3]="NONE",s))(At||{});class Iu extends on{applyLocalTransform(e,t,a){if(this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ,this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ){R.help_matrix_0.copyFrom(this.mX.transform.worldMatrix),R.help_matrix_1.identity(),R.help_matrix_1.createByRotation(1,b.Y_AXIS),R.help_matrix_2.multiplyMatrices(R.help_matrix_1,R.help_matrix_0),R.help_matrix_2.invert(),R.help_matrix_1.multiplyMatrices(R.help_matrix_2,R.help_matrix_0);let r=R.help_matrix_1.decompose();this.mX.rotationX+=r[1].x,this.mY.rotationY+=r[1].y,this.mZ.rotationZ+=r[1].z}this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ}getAngle(){const t=this.object3D.transform.scene3D.view.camera,a=this.mZ.transform.worldPosition;if(t.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY),this.currentAxis==P.X){let r=t.worldToScreenPoint(a);b.HELP_1.set(r.x,r.y,0),b.HELP_2.set(_.inputSystem.mouseX,_.inputSystem.mouseY,0);let i=b.HELP_2.subtract(b.HELP_1),n=b.getAngle(b.X_AXIS,i);return i.y>0&&(n=360-n),t.transform.worldPosition.x-a.x>0&&(n=360-n),n}if(this.currentAxis==P.Y){let r=t.worldToScreenPoint(a);b.HELP_1.set(r.x,r.y,0),b.HELP_2.set(_.inputSystem.mouseX,_.inputSystem.mouseY,0);let i=b.HELP_2.subtract(b.HELP_1),n=b.getAngle(b.X_AXIS,i);return i.y>0&&(n=360-n),t.transform.worldPosition.y-a.y>0&&(n=360-n),n}if(this.currentAxis==P.Z){let r=t.worldToScreenPoint(a);b.HELP_1.set(r.x,r.y,0),b.HELP_2.set(_.inputSystem.mouseX,_.inputSystem.mouseY,0);let i=b.HELP_2.subtract(b.HELP_1),n=b.getAngle(b.X_AXIS,i);return i.y>0&&(n=360-n),t.transform.worldPosition.z-a.z>0&&(n=360-n),n}return 0}mLastAngle=0;applyGlobalTransform(e,t,a){if(this.currentAxis==P.X||this.currentAxis==P.Y||this.currentAxis==P.Z){let r=this.getAngle();switch(R.help_matrix_0.identity(),this.currentAxis){case P.X:R.help_matrix_0.createByRotation(this.mLastAngle-r,b.X_AXIS);break;case P.Y:R.help_matrix_0.createByRotation(this.mLastAngle-r,b.Y_AXIS);break;case P.Z:R.help_matrix_0.createByRotation(this.mLastAngle-r,b.Z_AXIS);break}R.help_matrix_1.copyFrom(this.mX.transform.worldMatrix),R.help_matrix_1.append(R.help_matrix_0),this.mX.parent&&(R.help_matrix_2.copyFrom(this.mX.parent.worldMatrix),R.help_matrix_2.invert(),R.help_matrix_1.multiply(R.help_matrix_2));let n=R.help_matrix_1.decompose(oa.QUATERNION)[1];se.HELP_0.set(n.x,n.y,n.z,n.w),this.mLastAngle=r,this.mX.transform.localRotQuat=se.HELP_0}}onMouseDown(e){super.onMouseDown(e),this.currentAxis!=P.NONE&&(this.mAxis[P.X].getComponent(he).enable=!1,this.mAxis[P.Y].getComponent(he).enable=!1,this.mAxis[P.Z].getComponent(he).enable=!1,this.mAxis[this.currentAxis].getComponent(he).enable=!0,this.mLastAngle=this.getAngle())}onMouseUp(e){super.onMouseUp(e),this.currentAxis==P.NONE&&(this.mAxis[P.X].getComponent(he).enable=!0,this.mAxis[P.Y].getComponent(he).enable=!0,this.mAxis[P.Z].getComponent(he).enable=!0)}createCustomAxis(e){return this.createAxis(e)}createAxis(e){let t=new ne;switch(e){case P.X:t.rotationZ=90;break;case P.Y:break;case P.Z:t.rotationX=90;break}let a=t.addComponent(he);a.geometry=new Eu(20,.4),a.material=this.mAxisMaterial[e];let r=t.addComponent(ha),i=new gi;return i.setFromCenterAndSize(new b,new b(40,.4,40)),r.shape=i,t}pickAxis(){let a=this.object3D.transform.scene3D.view.camera.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY),r,i;for(let n=0;n<=P.MAX;n++){let o=this.mAxisCollider[n];if(o&&(r=o.rayPick(a),r)){let l=b.distance(r.intersectPoint,o.shape.center);if(l>20+.8||l<20-.8)continue;(!i||i.distance>r.distance)&&(i={axis:n,obj:o.object3D,distance:r.distance,intersectPoint:r.intersectPoint})}}return i}}class Ru extends on{init(e){super.init(e);let t=new vt;t.doubleSide=!0,t.baseColor=new J(0,0,1),t.depthCompare=nt.always,this.mAxisColor[P.XY]=t.baseColor,this.mAxisMaterial[P.XY]=t;let a=new vt;a.doubleSide=!0,a.baseColor=new J(0,1,0),a.depthCompare=nt.always,this.mAxisColor[P.XZ]=a.baseColor,this.mAxisMaterial[P.XZ]=a;let r=new vt;r.doubleSide=!0,r.baseColor=new J(1,0,0),r.depthCompare=nt.always,this.mAxisColor[P.YZ]=r.baseColor,this.mAxisMaterial[P.YZ]=r;let i=this.createPlane(P.XY),n=this.createPlane(P.XZ),o=this.createPlane(P.YZ);this.mContainer.addChild(this.mAxis[P.XY]=i),this.mContainer.addChild(this.mAxis[P.XZ]=n),this.mContainer.addChild(this.mAxis[P.YZ]=o),this.mAxisCollider[P.XY]=i.getComponent(ha),this.mAxisCollider[P.XZ]=n.getComponent(ha),this.mAxisCollider[P.YZ]=o.getComponent(ha)}applyLocalTransform(e,t,a){R.help_matrix_0.copyFrom(this.mX.transform.worldMatrix).invert(),R.help_matrix_0.transformVector(t,b.HELP_0),this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ||(b.HELP_0.x=0),this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ||(b.HELP_0.y=0),this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ||(b.HELP_0.z=0),this.mX.transform.worldMatrix.transformVector(b.HELP_0,b.HELP_1),this.mX.x+=b.HELP_1.x,this.mX.y+=b.HELP_1.y,this.mX.z+=b.HELP_1.z}applyGlobalTransform(e,t,a){R.help_matrix_0.identity(),(this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ)&&R.help_matrix_0.appendTranslation(t.x,0,0),(this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ)&&R.help_matrix_0.appendTranslation(0,t.y,0),(this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ)&&R.help_matrix_0.appendTranslation(0,0,t.z),R.help_matrix_1.copyFrom(this.mX.transform.worldMatrix),R.help_matrix_1.append(R.help_matrix_0),this.mX.parent&&(R.help_matrix_2.copyFrom(this.mX.parent.worldMatrix),R.help_matrix_2.invert(),R.help_matrix_1.multiply(R.help_matrix_2));let r=R.help_matrix_1.decompose(oa.QUATERNION);this.mX.transform.localPosition=r[0],console.log(this.target.localPosition)}createCustomAxis(e){let t=super.createAxis(e),a=this.createArrows(e);return t.addChild(a),t}createArrows(e){let t=0,a=0,r=0,i=new ne;switch(e){case P.X:t=1,i.rotationZ=-90;break;case P.Y:a=1,i.rotationY=-90;break;case P.Z:r=1,i.rotationX=90;break}let n=.2+t*20,o=.2+a*20,l=.2+r*20;i.x=n*.5,i.y=o*.5,i.z=l*.5;let c=i.addComponent(he);return c.geometry=new ku(0,1,4),c.material=this.mAxisMaterial[e],i}createPlane(e){let t=new ne,a=t.addComponent(he);a.material=this.mAxisMaterial[e];let r=t.addComponent(ha),i=new gi;switch(r.shape=i,e){case P.XY:a.geometry=new ni(4,4,1,1,b.Z_AXIS),t.x=8,t.y=8,i.setFromCenterAndSize(new b(0,0,0),new b(4,4,.1));break;case P.XZ:a.geometry=new ni(4,4,1,1,b.Y_AXIS),t.x=8,t.z=8,i.setFromCenterAndSize(new b(0,0,0),new b(4,.1,4));break;case P.YZ:a.geometry=new ni(4,4,1,1,b.X_AXIS),t.y=8,t.z=8,i.setFromCenterAndSize(new b(0,0,0),new b(.1,4,4));break}return t}}class Bl extends ne{static _instance;static get instance(){return this._instance||(this._instance=new Bl),this._instance}mTarget;mTransformMode=At.NONE;mTransformSpaceType=ua.Global;mControllers;mXObj;mYObj;mZObj;constructor(){super(),this.mControllers=[null,null,null],this.mControllers[At.Scale]=this.addComponent(wu),this.mControllers[At.Rotation]=this.addComponent(Iu),this.mControllers[At.Translation]=this.addComponent(Ru),this.mControllers[At.Scale].enable=!1,this.mControllers[At.Rotation].enable=!1,this.mControllers[At.Translation].enable=!1,this.mXObj=new ne,this.mYObj=new ne,this.mZObj=new ne,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,a){this.mTarget!=e&&(e?this.activate():this.unactivate(),this.mTarget=e,this.mXObj.localPosition=e.transform.worldPosition.clone()),t!=null&&this.selectTransformMode(t),a!=null&&this.selectTransformSpaceMode(a)}selectTransformMode(e){this.mTransformMode!=e&&(this.mTransformMode!=At.NONE&&(this.mControllers[this.mTransformMode].enable=!1),this.mTransformMode=e,this.mTransformMode!=At.NONE&&(this.mControllers[this.mTransformMode].enable=!0))}selectTransformSpaceMode(e){this.mTransformSpaceType!=e&&(this.mTransformSpaceType=e,this.mTransformMode!=At.NONE&&this.mControllers[this.mTransformMode].reset())}activate(){_.inputSystem.addEventListener(Na.KEY_DOWN,this.onKeyDown,this),_.inputSystem.addEventListener(Z.POINTER_DOWN,this.onMouseDown,this,null,99999),_.inputSystem.addEventListener(Z.POINTER_MOVE,this.onMouseMove,this,null,99999),_.inputSystem.addEventListener(Z.POINTER_UP,this.onMouseUp,this,null,99999)}unactivate(){_.inputSystem.removeEventListener(Na.KEY_DOWN,this.onKeyDown,this),_.inputSystem.removeEventListener(Z.POINTER_DOWN,this.onMouseDown,this),_.inputSystem.removeEventListener(Z.POINTER_MOVE,this.onMouseMove,this),_.inputSystem.removeEventListener(Z.POINTER_UP,this.onMouseUp,this)}onKeyDown(e){switch(e.keyCode){case tt.Key_R:this.selectTransformMode(At.Scale),this.selectTransformSpaceMode(ua.Local);break;case tt.Key_E:this.selectTransformMode(At.Rotation),this.selectTransformSpaceMode(ua.Global);break;case tt.Key_W:this.selectTransformMode(At.Translation),this.selectTransformSpaceMode(ua.Global);break;case tt.Key_A:this.selectTransformSpaceMode(ua.Local);break;case tt.Key_S:this.selectTransformSpaceMode(ua.Global);break}}onMouseDown(e){this.mTransformMode!=At.NONE&&this.mControllers[this.mTransformMode].onMouseDown(e)}onMouseMove(e){this.mTransformMode!=At.NONE&&this.mControllers[this.mTransformMode].onMouseMove(e)}onMouseUp(e){this.mTransformMode!=At.NONE&&this.mControllers[this.mTransformMode].onMouseUp(e)}}const Km=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{gf as AccelerateDecelerateInterpolator,uf as AccelerateInterpolator,Gi as AnimationCurve,Ur as AnimationCurveT,Xr as AnimationMonitor,er as AnimatorComponent,Bg as AnimatorEventKeyframe,Af as AnticipateInterpolator,As as AnticipateOvershootInterpolator,zu as ArrayHas,Wu as ArrayItemIndex,sd as AtlasParser,ug as AtmosphericComponent,Xd as AtmosphericScatteringSky,Yd as AtmosphericScatteringSkySetting,Zd as AtmosphericScatteringSky_shader,rh as AttributeAnimCurve,jm as AxisObject,rr as B3DMLoader,jf as B3DMLoaderBase,ko as B3DMParseUtil,So as B3DMParser,qf as BRDFLUT,$f as BRDFLUTGenerate,rc as BRDF_frag,Ls as BatchTable,xm as BiMap,fs as BillboardComponent,pr as BillboardType,Ec as BitUtil,$a as BitmapTexture2D,Kc as BitmapTexture2DArray,Bo as BitmapTextureCube,Xc as Blend,Hc as BlendFactor,De as BlendMode,tl as BlendShapeData,el as BlendShapePropertyData,Bp as BloomPost,Nf as BlurEffectCreatorBlur_cs,Mf as BlurEffectCreatorSample_cs,Pf as BlurTexture2DBufferCreator,ra as BounceInterpolator,qn as BoundUtil,Ce as BoundingBox,Gr as BoundingSphere,Hr as BoundingVolume,gi as BoxColliderShape,Wa as BoxGeometry,Zl as BrdfLut_frag,sc as BsDF_frag,ic as BxDF_frag,cc as BxdfDebug_frag,Dn as BytesArray,mt as CEvent,Ya as CEventDispatcher,ys as CEventListener,lr as CResizeEvent,na as CSM,ai as Camera3D,Eg as CameraControllerBase,ot as CameraType,gt as CameraUtil,ep as CapsuleColliderShape,d0 as CastPointShadowMaterialPass,f0 as CastShadowMaterialPass,nc as Clearcoat_frag,L0 as ClusterBoundsSource_cs,wt as ClusterConfig,Tl as ClusterDebug_frag,mc as ClusterLight,O0 as ClusterLightingBuffer,z0 as ClusterLightingRender,G0 as ClusterLighting_cs,g0 as CollectInfo,ha as ColliderComponent,pt as ColliderShape,bi as ColliderShapeType,J as Color,Um as ColorGradient,Dm as ColorLitMaterial,zd as ColorLitShader,ig as ColorPassFragmentOutput,V0 as ColorPassRenderer,Fs as ColorUtil,_n as ComData,Md as Combine_cs,Jl as Common_frag,jl as Common_vert,et as ComponentBase,Oe as ComponentCollect,oi as ComputeGPUBuffer,Fe as ComputeShader,Fl as Context3D,io as CubeCamera,Vf as CubeMapFaceEnum,Sn as CubeSky_Shader,rn as CubicBezierCurve,ym as CubicBezierPath,mu as CubicBezierType,Df as CycleInterpolator,ku as CylinderGeometry,sf as DDGIIrradianceComputePass,vs as DDGIIrradianceGPUBufferReader,w0 as DDGIIrradianceVolume,rf as DDGIIrradiance_shader,cf as DDGILightingPass,lf as DDGILighting_shader,of as DDGIMultiBouncePass,ff as DDGIProbeRenderer,_t as DEGREES_TO_RADIANS,vf as DRACO_DECODER_GLTF_JS,bf as DecelerateInterpolator,Nd as Denoising_cs,Z0 as Depth2DTextureArray,J0 as DepthCubeArrayTexture,h0 as DepthMaterialPass,vp as DepthOfFieldPost,_d as DepthOfView_cs,Ti as DirectLight,rs as DoubleArray,qr as EditorInspector,_ as Engine3D,E0 as Entity,p0 as EntityBatchCollect,q as EntityCollect,Yl as EnvMap_frag,Xt as ErpImage2CubeMap,Of as ErpImage2CubeMapCreateCube_cs,Lf as ErpImage2CubeMapRgbe2rgba_cs,sp as ExtrudeGeometry,Br as FAILED,Sa as FASTFLOOR,so as FXAAPost,ef as FXAAShader,Hl as FastMathShader,kh as FatLineGeometry,Hh as FatLineMaterial,Ai as FatLineRenderer,Ki as FatLineShader,Mc as FatLine_FS,Tc as FatLine_VS,Ni as FeatureTable,Rt as FileLoader,wg as FirstPersonCameraController,Ts as Float16ArrayTexture,k0 as Float32ArrayTexture,Ig as FlyCameraController,ad as FontChar,ed as FontInfo,td as FontPage,ir as FontParser,hf as ForwardRenderJob,En as FragmentOutput,ql as FragmentVarying,Lo as FrameCache,On as Frustum,Yc as FrustumCSM,rg as FrustumCulling_cs,fc as FullQuad_vert_wgsl,ve as GBufferFrame,c0 as GBufferPass,xp as GBufferPost,wc as GBufferStand,wn as GBuffer_pass,Do as GILighting,Ch as GIProbeMaterial,jo as GIProbeMaterialType,Wd as GIProbeShader,no as GIRenderCompleteEvent,Ms as GIRenderStartEvent,Qf as GLBChunk,Rf as GLBHeader,_o as GLBParser,qc as GLSLLexer,yi as GLSLLexerToken,$c as GLSLPreprocessor,r0 as GLSLSyntax,Xf as GLTFBinaryExtension,Wp as GLTFMaterial,Ut as GLTFParser,Ps as GLTFSubParser,xf as GLTFSubParserCamera,If as GLTFSubParserConverter,yf as GLTFSubParserMaterial,Uf as GLTFSubParserMesh,Ao as GLTFSubParserSkeleton,Cf as GLTFSubParserSkin,la as GLTFType,lb as GLTF_Accessors,Ns as GLTF_Info,ib as GLTF_Light,ob as GLTF_Mesh,sb as GLTF_Node,nb as GLTF_Primitives,rb as GLTF_Scene,qt as GPUAddressMode,Ju as GPUBlendFactor,Xa as GPUBufferBase,Da as GPUBufferType,nt as GPUCompareFunction,k as GPUContext,Gt as GPUCullMode,hr as GPUFilterMode,Ss as GPUPrimitiveTopology,oe as GPUTextureFormat,Ui as GPUVertexFormat,Yu as GPUVertexStepMode,Di as GSplatFormat,Xn as GSplatGeometry,Yn as GSplatMaterial,si as GSplatRenderer,Fi as GSplatShader,_r as GSplatStreamRenderer,_0 as GSplat_FS,D0 as GSplat_VS,Up as GTAOPost,Bd as GTAO_cs,id as GUIAtlasTexture,ds as GUICanvas,Vr as GUIConfig,ch as GUIGeometry,dh as GUIGeometryRebuild,Wo as GUIMaterial,df as GUIPassRenderer,gh as GUIPick,Ah as GUIPickHelper,ja as GUIQuad,lt as GUIQuadAttrEnum,hh as GUIRenderer,zo as GUIShader,da as GUISpace,fi as GUISprite,kr as GUITexture,Op as GaussianSplatParser,gc as GenerayRandomDir,Gp as GeoJsonParser,zp as GeoJsonUtil,Xs as GeoType,Le as GeometryBase,x0 as GeometryIndicesBuffer,Zm as GeometryUtil,B0 as GeometryVertexBuffer,Et as GeometryVertexType,kl as GetComponentClass,yn as GetCountInstanceID,r2 as GetRepeat,El as GetShader,sg as GlassShader,xe as GlobalBindGroup,Ln as GlobalBindGroupLayout,yp as GlobalFog,Oo as GlobalFog_shader,Yg as GlobalIlluminationComponent,Fn as GlobalUniform,$n as GlobalUniformGroup,Cp as GodRayPost,vd as GodRay_cs,Ym as GridObject,xo as HDRTexture,Os as HDRTextureCube,Ac as Hair_frag,ng as Hair_shader_op,og as Hair_shader_tr,Is as HaltonSeq,Bh as Horizontal,Rg as HoverCameraController,Ea as I3DMLoader,Hf as I3DMLoaderBase,Eo as I3DMParser,Wf as IBLEnvMapCreator,zf as IBLEnvMapCreator_cs,Ra as IESProfiles,ec as IESProfiles_frag,lp as IKDTreeUserData,ui as ImageType,v0 as IndicesGPUBuffer,Wl as Inline_vert,Sl as InputSystem,Xg as InstanceDrawComponent,Xl as InstanceUniform,Kf as InstancedMesh,Fr as Interpolator,oo as InterpolatorEnum,Oh as IrradianceDataReaderCompleteEvent,zl as IrradianceVolumeData_frag,ac as Irradiance_frag,Lu as IsEditorInspector,xn as IsNonSerialize,Sf as Joint,mo as JointPose,mf as JumperInterpolator,fp as KDTreeEntity,Cr as KDTreeNode,wh as KDTreeRange,Ih as KDTreeSpace,gs as KDTreeUUID,po as KHR_draco_mesh_compression,Jp as KHR_lights_punctual,kf as KHR_materials_clearcoat,Ef as KHR_materials_emissive_strength,jp as KHR_materials_ior,wf as KHR_materials_unlit,ud as KMZParser,$o as KV,Xm as KelvinUtil,tt as KeyCode,Na as KeyEvent,Js as Keyframe,as as KeyframeT,Xh as LASLoader,Xp as LASParser,jt as LASUtils,_i as LASVisualizationMode,Gs as LDRTextureCube,Ga as LOADED,al as LOADING,cu as LRUCache,_m as LambertMaterial,_c as Lambert_shader,js as Light,Qi as LightBase,ws as LightData,I0 as LightEntries,ht as LightType,Ml as LightingFunction_frag,yt as Line,ph as LineClassification,pf as LinearInterpolator,aa as LitMaterial,Ks as LitSSSShader,qs as LitShader,oc as Lit_shader,wr as LoaderBase,dp as LoaderEvent,An as LoaderManager,qu as MAX_VALUE,$u as MIN_VALUE,xt as Material,o0 as MaterialDataUniformGPUBuffer,Hs as MaterialUtilities,Nl as MathShader,zt as MathUtil,zr as Matrix3,R as Matrix4,T0 as MatrixBindGroup,Q0 as MatrixGPUBuffer,pc as MatrixShader,cr as MemoryDO,Il as MemoryInfo,bp as MergeRGBACreator,xd as MergeRGBA_cs,mn as MeshColliderShape,Zs as MeshFilter,he as MeshRenderer,km as MinMaxAnimationCurves,Uu as MinMaxCurve,xu as MinMaxCurveState,Em as MinMaxPolyCurves,Ap as MorePassParser,Ph as MorePassShader,Ug as MorphTargetBlender,N0 as MorphTargetData,yg as MorphTargetFrame,nh as MorphTargetTransformKey,Kt as MorphTarget_shader,Ys as MouseCode,nf as MultiBouncePass_cs,Su as Navi3DAstar,is as Navi3DConst,wa as Navi3DEdge,sr as Navi3DFunnel,yr as Navi3DMaskType,Gm as Navi3DMesh,Tt as Navi3DPoint,_l as Navi3DPoint2D,ka as Navi3DPointFat,_e as Navi3DRouter,Fu as Navi3DTriangle,vn as NonSerialize,Kl as NormalMap_frag,Ff as OAnimationEvent,Ds as OBJParser,ne as Object3D,hp as Object3DEvent,Bl as Object3DTransformTools,Hm as Object3DUtil,ih as ObjectAnimClip,ro as OcclusionSystem,Sr as Octree,A0 as OctreeEntity,Qg as OrbitController,Cm as OrderMap,oa as Orientation3D,Ud as OutLineBlendColor_cs,yd as OutlineCalcOutline_cs,lg as OutlinePass,Sp as OutlinePost,Gh as OutlinePostData,zh as OutlinePostManager,Lh as OutlinePostSlot,Cd as Outline_cs,_f as OvershootInterpolator,ou as PARSING,lc as PBRLItShader,Jd as PBRLitSSSShader,cm as PLUGIN_REGISTERED,qh as PNTSLoader,Kh as PNTSLoaderBase,$h as PNTSParser,it as ParserBase,je as ParserFormat,vu as ParticleSystemCurveEvalMode,Au as ParticleSystemRandomnessIds,Ci as PassGenerate,Vh as PassShader,fe as PassType,Pl as PhysicMaterialUniform_frag,Sh as PickCompute,Fh as PickFire,Ct as PickGUIEvent3D,Wh as PickResult,Sd as Picker_cs,In as PingPong,Jn as PipelinePool,yu as Plane3D,Or as PlaneClassification,ni as PlaneGeometry,Ca as PlyMode,Al as PlyParser,Yh as PlyStreamParser,mh as PointClassification,Kn as PointCloudGeometry,F0 as PointCloudMaterial,qa as PointCloudRenderer,Ei as PointCloudShader,S0 as PointCloud_FS,C0 as PointCloud_VS,li as PointLight,j0 as PointLightShadowRenderer,W0 as PointShadowCubeCamera,Z as PointerEvent3D,za as Polynomial,nr as PolynomialCurve,Fm as Polynomials,uh as PoolNode,Jt as PostBase,gd as PostProcessingComponent,K0 as PostRenderer,X0 as PreDepthPassRenderer,q0 as PreFilteredEnvironment_cs,Hb as PreFilteredEnvironment_cs2,Fd as PreIntegratedLut,Nh as PreIntegratedLutCompute,qo as PrefabAvatarData,eu as PrefabAvatarParser,Ko as PrefabBoneData,au as PrefabMaterialParser,ru as PrefabMeshData,iu as PrefabMeshParser,xs as PrefabNode,nu as PrefabParser,tm as PrefabStringUtil,tu as PrefabTextureData,su as PrefabTextureParser,_a as Preprocessor,il as PriorityQueue,yh as Probe,gp as ProbeEntries,af as ProbeGBufferFrame,dt as ProfilerUtil,_g as PropertyAnimClip,sh as PropertyAnimTag,ul as PropertyAnimation,fl as PropertyAnimationClip,ah as PropertyAnimationClipState,Wi as PropertyAnimationEvent,zi as PropertyHelp,Pt as QuadAABB,vc as QuadGlsl_fs,Bc as QuadGlsl_vs,Qh as QuadRoot,wi as QuadShader,Rh as QuadTree,Er as QuadTreeCell,Xu as Quad_depth2dArray_frag_wgsl,uc as Quad_depth2d_frag_wgsl,bc as Quad_depthCube_frag_wgsl,hc as Quad_frag_wgsl,dc as Quad_vert_wgsl,se as Quaternion,Qs as R32UintTexture,ei as RADIANS_TO_DEGREES,Gf as RGBEErrorCode,Uo as RGBEHeader,yo as RGBEParser,Je as RTDescriptor,ct as RTFrame,Va as RTResourceConfig,Nt as RTResourceMap,ns as Rand,i2 as RandomSeed,ba as Ray,vi as RayCastMeshDetail,ri as Reader,ps as Rect,ke as Reference,Kd as Reflection,Rc as ReflectionCG,R0 as ReflectionEntries,$d as ReflectionMaterial,$0 as ReflectionRenderer,qd as ReflectionShader,Ic as ReflectionShader_shader,Lt as RegisterComponent,Pa as RegisterShader,ao as RenderContext,Si as RenderLayer,jn as RenderLayerUtil,va as RenderNode,m0 as RenderShaderCollect,Mh as RenderShaderCompute,qe as RenderShaderPass,Qt as RenderTexture,Oa as RendererBase,tf as RendererJob,H0 as RendererMap,Ne as RendererMask,sa as RendererMaskUtil,P0 as RendererPassState,Rn as RepeatSE,bd as Res,Iu as RotationControlComponents,Qc as SHCommon_frag,ms as SN_ArrayConstant,br as SN_BinaryOperation,T2 as SN_Break,Fa as SN_CodeBlock,ar as SN_Constant,fn as SN_Continue,rt as SN_Declaration,M2 as SN_Discard,Q2 as SN_DoWhileLoop,we as SN_Expression,jr as SN_ForLoop,ln as SN_Function,cn as SN_FunctionArgs,Jr as SN_FunctionCall,Lr as SN_IFBranch,Ha as SN_Identifier,Yr as SN_IndexOperation,cs as SN_Layout,t0 as SN_ParenExpression,dn as SN_Precision,os as SN_Return,ls as SN_SelectOperation,tr as SN_Struct,a0 as SN_TernaryOperation,ii as SN_UnaryOperation,Zr as SN_WhileLoop,Kb as SSAO_cs,kd as SSGI2_cs,Fp as SSGIPost,kp as SSRPost,Ed as SSR_BlendColor_cs,Ep as SSR_IS_Kernel,wd as SSR_IS_cs,Id as SSR_RayTrace_cs,wu as ScaleControlComponents,ap as Scene3D,Dt as Shader,Wn as ShaderAttributeInfo,i0 as ShaderConverter,s0 as ShaderConverterResult,Y as ShaderLib,Cn as ShaderPassBase,Mt as ShaderReflection,Ba as ShaderStage,n0 as ShaderState,zn as ShaderUniformInfo,Ka as ShaderUtil,$l as ShadingInput,Zt as ShadowLightsCollect,Y0 as ShadowMapPassRenderer,tc as ShadowMapping_frag,Cg as Skeleton,hn as SkeletonAnimationClip,th as SkeletonAnimationClipState,mr as SkeletonAnimationComponent,Sg as SkeletonAnimationCompute,$r as SkeletonAnimation_shader,Fg as SkeletonBlendComputeArgs,Ri as SkeletonPose,kg as SkeletonTransformComputeArgs,Yi as SkinnedMeshRenderer,Dr as SkinnedMeshRenderer2,l0 as SkyGBufferPass,xc as SkyGBuffer_pass,Hd as SkyMaterial,Ws as SkyRenderer,Li as SkyShader,Jm as SolidColorSky,tp as SphereColliderShape,Pr as SphereGeometry,eh as SphereReflection,Mi as SpotLight,Tf as StandShader,Ge as StatementNode,Pe as StorageGPUBuffer,Rp as StreamLoader,Lp as StreamingGaussianSplatParser,It as StringUtil,xi as Struct,pp as StructStorageGPUBuffer,U0 as SubGeometry,Rd as TAACopyTex_cs,wp as TAAPost,Qd as TAASharpTex_cs,Td as TAA_cs,Pd as TestComputeLoadBuffer,Dh as TextAnchor,xh as TextFieldLayout,vh as TextFieldLine,ut as Texture,Vs as TextureCube,Co as TextureCubeFaceData,un as TextureCubeStdCreator,vo as TextureCubeUtils,mp as TextureMipmapCompute,Ia as TextureMipmapGenerator,Th as TextureScaleCompute,Mg as ThirdPersonCameraController,rl as Tile,um as TileSet,gm as TileSetChild,pm as TileSetChildContent,mm as TileSetChildContentMetaData,bm as TileSetRoot,hm as TilesRenderer,We as Time,x as TokenType,Eu as TorusGeometry,Cl as TouchData,zm as TrailGeometry,Yt as Transform,P as TransformAxisEnum,on as TransformControllerBaseComponent,At as TransformMode,ua as TransformSpaceMode,Ru as TranslationControlComponents,Gn as TranslatorContext,Wm as TriGeometry,us as Triangle,bl as UIButton,Uh as UIButtonTransition,Jo as UIComponentBase,up as UIEvent,Wr as UIImage,gl as UIImageGroup,pn as UIInteractive,at as UIInteractiveStyle,hs as UIPanel,Zi as UIRenderAble,pl as UIShadow,ml as UITextField,or as UITransform,vr as UNLOADED,Wt as UUID,Dl as UV,Hn as Uint32ArrayTexture,ki as Uint8ArrayTexture,Dc as UnLit,vt as UnLitMaterial,Vl as UnLitMaterialUniform_frag,qi as UnLitShader,vm as UnLitTexArrayMaterial,$i as UnLitTexArrayShader,jd as UnLitTextureArray,Ol as UnLit_frag,St as UniformGPUBuffer,fr as UniformNode,Ft as UniformType,X as ValueEnumType,Lm as ValueOp,Ja as ValueParser,wm as ValueSpread,de as Vector2,b as Vector3,Ji as Vector3Ex,be as Vector4,op as VertexAttribute,Gd as VertexAttributeIndexShader,G as VertexAttributeName,dr as VertexAttributeSize,Eh as VertexAttributeStride,Ll as VertexAttributes_vert,np as VertexBufferLayout,Ql as VertexFormat,Rs as VertexGPUBuffer,_h as Vertical,Gl as VideoUniform_frag,rp as View3D,bn as ViewPanel,to as ViewQuad,Te as VirtualTexture,om as WGS84_FLATTENING,lm as WGS84_HEIGHT,nm as WGS84_RADIUS,e0 as WGSLTranslator,Bs as WayLines3D,_s as WayPoint3D,He as WebGPUDescriptorCreator,kn as WorldMatrixUniform,gn as WorldPanel,pi as WrapMode,Ar as WrapTimeMode,_p as ZCullingCompute,Ld as ZPassShader_cs,kc as ZPassShader_fs,Fc as ZPassShader_vs,u0 as ZSorterUtil,Zc as append,Jf as arrayToString,ju as blendComponent,Rm as buildCurves,ea as byteSizeOfType,Qm as calculateCurveRangesValue,es as calculateMinMax,yc as castPointShadowMap_vert,Be as clamp,C2 as clampRepeat,Zo as computeAABBFromPositions,m2 as cos,x2 as crossProduct,Du as cubicPolynomialRoot,_u as cubicPolynomialRootsGeneric,Im as curvesSupportProcedural,b2 as deg2Rad,Jh as detectGSplatFormat,Sc as directionShadowCastMap_frag,kt as dot,Bu as doubleIntegrateSegment,Ad as downSample,Jc as fastInvSqrt,Wc as floorfToIntPos,di as fonts,U2 as generateRandom,y2 as generateRandom3,Oc as getFloatFromInt,_b as getGLTypeFromTypedArray,Db as getGLTypeFromTypedArrayType,A2 as getGlobalRandomSeed,Bb as getTypedArray,go as getTypedArrayTypeFromGLType,hl as grad1,nn as grad2,ts as grad3,Bi as grad4,Xo as inferSHOrder,dl as integrateSegment,Dp as irradianceDataReader,Sm as kPI,Nr as lerp,a2 as lerpByte,t2 as lerpColor,e2 as lerpVector3,pu as lruPriorityCallback,Tn as magnitude,Eb as makeAloneSprite,rd as makeGUISprite,Es as makeMatrix44,cl as markUsedSetLeaves,en as markUsedTiles,tn as markVisibleTiles,Vn as matrixMultiply,E2 as matrixRotate,k2 as matrixRotateY,Cs as mergeFunctions,jc as multiplyMatrices4x4REF,Cu as normal_distribution,v2 as normalizeFast,Vc as normalizeSafe,B2 as normalizedToByte,_2 as normalizedToWord,ya as outlinePostData,Ip as outlinePostManager,Ho as parsePlyGaussianSplat,Hi as parsePlyHeader,jh as parsePlyMesh,Zh as parsePlyPointCloud,Ue as perm,Dd as post,gu as priorityCallback,sn as quadraticPolynomialRootsGeneric,g2 as rad2Deg,ti as random01,u2 as randomBarycentricCoord,h2 as randomPointBetweenEllipsoid,f2 as randomPointBetweenSphere,l2 as randomPointInsideCube,c2 as randomPointInsideEllipsoid,d2 as randomPointInsideUnitCircle,Gc as randomPointInsideUnitSphere,n2 as randomQuaternion,o2 as randomQuaternionUniformDistribution,zc as randomSeed,ks as randomUnitVector,Lc as randomUnitVector2,Bt as rangedRandomFloat,s2 as rangedRandomInt,pe as readByType,ci as readMagicBytes,Bm as registerMaterial,Pn as repeat,F2 as rotMatrix,Ku as rotateVectorByQuat,Mn as roundfToIntPos,Qn as scale,Cc as shadowCastMap_frag,Uc as shadowCastMap_vert,ta as simplex,p2 as sin,Nm as snoise1,Pm as snoise2,Vm as snoise3,Om as snoise4,Yo as splatColorProperties,Xi as splatProperties,Nn as sqrMagnitude,Pc as sqrtImpl,Zu as stencilStateFace,D2 as swap,Vd as textureCompress,md as threshold,Am as throttle,bt as toHalfFloat,an as toggleTiles,fm as traverseAncestors,fu as traverseSet,ag as tw,Tm as uniform_real_distribution,Mm as uniform_real_distribution2,Vo as upSample,I as webGPUContext,b0 as zSorterUtil};
11858
+ `).filter(Boolean),i=[];for(const n of r){const o=jt.parseParameterLine(n);o.mnemonic&&i.push(o.mnemonic)}if(i.length===0)throw new Error("LASLoader: No headers found in ~CURVE section");return i}parseData(e,t,a){const r=e.match(/~A(?:[\x20-\x7E])*(?:\r\n|\r|\n)([\s\S]*?)(?=~|$)/);if(!r||!r[1])throw new Error("LASLoader: ~A data section not found");const i=r[1].trim();if(!i)throw new Error("LASLoader: Data section is empty");const n=i.split(/\s+/).filter(c=>c.trim().length>0).map(c=>jt.convertToValue(c.trim()));if(n.length===0)throw new Error("LASLoader: No data values found");const o=Math.floor(n.length/t.length);if(o===0)throw new Error("LASLoader: Insufficient data values");const l=[];for(let c=0;c<o;c++){const f=[];for(let d=0;d<t.length;d++){const h=c*t.length+d;h<n.length&&f.push(n[h])}f.length===t.length&&l.push(f)}return l}}var _i=(s=>(s.PointCloud="pointcloud",s.Curve="curve",s.WellTrajectory="trajectory",s))(_i||{}),Zp=Object.getOwnPropertyDescriptor,Yp=(s,e,t,a)=>{for(var r=a>1?void 0:a?Zp(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Ki=class extends Dt{constructor(){super();const s=new qe("FatLine_VS","FatLine_FS");s.setShaderEntry("VertMain","FragMain"),this.addRenderPass(s);const e=s.shaderState;e.acceptShadow=!1,e.castShadow=!1,e.receiveEnv=!1,e.acceptGI=!1,e.useLight=!1,e.cullMode=Gt.none,e.depthWriteEnabled=!0,this.setDefault()}setDefault(){this.setUniformColor("baseColor",new J(1,1,1,1)),this.setUniformFloat("lineWidth",1),this.setUniformFloat("opacity",1),this.setUniformVector2("resolution",new de(1920,1080));const s=new R;this.getDefaultColorShader().setUniform("modelMatrix",s.rawData)}};Ki=Yp([Pa(Ki,"FatLineShader")],Ki);class Hh extends xt{constructor(){super(),this.shader=new Ki,this.transparent=!0}setInstanceBuffer(e){this.shader.setStorageBuffer("instances",e)}setModelMatrix(e){this.shader.getDefaultColorShader().setUniform("modelMatrix",e.rawData)}set baseColor(e){this.shader.setUniformColor("baseColor",e)}get baseColor(){return this.shader.getUniformColor("baseColor")}set lineWidth(e){this.shader.setUniformFloat("lineWidth",e)}get lineWidth(){return this.shader.getUniformFloat("lineWidth")}set opacity(e){this.shader.setUniformFloat("opacity",e)}get opacity(){return this.shader.getUniformFloat("opacity")}set resolution(e){this.shader.setUniformVector2("resolution",e)}get resolution(){return this.shader.getUniformVector2("resolution")}}class Xp extends it{static format=je.BIN;visualizationMode=_i.PointCloud;async parseBuffer(e){const a=await new Xh().parse(e);await this.createVisualization(a)}async createVisualization(e){if("format"in e&&e.format==="binary")this.data=this.createBinaryPointCloudVisualization(e);else{const t=e;let a;switch(this.visualizationMode){case _i.PointCloud:a=this.createPointCloudVisualization(t);break;case _i.Curve:a=this.createCurveVisualization(t);break;case _i.WellTrajectory:a=this.createWellTrajectoryVisualization(t);break;default:a=this.createPointCloudVisualization(t)}a.lasData=t,a.wellParams=t.wellParams,a.curveParams=t.curveParams,this.data=a}}createBinaryPointCloudVisualization(e){const t=new ne;t.name="LASPointCloud";const a=new ne;a.name="LASPointCloudRoot",t.addChild(a);const r=a.addComponent(qa);return r.initFromData(e.positions,e.colors,e.numPoints),r.setPointShape("circle"),r.setPointSize(4),t.lasFormat="binary",t.lasVersion=e.version,t.numPoints=e.numPoints,t.pointDataFormat=e.pointDataFormat,t.bbox=e.bbox,t}verification(){if(this.data)return!0;throw new Error("LASParser: Parse failed")}createPointCloudVisualization(e){const{headers:t,data:a,nullValue:r}=e,i=t.findIndex(A=>A.toUpperCase()==="DEPTH"||A.toUpperCase()==="DEPT");if(i<0)throw new Error("LASParser: DEPTH column not found");const n=t.map((A,D)=>D).filter(A=>A!==i).slice(0,2),o=a.filter(A=>!A.some(D=>D===r||D===+r));if(o.length===0)throw new Error("LASParser: No valid data points after filtering");const l=o.length,c=new Float32Array(l*3),f=new Uint8Array(l*4);let d=1/0,h=-1/0,u=1/0,m=-1/0;if(n.length>0){const A=o.map(D=>+D[n[0]]).filter(D=>!isNaN(D));if(d=Math.min(...A),h=Math.max(...A),n.length>1){const D=o.map(B=>+B[n[1]]).filter(B=>!isNaN(B));u=Math.min(...D),m=Math.max(...D)}}for(let A=0;A<o.length;A++){const D=o[A],B=A*3,v=A*4;if(c[B+2]=+D[i],n.length>0){const x=+D[n[0]],y=h!==d?(x-d)/(h-d):0;if(c[B+0]=y*10,n.length>1){const S=+D[n[1]],F=m!==u?(S-u)/(m-u):0;c[B+1]=F*10}else c[B+1]=0}else c[B+0]=0,c[B+1]=0;if(n.length>0){const x=+D[n[0]],y=h!==d?(x-d)/(h-d):0;this.mapValueToColor(y,f,v)}else f[v+0]=255,f[v+1]=255,f[v+2]=255,f[v+3]=255}const g=new ne;g.name="LASPointCloud";const p=g.addComponent(qa);return p.initFromData(c,f,l),p.setPointShape("circle"),p.setPointSize(4),g}createCurveVisualization(e){const{headers:t,data:a,nullValue:r}=e,i=t.findIndex(A=>A.toUpperCase()==="DEPTH"||A.toUpperCase()==="DEPT");if(i<0)throw new Error("LASParser: DEPTH column not found");const n=t.map((A,D)=>D).find(A=>A!==i);if(n===void 0)throw new Error("LASParser: No curve column found");const o=a.filter(A=>{const D=+A[i],B=+A[n];return!isNaN(D)&&!isNaN(B)&&B!==r&&B!==+r});if(o.length===0)throw new Error("LASParser: No valid data points");const l=o.map(A=>+A[n]),c=Math.min(...l),d=Math.max(...l)-c,h=new Float32Array(o.length*3);for(let A=0;A<o.length;A++){const D=o[A],B=A*3,v=+D[i],x=+D[n];h[B+2]=v;const y=d>0?(x-c)/d:0;h[B+0]=y*10,h[B+1]=0}const u=new kh;u.setPositions(h);const m=new Hh;m.baseColor=new J(1,0,0,1),m.lineWidth=2;const g=new ne;g.name=`LASCurve_${t[n]}`;const p=g.addComponent(Ai);return p.geometry=u,p.material=m,g}createWellTrajectoryVisualization(e){throw new Error("LASParser: Well trajectory visualization not yet implemented")}normalizeValue(e,t,a){const r=t.map(o=>+o[a]).filter(o=>!isNaN(o)),i=Math.min(...r),n=Math.max(...r);return n!==i?(e-i)/(n-i):0}mapValueToColor(e,t,a){const r=Math.floor(e*255),i=Math.floor((1-e)*255);t[a+0]=r,t[a+1]=0,t[a+2]=i,t[a+3]=255}}class Al extends it{static format=je.BIN;static cloudImageProcessParam="";async parseBuffer(e){switch(Hi(e).mode){case Ca.Splat:{const a=Ho(e),r={count:a.vertexCount,position:a.position,rotation:a.rotation,scale:a.scale,opacity:a.opacity,sh:a.sh};r.bbox=Zo(a.position);const i=new ne;i.name="GaussianSplat",i.addComponent(si).initAsset(r),this.data=i;break}case Ca.PointCloud:{const a=Zh(e),r=new ne;r.name="PLYPointCloud";const i=new ne;i.name="PLYPointCloudRoot",r.addChild(i);const n=i.addComponent(qa);if(a.color)n.initFromData(a.position,a.color,a.vertexCount);else{const o=new Uint8Array(a.vertexCount*4);o.fill(255),n.initFromData(a.position,o,a.vertexCount)}n.setPointShape("circle"),n.setPointSize(4),this.data=r;break}case Ca.Mesh:{const a=jh(e),r=new ne;r.name="PLYMesh";const i=new Map;if(a.triangleTexnumbers&&a.triangleTexnumbers.length>0)for(let o=0;o<a.triangleTexnumbers.length;o++){const l=a.triangleTexnumbers[o];i.has(l)||i.set(l,[]),i.get(l).push(o)}else{const o=a.indices.length/3,l=[];for(let c=0;c<o;c++)l.push(c);i.set(0,l)}const n=new Map;if(a.textureFiles&&a.textureFiles.length>0){const o=[];for(let l=0;l<a.textureFiles.length;l++){const c=new aa,f=It.normalizePath(this.baseUrl+a.textureFiles[l]);o.push(_.res.loadTexture(f+Al.cloudImageProcessParam).then(d=>{c.baseMap=d,n.set(l,c)}))}await Promise.all(o)}n.size===0&&n.set(0,new aa);for(const[o,l]of i){const c=[];for(const m of l){const g=m*3;c.push(a.indices[g+0],a.indices[g+1],a.indices[g+2])}const f=new Le;f.setAttribute(G.position,a.position),f.setAttribute(G.normal,a.normal),a.uv&&f.setAttribute(G.uv,a.uv),a.color&&f.setAttribute(G.color,a.color),f.setIndices(new Uint32Array(c)),f.addSubGeometry({indexStart:0,indexCount:c.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let d=n.get(o);d||(d=n.values().next().value||new aa);const h=new ne;h.name=`PLYMesh_Texture_${o}`;const u=h.addComponent(he);u.geometry=f,u.material=d,r.addChild(h)}this.data=r;break}}}verification(){return!!this.data}}class Kh{async parse(e){const t=new DataView(e),a=ci(t);console.assert(a==="pnts");const r=t.getUint32(4,!0);console.assert(r===1);const i=t.getUint32(8,!0);console.assert(i===e.byteLength);const n=t.getUint32(12,!0),o=t.getUint32(16,!0),l=t.getUint32(20,!0),c=t.getUint32(24,!0),f=28,d=new Ni(e,f,n,o),h=f+n+o,u=d.header.POINTS_LENGTH||0,m=new Ls(e,u,h,l,c);return{version:r,featureTable:d,batchTable:m}}}class qh extends Kh{async parse(e){const t=await super.parse(e),{featureTable:a,batchTable:r}=t,i=a.header.POINTS_LENGTH;if(!i||i<=0)throw new Error("PNTSLoader: POINTS_LENGTH must be defined and greater than zero");const o=a.header.extensions?.["3DTILES_draco_point_compression"];let l,c;if(o){const u=await this.parseDraco(a,o,i);l=u.positions,c=u.colors,u.normals}else l=this.parsePositions(a,i),c=this.parseColors(a,i),this.parseNormals(a,i);const f=new ne,d=f.addComponent(qa);d.initFromData(l,c,i),d.setPointShape("circle"),d.setPointSize(4);const h=a.getData("RTC_CENTER",1,"FLOAT","VEC3");return h&&f.transform.localPosition.set(h[0],h[1],h[2]),f.batchTable=r,f.featureTable=a,f}parsePositions(e,t){let a=e.getData("POSITION",t,"FLOAT","VEC3");if(a)return a;const r=e.getData("POSITION_QUANTIZED",t,"UNSIGNED_SHORT","VEC3");if(!r)throw new Error("PNTSLoader: Either POSITION or POSITION_QUANTIZED must be defined");const i=e.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),n=e.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3");if(!i||!n)throw new Error("PNTSLoader: QUANTIZED_VOLUME_SCALE and QUANTIZED_VOLUME_OFFSET must be defined for quantized positions");const o=new Float32Array(t*3),l=65535;for(let c=0;c<t;c++){const f=c*3;o[f+0]=r[f+0]/l*i[0]+n[0],o[f+1]=r[f+1]/l*i[1]+n[1],o[f+2]=r[f+2]/l*i[2]+n[2]}return o}parseColors(e,t){let a=e.getData("RGBA",t,"UNSIGNED_BYTE","VEC4");if(a)return a;const r=e.getData("RGB",t,"UNSIGNED_BYTE","VEC3");if(r){const l=new Uint8Array(t*4);for(let c=0;c<t;c++){const f=c*3,d=c*4;l[d+0]=r[f+0],l[d+1]=r[f+1],l[d+2]=r[f+2],l[d+3]=255}return l}const i=e.getData("RGB565",t,"UNSIGNED_SHORT","SCALAR");if(i){const l=new Uint8Array(t*4);for(let c=0;c<t;c++){const f=this.decodeRGB565(i[c]),d=c*4;l[d+0]=f[0],l[d+1]=f[1],l[d+2]=f[2],l[d+3]=255}return l}const n=e.getData("CONSTANT_RGBA",1,"UNSIGNED_BYTE","VEC4");if(n){const l=new Uint8Array(t*4);for(let c=0;c<t;c++){const f=c*4;l[f+0]=n[0],l[f+1]=n[1],l[f+2]=n[2],l[f+3]=n[3]}return l}const o=new Uint8Array(t*4);return o.fill(255),o}parseNormals(e,t){let a=e.getData("NORMAL",t,"FLOAT","VEC3");if(a)return a;const r=e.getData("NORMAL_OCT16P",t,"UNSIGNED_BYTE","VEC2");return r?this.decodeOctNormals(r,t):null}decodeRGB565(e){const t=(e>>11&31)<<3,a=(e>>5&63)<<2,r=(e&31)<<3;return[t,a,r]}decodeOctNormals(e,t){const a=new Float32Array(t*3);for(let r=0;r<t;r++){const i=r*2,n=e[i]/255,o=e[i+1]/255,l=n*2-1,c=o*2-1,f=1-Math.abs(l)-Math.abs(c);let d,h;f<0?(d=(l>=0?1:-1)*(1-Math.abs(c)),h=(c>=0?1:-1)*(1-Math.abs(l))):(d=l,h=c);const u=Math.sqrt(d*d+h*h+f*f),m=r*3;a[m+0]=d/u,a[m+1]=h/u,a[m+2]=f/u}return a}async parseDraco(e,t,a){throw new Error("Draco compression not yet implemented")}}class $h extends it{static format=je.BIN;async parseBuffer(e){const a=await new qh().parse(e),r=new ne;r.name="PNTS",r.addChild(a),this.data=r}verification(){if(this.data)return!0;throw new Error("PNTSParser: Parse failed")}}class Ko{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 qo{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 a=new Ko;a.formBytes(e.readBytesArray()),this.boneData[t]=a,this.boneMap.set(a.boneName,a)}}}class eu extends it{static format=je.BIN;static parser(e,t){let a=e.readInt32();for(let r=0;r<a;r++){let i=new qo;i.formBytes(e.readBytesArray()),_.res.addObj(i.name,i)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}G.position,G.normal,G.color,G.TANGENT,G.uv,G.TEXCOORD_1,G.TEXCOORD_2,G.TEXCOORD_2,G.TEXCOORD_4,G.TEXCOORD_5,G.TEXCOORD_6,G.TEXCOORD_7,G.joints0,G.weights0;var X=(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))(X||{});class Hs{static GetMaterial(e){let t=e,a=t.split("/");t=a[a.length-1],a=t.split("."),t=a[a.length-1];let r=El(t);if(r){let i=new xt;return i.shader=new r,i}else throw new Error("not found shader, shader name is "+t)}static applyMaterialTexture(e,t){for(let a=0;a<t.length;a++){const r=t[a];r.property in e?e[r.property]=r.texture:r.property in e.shader?e.shader[r.property]=r.texture:e.setTexture(r.property,r.texture)}}static applyMaterialProperties(e,t){for(let a=0;a<t.length;a++){const r=t[a],i=r.key;switch(r.type){case X.color:case X.color32:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformColor(i,n)}break;case X.single:case X.float:case X.int:case X.int16:case X.int32:case X.uint:case X.uint32:case X.uint64:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformFloat(i,n)}break;case X.singleArray:{let n=r.getValue()[0];i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformFloat(i,n)}break;case X.vector2:case X.vector2Int:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformVector2(i,n)}break;case X.vector3:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformVector3(i,n)}break;case X.vector4:{let n=r.getValue();i in e?e[i]=n:i in e.shader?e.shader[i]=n:e.setUniformVector4(i,n)}break}}}}class Ja{static parser(e){switch(e.readInt32()){case X.single:return{t:X.single,v:e.readFloat32()};case X.boolean:return{t:X.boolean,v:e.readBoolean()};case X.int:return{t:X.int,v:e.readInt32()};case X.int16:return{t:X.int16,v:e.readInt16()};case X.int32:return{t:X.int32,v:e.readInt32()};case X.float:return{t:X.float,v:e.readFloat32()};case X.long:return{t:X.long,v:e.readFloat64()};case X.uint:return{t:X.uint,v:e.readUnit32()};case X.uint32:return{t:X.uint32,v:e.readUnit32()};case X.uint64:return{t:X.uint64,v:e.readUnit32()};case X.double:return{t:X.double,v:e.readFloat64()};case X.string:return{t:X.string,v:e.readUTF()};case X.singleArray:return{t:X.singleArray,v:e.readFloatArray()};case X.stringArray:return{t:X.stringArray,v:e.readStringArray()};case X.floatArray:return{t:X.floatArray,v:e.readFloatArray()};case X.vector2:return{t:X.vector2,v:e.readVector2()};case X.vector3:return{t:X.vector3,v:e.readVector3()};case X.vector4:return{t:X.vector4,v:e.readVector4()};case X.color:return{t:X.color,v:e.readColor()};case X.color32:return{t:X.color32,v:e.readColor()};case X.animationCurve:return{t:X.animationCurve,v:null};case X.quaternion:return{t:X.quaternion,v:e.readQuaternion()};case X.matrix4x4:return{t:X.matrix4x4,v:null};case X.mesh:{let o=e.readUTF(),l=_.res.getGeometry(o);return{t:X.mesh,v:l}}case X.texture:{let o=e.readUTF(),l=_.res.getTexture(o);return{t:X.texture,v:l}}case X.material:{let o=e.readUTF(),l=_.res.getMat(o);return{t:X.material,v:l}}case X.materials:{let o=e.readStringArray(),l=[];for(let c=0;c<o.length;c++){const f=o[c];let d=_.res.getMat(f);l.push(d)}return{t:X.materials,v:l}}case X.skeleton:break;case X.animClip:{let o=[],l=e.readInt32();for(let c=0;c<l;c++){let f=new fl;f.formBytes(e),o.push(f)}return{t:X.animClip,v:o}}case X.vector2Int:return{t:X.vector2Int,v:e.readVector2int()};case X.int32List:return{t:X.int32List,v:e.readInt32List()};case X.colorList:let a=e.readInt32(),r=[];for(let o=0;o<a;o++){const l=Ja.parser(e).v;r.push(l)}return{t:X.colorList,v:r};case X.color32List:let i=e.readInt32(),n=[];for(let o=0;o<i;o++){const l=Ja.parser(e).v;n.push(l)}return{t:X.color32List,v:n}}}}class $o{key;type;_data;getValue(){return this._data}formBytes(e){this.key=e.readUTF();let{t,v:a}=Ja.parser(e);this.type=t,this._data=a}}class tu{property;name;texture;texelSize;wrapModeU;wrapModeV;wrapModeW;wrapMode;anisoLevel;dimension;filterMode}class au extends it{static format=je.TEXT;static parserMaterial(e,t){let a=e.readInt32();for(let r=0;r<a;r++){let i=e.readBytesArray(),n=i.readUTF(),o=i.readUTF();i.readUTF();let l=i.readStringArray();i.readVector4(),i.readVector4();let c=i.readUTF(),f=[],d=[],h=i.readInt32();for(let g=0;g<h;g++){let p=new $o;p.formBytes(i),f.push(p)}let u=i.readInt32();for(let g=0;g<u;g++){let p=i.readBytesArray(),A=new tu;A.property=p.readUTF(),A.name=p.readUTF(),A.texture=_.res.getTexture(A.name),A.texelSize=p.readVector2(),A.wrapModeU=p.readUnit32(),A.wrapModeV=p.readUnit32(),A.wrapModeW=p.readUnit32(),A.wrapMode=p.readUnit32(),A.anisoLevel=p.readUnit32(),A.dimension=p.readUnit32(),A.filterMode=p.readUnit32(),d.push(A)}let m=Hs.GetMaterial(c);m.name=n;for(let g=0;g<l.length;g++){const p=l[g];m.shader.setDefine(p,!0)}Hs.applyMaterialTexture(m,d),Hs.applyMaterialProperties(m,f),_.res.addMat(o,m)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class el{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 a=t.readInt32();this.blendPositionList=t.readFloat32Array(a*3);let r=t.readInt32();this.blendNormalList=t.readFloat32Array(r*3)}}class tl{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 a=0;a<this.blendCount;a++){let r=new el;r.formBytes(t),this.blendShapePropertyDatas.push(r),this.blendShapeMap.set(r.shapeName,r)}return e}}class ru{name;meshName;meshID;vertexCount;vertexStrip;vertexBuffer;indices;attributes;bones;bindPose;blendShapeData}class iu extends it{static format=je.BIN;async parseBuffer(e){}static parserMeshs(e,t){let a=e.readInt32();for(let r=0;r<a;r++){let i=new ru,n=e.readBytesArray();i.meshName=n.readUTF(),i.meshID=n.readUTF(),n.readFloat32()>0,n.readFloat32()>0,n.readFloat32()>0;let o=n.readFloat32()>0,l=n.readFloat32()>0;o&&(i.bones=n.readStringArray(),i.bindPose=n.readMatrix44Array()),l&&(i.blendShapeData=new tl,i.blendShapeData.formBytes(n));let c=n.readBytesArray(),f=n.readBytesArray(),d=c.readInt32(),h=0,u=[];for(let D=0;D<d;D++)u[D]={},u[D].att=Hp[c.readUTF()],u[D].dim=c.readInt32(),h+=u[D].dim,u[D].format=c.readUTF();i.vertexCount=c.readInt32(),i.vertexBuffer=f.getFloat32Array();let m=n.readInt32Array(),g=[],p=n.readInt32();for(let D=0;D<p;D++){let B=n.readInt32(),v=n.readInt32(),x=n.readInt32(),y=n.readInt32(),S=n.readInt32(),F=n.readInt32();n.readVector3(),n.readVector3();let C={indexStart:v,indexCount:x,vertexStart:y,vertexCount:F,firstStart:S,topology:B,index:D};g.push(C)}m.length>65535?i.indices=new Uint32Array(m):i.indices=new Uint16Array(m);let A=new Le;if(A.vertexDim=h,A.geometryType=Et.compose_bin,A.setIndices(i.indices),A.setAttribute(G.all,i.vertexBuffer),o&&(A.skinNames=i.bones,A.bindPose=i.bindPose),l){A.blendShapeData=i.blendShapeData,A.morphTargetsRelative=!0,A.morphTargetDictionary={};for(let D=0;D<i.blendShapeData.blendCount;D++){A.setAttribute("a_morphPositions_"+D,i.blendShapeData.blendShapePropertyDatas[D].blendPositionList),A.setAttribute("a_morphNormals_"+D,i.blendShapeData.blendShapePropertyDatas[D].blendNormalList);for(let B=0;B<i.blendShapeData.blendCount;B++){let v=i.blendShapeData.shapeNames[B],x=i.blendShapeData.shapeIndexs[B];A.morphTargetDictionary[v]=x}}}for(let D=0;D<u.length;D++){const B=u[D].att;A.setAttribute(B,null)}for(let D=0;D<g.length;D++){const B=g[D];A.addSubGeometry(B)}A.name=i.meshName,_.res.addGeometry(i.meshID,A)}}verification(){if(this.data)return!0;throw new Error("verify failed.")}}let Hp={Position:G.position,Normal:G.normal,Color:G.color,Tangent:G.TANGENT,TexCoord0:G.uv,TexCoord1:G.TEXCOORD_1,TexCoord2:G.TEXCOORD_2,TexCoord3:G.TEXCOORD_2,TexCoord4:G.TEXCOORD_4,TexCoord5:G.TEXCOORD_5,TexCoord6:G.TEXCOORD_6,TexCoord7:G.vIndex,BlendIndices:G.joints0,BlendWeight:G.weights0};class Dn 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,a){super(e,t,a),this.position=0,this.position+=this.byteOffset}readUTF(){let e=this.readInt32(),t=e%4;t>0&&t<4&&(t=4-t);let a="",r=new Int8Array(this.buffer,this.position,e);return this.position+=e*Int8Array.BYTES_PER_ELEMENT,a+=String.fromCharCode.apply(null,r),this.position+=t*Int8Array.BYTES_PER_ELEMENT,a}readStringArray(){let e=[],t=this.readInt32();for(let a=0;a<t;a++)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 Dn(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 a=0;a<e;a++)t.push(this.readInt32());return t}readFloatArray(){let e=this.readInt32(),t=[];for(let a=0;a<e;a++){let r=this.readFloat32();t.push(r)}return t}readIntArray(){let e=this.readInt32(),t=[];for(let a=0;a<e;a++){let r=this.readInt32();t.push(r)}return t}readVector2int(){let e=new de;return e.x=this.readInt32(),e.y=this.readInt32(),e}readVector2(){let e=new de;return e.x=this.readFloat32(),e.y=this.readFloat32(),e}readVector3(){let e=new b;return e.x=this.readFloat32(),e.y=this.readFloat32(),e.z=this.readFloat32(),e}readVector3Array(){let e=[],t=this.readInt32();for(let a=0;a<t;a++)e.push(this.readVector3());return e}readVector4(){let e=new be;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 a=0;a<t;a++)e.push(this.readVector4());return e}readColor(){let e=new J;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 a=0;a<t;a++)e.push(this.readColor());return e}readQuaternion(){let e=new se;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 a=0;a<t;a++)e.push(this.readQuaternion());return e}readMatrix44(){let e=new R,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 a=0;a<e;a++){let r=this.readMatrix44();t.push(r)}return t}readFloat32Array(e){let t=new DataView(this.buffer),a=new Float32Array(e);for(let r=0;r<e;r++)a[r]=t.getFloat32(this.position+r*Float32Array.BYTES_PER_ELEMENT,this.littleEndian);return this.position+=e*Float32Array.BYTES_PER_ELEMENT,a}getFloat32Array(){let e=new Float32Array(this.buffer,this.byteOffset,this.byteLength/Float32Array.BYTES_PER_ELEMENT);return e=e.slice(0,this.byteLength),e}}class su extends it{static format=je.TEXT;static async parserTexture(e,t,a){let r=e.readInt32(),i=[];for(let o=0;o<r;o++){let l=e.readUTF();nu.useWebp?(l=l.replace("png","webp"),l=l.replace("jpb","webp"),i.push(t.baseUrl+"webp/"+l)):i.push(t.baseUrl+l)}let n=await _.res.loadBitmapTextures(i,_.setting.loader.numConcurrent,a,!0);for(const o of n)_.res.addTexture(o.name,o)}verification(){if(this.data)return!0;throw new Error("verify failed.")}}var Kp=Object.getOwnPropertyDescriptor,qp=(s,e,t,a)=>{for(var r=a>1?void 0:a?Kp(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let Ks=class extends Dt{constructor(){super(),Y.register("PBRLitSSSShader",Jd);let s=new qe("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 Nh(this)]}setDefault(){this.setUniformFloat("shadowBias",35e-5),this.setUniformVector4("transformUV1",new be(0,0,1,1)),this.setUniformVector4("transformUV2",new be(0,0,1,1)),this.setUniformColor("baseColor",new J),this.setUniformColor("emissiveColor",new J(1,1,1)),this.setUniformVector4("materialF0",new be(.04,.04,.04,1)),this.setUniformColor("specularColor",new J(.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 J(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this.setUniformColor("skinColor",new J(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?Gt.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=De.NONE:e.blendMode=De.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};Ks=qp([Pa(Ks,"LitSSSShader")],Ks);var $p=Object.getOwnPropertyDescriptor,em=(s,e,t,a)=>{for(var r=a>1?void 0:a?$p(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let qs=class extends Dt{constructor(){super();let s=new qe("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 be(0,0,1,1)),this.setUniformVector4("transformUV2",new be(0,0,1,1)),this.setUniformColor("baseColor",new J),this.setUniformColor("emissiveColor",new J(0,0,0)),this.setUniformVector4("materialF0",new be(.04,.04,.04,1)),this.setUniformColor("specularColor",new J(.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 J(1,1,1)),this.setUniformFloat("clearcoatWeight",0),this._MainTex=_.res.grayTexture,this._BumpMap=_.res.normalTexture,this._MaskTex=_.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?Gt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=De.NONE:e.blendMode=De.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};qs=em([Pa(qs,"LitShader")],qs);class _n{comName;data;static parser(e){let t=e.readBytesArray(),a=new _n;a.comName=t.readUTF(),a.data=[];let r=t.readInt32();for(let i=0;i<r;i++){let n=new $o;n.formBytes(t),a.data.push(n)}return a}}class xs{name;parentName;position;rotation;scale;comDatas;child;static parser(e){let t=e.readBytesArray(),a=new xs;a.name=t.readUTF(),a.parentName=t.readUTF(),a.position=t.readVector3(),a.rotation=t.readQuaternion(),a.scale=t.readVector3(),a.comDatas=[],a.child=[];let r=t.readInt32();for(let n=0;n<r;n++){const o=_n.parser(t);a.comDatas.push(o)}let i=t.readInt32();for(let n=0;n<i;n++){const o=xs.parser(t);a.child.push(o)}return a}}class nu extends it{static useWebp=!0;static format=je.BIN;avatarDic;nodeData;async parseBuffer(e){this.avatarDic={};let t=new Dn(e,0);await su.parserTexture(t,this,this.loaderFunctions),eu.parser(t,this),iu.parserMeshs(t,this),au.parserMaterial(t,this),this.nodeData=this.parserPrefabNode(t),this.data=this.data=this.parserNodeTree(this.nodeData)}parserPrefabNode(e){return xs.parser(e)}parserNodeTree(e){let t=new ne;if(t.localPosition=b.serialize(e.position),t.localQuaternion=se.serialize(e.rotation),t.localScale=b.serialize(e.scale),t.name=e.name,e.comDatas)for(let a=0;a<e.comDatas.length;a++){const r=e.comDatas[a];let i=null,n=kl(r.comName);if(n){i=t.getOrAddComponent(n);for(let o=0;o<r.data.length;o++){const l=r.data[o];l.key in i&&(i[l.key]=l.getValue())}}}if(e.child&&e.child.length>0)for(let a=0;a<e.child.length;a++){let r=this.parserNodeTree(e.child[a]);t.addChild(r)}return t}verification(){if(this.data)return!0;throw new Error("verify failed.")}}class tm{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 a=t.split(",");for(let r=0;r<a.length;r++)parseFloat(a[r]);return t}static getStringArray(e){let t=e.replaceAll("[","");t=t.replaceAll("]","");let a=t.split(","),r=[];for(let i=0;i<a.length;i++){const n=a[i];r.push(n)}return r}static getVector2(e){}static getVector3(e){}static getVector4(e){}static getQuaternion(e){}static getColor(e){}}var am=Object.getOwnPropertyDescriptor,rm=(s,e,t,a)=>{for(var r=a>1?void 0:a?am(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let qi=class extends Dt{constructor(){super();let s=new qe("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 be(0,0,1,1)),this.setUniformVector4("transformUV2",new be(0,0,1,1)),this.setUniformColor("baseColor",new J),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?Gt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=De.NONE:e.blendMode=De.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};qi=rm([Pa(qi,"UnLitShader")],qi);var im=Object.getOwnPropertyDescriptor,sm=(s,e,t,a)=>{for(var r=a>1?void 0:a?im(e,t):e,i=s.length-1,n;i>=0;i--)(n=s[i])&&(r=n(r)||r);return r};let $i=class extends Dt{constructor(){super(),Y.register("VertexAttributeIndexShader",Gd),Y.register("UnLitTextureArray",jd);let s=new qe("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 be(0,0,1,1)),this.setUniformVector4("transformUV2",new be(0,0,1,1)),this.setUniformColor("baseColor",new J),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?Gt.none:e.shaderState.cullMode}set _SurfaceType(s){let e=this.getDefaultColorShader();s==0?e.blendMode=De.NONE:e.blendMode=De.ALPHA}set _AlphaCutoffEnable(s){s==0?this.setDefine("USE_ALPHACUT",!1):this.setDefine("USE_ALPHACUT",!0)}};$i=sm([Pa($i,"UnLitTexArrayShader")],$i);const Br=-1,vr=0,al=1,ou=2,Ga=3,nm=6378137,om=1/298.257223563,lm=6356752314245179e-9,cm=Symbol("PLUGIN_REGISTERED");class rl{boundingVolume;geometricError;refine;content;contents;transform;extensions;extras;parent=null;children=[];loadingState=vr;used=!1;visible=!1;active=!1;inFrustum=!1;error=1/0;distanceFromCamera=1/0;depth=0;depthFromRenderedParent=0;lastFrameVisited=-1;isLeaf=!1;allChildrenReady=!1;hasContent=!1;hasRenderableContent=!1;hasUnrenderableContent=!1;childrenProcessed=0;usedLastFrame=!1;priority;canTraverse=!1;canTraverseFrame=-1;basePath="";cached={};constructor(e,t=null){if(this.boundingVolume=e.boundingVolume,this.geometricError=e.geometricError,this.refine=e.refine,this.content=e.content,this.contents=e.contents,this.transform=e.transform,this.extensions=e.extensions,this.extras=e.extras,this.parent=t,this.depth=t?t.depth+1:0,this.depthFromRenderedParent=t?.hasContent?0:t?t.depthFromRenderedParent+1:0,this.hasContent=!!(this.content||this.contents&&this.contents.length>0),this.content?.uri){const a=this.content.uri.toLowerCase();this.hasUnrenderableContent=a.endsWith("tileset.json"),this.hasRenderableContent=!this.hasUnrenderableContent}else this.contents&&this.contents.length>0&&(this.hasRenderableContent=!0)}addChild(e){e.parent=this,e.depth=this.depth+1,e.depthFromRenderedParent=this.hasContent?0:this.depthFromRenderedParent+1,this.children.push(e)}resetFrameState(e){this.lastFrameVisited!==e&&(this.lastFrameVisited=e,this.used=!1,this.inFrustum=!1,this.isLeaf=!1,this.visible=!1,this.active=!1,this.error=1/0,this.distanceFromCamera=1/0,this.allChildrenReady=!1)}}const lu=2**30;class cu{minSize=6e3;maxSize=8e3;minBytesSize=.3*lu;maxBytesSize=.4*lu;unloadPercent=.05;autoMarkUnused=!0;_itemSet=new Map;_itemList=[];_usedSet=new Set;_callbacks=new Map;_unloadingHandle=-1;_cachedBytes=0;_bytesMap=new Map;_loadedSet=new Set;_unloadPriorityCallback=null;set unloadPriorityCallback(e){this._unloadPriorityCallback=e}get unloadPriorityCallback(){return this._unloadPriorityCallback}isFull(){return this._itemSet.size>=this.maxSize||this._cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this._bytesMap.get(e)||0}setMemoryUsage(e,t){if(!this._itemSet.has(e))return;const a=this._bytesMap.get(e)||0;this._cachedBytes-=a,this._bytesMap.set(e,t),this._cachedBytes+=t}add(e,t){return this._itemSet.has(e)||this.isFull()?!1:(this._itemList.push(e),this._usedSet.add(e),this._itemSet.set(e,Date.now()),this._callbacks.set(e,t),this._loadedSet.add(e),!0)}has(e){return this._itemSet.has(e)}remove(e){if(!this._itemSet.has(e))return!1;const t=this._bytesMap.get(e)||0;this._cachedBytes-=t,this._bytesMap.delete(e);const a=this._callbacks.get(e);a&&a(e);const r=this._itemList.indexOf(e);return r!==-1&&this._itemList.splice(r,1),this._usedSet.delete(e),this._itemSet.delete(e),this._callbacks.delete(e),this._loadedSet.delete(e),!0}markUsed(e){this._itemSet.has(e)&&(this._usedSet.add(e),this._itemSet.set(e,Date.now()))}markUnused(e){this._usedSet.delete(e)}scheduleUnload(){this._unloadingHandle===-1&&(this._unloadingHandle=requestAnimationFrame(()=>{this._unloadingHandle=-1,this._performUnload()}))}_performUnload(){if(!(this._itemSet.size>this.minSize||this._cachedBytes>this.minBytesSize))return;this.autoMarkUnused&&this._itemSet.forEach((o,l)=>{this._usedSet.has(l)||this.markUnused(l)});const t=[];this._itemList.forEach(o=>{this._usedSet.has(o)||t.push(o)}),this._unloadPriorityCallback&&t.sort(this._unloadPriorityCallback);const a=Math.floor(this._itemSet.size*(1-this.unloadPercent)),r=this._cachedBytes-(this._cachedBytes-this.minBytesSize);let i=0,n=0;for(let o=0;o<t.length;o++){const l=t[o];if(this._itemSet.size-i<=a&&this._cachedBytes-n<=r)break;const c=this._bytesMap.get(l)||0;this.remove(l)&&(i++,n+=c)}}clear(){Array.from(this._itemSet.keys()).forEach(t=>this.remove(t))}getStats(){return{size:this._itemSet.size,bytes:this._cachedBytes,usedCount:this._usedSet.size}}}class il{maxJobs=6;priorityCallback=null;_items=[];_callbacks=new Map;_currJobs=0;get running(){return this._items.length!==0||this._currJobs!==0}sort(){this.priorityCallback&&this._items.sort(this.priorityCallback)}has(e){return this._callbacks.has(e)}add(e,t){if(this._callbacks.has(e))return this._callbacks.get(e).promise;let a,r;const i=new Promise((o,l)=>{a=o,r=l}),n={callback:t,promise:i,resolve:a,reject:r};return this._items.unshift(e),this._callbacks.set(e,n),i}remove(e){const t=this._items.indexOf(e);if(t!==-1){const a=this._callbacks.get(e);a&&(a.promise.catch(()=>{}),a.reject(new Error("PriorityQueue: Item removed."))),this._items.splice(t,1),this._callbacks.delete(e)}}removeByFilter(e){const t=[];this._items.forEach(a=>{e(a)&&t.push(a)}),t.forEach(a=>this.remove(a))}update(){this._tryRunJobs()}_tryRunJobs(){this.sort();const e=this.maxJobs;let t=0;const a=()=>{this._currJobs--};for(;e>this._currJobs&&this._items.length>0&&t<e;){this._currJobs++,t++;const r=this._items.shift(),i=this._callbacks.get(r);this._callbacks.delete(r),Promise.resolve(i.callback(r)).then(()=>{i.resolve(),a()}).catch(n=>{i.reject(n),a()})}}clear(){Array.from(this._items).forEach(t=>this.remove(t))}getStats(){return{queued:this._items.length,running:this._currJobs}}}function fu(s,e=null,t=null){const a=[];for(a.push(s),a.push(null),a.push(0);a.length>0;){const r=a.pop(),i=a.pop(),n=a.pop();if(e&&e(n,i,r)===!0){t&&t(n,i,r);return}const o=n.children;if(o&&o.length>0)for(let l=o.length-1;l>=0;l--)a.push(o[l]),a.push(n),a.push(r+1);if(t&&t(n,i,r)===!0)return}}function fm(s,e){let t=s;for(;t;){const a=t.depth,r=t.parent;e(t,r,a),t=r}}const $s={inView:!1,error:1/0,distanceFromCamera:1/0},du=!0;function hu(s){return s===Ga||s===Br}function xr(s,e){return s.lastFrameVisited===e&&s.used}function uu(s){return s.childrenProcessed===s.children.length}function sl(s){return s.hasUnrenderableContent||s.parent!==null&&s.parent.geometricError<s.geometricError}function nl(s,e){s.lastFrameVisited!==e.frameCount&&(s.usedLastFrame=s.used,s.lastFrameVisited=e.frameCount,s.used=!1,s.inFrustum=!1,s.isLeaf=!1,s.visible=!1,s.active=!1,s.error=1/0,s.distanceFromCamera=1/0,s.allChildrenReady=!1,e.calculateTileViewError(s,$s),s.inFrustum=$s.inView,s.error=$s.error,s.distanceFromCamera=$s.distanceFromCamera)}function ol(s,e,t=!1){s.used||(t||(s.used=!0,e.stats.used++),e.markTileUsed(s),s.inFrustum===!0&&e.stats.inFrustum++)}function dm(s,e){if(s.canTraverse&&s.canTraverseFrame===e.frameCount)return s.canTraverse;let t=!1;return s.error<=e.errorTarget&&!sl(s)||s.depth>=e.maxDepth||!s.children||s.children.length===0?t=!1:t=!0,s.canTraverse=t,s.canTraverseFrame=e.frameCount,t}function ll(s,e,t=!1){if(e.ensureChildrenArePreprocessed(s),nl(s,e),ol(s,e,t),sl(s)&&uu(s)){const a=s.children;for(let r=0,i=a.length;r<i;r++)ll(a[r],e,t)}}function en(s,e){if(e.ensureChildrenArePreprocessed(s),nl(s,e),!s.inFrustum)return;if(!dm(s,e)){ol(s,e);const n=s.children;if(!s.hasContent&&n&&n.length>0)for(let o=0,l=n.length;o<l;o++){const c=n[o];en(c,e)}return}const a=s.children;let r=!1,i=!1;for(let n=0,o=a.length;n<o;n++){const l=a[n];en(l,e),r=r||xr(l,e.frameCount),i=i||l.inFrustum}if(s.refine==="REPLACE"&&!i&&a.length!==0){s.inFrustum=!1;for(let n=0,o=a.length;n<o;n++)ll(a[n],e,!0);return}if(ol(s,e),s.refine==="REPLACE"&&(r&&s.depth!==0||du))for(let n=0,o=a.length;n<o;n++)ll(a[n],e)}function cl(s,e){const t=e.frameCount;if(!xr(s,t))return;const a=s.children;let r=!1;for(let i=0,n=a.length;i<n;i++){const o=a[i];r=r||xr(o,t)}if(!r)s.isLeaf=!0;else{let i=!0;for(let n=0,o=a.length;n<o;n++){const l=a[n];if(cl(l,e),xr(l,t)){const c=!sl(l);let f=!l.hasContent||l.hasRenderableContent&&hu(l.loadingState)||l.hasUnrenderableContent&&l.loadingState===Br;f=c&&f||l.allChildrenReady,i=i&&f}}s.allChildrenReady=i}}function bu(s,e){if(e.ensureChildrenArePreprocessed(s),xr(s,e.frameCount)&&(s.hasContent&&e.queueTileForDownload(s),uu(s))){const t=s.children;for(let a=0,r=t.length;a<r;a++)bu(t[a],e)}}function tn(s,e){const t=e.stats;if(!xr(s,e.frameCount))return;if(s.isLeaf){s.loadingState===Ga?(s.inFrustum&&(s.visible=!0,t.visible++),s.active=!0,t.active++):s.hasContent&&e.queueTileForDownload(s);return}const a=s.children,r=s.hasContent,i=hu(s.loadingState)&&r,n=(e.errorTarget+1)*(e.errorThreshold||1),o=s.error<=n,l=s.refine==="ADD",c=s.allChildrenReady||s.depth===0&&!du;if(r&&(o||l)&&e.queueTileForDownload(s),(o&&i&&!c||i&&l)&&(s.inFrustum&&(s.visible=!0,t.visible++),s.active=!0,t.active++),!l&&o&&!c)for(let f=0,d=a.length;f<d;f++){const h=a[f];xr(h,e.frameCount)&&bu(h,e)}else for(let f=0,d=a.length;f<d;f++)tn(a[f],e)}function an(s,e){const t=xr(s,e.frameCount);if(t||s.usedLastFrame){let a=!1,r=!1;if(t?(a=s.active,r=s.visible):nl(s,e),s.hasRenderableContent&&s.loadingState===Ga){const n=s.__wasSetVisible;s.__wasSetActive!==a&&(e.setTileDelayedActive(s,a),s.__wasSetActive=a),n!==r&&(e.setTileDelayedVisible(s,r),s.__wasSetVisible=r)}s.usedLastFrame=t;const i=s.children;for(let n=0,o=i.length;n<o;n++)an(i[n],e)}}class Hr{static s_tmpMatrix=null;_type;_data;_box;get box(){return this._box}_sphere;_matrix;constructor(e){if(Hr.s_tmpMatrix||(Hr.s_tmpMatrix=new R),this._data=e,e.box)this._type="box",this._parseBox(e.box);else if(e.sphere)this._type="sphere",this._parseSphere(e.sphere);else if(e.region)this._type="region",this._parseRegion(e.region);else throw new Error("BoundingVolume: Invalid bounding volume data")}_parseBox(e){if(e.length!==12)throw new Error("BoundingVolume: Box must have 12 elements");const t=new b(e[0],e[1],e[2]),a=new b(e[3],e[4],e[5]),r=new b(e[6],e[7],e[8]),i=new b(e[9],e[10],e[11]),n=a.length,o=r.length,l=i.length,c=a.clone().normalize(),f=r.clone().normalize(),d=i.clone().normalize();this._matrix=new R;const h=this._matrix.rawData;h[0]=c.x,h[1]=c.y,h[2]=c.z,h[3]=0,h[4]=f.x,h[5]=f.y,h[6]=f.z,h[7]=0,h[8]=d.x,h[9]=d.y,h[10]=d.z,h[11]=0,h[12]=t.x,h[13]=t.y,h[14]=t.z,h[15]=1;const u=new b(n*2,o*2,l*2);this._box=new Ce(new b(0,0,0),u)}_parseSphere(e){if(e.length!==4)throw new Error("BoundingVolume: Sphere must have 4 elements");const t=new b(e[0],e[1],e[2]),a=e[3];this._sphere=new Gr(t,a)}_parseRegion(e){if(e.length!==6)throw new Error("BoundingVolume: Region must have 6 elements");const[t,a,r,i,n,o]=e,l=new b((t+r)/2,(a+i)/2,(n+o)/2),c=new b(Math.abs(r-t),Math.abs(i-a),Math.abs(o-n));this._box=new Ce(l,c),this._matrix=new R,this._matrix.identity()}getAABB(e,t){if(this._type==="sphere"&&this._sphere){const a=this._sphere.center,r=this._sphere.radius,i=new b(a.x-r,a.y-r,a.z-r),n=new b(a.x+r,a.y+r,a.z+r);if(e.setFromMinMax(i,n),t){const o=[new b(i.x,i.y,i.z),new b(n.x,i.y,i.z),new b(i.x,n.y,i.z),new b(n.x,n.y,i.z),new b(i.x,i.y,n.z),new b(n.x,i.y,n.z),new b(i.x,n.y,n.z),new b(n.x,n.y,n.z)];o.forEach(l=>{const c=new b;t.transformPoint(l,c),l.copyFrom(c)}),e.makeEmpty(),o.forEach(l=>{e.expandByPoint(l)})}return e}else if(this._box){const a=Hr.s_tmpMatrix;if(a.identity(),this._matrix?t?a.multiplyMatrices(t,this._matrix):a.copyFrom(this._matrix):t&&a.copyFrom(t),a){const r=this._box,i=[new b(r.min.x,r.min.y,r.min.z),new b(r.max.x,r.min.y,r.min.z),new b(r.min.x,r.max.y,r.min.z),new b(r.max.x,r.max.y,r.min.z),new b(r.min.x,r.min.y,r.max.z),new b(r.max.x,r.min.y,r.max.z),new b(r.min.x,r.max.y,r.max.z),new b(r.max.x,r.max.y,r.max.z)];i.forEach(n=>{const o=new b;a.transformPoint(n,o),n.copyFrom(o)}),e.makeEmpty(),i.forEach(n=>{e.expandByPoint(n)})}else e.setFromMinMax(this._box.min,this._box.max);return e}throw new Error("BoundingVolume: Invalid state")}getOBB(e,t){this._type==="box"&&this._box&&this._matrix?(e.setFromMinMax(this._box.min,this._box.max),t.copyFrom(this._matrix)):(this.getAABB(e),t.identity())}getSphere(e){if(this._type==="sphere"&&this._sphere)return e.center.copyFrom(this._sphere.center),e.radius=this._sphere.radius,e;const t=new Ce;this.getAABB(t);const a=t.center,i=t.size.length*.5;return e.center.copyFrom(a),e.radius=i,e}get type(){return this._type}distanceToPoint(e,t){if(this._type==="sphere"&&this._sphere){const a=this._sphere.center;let r=a;if(t){const o=new b;t.transformPoint(a,o),r=o}const i=this._sphere.radius,n=e.clone().subtract(r).length;return Math.max(0,n-i)}else if(this._box){const a=new Ce;this.getAABB(a,t);const r=a.center,i=a.size,n=Math.max(0,Math.abs(e.x-r.x)-i.x*.5),o=Math.max(0,Math.abs(e.y-r.y)-i.y*.5),l=Math.max(0,Math.abs(e.z-r.z)-i.z*.5);return Math.sqrt(n*n+o*o+l*l)}return 1/0}intersectsFrustum(e,t){if(this._type==="sphere"&&this._sphere){const a=new Ce;return this.getAABB(a,t),e.containsBox2(a)>0}else if(this._box){const a=new Ce;return this.getAABB(a,t),e.containsBox2(a)>0}return!1}}const gu=(s,e)=>{const t=s.priority||0,a=e.priority||0;return t!==a?t>a?1:-1:s.used!==e.used?s.used?1:-1:s.error!==e.error?s.error>e.error?1:-1:s.distanceFromCamera!==e.distanceFromCamera?s.distanceFromCamera>e.distanceFromCamera?-1:1:s.depthFromRenderedParent!==e.depthFromRenderedParent?s.depthFromRenderedParent>e.depthFromRenderedParent?-1:1:0},pu=(s,e)=>{const t=s.priority||0,a=e.priority||0;return t!==a?t>a?1:-1:s.lastFrameVisited!==e.lastFrameVisited?s.lastFrameVisited>e.lastFrameVisited?-1:1:s.depthFromRenderedParent!==e.depthFromRenderedParent?s.depthFromRenderedParent>e.depthFromRenderedParent?1:-1:s.loadingState!==e.loadingState?s.loadingState>e.loadingState?-1:1:s.hasUnrenderableContent!==e.hasUnrenderableContent?s.hasUnrenderableContent?-1:1:s.error!==e.error?s.error>e.error?-1:1:0};class hm{rootLoadingState=vr;rootTileSet=null;rootURL=null;fetchOptions={};frameCount=0;isLoading=!1;lruCache;loadQueue;processNodeQueue;plugins=[];_queuedTiles=[];_cachedSinceLoadComplete=new Set;_processedTiles=new WeakSet;_visibleTiles=new Set;_usedSet=new Set;_cacheHits=0;_cacheMisses=0;stats={parsing:0,downloading:0,failed:0,inFrustum:0,used:0,active:0,visible:0,sceneCount:0,inCacheSinceLoad:0};errorTarget=16;errorThreshold=1;maxDepth=30;displayActiveTiles=!1;onRootTileLoaded;rtcOffset=null;_root=null;_activeTiles=new Set;_delayedHideTiles=new Set;_delayedVisibleTiles=new Set;_delayedActiveTiles=new Set;group;cameras=[];_cameraMap=new Map;_cameraInfo=[];_upRotationMatrix=new R;_ellipsoid;_bytesUsed=new WeakMap;_eventListeners=new Map;performanceStats={updateTime:0,traverseTime:0,markUsedTime:0,markVisibleTime:0,toggleTime:0,queueProcessTime:0};transCdnUrlFunc=null;constructor(e=null){this.rootURL=e,this.lruCache=new cu,this.lruCache.unloadPriorityCallback=pu,this.loadQueue=new il,this.loadQueue.maxJobs=10,this.loadQueue.priorityCallback=gu,this.processNodeQueue=new il,this.processNodeQueue.maxJobs=25,this.group=new ne,this.group.name="TilesRendererGroup"}get root(){return this._root}get loadProgress(){const{stats:e,isLoading:t}=this,a=e.downloading,r=e.inCacheSinceLoad+(t?1:0);return r===0?1:1-a/r}update(){const{lruCache:e,_usedSet:t,stats:a,loadQueue:r,processNodeQueue:i}=this;this.rootLoadingState===vr&&(this.rootLoadingState=al,this.isLoading=!0,this._loadRootTileSet().then(c=>{if(this.rootLoadingState=Ga,this.rootTileSet=c,c.root){const f=this._getBasePath(this.rootURL||""),d=this.preprocessNode(c.root,f,null);this.queueTileForDownload(d),this._root=d;const h=new Hr(d.boundingVolume),u=new Gr;h.getSphere(u);const m=new Ce;if(h.getAABB(m),this.rtcOffset=new b(-u.center.x,-u.center.y,-u.center.z),this.onRootTileLoaded)try{this.onRootTileLoaded({center:u.center,radius:u.radius,boundingBox:m,rtcOffset:this.rtcOffset})}catch(g){console.warn("Failed to calculate bounding volume for root tile:",g)}}this.dispatchEvent({type:"load-tile-set",tileSet:c,url:this.rootURL})}).catch(c=>{this.rootLoadingState=Br,console.error("Failed to load root tileset:",c),this.dispatchEvent({type:"load-error",tile:null,error:c,url:this.rootURL})}));const n=this.root;if(!n)return;a.inFrustum=0,a.used=0,a.active=0,a.visible=0,this.frameCount++,t.forEach(c=>e.markUnused(c)),t.clear(),this.updateCameraInfo(),this._checkDelayedHideTiles(),this._checkDelayedActiveTiles(),this._checkDelayedVisibleTiles(),en(n,this),cl(n,this),tn(n,this),an(n,this);const o=this._queuedTiles;e.unloadPriorityCallback&&o.sort(e.unloadPriorityCallback);for(let c=0,f=o.length;c<f&&!e.isFull();c++)this.requestTileContents(o[c]);o.length=0,r.update(),i.update(),e.scheduleUnload(),(r.running||i.running)===!1&&this.isLoading===!0&&(this._cachedSinceLoadComplete.clear(),a.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1)}traverse(e,t,a=!0){this.root&&fu(this.root,(r,i,n)=>(a&&this.ensureChildrenArePreprocessed(r,!0),e?e(r,i,n):!1),t)}registerPlugin(e){if(this.plugins.includes(e))return;const t=e.priority||0;let a=this.plugins.length;for(let r=0;r<this.plugins.length;r++)if((this.plugins[r].priority||0)>t){a=r;break}this.plugins.splice(a,0,e),e.init&&e.init(this)}unregisterPlugin(e){const t=this.plugins;let a;if(typeof e=="string"?a=t.find(r=>r.name===e):a=e,a&&t.includes(a)){const r=t.indexOf(a);return t.splice(r,1),a.dispose&&a.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}calculateTileViewError(e,t){const a=e.cached,r=this.cameras,i=this._cameraInfo,n=a.boundingVolume;if(!n){t.inView=!1,t.error=1/0,t.distanceFromCamera=1/0;return}let o=!1,l=-1/0,c=1/0,f=-1/0,d=1/0;const h=a.worldTransform;for(let u=0,m=r.length;u<m;u++){const g=i[u];let p,A;if(g.isOrthographic){const B=g.pixelSize;p=e.geometricError/B,A=1/0}else{const B=g.sseDenominator;A=n.distanceToPoint(g.position,h),p=A===0?1/0:e.geometricError/(A*B)}const D=i[u].frustum;n.intersectsFrustum(D,h)&&(o=!0,l=Math.max(l,p),c=Math.min(c,A)),f=Math.max(f,p),d=Math.min(d,A)}o?(t.inView=!0,t.error=l,t.distanceFromCamera=c):(t.inView=!1,t.error=f,t.distanceFromCamera=d)}updateCameraInfo(){this._updateCameraInfo()}_updateCameraInfo(){const e=this.cameras,t=this._cameraInfo,a=this._cameraMap;for(;t.length<e.length;)t.push({position:new b,frustum:new On,isOrthographic:!1});for(let r=0;r<e.length;r++){const i=e[r],n=t[r],o=a.get(i);if(!o)continue;const l=i.transform.worldPosition;if(n.position.copyFrom(l),n.frustum=i.frustum,n.isOrthographic=i.type===ot.ortho,n.isOrthographic){const c=i.frustumSize;n.pixelSize=c/o.height}else{const f=i.fov*Math.PI/180;n.sseDenominator=2*Math.tan(f/2)/o.height}}}preprocessNode(e,t,a=null){if(this._processedTiles.has(e))return e;this._processedTiles.add(e);let r;if(e instanceof rl?r=e:r=new rl(e,a),r.content){const c=r.content;!("uri"in c)&&"url"in c&&(c.uri=c.url,delete c.url)}if(r.basePath=t,r.boundingVolume){const c=new Hr(r.boundingVolume);r.cached.boundingVolume=c}const i=new b(r.boundingVolume.box[0],r.boundingVolume.box[1],r.boundingVolume.box[2]),n=new R;if(r.transform){const c=r.transform;for(let f=0;f<16;f++)n.rawData[f]=c[f]}if(!a){n.copyFrom(this._upRotationMatrix);const c=new b;c.copyFrom(i),c.applyMatrix4(n);const f=r.cached.boundingVolume.box,d=[new b(f.min.x,f.min.y,f.min.z),new b(f.max.x,f.min.y,f.min.z),new b(f.min.x,f.max.y,f.min.z),new b(f.max.x,f.max.y,f.min.z),new b(f.min.x,f.min.y,f.max.z),new b(f.max.x,f.min.y,f.max.z),new b(f.min.x,f.max.y,f.max.z),new b(f.max.x,f.max.y,f.max.z)];for(const m of d)m.applyMatrix4(n);const h=new Ce;d.forEach(m=>{h.expandByPoint(m)}),n.rawData[12]=-c.x,n.rawData[13]=-c.y,n.rawData[14]=-c.z;const u=h.min;n.rawData[13]-=u.y}const o=new R;o.copyFrom(n),a&&a.cached.worldTransform&&o.multiplyMatrices(a.cached.worldTransform,n);const l=new R;if(l.copyFrom(o),l.invert(),r.cached.transfrom=n,r.cached.worldTransform=o,r.cached.transformInverse=l,e.children&&e.children.length>0){r.children=[];for(let c=0;c<e.children.length;c++){const f=e.children[c],d=this.preprocessNode(f,t,r);r.children.push(d)}r.childrenProcessed=r.children.length}return r}ensureChildrenArePreprocessed(e,t=!1){const a=e.children;for(let r=0,i=a.length;r<i;r++){const n=a[r];n.basePath!==void 0&&n.basePath!==""||n.cached.boundingVolume||(t?(this.processNodeQueue.remove(n),this.preprocessNode(n,e.basePath,e)):this.processNodeQueue.has(n)||this.processNodeQueue.add(n,o=>{this.preprocessNode(o,e.basePath,e)}))}}_recordCacheHit(){this._cacheHits++}_recordCacheMiss(){this._cacheMisses++}resetCacheStats(){this._cacheHits=0,this._cacheMisses=0}requestTileContents(e){if(e.loadingState!==vr){this._recordCacheHit();return}if(this.lruCache.isFull()){this._recordCacheMiss();return}this._recordCacheMiss(),e.loadingState=al,this.stats.downloading++;const t=e.content||e.contents&&e.contents[0];if(!t||!t.uri){e.loadingState=Br,this.stats.downloading--,this.stats.failed++;return}const a=e.basePath||"",r=t.uri,i=this._resolveURL(a,r);this.loadQueue.add(e,async n=>{try{await this.parseTileContent(n,r,i),this.stats.downloading--}catch(o){n.loadingState=Br,this.stats.downloading--,this.stats.failed++,console.error("Failed to load tile:",o)}})}async parseTileContent(e,t,a){e.loadingState=ou;const i=(c=>{const f=c.split(".");return f.length>1?f[f.length-1]:""})(t),n=this.transCdnUrlFunc?this.transCdnUrlFunc(a):a;let o=null;const l=new Rt;switch(i.toLowerCase()){case"b3dm":{o=(await l.load(n,So,{onProgress:f=>{},onComplete:f=>{}})).data;break}case"i3dm":{o=(await l.load(n,Eo,{onProgress:f=>{},onComplete:f=>{}})).data;break}case"glb":case"gltf":{o=(await l.load(n,Ut,{onProgress:f=>{},onComplete:f=>{}})).data;break}case"pnts":{o=(await l.load(n,$h,{onProgress:f=>{},onComplete:f=>{}})).data;break}case"json":try{const c=await _.res.loadJSON(n);e.children.length=0,e.childrenProcessed=0;const f=this._getBasePath(n);if(c.root){const d=this.preprocessNode(c.root,f,e);e.children.push(d),e.childrenProcessed=1,this.dispatchEvent({type:"load-tile-set",tileSet:c,url:n})}e.loadingState=Ga;return}catch(c){console.error("Failed to load external tileset:",c),e.loadingState=Br,this.stats.failed++;return}break;default:console.warn(`Unknown tile format: ${i}`);break}if(o){e.cached.scene=o;const c=this._estimateBytesUsed(o);this._bytesUsed.set(o,c),this.lruCache.setMemoryUsage(e,c),this.lruCache.has(e)||this.lruCache.add(e,f=>{if(f.cached.scene){const d=f.cached.scene;d.parent&&d.parent.object3D.removeChild(d),d.destroy(!0),f.cached.scene=null}f.loadingState=vr}),this.setTileImmediateActive(e),e.active=!0,e.__wasSetActive=!0,this.stats.active++,this.setTileImmediateVisible(e),e.visible=!0,e.__wasSetVisible=!0,this.stats.visible++,this.stats.sceneCount++,e.loadingState=Ga,e.usedLastFrame=!0,tn(e,this),an(e,this)}else e.loadingState=Br,this.stats.failed++}markTileUsed(e){this._usedSet.add(e),this.lruCache.markUsed(e)}setTileDelayedActive(e,t){t?(this._activeTiles.add(e),this._delayedHideTiles.has(e)&&this._delayedHideTiles.delete(e),this._delayedActiveTiles.has(e)||this._delayedActiveTiles.add(e)):(this._activeTiles.delete(e),this._delayedHideTiles.has(e)||this._delayedHideTiles.add(e),this._delayedActiveTiles.has(e)&&this._delayedActiveTiles.delete(e))}setTileImmediateActive(e){if(e.hasRenderableContent){const t=e.cached.scene;t&&(this.group.entityChildren.includes(t)||(t.parent&&t.parent.object3D.removeChild(t),this.group.addChild(t)),e.cached.worldTransform&&this._applyWorldTransform(t.transform,e.cached.worldTransform))}}setTileImmediateVisible(e){if(e.hasRenderableContent){const t=e.cached.scene;t&&(t.transform.enable=!0)}}_checkDelayedHideTiles(){if(this.stats.downloading===0)for(const e of this._delayedHideTiles){const t=e.cached.scene;t&&(t.transform.enable=!1,this._delayedHideTiles.delete(e))}}_checkDelayedActiveTiles(){for(const e of this._delayedActiveTiles)if(e.hasRenderableContent){const t=e.cached.scene;t&&(this.group.entityChildren.includes(t)||(t.parent&&t.parent.object3D.removeChild(t),this.group.addChild(t)),e.cached.worldTransform&&this._applyWorldTransform(t.transform,e.cached.worldTransform),this._delayedActiveTiles.delete(e))}else this._delayedActiveTiles.delete(e)}_checkDelayedVisibleTiles(){for(const e of this._delayedVisibleTiles)if(e.hasRenderableContent){const t=e.cached.scene;t&&(t.transform.enable=!0,this._delayedVisibleTiles.delete(e))}else this._delayedVisibleTiles.delete(e)}setTileDelayedVisible(e,t){t?(this._visibleTiles.add(e),this._delayedHideTiles.has(e)&&this._delayedHideTiles.delete(e),this._delayedVisibleTiles.has(e)||this._delayedVisibleTiles.add(e)):(this._visibleTiles.delete(e),this._delayedHideTiles.has(e)||this._delayedHideTiles.add(e),this._delayedVisibleTiles.has(e)&&this._delayedVisibleTiles.delete(e))}queueTileForDownload(e){e.loadingState!==vr||this.lruCache.isFull()||this._queuedTiles.push(e)}dispatchEvent(e){const t=this._eventListeners.get(e.type);t&&t.forEach(a=>{try{a(e)}catch(r){console.error("Error in event listener:",r)}})}async _loadRootTileSet(){if(!this.rootURL)throw new Error("Root URL is not set");const e=await _.res.loadJSON(this.rootURL);return e.asset&&e.asset.gltfUpAxis&&this._setupUpAxisRotation(e.asset.gltfUpAxis),e}_setupUpAxisRotation(e){const t=new R;switch(e.toLowerCase()){case"x":t.makeRotationAxis(b.Y_AXIS,-Math.PI/2);break;case"y":t.identity();break;case"z":t.makeRotationAxis(b.X_AXIS,-Math.PI/2);break;default:console.warn(`Unknown gltfUpAxis: ${e}, using default`),t.identity();break}this._upRotationMatrix=t}_applyLocalTransform(e,t){const a=t.decompose(oa.EULER_ANGLES);e.localPosition=a[0];const r=new se;r.fromEulerAngles(a[1].x,a[1].y,a[1].z),e.localRotQuat=r,e.localScale=a[2]}_applyWorldTransform(e,t){const a=t.decompose(oa.EULER_ANGLES);e.localPosition=a[0];const r=new se;r.fromEulerAngles(a[1].x,a[1].y,a[1].z),e.localRotQuat=r,e.localScale=a[2]}_getBasePath(e){const t=e.lastIndexOf("/");return t!==-1?e.substring(0,t):""}_resolveURL(e,t){return t.startsWith("http://")||t.startsWith("https://")?t:e+"/"+t}_getUrlExtension(e){const t=e.split(".");return t.length>1?t[t.length-1]:""}getMemoryStats(){const e=this.lruCache.getStats(),t=this.lruCache.maxBytesSize,a=e.bytes,r=t-a,i=this._cacheHits+this._cacheMisses,n=i>0?this._cacheHits/i:0;return{totalTiles:e.size,loadedTiles:e.usedCount,cachedTiles:e.size,totalBytes:t,usedBytes:a,freeBytes:r,cacheHitRate:n}}getLoadedTiles(){const e=[];return this.traverse(t=>(t.loadingState===Ga&&e.push(t),!1),null),e}getVisibleTiles(){return Array.from(this._visibleTiles)}getActiveTiles(){return Array.from(this._activeTiles)}getTileTreeStats(){let e=0,t=0,a=0,r=0,i=0,n=0;return this.traverse(o=>(e++,o.loadingState===Ga&&t++,o.visible&&a++,o.active&&r++,i=Math.max(i,o.depth),n+=o.depth,!1),null),{totalTiles:e,loadedTiles:t,visibleTiles:a,activeTiles:r,maxDepth:i,averageDepth:e>0?n/e:0}}printDebugInfo(){const e=this.stats,t=this.getMemoryStats(),a=this.getTileTreeStats(),r=this.performanceStats,i=this.lruCache.getStats();console.log("=== TilesRenderer Debug Info ==="),console.log("Stats:",e),console.log("Memory:",t),console.log("Tree:",a),console.log("Performance:",r),console.log("Cache:",i),console.log("Queues:",{load:this.loadQueue.getStats(),process:this.processNodeQueue.getStats()})}setPerformanceOptions(e){e.lruCacheMinSize!==void 0&&(this.lruCache.minSize=e.lruCacheMinSize),e.lruCacheMaxSize!==void 0&&(this.lruCache.maxSize=e.lruCacheMaxSize),e.lruCacheMinBytes!==void 0&&(this.lruCache.minBytesSize=e.lruCacheMinBytes),e.lruCacheMaxBytes!==void 0&&(this.lruCache.maxBytesSize=e.lruCacheMaxBytes),e.lruCacheUnloadPercent!==void 0&&(this.lruCache.unloadPercent=e.lruCacheUnloadPercent),e.downloadQueueMaxJobs!==void 0&&(this.loadQueue.maxJobs=e.downloadQueueMaxJobs),e.parseQueueMaxJobs!==void 0&&(this.loadQueue.maxJobs=e.parseQueueMaxJobs),e.processQueueMaxJobs!==void 0&&(this.processNodeQueue.maxJobs=e.processQueueMaxJobs),e.enablePerformanceStats!==void 0&&(this._enablePerformanceStats=e.enablePerformanceStats),e.enableCacheStats!==void 0&&(this._enableCacheStats=e.enableCacheStats)}dispose(e){[...this.plugins].forEach(a=>this.unregisterPlugin(a)),this.lruCache.clear(),this.loadQueue.clear(),this.processNodeQueue.clear(),this._root=null,this.rootTileSet=null,this.rootLoadingState=vr,this.frameCount=0,this.isLoading=!1,this.resetCacheStats(),this.group.destroy(e)}setCamera(e,t,a){this.cameras.includes(e)||this.cameras.push(e),this._cameraMap.set(e,{width:t,height:a}),this._updateCameraInfo()}deleteCamera(e){const t=this.cameras.indexOf(e);t!==-1&&this.cameras.splice(t,1),this._cameraMap.delete(e),this._updateCameraInfo()}setResolution(e,t,a){const r=this._cameraMap.get(e);r?(r.width=t,r.height=a):this._cameraMap.set(e,{width:t,height:a}),this._updateCameraInfo()}forEachLoadedModel(e){this.traverse(t=>(t.loadingState===Ga&&t.cached.scene&&e(t.cached.scene,t),!1),null)}_estimateBytesUsed(e){let t=0;return e.forChild(a=>{const r=a.getComponent(he);r&&r.geometry&&(t+=1024),r&&r.material&&(t+=512)}),t}addEventListener(e,t){this._eventListeners.has(e)||this._eventListeners.set(e,[]),this._eventListeners.get(e).push(t)}removeEventListener(e,t){const a=this._eventListeners.get(e);if(a){const r=a.indexOf(t);r!==-1&&a.splice(r,1)}}async loadTileSet(e,t){const r=(e.endsWith("/")?e.slice(0,-1):e)+"/"+t;this.rootURL=r}get modelList(){const e=[];return this.forEachLoadedModel(t=>{e.push(t)}),e}}class um{asset;extras;geometricError;properties;refine;root;extensionsUsed;extensionsRequired;extensions}class bm{boundingVolume;children;geometricError;transform;content;contents;refine;extensions;extras}class gm{boundingVolume;geometricError;refine;content;contents;children;transform;extensions;extras}class pm{uri;group;metadata}class mm{class;properties}function Am(s,e){let t=0,a=null;return function(...r){const i=Date.now(),n=i-t;n>=e?(t=i,s.apply(this,r)):(a!==null&&clearTimeout(a),a=window.setTimeout(()=>{t=Date.now(),s.apply(this,r),a=null},e-n))}}class Dm extends xt{static count=0;constructor(){super(),Y.register("ColorLitShader",zd),this.shader=new Dt;let e=new qe("ColorLitShader","ColorLitShader");e.passType=fe.COLOR,this.shader.addRenderPass(e),e.setDefine("USE_BRDF",!0),e.setShaderEntry("VertMain","FragMain"),e.setUniformColor("baseColor",new J),e.setUniformColor("emissiveColor",new J),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",_.res.normalTexture),e.setTexture("emissiveMap",_.res.blackTexture)}clone(){return null}debug(){}}class _m extends xt{constructor(){super();let e=new qe("LambertShader","LambertShader");e.setShaderEntry("VertMain","FragMain"),e.passType=fe.COLOR,e.setUniformVector4("transformUV1",new be(0,0,1,1)),e.setUniformVector4("transformUV2",new be(0,0,1,1)),e.setUniformColor("baseColor",new J(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 a=new Dt;a.addRenderPass(e),this.shader=a,this.baseMap=_.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 Bm(s,e){}class vm extends xt{constructor(){super(),this.shader=new $i,this.baseMap=_.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 fl{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 r=e.readInt32();for(let i=0;i<r;i++){let n=new Ur;n.formBytes(e),this.positionCurves.set(n.path,n)}}let t=e.readInt32();for(let r=0;r<t;r++){let i=new Ur;i.formBytes(e),this.rotationCurves.set(i.path,i)}if(this.useSkeletonScale){let r=e.readInt32();for(let i=0;i<r;i++){let n=new Ur;n.formBytes(e),this.scaleCurves.set(n.path,n)}}let a=e.readInt32();for(let r=0;r<a;r++){let i=new Ur;i.formBytes(e),this.floatCurves.set(i.attribute,i)}}}class Ur{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 Gi;switch(this.k){case 1:this._cacheValue=0;break;case 2:this._cacheValue=new de;break;case 3:this._cacheValue=new b;break;case 4:this._cacheValue=new be;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),a=t.lhsIndex,r=t.rhsIndex;e=t.time;let i=this.m_curves[0].getKey(a),n=this.m_curves[0].getKey(r);e%=this.m_curves[0].totalTime;let o=(e-i.time)/(n.time-i.time);se.HELP_0.set(this.m_curves[0].getKey(a).value,this.m_curves[1].getKey(a).value,this.m_curves[2].getKey(a).value,this.m_curves[3].getKey(a).value),se.HELP_1.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),se.HELP_2.slerp(se.HELP_0,se.HELP_1,o),this._cacheValue.x=se.HELP_2.x,this._cacheValue.y=se.HELP_2.y,this._cacheValue.z=se.HELP_2.z,this._cacheValue.w=se.HELP_2.w;break}return this._cacheValue}getKeyCount(){return this.m_curves[0].getKeyCount()}getKey(e){let t=[];for(let a=0;a<this.k;a++)t.push(this.m_curves[a].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 a=0;a<t;a++){let r=new as(0);r.formBytes(e),this.addKeyFrame(r)}}}class xm 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 Um{colorArray;constructor(e){this.colorArray=e}getColor(e){let t=e*this.colorArray.length,a=Math.floor(t),r=Math.min(a+1,this.colorArray.length-1),i=this.colorArray[a],n=this.colorArray[r];return J.lerp(t-a,i,n)}}class rn{controlVertices;constructor(e){this.setControlVertices(e)}setControlVertices(e){e.length==4&&(this.controlVertices=e.concat())}getPoint(e){if(!(e>=0&&e<=1))return b.ZERO;let t=1-e,a=t*t*t,r=3*e*t*t,i=3*e*e*t,n=e*e*e;return this.controlVertices[0].mul(a).add(this.controlVertices[1].mul(r)).add(this.controlVertices[2].mul(i)).add(this.controlVertices[3].mul(n))}getTangent(e){if(!(e>=0&&e<=1))return b.ZERO;let t=this.controlVertices,a=t[0].add(t[1].add(t[0]).mul(e)),r=t[1].add(t[2].add(t[1]).mul(e)),i=t[2].add(t[3].add(t[2]).mul(e)),n=a.add(r.subtract(a).mul(e));return r.add(i.subtract(r).mul(e)).subtract(n)}getClosestParam(e,t=1e-6){return this.getClosestParamRec(e,0,1,t)}getClosestParamRec(e,t,a,r){let i=(t+a)/2;if(a-t<r)return i;let n=(t+i)/2,o=(i+a)/2,l=this.getPoint(n),c=this.getPoint(o),f=l.subtract(e).lengthSquared,d=c.subtract(e).lengthSquared;return f<d?a=i:t=i,this.getClosestParamRec(e,t,a,r)}}var mu=(s=>(s[s.Open=0]="Open",s[s.Closed=1]="Closed",s))(mu||{});class ym{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,a=this.controlVertices;for(let r=1;r<e;r++){let i=a[(r-1)*3],n=a[r*3];t+=i.subtract(n).lengthSquared}return t==0?0:t}computeApproxParamPerUnitLength(){let e=this.computeApproxLength();return this.numCurveSegments/e}computeApproxNormParamPerUnitLength(){return 1/this.computeApproxLength()}interpolatePoints(e,t){let a=e.length;a<2&&console.error("point count must great 1"),this.clear(),this.type=t;let r=this.controlVertices;switch(t){case 0:{this.numCurveSegments=a-1,this.numControlVertices=3*a-2,r.length=this.numControlVertices;for(let o=0;o<a;o++)r[o*3]=e[o];let i=e[1].subtract(e[0]).mul(.25);r[1]=e[0].add(i);let n=e[a-2].subtract(e[a-1]).mul(.25);r[this.numControlVertices-2]=e[a-1].add(n);for(let o=1;o<this.numCurveSegments;o++){let l=e[o-1].subtract(e[o]),c=e[o+1].subtract(e[o]),f=l.lengthSquared,d=c.lengthSquared;if(f>0&&d>0){let h=(f+d)/8,u=c.div(d).subtract(l.div(f));u.normalize(),u=u.mul(h),r[o*3-1]=e[o].subtract(u),r[o*3+1]=e[o].add(u)}else r[o*3-1]=e[o],r[o*3+1]=e[o]}break}case 1:{this.numCurveSegments=a,this.numControlVertices=3*a+1,r.length=this.numControlVertices;for(let i=0;i<a;i++)r[i*3]=e[i];r[this.numControlVertices-1]=e[0];for(let i=1;i<=this.numCurveSegments;i++){let n=i-1,o=(i+1)%this.numCurveSegments,l=i%this.numCurveSegments,c=e[n].subtract(e[l]),f=e[o].subtract(e[l]),d=c.lengthSquared,h=f.lengthSquared,u=3*i-1,m=(3*i+1)%(this.numControlVertices-1);if(d>0&&h>0){let g=(d+h)/8,p=f.div(h).subtract(c.div(d));p.normalize(),p=p.mul(g),r[u]=e[l].subtract(p),r[m]=e[l].add(p)}else r[u]=e[l],r[m]=e[l]}break}}}setControlVertices(e,t){let a=e.length;a<=0||t==0&&a<4||t==1&&a<7||(a-1)%3==0&&(this.clear(),this.type=t,this.numControlVertices=a,this.numCurveSegments=(a-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=zt.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 a=[],r=this.controlVertices;return a[0]=r[3*t+0],a[1]=r[3*t+1],a[2]=r[3*t+2],a[3]=r[3*t+3],new rn(a).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=zt.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 a=this.controlVertices,r=[];return r[0]=a[3*t+0],r[1]=a[3*t+1],r[2]=a[3*t+2],r[3]=a[3*t+3],new rn(r).getTangent(e-t)}getTangentNorm(e){return this.getTangent(e*this.numCurveSegments)}computeClosestParam(e,t){let a=Number.MAX_SAFE_INTEGER,r=0,i=[],n=new rn(i);for(let o=0;o<this.controlVertices.length-1;o+=3){for(let d=0;d<4;d++)i[d]=this.controlVertices[o+d];n.setControlVertices(i);let l=n.getClosestParam(e,t),f=n.getPoint(l).subtract(e).lengthSquared;f<a&&(a=f,r=o/3+l)}return r}computeClosestNormParam(e,t){return this.computeClosestParam(e,t*this.numCurveSegments)}}class Cm extends Map{valueList;keyList;isChange=!0;constructor(e,t,a){if(super(e),t&&(this.keyList=[]),a&&(this.valueList=[]),e)for(let r of e)this.valueList?.push(r[1]),this.keyList?.push(r[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 Au=(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))(Au||{});const Sm=3.141592653589793;class Fm{}function Du(s,e,t){let a=.3333333333333333,r=.5,i=s*a,n=i*i,l=n*i-i*e*r+t*r,c=-n+e*a,f=c*c*c,d=f+l*l;if(d>=0){let m=Math.sqrt(d)-l;return m=m>0?Math.pow(m,a):-Math.pow(-m,a),-i-c/m+m}let h=Math.sqrt(-f),u=Math.acos(-l/h);return h=Math.pow(h,a),h=h-c/h,u=-i+h*Math.cos(u*a),u}function sn(s,e,t,a){let r=1e-5;if(Math.abs(s)<r)return Math.abs(e)>r?(a.r0=-t/e,1):0;let i=e*e-4*s*t;if(i<0)return 0;let n=.5/s,o=Math.sqrt(i);return a.r0=(o-e)*n,a.r1=(-o-e)*n,2}function _u(s,e,t,a,r){let i=0;if(Math.abs(e)>=1e-4){let n=t/e,o=a/e,l=r/e;s[0]=Du(n,o,l),i++;let c=e,f=t+e*s[0],d=a+t*s[0]+e*s[0]*s[0];i+=sn(c,f,d,{r0:s[1],r1:s[2]})}else i+=sn(t,a,r,{r0:s[1],r1:s[2]});return i}class za{coeff=[];static EvalSegment(e,t){return e*(e*(e*t[0]+t[1])+t[2])+t[3]}}class nr{static kMaxNumSegments=8;segments=[];integrationCache=[];doubleIntegrationCache=[];times=[];segmentCount;constructor(){this.segments[nr.kMaxNumSegments]=new za,this.integrationCache[nr.kMaxNumSegments]=0,this.doubleIntegrationCache[nr.kMaxNumSegments]=0,this.times[nr.kMaxNumSegments]=0}calculateMinMax(e,t){e.x=Math.min(e.x,t),e.y=Math.max(e.y,t)}findMinMaxDoubleIntegrated(){let e=de.ZERO.clone(),t=20,a=1/t,r=a;for(let i=0;i<t;i++)this.calculateMinMax(e,this.evaluateDoubleIntegrated(r)),r+=a;return e}findMinMaxIntegrated(){let e=de.ZERO.clone(),t=[],a=[];for(let r=0;r<this.segmentCount;r++){let i=4*this.segments[r].coeff[0],n=3*this.segments[r].coeff[1],o=2*this.segments[r].coeff[2],l=1*this.segments[r].coeff[3],c=[],f=_u(c,i,n,o,l);for(let d=0;d<f;d++){let h=c[d]+t[r];h>=t[r]&&h<a[r]&&this.calculateMinMax(e,this.evaluateIntegrated(h))}this.calculateMinMax(e,this.evaluateIntegrated(a[r])),this.times[r]}return e}generateIntegrationCache(e){e.integrationCache[0]=0;let t=e.times[0],a=0;for(let r=1;r<e.segmentCount;r++){let i=e.segments[r-1].coeff;dl(i);let n=t-a;e.integrationCache[r]=e.integrationCache[r-1]+za.EvalSegment(n,i)*n,a=t,t=e.times[r]}}generateDoubleIntegrationCache(e){let t=0,a=0;for(let r=0;r<e.segmentCount;r++){e.doubleIntegrationCache[r]=t;let i=e.times[r]-a;i=Math.max(i,0),t+=za.EvalSegment(i,e.segments[r].coeff)*i*i+e.integrationCache[r]*i,a=e.times[r]}}integrate(){this.generateIntegrationCache(this);for(let e=0;e<this.segmentCount;e++)dl(this.segments[e].coeff)}doubleIntegrate(){this.generateIntegrationCache(this);for(let e=0;e<this.segmentCount;e++)Bu(this.segments[e].coeff);this.generateDoubleIntegrationCache(this)}static isValidCurve(e){let t=e.getKeyCount(),a=t-1;return e.getKey(0).time!=0&&a++,e.getKey(t-1).time!=1&&a++,a<=nr.kMaxNumSegments}evaluateDoubleIntegrated(e){let t=0;for(let a=0;a<this.segmentCount;a++){if(e<=this.times[a]){let r=e-t;return this.doubleIntegrationCache[a]+this.integrationCache[a]*r+za.EvalSegment(r,this.segments[a].coeff)*r*r}t=this.times[a]}return 1}evaluateIntegrated(e){let t=0;for(let a=0;a<this.segmentCount;a++){if(e<=this.times[a]){let r=e-t;return this.integrationCache[a]+za.EvalSegment(r,this.segments[a].coeff)*r}t=this.times[a]}return 1}evaluate(e){let t=0;for(let a=0;a<this.segmentCount;a++){if(e<=this.times[a])return za.EvalSegment(e-t,this.segments[a].coeff);t=this.times[a]}return 1}buildCurve(e,t){let a=e.getKeyCount();this.segmentCount=1;let r=1.01;if(this.segments.length=0,this.integrationCache.length=0,this.doubleIntegrationCache.length=0,this.times.length=0,this.times[0]=r,a!=0)if(a==1)this.segments[0]=new za,this.segments[0].coeff[3]=e.getKey(0).value*t;else{this.segmentCount=a-1;let i=0;e.getKey(0).time!=0&&(this.segments[0].coeff[3]=e.getKey(0).value,this.times[0]=e.getKey(0).time,i=1);for(let n=0;n<this.segmentCount;n++){let o;e.calculateCacheData(o,n,n+1,0),this.segments[n+i].coeff=o.coeff.concat(),this.times[n+i]=e.getKey(n+1).time}this.segmentCount+=i,e.getKey(a-1).time!=1&&(this.segments[this.segmentCount].coeff[3]=e.getKey(a-1).value,this.segmentCount++),this.times[this.segmentCount-1]=r;for(let n=0;n<this.segmentCount;n++)this.segments[n].coeff[0]*=t,this.segments[n].coeff[1]*=t,this.segments[n].coeff[2]*=t,this.segments[n].coeff[3]*=t}return!0}}function Bu(s){s[0]/=20,s[1]/=12,s[2]/=6,s[3]/=2}function dl(s){s[0]/=4,s[1]/=3,s[2]/=2,s[3]/=1}var vu=(s=>(s[s.kEMScalar=0]="kEMScalar",s[s.kEMOptimized=1]="kEMOptimized",s[s.kEMOptimizedMinMax=2]="kEMOptimizedMinMax",s[s.kEMSlow=3]="kEMSlow",s))(vu||{}),xu=(s=>(s[s.kMMCScalar=0]="kMMCScalar",s[s.kMMCCurve=1]="kMMCCurve",s[s.kMMCTwoCurves=2]="kMMCTwoCurves",s[s.kMMCTwoConstants=3]="kMMCTwoConstants",s))(xu||{});class km{max;min}class Em{max;min;integrate(){this.max.integrate(),this.min.integrate()}doubleIntegrate(){this.max.doubleIntegrate(),this.min.doubleIntegrate()}findMinMaxIntegrated(){return null}findMinMaxDoubleIntegrated(){return null}}class Uu{minMaxState;minCurve;maxCurve;_scalar=1;_minScalar;constructor(e=1){this._scalar=e,this.minMaxState=0,this.minCurve=new Gi,this.maxCurve=new Gi}setScalar(e){this._scalar=e}getScalar(){return this._scalar}static evaluateSlow(e,t,a){let r=e.maxCurve.getValue(t)*e.getScalar();return e.minMaxState==2?Nr(e.minCurve.getValue(t)*e.getScalar(),r,a):r}static evaluate(e,t,a=1){if(e.minMaxState==0)return e.getScalar();let r=e.maxCurve.getValue(t)*e.getScalar();return e.minMaxState==1?Nr(e.minCurve.getValue(t)*e.getScalar(),r,a):e.minMaxState==3?Nr(e._minScalar,e._scalar,a):e.minMaxState==2?Nr(e.minCurve.getValue(t)*e.getScalar(),r,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 wm{value=0;mode=0;spread=0;speed=new Uu;unSerialized(e){this.value=e.value,this.mode=e.mode,this.spread=e.spread,this.speed.unSerialized(e.speed)}}function Im(s,e){let t=nr.isValidCurve(s.max);return e!=2&&e!=3?t:t&&nr.isValidCurve(s.min)}function Rm(s,e,t,a){s.max.buildCurve(e.max,t),a!=2&&a!=3?s.min.buildCurve(e.max,t):s.min.buildCurve(e.min,t)}function Qm(s,e){let t=e.getKeyCount();if(t!=0)if(t==1)es(s,e.getKey(0).value);else{let a=t-1;es(s,e.getKey(0).value);for(let r=0;r<a;r++){let i=new Lo;e.calculateCacheData(i,r,r+1,0);let n=3*i.coeff[0],o=2*i.coeff[1],l=1*i.coeff[2],c=e.getKey(r).time,f=e.getKey(r+1).time,d=[],h=sn(n,o,l,{r0:d[0],r1:d[1]});for(let u=0;u<h;u++)d[u]>=0&&d[u]+c<f&&es(s,za.EvalSegment(d[u],i.coeff));es(s,za.EvalSegment(f-c,i.coeff))}}}function es(s,e){s.x=Math.min(s.x,e),s.y=Math.max(s.y,e)}class Or{static BACK=0;static FRONT=1;static IN=0;static OUT=1;static INTERSECT=2}class yu{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,a=0,r=0){this.a=e,this.b=t,this.c=a,this.d=r}setTo(e=0,t=0,a=0,r=0){this.a=e,this.b=t,this.c=a,this.d=r}fromPoints(e,t,a){var r=t.x-e.x,i=t.y-e.y,n=t.z-e.z,o=a.x-e.x,l=a.y-e.y,c=a.z-e.z;this.a=i*c-n*l,this.b=n*o-r*c,this.c=r*l-i*o,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 a=this.distance(e);return a<-t?Or.BACK:a>t?Or.FRONT:Or.INTERSECT}toString(){return"Plane3D [a:"+this.a+", b:"+this.b+", c:"+this.c+", d:"+this.d+"]"}}function Tm(s,e){return Math.random()*e+Math.random()*s+(e-s)*Math.random()}function Mm(s,e,t){let a=t*Math.random();return Math.random()*e*a+Math.random()*s*a+(e-s)*Math.random()*a}function Cu(s,e,t){let a=0,r=0;for(;a===0;)a=Math.random();for(;r===0;)r=Math.random();let i=Math.sqrt(-2*Math.log(a))*Math.cos(2*Math.PI*r);return i=i/10+.5,(i>1||i<0)&&(i=Cu(s,e,t)),i=Math.pow(i,t),i*=e-s,i+=s,i}function Sa(s){return s>0?Math.floor(s):Math.floor(s)-1}let Ue=[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 hl(s,e){let t=s&15,a=1+(t&7);return t&8&&(a=-a),a*e}function nn(s,e,t){let a=s&7,r=a<4?e:t,i=a<4?t:e;return(a&1?-r:r)+(a&2?-2*i:2*i)}function ts(s,e,t,a){let r=s&15,i=r<8?e:t,n=r<4?t:r==12||r==14?e:a;return(r&1?-i:i)+(r&2?-n:n)}function Bi(s,e,t,a,r){let i=s&31,n=i<24?e:t,o=i<16?t:a,l=i<8?a:r;return(i&1?-n:n)+(i&2?-o:o)+(i&4?-l:l)}let ta=[[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 Nm(s){let e=Sa(s),t=e+1,a=s-e,r=a-1,i,n,o=1-a*a;o*=o,i=o*o*hl(Ue[e&255],a);let l=1-r*r;return l*=l,n=l*l*hl(Ue[t&255],r),.25*(i+n)}function Pm(s,e){const t=.366025403,a=.211324865;let r,i,n,o=(s+e)*t,l=s+o,c=e+o,f=Sa(l),d=Sa(c),h=(f+d)*a,u=f-h,m=d-h,g=s-u,p=e-m,A,D;g>p?(A=1,D=0):(A=0,D=1);let B=g-A+a,v=p-D+a,x=g-1+2*a,y=p-1+2*a,S=f&255,F=d&255,C=.5-g*g-p*p;C<0?r=0:(C*=C,r=C*C*nn(Ue[S+Ue[F]],g,p));let w=.5-B*B-v*v;w<0?i=0:(w*=w,i=w*w*nn(Ue[S+A+Ue[F+D]],B,v));let E=.5-x*x-y*y;return E<0?n=0:(E*=E,n=E*E*nn(Ue[S+1+Ue[F+1]],x,y)),40*(r+i+n)}function Vm(s,e,t){const a=.333333333,r=.166666667;let i,n,o,l,c=(s+e+t)*a,f=s+c,d=e+c,h=t+c,u=Sa(f),m=Sa(d),g=Sa(h),p=(u+m+g)*r,A=u-p,D=m-p,B=g-p,v=s-A,x=e-D,y=t-B,S,F,C,w,E,Q;v>=x?x>=y?(S=1,F=0,C=0,w=1,E=1,Q=0):v>=y?(S=1,F=0,C=0,w=1,E=0,Q=1):(S=0,F=0,C=1,w=1,E=0,Q=1):x<y?(S=0,F=0,C=1,w=0,E=1,Q=1):v<y?(S=0,F=1,C=0,w=0,E=1,Q=1):(S=0,F=1,C=0,w=1,E=1,Q=0);let T=v-S+r,j=x-F+r,ue=y-C+r,ee=v-w+2*r,N=x-E+2*r,M=y-Q+2*r,O=v-1+3*r,W=x-1+3*r,ae=y-1+3*r,z=u&255,K=m&255,$=g&255,re=.6-v*v-x*x-y*y;re<0?i=0:(re*=re,i=re*re*ts(Ue[z+Ue[K+Ue[$]]],v,x,y));let ce=.6-T*T-j*j-ue*ue;ce<0?n=0:(ce*=ce,n=ce*ce*ts(Ue[z+S+Ue[K+F+Ue[$+C]]],T,j,ue));let Ae=.6-ee*ee-N*N-M*M;Ae<0?o=0:(Ae*=Ae,o=Ae*Ae*ts(Ue[z+w+Ue[K+E+Ue[$+Q]]],ee,N,M));let Qe=.6-O*O-W*W-ae*ae;return Qe<0?l=0:(Qe*=Qe,l=Qe*Qe*ts(Ue[z+1+Ue[K+1+Ue[$+1]]],O,W,ae)),32*(i+n+o+l)}function Om(s,e,t,a){const r=.309016994,i=.138196601;let n,o,l,c,f,d=(s+e+t+a)*r,h=s+d,u=e+d,m=t+d,g=a+d,p=Sa(h),A=Sa(u),D=Sa(m),B=Sa(g),v=(p+A+D+B)*i,x=p-v,y=A-v,S=D-v,F=B-v,C=s-x,w=e-y,E=t-S,Q=a-F,T=C>w?32:0,j=C>E?16:0,ue=w>E?8:0,ee=C>Q?4:0,N=w>Q?2:0,M=E>Q?1:0,O=T+j+ue+ee+N+M,W,ae,z,K,$,re,ce,Ae,Qe,Ve,H,ie;W=ta[O][0]>=3?1:0,ae=ta[O][1]>=3?1:0,z=ta[O][2]>=3?1:0,K=ta[O][3]>=3?1:0,$=ta[O][0]>=2?1:0,re=ta[O][1]>=2?1:0,ce=ta[O][2]>=2?1:0,Ae=ta[O][3]>=2?1:0,Qe=ta[O][0]>=1?1:0,Ve=ta[O][1]>=1?1:0,H=ta[O][2]>=1?1:0,ie=ta[O][3]>=1?1:0;let le=C-W+i,ge=w-ae+i,Ie=E-z+i,me=Q-K+i,ye=C-$+2*i,Se=w-re+2*i,Me=E-ce+2*i,Ze=Q-Ae+2*i,$e=C-Qe+3*i,ft=w-Ve+3*i,Za=E-H+3*i,ga=Q-ie+3*i,Qa=C-1+4*i,Ht=w-1+4*i,Ta=E-1+4*i,Ma=Q-1+4*i,Vt=p&255,pa=A&255,ma=D&255,ia=B&255,Ir=.6-C*C-w*w-E*E-Q*Q;Ir<0?n=0:(Ir*=Ir,n=Ir*Ir*Bi(Ue[Vt+Ue[pa+Ue[ma+Ue[ia]]]],C,w,E,Q));let Rr=.6-le*le-ge*ge-Ie*Ie-me*me;Rr<0?o=0:(Rr*=Rr,o=Rr*Rr*Bi(Ue[Vt+W+Ue[pa+ae+Ue[ma+z+Ue[ia+K]]]],le,ge,Ie,me));let Qr=.6-ye*ye-Se*Se-Me*Me-Ze*Ze;Qr<0?l=0:(Qr*=Qr,l=Qr*Qr*Bi(Ue[Vt+$+Ue[pa+re+Ue[ma+ce+Ue[ia+Ae]]]],ye,Se,Me,Ze));let Tr=.6-$e*$e-ft*ft-Za*Za-ga*ga;Tr<0?c=0:(Tr*=Tr,c=Tr*Tr*Bi(Ue[Vt+Qe+Ue[pa+Ve+Ue[ma+H+Ue[ia+ie]]]],$e,ft,Za,ga));let Mr=.6-Qa*Qa-Ht*Ht-Ta*Ta-Ma*Ma;return Mr<0?f=0:(Mr*=Mr,f=Mr*Mr*Bi(Ue[Vt+1+Ue[pa+1+Ue[ma+1+Ue[ia+1]]]],Qa,Ht,Ta,Ma)),27*(n+o+l+c+f)}class Dl extends de{static uv_0=new Dl;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,a){let r=Math.floor(e%(t*a)),i=Math.floor(r/t),n=r%t;return new be(i/t,n/a,1/t,1/a)}}class as{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,a){switch(e){case X.single:{let r=this.getKeyFrame(0);r[a]=t}break;case X.float:{let r=this.getKeyFrame(0);r[a]=t}break;case X.vector2:{let r=t,i=this.getKeyFrame(0);i[a]=r.x;let n=this.getKeyFrame(1);n[a]=r.y}break;case X.vector3:{let r=t,i=this.getKeyFrame(0);i[a]=r.x;let n=this.getKeyFrame(1);n[a]=r.y;let o=this.getKeyFrame(2);o[a]=r.z}break;case X.vector4:{let r=t,i=this.getKeyFrame(0);i[a]=r.x;let n=this.getKeyFrame(1);n[a]=r.y;let o=this.getKeyFrame(2);o[a]=r.z;let l=this.getKeyFrame(3);l[a]=r.w}break;case X.quaternion:{let r=t,i=this.getKeyFrame(0);i[a]=r.x;let n=this.getKeyFrame(1);n[a]=r.y;let o=this.getKeyFrame(2);o[a]=r.z;let l=this.getKeyFrame(3);l[a]=r.w}break}}getKeyFrame(e){let t=this.propertyKeyFrame[e];return t||(t=new Js,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:a}=Ja.parser(e);this.split(t,a,"value")}{let{t,v:a}=Ja.parser(e);this.split(t,a,"inSlope")}{let{t,v:a}=Ja.parser(e);this.split(t,a,"outSlope")}this.tangentMode=e.readInt32(),this.weightedMode=e.readInt32();{let{t,v:a}=Ja.parser(e);this.split(t,a,"inWeight")}{let{t,v:a}=Ja.parser(e);this.split(t,a,"outWeight")}}}class Lm{static sub(e,t){switch(e.constructor.name){case"number":return e-t;case"Vector2":{let r=e,i=t;return new de(r.x-i.x,r.y-i.y)}case"Vector3":{let r=e,i=t;return new b(r.x-i.x,r.y-i.y,r.z-i.z)}case"Vector4":{let r=e,i=t;return new be(r.x-i.x,r.y-i.y,r.z-i.z,r.w-i.w)}case"Quaternion":{let r=e,i=t;return new se(r.x-i.x,r.y-i.y,r.z-i.z,r.w-i.w)}}}}class rs{_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 a=this.remove(e);return this._keys.push(e),this._values.push(t),a}remove(e){var t=this._keys.indexOf(e),a;return t>-1&&(a=this._values[t],this._keys.splice(t,1),this._values.splice(t,1)),a}getValues(){return this._values}getKeys(){return this._keys}clear(){this._values.length=0,this._keys.length=0}}class yr{static WalkAble=1}class is{static SetConst(e){this.EPSILON=e,this.POWER_EPSILON=e*e}static EPSILON=.1;static POWER_EPSILON=this.EPSILON*this.EPSILON}class Tt extends b{static CALC_VECTOR3D1=new b;static CALC_VECTOR3D2=new b;static CALC_VECTOR3D3=new b;static CALC_VECTOR3D4=new b;static CALC_VECTOR3D5=new b;_pointId=0;constructor(e,t,a,r){super(t,a,r,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)<is.POWER_EPSILON}static calcDistance(e,t){return Tt.CALC_VECTOR3D3.setTo(e.x-t.x,e.y-t.y,e.z-t.z),Tt.CALC_VECTOR3D3.length}}class Su{_openedList;_closedList;_endNode;_startNode;_triangleChannel;_navMesh;_findIndex=0;constructor(){this._openedList=new Array,this._closedList=new Array}findPath(e,t,a){return this._findIndex++,this._navMesh=e,this._startNode=t,this._endNode=a,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=[],a;e!=this._endNode;){t=e.getNeibourTriangles(t,yr.WalkAble,yr.WalkAble);for(a of t)if(a.closeId!=this._findIndex&&!(a==e||!a.walkAble)){var r=e.gg+Tt.calcDistance(a,e)*a.costMultiplier,i=Tt.calcDistance(a,this._endNode),n=r+i;a.openId==this._findIndex?a.f>n&&(a.f=n,a.gg=r,a.h=i,a.parent=e):(a.f=n,a.gg=r,a.h=i,a.parent=e,a.openId=this._findIndex,this._openedList.push(a))}if(e.closeId=this._findIndex,this._closedList.push(e),this._openedList.length==0)return!1;this._openedList.sort(function(o,l){return o.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 ka extends Tt{_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 ka(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 wa{_edgeMask=0;_edgeSize=0;_pointA;_pointB;_triangleOwners;_centerPoint;_edgeDirA2B;crossPoint;fatPointA;fatPointB;static CALC_FAT_VECTOR=new b;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 b,this._edgeMask=yr.WalkAble,Tt.CALC_VECTOR3D1.setTo(e.x-t.x,e.y-t.y,e.z-t.z),this._edgeSize=Tt.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 ka(this._pointA,this),this.fatPointB=this.fatPointB||new ka(this._pointB,this),this.fatPointA.radius!=e&&(wa.CALC_FAT_VECTOR.copyFrom(this._edgeDirA2B),wa.CALC_FAT_VECTOR.scaleBy(e),wa.CALC_FAT_VECTOR.incrementBy(this._pointA),this.fatPointA.copyFrom(wa.CALC_FAT_VECTOR),this.fatPointA.radius=e),this.fatPointB.radius!=e&&(wa.CALC_FAT_VECTOR.copyFrom(this._edgeDirA2B),wa.CALC_FAT_VECTOR.scaleBy(-e),wa.CALC_FAT_VECTOR.incrementBy(this._pointB),this.fatPointB.copyFrom(wa.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 Tt.equalPoint(e,this._pointA)?this._pointA:Tt.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 Tt.equalPoint(e,this._pointA)?this._pointA:Tt.equalPoint(e,this._pointB)?this._pointB:null}get pointA(){return this._pointA}get pointB(){return this._pointB}get walkAble(){return(this._edgeMask&yr.WalkAble)==yr.WalkAble}testMask(e){return(this._edgeMask&e)==e}}class _e{endPoint;curPoint;rayA;rayB;rayAPoint;rayBPoint;static RAY_1=new b;static RAY_2=new b;static TEST_RAY=new b;static TEST_RAY_1=new b;static TEST_RAY_2=new b;static CALC_CROSS_POINT=new b;static CALC_CROSS_TEST=new b;cornerPoint;cornerEdge;continuePass(e,t,a){this.resetData(),this.curPoint=e,this.endPoint=t,this.cornerEdge=a}passEdge(e,t,a,r){if((this.rayA==null||this.rayB==null)&&(this.rayA=_e.RAY_1,this.rayB=_e.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)),r)return this.checkEndPoint(a);if(_e.TEST_RAY.setTo(a.x-this.curPoint.x,0,a.z-this.curPoint.z),this.isPointAtCenter(_e.TEST_RAY,this.rayA,this.rayB)){this.hasCrossPoint(t.pointA,t.pointB,this.rayAPoint,this.rayA)?(this.rayB.copyFrom(_e.TEST_RAY),a instanceof Tt?this.rayBPoint=a:this.rayBPoint=null):(this.rayA.copyFrom(_e.TEST_RAY),a instanceof Tt?this.rayAPoint=a:this.rayAPoint=null);var i=t.getAnotherPoint(a);_e.TEST_RAY.setTo(i.x-this.curPoint.x,0,i.z-this.curPoint.z),(i==this.rayAPoint||i==this.rayBPoint||this.isPointAtCenter(_e.TEST_RAY,this.rayA,this.rayB))&&(this.cornerEdge=t)}else{var n;if(_e.TEST_RAY_1.copyFrom(t.pointA),_e.TEST_RAY_1.decrementBy(this.curPoint),_e.TEST_RAY_2.copyFrom(t.pointB),_e.TEST_RAY_2.decrementBy(this.curPoint),_e.TEST_RAY_1.y=0,_e.TEST_RAY_2.y=0,this.isPointAtCenter(this.rayA,_e.TEST_RAY_1,_e.TEST_RAY_2)||this.isPointAtCenter(this.rayB,_e.TEST_RAY_1,_e.TEST_RAY_2)?n=!1:n=!0,n)return this.isPointAtCenter(this.rayA,_e.TEST_RAY,this.rayB)?this.cornerPoint=this.rayAPoint:this.cornerPoint=this.rayBPoint,this.cornerEdge.crossPoint=this.cornerPoint,!1}return!0}checkEndPoint(e){return _e.TEST_RAY.setTo(e.x-this.curPoint.x,0,e.z-this.curPoint.z),this.isPointAtCenter(_e.TEST_RAY,this.rayA,this.rayB)?!0:(this.isPointAtCenter(this.rayA,_e.TEST_RAY,this.rayB)?this.cornerPoint=this.rayAPoint:this.cornerPoint=this.rayBPoint,this.cornerEdge.crossPoint=this.cornerPoint,!1)}calcCrossEdge(e,t,a){return this.calcCrossPoint(e.fatPointA,e.fatPointB,t,a)}calcCrossPoint(e,t,a,r){_e.CALC_CROSS_POINT.copyFrom(t),_e.CALC_CROSS_POINT.decrementBy(e);let i=_e.CALC_CROSS_POINT.x*r.z-r.x*_e.CALC_CROSS_POINT.z;var n=0;return i!=0&&(n=((e.z-a.z)*r.x-(e.x-a.x)*r.z)/i),n>1?n=1:n<0&&(n=0),_e.CALC_CROSS_POINT.scaleBy(n),_e.CALC_CROSS_POINT.incrementBy(e),_e.CALC_CROSS_POINT.clone()}calcCrossPointOut(e,t,a,r){_e.CALC_CROSS_POINT.copyFrom(t),_e.CALC_CROSS_POINT.decrementBy(e);var i=((e.z-a.z)*r.x-(e.x-a.x)*r.z)/(_e.CALC_CROSS_POINT.x*r.z-r.x*_e.CALC_CROSS_POINT.z);return i<=1&&i>=0?null:(_e.CALC_CROSS_POINT.scaleBy(i),_e.CALC_CROSS_POINT.incrementBy(e),_e.CALC_CROSS_POINT.clone())}hasCrossPoint(e,t,a,r){_e.CALC_CROSS_TEST.copyFrom(t),_e.CALC_CROSS_TEST.decrementBy(e);var i=((e.z-a.z)*r.x-(e.x-a.x)*r.z)/(_e.CALC_CROSS_TEST.x*r.z-r.x*_e.CALC_CROSS_TEST.z);return i<=1&&i>=0}isPointAtCenter(e,t,a){var r=t.crossProduct(e);if(r.length==0&&e.length<t.length)return!0;var i=a.crossProduct(e);return i.length==0&&e.length<a.length?!0:(r.normalize(),i.normalize(),r.incrementBy(i),r.length<.01)}resetData(){this.cornerEdge=null,this.cornerPoint=null,this.curPoint=null,this.rayA=this.rayB=null,this.rayAPoint=this.rayBPoint=null,_e.RAY_1.setTo(0,0,0),_e.RAY_2.setTo(0,0,0)}}class sr{_aiRadius=0;_router;_result;_tempPublicEdgeList=new Array;_tempSamePlaneList=new Array;static CROSS_TEST_DIRECTION=new b;constructor(){this._router=new _e}searchPath(e,t,a,r=0){return r<=0&&(r=1),this._aiRadius=r*1.5,this.searchEnable(e,t,a)?(this.search(e,t,a),!0):!1}get path(){return this._result}searchEnable(e,t,a){return!(e==null||t==null||a==null||a[0].plane.classifyPoint(e,is.EPSILON)!=Or.INTERSECT||a[a.length-1].plane.classifyPoint(t,is.EPSILON)!=Or.INTERSECT)}search(e,t,a){this._tempPublicEdgeList.length=0,this._tempSamePlaneList.length=0;var r=0,i=a.length-1,n,o,l,c;for(r=0;r<i;r++)o=a[r].getPublicEdge(a[r+1]),o.crossPoint=null,o.initFatPoints(this._aiRadius),this._tempPublicEdgeList.push(o),n=a[r],c=n.plane,n=a[r+1],l=n.getEdgeAgainstPoint(o),this._tempSamePlaneList.push(c.classifyPoint(l,is.EPSILON)==Or.INTERSECT);this._router.continuePass(e,t,this._tempPublicEdgeList[0]),i=this._tempPublicEdgeList.length;var f,d,h,u;for(r=0;r<i;r++)o=this._tempPublicEdgeList[r],n=a[r+1],u=r==i-1,u?l=t:l=n.getEdgeAgainstPoint(o),h=this._router.passEdge(o,this._tempPublicEdgeList[r+1],l,u),h||(f=this._router.cornerPoint,d=this._router.cornerEdge,r=this._tempPublicEdgeList.indexOf(d),this._router.continuePass(f,t,this._tempPublicEdgeList[r+1]));this.pushAllPathPoint2(e,t),this._result.length>=3&&(this.optimusTerminusFat(),this.optimusByRadius());let m=[];for(let g of this._result)m.push(new b().copyFrom(g));this._result=m}optimusTerminusFat(){var e,t,a;a=this._result[1],a instanceof ka&&(e=a),a=this._result[this._result.length-2],a instanceof ka&&(t=a),e&&(this._result[1]=e.scalePoint()),t&&e!=t&&(this._result[this._result.length-2]=t.scalePoint())}pushAllPathPoint2(e,t){var a=this._tempPublicEdgeList.length,r,i;this._result=new Array,this._result.push(e);for(var n=e,o,l,c,f=0;f<a;f++)if(r=this._tempPublicEdgeList[f],l=null,r.crossPoint)l=this.getFatPoint(r,r.crossPoint),l?this._result.push(l):this._result.push(r.crossPoint),n=r.crossPoint;else{i=null,o=null;for(var d=f+1;d<a&&(i=this._tempPublicEdgeList[d],o=i.crossPoint,!o);d++);o==null&&(o=t),l=this.getFatPoint(r,o),l?this._result.push(l):(o==n?c=o.clone():(sr.CROSS_TEST_DIRECTION.setTo(o.x-n.x,0,o.z-n.z),c=this._router.calcCrossEdge(r,n,sr.CROSS_TEST_DIRECTION)),this._result.push(c))}this._result.push(t)}optimusByRadius(){var e=new Array;e.length=this._result.length;var t=this._result.length-2,a,r,i,n,o,l,c,f,d,h,u,m,g;for(g=0;g<t;g++)c=f=d=null,n=o=l=null,u=!1,m=null,a=this._result[g],r=this._result[g+1],i=this._result[g+2],a instanceof ka&&(n=a),r instanceof ka&&(o=r),i instanceof ka&&(l=i),n&&(c=n.ownerPoint),o&&(f=o.ownerPoint),l&&(d=l.ownerPoint),c&&f&&c==f&&f!=d&&(u=!0),d&&f&&d==f&&c!=f&&(u=!0),u&&(sr.CROSS_TEST_DIRECTION.copyFrom(a),sr.CROSS_TEST_DIRECTION.decrementBy(i),h=o.ownerEdge,u=this._router.hasCrossPoint(h.pointA,h.pointB,i,sr.CROSS_TEST_DIRECTION),u&&(m=this._router.calcCrossPointOut(f,r,i,sr.CROSS_TEST_DIRECTION)),m&&(e[g+1]=m))}getFatPoint(e,t){if(e==null)return null;var a;t instanceof ka&&(a=t);var r;return a?r=a.ownerPoint:r=e.getEqualPoint(t),r==null?null:(a=e.getFatPoint(r),a)}}class Fu extends b{_id=0;_plane;_points=new Array;_edges=new Array;_neibourTriangles=new rs;_pointAgainstEdge=new rs;_edgeAgainstPoint=new rs;_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 Pt,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,a,r){super(0,0,0,0),this._id=e,this._mask=yr.WalkAble,this._edges.push(t,a,r);var i;for(i of this._edges)this._points.indexOf(i.pointA)==-1&&this._points.push(i.pointA),this._points.indexOf(i.pointB)==-1&&this._points.push(i.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 yu,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,a=1){e=e||new Array,e.length=0;var r,i,n=this._neibourTriangles.getKeys(),o;for(o of n)i=o,i.testMask(t)&&(r=this._neibourTriangles.getValueByKey(i),r.testMask(a)&&e.push(r));return e}getEdges(e=null,t=1){e=e||new Array,e.length=0;var a;for(a of this._edges)a.testMask(t)&&e.push(a);return e}get walkAble(){return this.testMask(yr.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(),a;for(a of t)if(this._neibourTriangles.getValueByKey(a)==e)return a}return null}loopPublicEdge(e){var t,a;if(e&&e!=this){for(t of this._edges)for(a of e._edges)if(t==a)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 Gm{_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 rs,this.initPoints(e),this.initEdgesAndTriangles(t),this.createConnections(),this._nav3dAstar=new Su,this._nav3dFunnel=new sr,this._terrainQuad=new Qh(8,128),this._terrainQuad.createQuadTree(this._nav3dTriangles)}getTriangleAtPoint(e,t=5){return this._terrainQuad.getTriangleAtPoint(e,t)}findPath(e,t,a=5){this._path=null,this._triangleList=null;var r=this.getTriangleAtPoint(e,10),i=this.getTriangleAtPoint(t,10),n=this._nav3dAstar.findPath(this,r,i);return n?(this._triangleList=this._nav3dAstar.channel,n=this._nav3dFunnel.searchPath(e,t,this._triangleList,a),this._path=this._nav3dFunnel.path,n):!1}initPoints(e){for(var t,a,r=e.length,i=0;i<r;i++)t=e[i],a=new Tt(i,t.x,t.y,t.z),this._nav3dPoints.push(a)}initEdgesAndTriangles(e){for(var t,a,r,i,n,o=e.length,l=0;l<o;l++)t=e[l],a=this.tryCreateEdge(t[0],t[1]),r=this.tryCreateEdge(t[1],t[2]),i=this.tryCreateEdge(t[2],t[0]),!(a==null||r==null||i==null)&&(n=new Fu(l,a,r,i),this._nav3dTriangles.push(n))}tryCreateEdge(e,t){if(e==t)throw new Error("edge point index error!!!");if(e>t){var a=e;e=t,t=a}var r=this._edgesDict.getValueByKey(e+"_"+t);return r==null&&(r=new wa(this._nav3dPoints[e],this._nav3dPoints[t]),this._nav3dEdges.push(r),this._edgesDict.put(e+"_"+t,r)),r}createConnections(){for(var e=this._nav3dTriangles.length,t=this._nav3dTriangles.length,a,r,i,n,o=0;o<e;o++){a=this._nav3dTriangles[o];for(i of a.edges)i.addTriangleOwners(a);for(var l=0;l<t;l++)r=this._nav3dTriangles[l],a!=r&&(n=a.loopPublicEdge(r),n&&(a.addNeibour(n,r),r.addNeibour(n,a)))}}}class _l{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 _l;return e.setTo(this.x,this.y),e}normalize(){var e=length;e!=0&&this.setTo(this.x/e,this.y/e)}}class Wa extends Le{width;height;depth;constructor(e=1,t=1,a=1){super(),this.width=e,this.height=t,this.depth=a,this.initVertex()}initVertex(){let e=this.width/2,t=this.height/2,a=this.depth/2;this.bounds=new Ce(b.ZERO.clone(),new b(this.width,this.height,this.depth));let r=new Float32Array([-e,t,a,e,t,a,e,t,-a,-e,t,-a,-e,t,a,e,t,-a,e,-t,a,-e,-t,a,-e,-t,-a,e,-t,-a,e,-t,a,-e,-t,-a,-e,-t,a,-e,t,a,-e,t,-a,-e,-t,-a,-e,-t,a,-e,t,-a,e,t,a,e,-t,a,e,-t,-a,e,t,-a,e,t,a,e,-t,-a,e,t,a,-e,t,a,-e,-t,a,-e,-t,a,e,-t,a,e,t,a,e,-t,-a,-e,-t,-a,-e,t,-a,e,t,-a,e,-t,-a,-e,t,-a]),i=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]),n=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]),o=[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(o.reverse());this.setIndices(l),this.setAttribute(G.position,r),this.setAttribute(G.normal,i),this.setAttribute(G.uv,n),this.setAttribute(G.TEXCOORD_1,n),this.addSubGeometry({indexStart:0,indexCount:o.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class ku extends Le{radiusTop;radiusBottom;height;radialSegments;heightSegments;openEnded;thetaStart;thetaLength;constructor(e=1,t=1,a=1,r=8,i=8,n=!1,o=0,l=Math.PI*2){super(),this.radiusTop=e,this.radiusBottom=t,this.height=a,this.radialSegments=r,this.heightSegments=i,this.openEnded=n,this.thetaStart=o,this.thetaLength=l,this.instanceID=Wt(),this.buildGeometry()}addGroup(e,t,a){this.addSubGeometry({indexStart:e,indexCount:t,vertexStart:e,vertexCount:0,firstStart:0,index:a,topology:0})}buildGeometry(){const e=this;this.radialSegments=Math.floor(this.radialSegments),this.heightSegments=Math.floor(this.heightSegments);const t=[],a=[],r=[],i=[];let n=0;const o=[],l=this.height/2;let c=0;m(),this.openEnded===!1&&(this.radiusTop>0&&g(!0),this.radiusBottom>0&&g(!1));let f=new Float32Array(t),d=new Float32Array(a),h=new Float32Array(r),u=new Uint16Array(i);this.setAttribute(G.position,f),this.setAttribute(G.normal,d),this.setAttribute(G.uv,h),this.setAttribute(G.TEXCOORD_1,h),this.setIndices(u);function m(){const p=new b,A=new b;let D=0;const B=(e.radiusBottom-e.radiusTop)/e.height;for(let v=0;v<=e.heightSegments;v++){const x=[],y=v/e.heightSegments,S=y*(e.radiusBottom-e.radiusTop)+e.radiusTop;for(let F=0;F<=e.radialSegments;F++){const C=F/e.radialSegments;let w=C*e.thetaLength+e.thetaStart;F==e.radialSegments&&Math.abs(e.thetaLength-e.thetaStart)==Math.PI*2&&(w=0);const E=Math.sin(w),Q=Math.cos(w);A.x=S*E,A.y=-y*e.height+l,A.z=S*Q,t.push(A.x,A.y,A.z),p.set(E,B,Q).normalize(),a.push(p.x,p.y,p.z),r.push(C,1-y),x.push(n++)}o.push(x)}for(let v=0;v<e.radialSegments;v++)for(let x=0;x<e.heightSegments;x++){const y=o[x][v],S=o[x+1][v],F=o[x+1][v+1],C=o[x][v+1];i.push(y,S,C),i.push(S,F,C),D+=6}e.addGroup(c,D,0),c+=D}function g(p){const A=n,D=new de,B=new b;let v=0;const x=p===!0?e.radiusTop:e.radiusBottom,y=p===!0?1:-1;for(let F=1;F<=e.radialSegments;F++)t.push(0,l*y,0),a.push(0,y,0),r.push(.5,.5),n++;const S=n;for(let F=0;F<=e.radialSegments;F++){const w=F/e.radialSegments*e.thetaLength+e.thetaStart,E=Math.cos(w),Q=Math.sin(w);B.x=x*Q,B.y=l*y,B.z=x*E,t.push(B.x,B.y,B.z),a.push(0,y,0),D.x=E*.5+.5,D.y=Q*.5*y+.5,r.push(D.x,D.y),n++}for(let F=0;F<e.radialSegments;F++){const C=A+F,w=S+F;p===!0?i.push(w,w+1,C):i.push(w+1,w,C),v+=3}e.addGroup(c,v,p===!0?1:2),c+=v}}}class Eu extends Le{radius;tube;radialSegments;tubularSegments;constructor(e=.4,t=.1,a=32,r=32){super(),this.radius=e,this.tube=t,this.radialSegments=a,this.tubularSegments=r,this.initVertex()}initVertex(){const e=2*Math.PI,t=this.radius,a=this.tube,r=this.radialSegments,i=this.tubularSegments;this.bounds=new Ce(b.ZERO.clone(),new b(t*2,a*2,t*2));var n=(r+1)*(i+1);let o=new Float32Array(n*3),l=new Float32Array(n*3),c=new Float32Array(n*2),f=new Uint16Array(r*i*2*3),d=0,h=0,u=0,m=0;for(let g=0;g<=r;g++)for(let p=0;p<=i;p++){const A=p/i,D=g/r,B=A*e,v=D*Math.PI*2;if(o[d++]=(t+a*Math.cos(v))*Math.sin(B),o[d++]=a*Math.sin(v),o[d++]=(t+a*Math.cos(v))*Math.cos(B),l[h++]=Math.sin(B)*Math.cos(v),l[h++]=Math.sin(v),l[h++]=Math.cos(B)*Math.cos(v),c[u++]=A,c[u++]=D,p<i&&g<r){const x=i+1,y=x*g+p,S=x*(g+1)+p,F=x*(g+1)+p+1,C=x*g+p+1;f[m++]=y,f[m++]=C,f[m++]=S,f[m++]=C,f[m++]=F,f[m++]=S}}this.setIndices(f),this.setAttribute(G.position,o),this.setAttribute(G.normal,l),this.setAttribute(G.uv,c),this.setAttribute(G.TEXCOORD_1,c),this.addSubGeometry({indexStart:0,indexCount:f.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class zm extends Le{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),a=new Float32Array(this.row*3*2),r=new Float32Array(this.row*2*2);for(let i=0;i<this.row;i++){t[i*3*2+0]=0,t[i*3*2+1]=0,t[i*3*2+2]=0,t[i*3*2+3]=0,t[i*3*2+4]=0,t[i*3*2+5]=0,a[i*3*2+0]=0,a[i*3*2+1]=0,a[i*3*2+2]=1,a[i*3*2+3]=0,a[i*3*2+4]=0,a[i*3*2+5]=1,r[i*2*2+0]=0,r[i*2*2+1]=i/this.segment,r[i*2*2+2]=1,r[i*2*2+3]=i/this.segment;let n=i*2,o=n,l=n+1,c=n+2,f=n+3;e[i*6+0]=o,e[i*6+1]=l,e[i*6+2]=c,e[i*6+3]=l,e[i*6+4]=f,e[i*6+5]=c}this.setIndices(e),this.setAttribute(G.position,t),this.setAttribute(G.normal,a),this.setAttribute(G.uv,r),this.setAttribute(G.TEXCOORD_1,r),this.addSubGeometry({indexStart:0,indexCount:e.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class Wm extends Le{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),a=new Float32Array(this.faceCount*3*3),r=new Float32Array(this.faceCount*3*2),i=new Float32Array(this.faceCount*3*1);for(let n=0;n<this.faceCount;n++){let o=n*3+0,l=n*3+1,c=n*3+2;e[o]=o,e[l]=l,e[c]=c}this.setIndices(e),this.setAttribute(G.position,t),this.setAttribute(G.normal,a),this.setAttribute(G.uv,r),this.setAttribute(G.TEXCOORD_1,r),this.setAttribute(G.vIndex,i),this.addSubGeometry({indexStart:0,indexCount:e.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0})}}class Jm extends Gs{_internalTexture;_minSize=32;_skyColor;constructor(e){super(),this._skyColor=e,this._internalTexture=new Ts;let t=[];_.res.fillColor(t,this._minSize,this._minSize,this.color.r,this.color.g,this.color.b,this.color.a);const a=new Uint16Array(t.length);for(let r=0;r<t.length;r++)a[r]=bt(t[r])&65535;return this._internalTexture.create(this._minSize,this._minSize,a,!1),this.createFromTexture(this._minSize,this._internalTexture),this}changeColor(e){this._skyColor=e;const t=[];_.res.fillColor(t,this._minSize,this._minSize,this.color.r,this.color.g,this.color.b,this.color.a);const a=new Uint16Array(t.length);for(let r=0;r<t.length;r++)a[r]=bt(t[r])&65535;return this._internalTexture.updateTexture(this._minSize,this._minSize,a,!1),this._faceData.uploadTexture(0,this._internalTexture),this}get color(){return this._skyColor}set color(e){this.changeColor(e)}}class jm extends ne{length=100;thickness=.1;constructor(e,t=.1){super(),this.length=e,this.thickness=t,this.init()}init(){let e=new ne,t=new ne,a=new ne,r=new Wa(2,2,2),i=new Wa(2,2,2),n=new Wa(2,2,2),o=new vt;o.baseColor=new J(1,0,0);let l=new vt;l.baseColor=new J(0,1,0);let c=new vt;c.baseColor=new J(0,0,1);let f=e.addComponent(he),d=t.addComponent(he),h=a.addComponent(he);f.geometry=r,f.material=o,f.castShadow=!1,d.geometry=i,d.material=l,d.castShadow=!1,h.geometry=n,h.material=c,h.castShadow=!1,e.localScale=new b(this.length,this.thickness,this.thickness),e.x=this.length,t.localScale=new b(this.thickness,this.length,this.thickness),t.y=this.length,a.localScale=new b(this.thickness,this.thickness,this.length),a.z=this.length,this.addChild(e),this.addChild(t),this.addChild(a)}}class Zm{static merge(e,t,a){}static mergeNumber(e,t,a){let r=a||new Le,i=e.getAttribute(G.position).data.length/3,n=new Float32Array(i*t);for(const f of e.vertexAttributeMap){let d=f[1].attribute;if(d==G.indices)continue;let h=e.getAttribute(d).data,u=h.length,m=new Float32Array(u*t);for(let g=0;g<t;g++){m.set(h,u*g);for(let p=0;p<i;p++)n[i*g+p]=g}r.setAttribute(d,m)}r.setAttribute(G.vIndex,n);let o=e.getAttribute(G.indices).data,l=o.length,c=new Uint32Array(o.length*t);for(let f=0;f<t;f++)for(let d=0;d<l;d++){let h=f*i,u=f*l;const m=o[d]+h;c[u+d]=m}return r.setIndices(c),r.addSubGeometry({indexStart:0,indexCount:c.length,vertexStart:0,index:0,vertexCount:0,firstStart:0,topology:0}),r}static generateNormal(){}static generateTangent(){}static packUV(){}}class Ym extends ne{size=100;divisions=10;constructor(e=100,t=10){super(),this.size=e,this.divisions=t,this.buildGeometry(),this.addAxis()}buildGeometry(){const e=[],t=[],a=this.size/this.divisions,r=this.size/2,i=this.divisions/2;for(let c=0,f=-r;c<=this.divisions;c++,f+=a)c!==i&&(e.push(-r,0,f,r,0,f),e.push(f,0,-r,f,0,r));for(let c=0;c<e.length/3;c+=2)t.push(c,c+1);let n=new Le;n.setIndices(t.length>Uint16Array.length?new Uint32Array(t):new Uint16Array(t)),n.setAttribute(G.position,new Float32Array(e)),n.addSubGeometry({indexStart:0,indexCount:t.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});let o=new vt;o.topology="line-list",o.baseColor=new J(1,1,1,.15),o.blendMode=De.ADD,o.castReflection=!1;let l=this.addComponent(he);l.geometry=n,l.material=o}addAxis(){const e=this.size/2;let t=new Float32Array([-e,0,0,e,0,0]),a=new Uint16Array([0,1,2,3]),r=new Le;r.setIndices(a),r.setAttribute(G.position,t),r.addSubGeometry({indexStart:0,indexCount:a.length,vertexStart:0,vertexCount:0,firstStart:0,index:0,topology:0});{let i=new ne,n=i.addComponent(he);n.geometry=r;let o=n.material=new vt;o.baseColor=new J(1,0,0,.5),o.blendMode=De.ADD,o.castReflection=!1,o.topology="line-list",this.addChild(i)}{let i=new ne;i.rotationY=90;let n=i.addComponent(he);n.geometry=r;let o=n.material=new vt;o.baseColor=new J(0,1,0,.5),o.blendMode=De.ADD,o.castReflection=!1,o.topology="line-list",this.addChild(i)}}}class Xm{static color_temperature_to_rgb(e){e<1e3?e=1e3:e>4e4&&(e=4e4);let t=e/100,a=this.get_red(t),r=this.get_green(t),i=this.get_blue(t);return new J(a/255,r/255,i/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,a=255){let r=Math.max(e,t);return Math.min(r,a)}}class Hm{static boxGeo;static planeGeo;static sphere;static material;static materialMap;static initHeap(){this.boxGeo||(this.boxGeo=new Wa),this.planeGeo||(this.planeGeo=new ni(1,1,1,1,b.UP)),this.sphere||(this.sphere=new Pr(1,35,35)),this.material||(this.material=new aa),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 ne,t=e.addComponent(he);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 aa,t.baseMap=e,this.materialMap.set(e,t)),t.clone()}static GetPlane(e){this.initHeap();let t=new ne,a=t.addComponent(he);a.geometry=this.planeGeo;let r=this.GetMaterial(e);return r.blendMode=De.ADD,r.castShadow=!1,a.material=r,a.castGI=!1,a.castReflection=!1,t}static GetSingleCube(e,t,a,r,i,n){this.initHeap();let o=new aa;o.roughness=.5,o.metallic=.1,o.baseColor=new J(r,i,n,1);let l=new ne,c=l.addComponent(he);return c.castGI=!0,c.geometry=new Wa(e,t,a),c.material=o,l}static GetSingleSphere(e,t,a,r){this.initHeap();let i=new aa;i.baseColor=new J(t,a,r,1);let n=new ne,o=n.addComponent(he);return o.castGI=!0,o.geometry=new Pr(e,20,20),o.material=i,n}static get Sphere(){this.initHeap();let e=new ne,t=e.addComponent(he);return t.geometry=this.sphere,t.material=this.material,e}static GetSingleCube2(e,t=10){this.initHeap();let a=new ne,r=a.addComponent(he);return r.castShadow=!1,r.geometry=new Wa(t,t,t),r.material=e,a}static GetPointLight(e,t,a,r,i,n,o=1,l=!0){let c=new ne,f=c.addComponent(li);f.lightColor=new J(r,i,n,1),f.intensity=o,f.range=a,f.at=8,f.radius=0,f.castShadow=l,c.localPosition=e,c.localRotation=t;let d=this.GetSingleSphere(.1,1,1,1);return c.addChild(d),f}}var P=(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))(P||{}),ua=(s=>(s[s.Local=0]="Local",s[s.Global=1]="Global",s))(ua||{});class on extends et{mAxis;mAxisColor;mContainer;mAxisMaterial;mAxisCollider;constructor(){super(),this._enable=!1,this.mAxis=new Array(P.MAX),this.mAxisColor=new Array(P.MAX),this.mAxisMaterial=new Array(P.MAX),this.mAxisCollider=new Array(P.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 ne;let t=new vt;t.baseColor=new J(1,0,0),t.depthCompare=nt.always,this.mAxisColor[P.X]=t.baseColor,this.mAxisMaterial[P.X]=t;let a=new vt;a.baseColor=new J(0,1,0),a.depthCompare=nt.always,this.mAxisColor[P.Y]=a.baseColor,this.mAxisMaterial[P.Y]=a;let r=new vt;r.baseColor=new J(0,0,1),r.depthCompare=nt.always,this.mAxisColor[P.Z]=r.baseColor,this.mAxisMaterial[P.Z]=r;let i=this.createCustomAxis(P.X),n=this.createCustomAxis(P.Y),o=this.createCustomAxis(P.Z);this.mContainer.addChild(this.mAxis[P.X]=i),this.mContainer.addChild(this.mAxis[P.Y]=n),this.mContainer.addChild(this.mAxis[P.Z]=o),this.mAxisCollider[P.X]=i.getComponent(ha),this.mAxisCollider[P.Y]=n.getComponent(ha),this.mAxisCollider[P.Z]=o.getComponent(ha)}start(){}onEnable(e){this.object3D.addChild(this.mContainer),this.reset()}onDisable(e){this.object3D.removeChild(this.mContainer)}reset(){switch(this.transformSpaceMode){case ua.Local:{let t=R.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 ua.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 a=this.object3D.transform.scene3D.view.camera.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY),r,i;for(let n=0;n<=P.MAX;n++){let o=this.mAxisCollider[n];if(o&&(r=o.rayPick(a),r&&(!i||i.distance>r.distance||n==P.XYZ)&&(i={axis:n,obj:o.object3D,distance:r.distance,intersectPoint:r.intersectPoint},n==P.XYZ)))break}return i}currentAxis=P.NONE;beginPoint=new b;beginMousePos=new b;currentPoint=new b;onMouseDown(e){if(e.mouseCode!=Ys.MOUSE_LEFT)return;let t=this.pickAxis();if(!t)return;this.currentAxis=t.axis,e.stopImmediatePropagation();const r=this.object3D.transform.scene3D.view.camera;let i=r.worldToScreenPoint(this.mX.transform.worldPosition),n=r.screenPointToWorld(_.inputSystem.mouseX,_.inputSystem.mouseY,i.z);this.beginPoint.copyFrom(n),this.beginMousePos.x=_.inputSystem.mouseX,this.beginMousePos.y=_.inputSystem.mouseY}lastMoveObj;lastMoveAxis;onMouseMove(e){if(this.currentAxis==P.NONE){let t=this.lastMoveObj.getComponent(he).material;this.lastMoveObj&&"baseColor"in t&&(t.baseColor=this.mAxisColor[this.lastMoveAxis],this.lastMoveObj=null,this.lastMoveAxis==P.XYZ&&(this.mAxis[P.X].getComponent(he).material.setUniformColor("baseColor",this.mAxisColor[P.X]),this.mAxis[P.Y].getComponent(he).material.setUniformColor("baseColor",this.mAxisColor[P.Y]),this.mAxis[P.Z].getComponent(he).material.setUniformColor("baseColor",this.mAxisColor[P.Z])),this.lastMoveAxis=P.NONE);let a=this.pickAxis();if(!a)return;t.setUniformColor("baseColor",new J(1,1,1)),this.lastMoveObj=a.obj,this.lastMoveAxis=a.axis,this.lastMoveAxis==P.XYZ&&(this.mAxis[P.X].getComponent(he).material.setUniformColor("baseColor",new J(1,1,1)),this.mAxis[P.Y].getComponent(he).material.setUniformColor("baseColor",new J(1,1,1)),this.mAxis[P.Z].getComponent(he).material.setUniformColor("baseColor",new J(1,1,1)))}else{const a=this.object3D.transform.scene3D.view.camera;let r=a.worldToScreenPoint(this.mX.transform.worldPosition),i=a.screenPointToWorld(_.inputSystem.mouseX,_.inputSystem.mouseY,r.z);this.currentPoint.copyFrom(i);let n=i.subtract(this.beginPoint);b.HELP_0.set(_.inputSystem.mouseX,_.inputSystem.mouseY,0);let o=b.distance(b.HELP_0,this.beginMousePos);switch(this.beginMousePos.copyFrom(b.HELP_0),this.transformSpaceMode){case ua.Local:this.applyLocalTransform(this.currentAxis,n,o);break;case ua.Global:this.applyGlobalTransform(this.currentAxis,n,o);break}this.beginPoint.copyFrom(i),this.reset()}}onMouseUp(e){e.mouseCode==Ys.MOUSE_LEFT&&(this.currentAxis=P.NONE,this.reset())}onUpdate(e){let a=b.distance(e.camera.transform.worldPosition,this.object3D.transform.worldPosition)/100;if(this.mContainer.scaleX=this.mContainer.scaleY=this.mContainer.scaleZ=a,this.mX){const r=this.mX.transform.worldPosition;this.object3D.x=r.x,this.object3D.y=r.y,this.object3D.z=r.z}}applyLocalTransform(e,t,a){console.warn("not imp")}applyGlobalTransform(e,t,a){console.warn("not imp")}createCustomAxis(e){return this.createAxis(e)}createAxis(e){let t=0,a=0,r=0;switch(e){case P.X:t=1;break;case P.Y:a=1;break;case P.Z:r=1;break}let i=.4+t*20,n=.4+a*20,o=.4+r*20,l=new ne;l.x=i*.5,l.y=n*.5,l.z=o*.5;let c=l.addComponent(he);c.geometry=new Wa(i,n,o),c.material=this.mAxisMaterial[e];let f=l.addComponent(ha),d=new gi;return d.setFromCenterAndSize(new b(0,0,0),new b(i+1,n+1,o+1)),f.shape=d,l}}class wu extends on{init(e){super.init(e);let t=new vt;t.doubleSide=!0,t.baseColor=new J(.9,.9,.9),t.depthCompare=nt.always,this.mAxisColor[P.XYZ]=t.baseColor,this.mAxisMaterial[P.XYZ]=t;let a=new ne,r=a.addComponent(he);r.geometry=new Wa(2,2,2),r.material=this.mAxisMaterial[P.XYZ];let i=a.addComponent(ha),n=new gi;n.setFromCenterAndSize(new b(0,0,0),new b(2,2,2)),i.shape=n,this.mContainer.addChild(this.mAxis[P.XYZ]=a),this.mAxisCollider[P.XYZ]=a.getComponent(ha)}applyLocalTransform(e,t,a){switch(this.currentAxis){case P.XYZ:{let r=0;Math.abs(t.x)>Math.abs(t.y)?Math.abs(t.x)>Math.abs(t.z)?r=t.x:r=t.z:r=t.y,this.mX.scaleX+=r,this.mX.scaleY+=r,this.mX.scaleZ+=r}break;default:this.mX.transform.worldMatrix.transformVector(t,t),(this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ)&&(this.mX.scaleX=Math.abs(this.mX.scaleX+t.x)),(this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ)&&(this.mX.scaleY=Math.abs(this.mX.scaleY+t.y)),(this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ)&&(this.mX.scaleZ=Math.abs(this.mX.scaleZ+t.z));break}}applyGlobalTransform(e,t,a){let r=b.HELP_0;r.set(0,0,0),(this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ)&&(r.x=t.x),(this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ)&&(r.y=t.y),(this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ)&&(r.z=t.z),this.mX.transform.worldMatrix.transformVector(r,b.HELP_1),this.mX.scaleX+=b.HELP_1.x,this.mX.scaleY+=b.HELP_1.y,this.mX.scaleZ+=b.HELP_1.z}createCustomAxis(e){let t=super.createAxis(e),a=this.createBox(e);return t.addChild(a),t}createBox(e){let t=0,a=0,r=0,i=new ne;switch(e){case P.X:t=1,i.rotationZ=-90;break;case P.Y:a=1;break;case P.Z:r=1,i.rotationX=90;break}let n=.2+t*20,o=.2+a*20,l=.2+r*20;i.x=n*.5,i.y=o*.5,i.z=l*.5;let c=i.addComponent(he);return c.geometry=new Wa(2,2,2),c.material=this.mAxisMaterial[e],i}}var At=(s=>(s[s.Scale=0]="Scale",s[s.Rotation=1]="Rotation",s[s.Translation=2]="Translation",s[s.NONE=3]="NONE",s))(At||{});class Iu extends on{applyLocalTransform(e,t,a){if(this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ,this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ){R.help_matrix_0.copyFrom(this.mX.transform.worldMatrix),R.help_matrix_1.identity(),R.help_matrix_1.createByRotation(1,b.Y_AXIS),R.help_matrix_2.multiplyMatrices(R.help_matrix_1,R.help_matrix_0),R.help_matrix_2.invert(),R.help_matrix_1.multiplyMatrices(R.help_matrix_2,R.help_matrix_0);let r=R.help_matrix_1.decompose();this.mX.rotationX+=r[1].x,this.mY.rotationY+=r[1].y,this.mZ.rotationZ+=r[1].z}this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ}getAngle(){const t=this.object3D.transform.scene3D.view.camera,a=this.mZ.transform.worldPosition;if(t.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY),this.currentAxis==P.X){let r=t.worldToScreenPoint(a);b.HELP_1.set(r.x,r.y,0),b.HELP_2.set(_.inputSystem.mouseX,_.inputSystem.mouseY,0);let i=b.HELP_2.subtract(b.HELP_1),n=b.getAngle(b.X_AXIS,i);return i.y>0&&(n=360-n),t.transform.worldPosition.x-a.x>0&&(n=360-n),n}if(this.currentAxis==P.Y){let r=t.worldToScreenPoint(a);b.HELP_1.set(r.x,r.y,0),b.HELP_2.set(_.inputSystem.mouseX,_.inputSystem.mouseY,0);let i=b.HELP_2.subtract(b.HELP_1),n=b.getAngle(b.X_AXIS,i);return i.y>0&&(n=360-n),t.transform.worldPosition.y-a.y>0&&(n=360-n),n}if(this.currentAxis==P.Z){let r=t.worldToScreenPoint(a);b.HELP_1.set(r.x,r.y,0),b.HELP_2.set(_.inputSystem.mouseX,_.inputSystem.mouseY,0);let i=b.HELP_2.subtract(b.HELP_1),n=b.getAngle(b.X_AXIS,i);return i.y>0&&(n=360-n),t.transform.worldPosition.z-a.z>0&&(n=360-n),n}return 0}mLastAngle=0;applyGlobalTransform(e,t,a){if(this.currentAxis==P.X||this.currentAxis==P.Y||this.currentAxis==P.Z){let r=this.getAngle();switch(R.help_matrix_0.identity(),this.currentAxis){case P.X:R.help_matrix_0.createByRotation(this.mLastAngle-r,b.X_AXIS);break;case P.Y:R.help_matrix_0.createByRotation(this.mLastAngle-r,b.Y_AXIS);break;case P.Z:R.help_matrix_0.createByRotation(this.mLastAngle-r,b.Z_AXIS);break}R.help_matrix_1.copyFrom(this.mX.transform.worldMatrix),R.help_matrix_1.append(R.help_matrix_0),this.mX.parent&&(R.help_matrix_2.copyFrom(this.mX.parent.worldMatrix),R.help_matrix_2.invert(),R.help_matrix_1.multiply(R.help_matrix_2));let n=R.help_matrix_1.decompose(oa.QUATERNION)[1];se.HELP_0.set(n.x,n.y,n.z,n.w),this.mLastAngle=r,this.mX.transform.localRotQuat=se.HELP_0}}onMouseDown(e){super.onMouseDown(e),this.currentAxis!=P.NONE&&(this.mAxis[P.X].getComponent(he).enable=!1,this.mAxis[P.Y].getComponent(he).enable=!1,this.mAxis[P.Z].getComponent(he).enable=!1,this.mAxis[this.currentAxis].getComponent(he).enable=!0,this.mLastAngle=this.getAngle())}onMouseUp(e){super.onMouseUp(e),this.currentAxis==P.NONE&&(this.mAxis[P.X].getComponent(he).enable=!0,this.mAxis[P.Y].getComponent(he).enable=!0,this.mAxis[P.Z].getComponent(he).enable=!0)}createCustomAxis(e){return this.createAxis(e)}createAxis(e){let t=new ne;switch(e){case P.X:t.rotationZ=90;break;case P.Y:break;case P.Z:t.rotationX=90;break}let a=t.addComponent(he);a.geometry=new Eu(20,.4),a.material=this.mAxisMaterial[e];let r=t.addComponent(ha),i=new gi;return i.setFromCenterAndSize(new b,new b(40,.4,40)),r.shape=i,t}pickAxis(){let a=this.object3D.transform.scene3D.view.camera.screenPointToRay(_.inputSystem.mouseX,_.inputSystem.mouseY),r,i;for(let n=0;n<=P.MAX;n++){let o=this.mAxisCollider[n];if(o&&(r=o.rayPick(a),r)){let l=b.distance(r.intersectPoint,o.shape.center);if(l>20+.8||l<20-.8)continue;(!i||i.distance>r.distance)&&(i={axis:n,obj:o.object3D,distance:r.distance,intersectPoint:r.intersectPoint})}}return i}}class Ru extends on{init(e){super.init(e);let t=new vt;t.doubleSide=!0,t.baseColor=new J(0,0,1),t.depthCompare=nt.always,this.mAxisColor[P.XY]=t.baseColor,this.mAxisMaterial[P.XY]=t;let a=new vt;a.doubleSide=!0,a.baseColor=new J(0,1,0),a.depthCompare=nt.always,this.mAxisColor[P.XZ]=a.baseColor,this.mAxisMaterial[P.XZ]=a;let r=new vt;r.doubleSide=!0,r.baseColor=new J(1,0,0),r.depthCompare=nt.always,this.mAxisColor[P.YZ]=r.baseColor,this.mAxisMaterial[P.YZ]=r;let i=this.createPlane(P.XY),n=this.createPlane(P.XZ),o=this.createPlane(P.YZ);this.mContainer.addChild(this.mAxis[P.XY]=i),this.mContainer.addChild(this.mAxis[P.XZ]=n),this.mContainer.addChild(this.mAxis[P.YZ]=o),this.mAxisCollider[P.XY]=i.getComponent(ha),this.mAxisCollider[P.XZ]=n.getComponent(ha),this.mAxisCollider[P.YZ]=o.getComponent(ha)}applyLocalTransform(e,t,a){R.help_matrix_0.copyFrom(this.mX.transform.worldMatrix).invert(),R.help_matrix_0.transformVector(t,b.HELP_0),this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ||(b.HELP_0.x=0),this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ||(b.HELP_0.y=0),this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ||(b.HELP_0.z=0),this.mX.transform.worldMatrix.transformVector(b.HELP_0,b.HELP_1),this.mX.x+=b.HELP_1.x,this.mX.y+=b.HELP_1.y,this.mX.z+=b.HELP_1.z}applyGlobalTransform(e,t,a){R.help_matrix_0.identity(),(this.currentAxis==P.X||this.currentAxis==P.XY||this.currentAxis==P.XZ)&&R.help_matrix_0.appendTranslation(t.x,0,0),(this.currentAxis==P.Y||this.currentAxis==P.XY||this.currentAxis==P.YZ)&&R.help_matrix_0.appendTranslation(0,t.y,0),(this.currentAxis==P.Z||this.currentAxis==P.XZ||this.currentAxis==P.YZ)&&R.help_matrix_0.appendTranslation(0,0,t.z),R.help_matrix_1.copyFrom(this.mX.transform.worldMatrix),R.help_matrix_1.append(R.help_matrix_0),this.mX.parent&&(R.help_matrix_2.copyFrom(this.mX.parent.worldMatrix),R.help_matrix_2.invert(),R.help_matrix_1.multiply(R.help_matrix_2));let r=R.help_matrix_1.decompose(oa.QUATERNION);this.mX.transform.localPosition=r[0],console.log(this.target.localPosition)}createCustomAxis(e){let t=super.createAxis(e),a=this.createArrows(e);return t.addChild(a),t}createArrows(e){let t=0,a=0,r=0,i=new ne;switch(e){case P.X:t=1,i.rotationZ=-90;break;case P.Y:a=1,i.rotationY=-90;break;case P.Z:r=1,i.rotationX=90;break}let n=.2+t*20,o=.2+a*20,l=.2+r*20;i.x=n*.5,i.y=o*.5,i.z=l*.5;let c=i.addComponent(he);return c.geometry=new ku(0,1,4),c.material=this.mAxisMaterial[e],i}createPlane(e){let t=new ne,a=t.addComponent(he);a.material=this.mAxisMaterial[e];let r=t.addComponent(ha),i=new gi;switch(r.shape=i,e){case P.XY:a.geometry=new ni(4,4,1,1,b.Z_AXIS),t.x=8,t.y=8,i.setFromCenterAndSize(new b(0,0,0),new b(4,4,.1));break;case P.XZ:a.geometry=new ni(4,4,1,1,b.Y_AXIS),t.x=8,t.z=8,i.setFromCenterAndSize(new b(0,0,0),new b(4,.1,4));break;case P.YZ:a.geometry=new ni(4,4,1,1,b.X_AXIS),t.y=8,t.z=8,i.setFromCenterAndSize(new b(0,0,0),new b(.1,4,4));break}return t}}class Bl extends ne{static _instance;static get instance(){return this._instance||(this._instance=new Bl),this._instance}mTarget;mTransformMode=At.NONE;mTransformSpaceType=ua.Global;mControllers;mXObj;mYObj;mZObj;constructor(){super(),this.mControllers=[null,null,null],this.mControllers[At.Scale]=this.addComponent(wu),this.mControllers[At.Rotation]=this.addComponent(Iu),this.mControllers[At.Translation]=this.addComponent(Ru),this.mControllers[At.Scale].enable=!1,this.mControllers[At.Rotation].enable=!1,this.mControllers[At.Translation].enable=!1,this.mXObj=new ne,this.mYObj=new ne,this.mZObj=new ne,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,a){this.mTarget!=e&&(e?this.activate():this.unactivate(),this.mTarget=e,this.mXObj.localPosition=e.transform.worldPosition.clone()),t!=null&&this.selectTransformMode(t),a!=null&&this.selectTransformSpaceMode(a)}selectTransformMode(e){this.mTransformMode!=e&&(this.mTransformMode!=At.NONE&&(this.mControllers[this.mTransformMode].enable=!1),this.mTransformMode=e,this.mTransformMode!=At.NONE&&(this.mControllers[this.mTransformMode].enable=!0))}selectTransformSpaceMode(e){this.mTransformSpaceType!=e&&(this.mTransformSpaceType=e,this.mTransformMode!=At.NONE&&this.mControllers[this.mTransformMode].reset())}activate(){_.inputSystem.addEventListener(Na.KEY_DOWN,this.onKeyDown,this),_.inputSystem.addEventListener(Z.POINTER_DOWN,this.onMouseDown,this,null,99999),_.inputSystem.addEventListener(Z.POINTER_MOVE,this.onMouseMove,this,null,99999),_.inputSystem.addEventListener(Z.POINTER_UP,this.onMouseUp,this,null,99999)}unactivate(){_.inputSystem.removeEventListener(Na.KEY_DOWN,this.onKeyDown,this),_.inputSystem.removeEventListener(Z.POINTER_DOWN,this.onMouseDown,this),_.inputSystem.removeEventListener(Z.POINTER_MOVE,this.onMouseMove,this),_.inputSystem.removeEventListener(Z.POINTER_UP,this.onMouseUp,this)}onKeyDown(e){switch(e.keyCode){case tt.Key_R:this.selectTransformMode(At.Scale),this.selectTransformSpaceMode(ua.Local);break;case tt.Key_E:this.selectTransformMode(At.Rotation),this.selectTransformSpaceMode(ua.Global);break;case tt.Key_W:this.selectTransformMode(At.Translation),this.selectTransformSpaceMode(ua.Global);break;case tt.Key_A:this.selectTransformSpaceMode(ua.Local);break;case tt.Key_S:this.selectTransformSpaceMode(ua.Global);break}}onMouseDown(e){this.mTransformMode!=At.NONE&&this.mControllers[this.mTransformMode].onMouseDown(e)}onMouseMove(e){this.mTransformMode!=At.NONE&&this.mControllers[this.mTransformMode].onMouseMove(e)}onMouseUp(e){this.mTransformMode!=At.NONE&&this.mControllers[this.mTransformMode].onMouseUp(e)}}const Km=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{gf as AccelerateDecelerateInterpolator,uf as AccelerateInterpolator,Gi as AnimationCurve,Ur as AnimationCurveT,Xr as AnimationMonitor,er as AnimatorComponent,Bg as AnimatorEventKeyframe,Af as AnticipateInterpolator,As as AnticipateOvershootInterpolator,zu as ArrayHas,Wu as ArrayItemIndex,sd as AtlasParser,ug as AtmosphericComponent,Xd as AtmosphericScatteringSky,Yd as AtmosphericScatteringSkySetting,Zd as AtmosphericScatteringSky_shader,rh as AttributeAnimCurve,jm as AxisObject,rr as B3DMLoader,jf as B3DMLoaderBase,ko as B3DMParseUtil,So as B3DMParser,qf as BRDFLUT,$f as BRDFLUTGenerate,rc as BRDF_frag,Ls as BatchTable,xm as BiMap,fs as BillboardComponent,pr as BillboardType,Ec as BitUtil,$a as BitmapTexture2D,Kc as BitmapTexture2DArray,Bo as BitmapTextureCube,Xc as Blend,Hc as BlendFactor,De as BlendMode,tl as BlendShapeData,el as BlendShapePropertyData,Bp as BloomPost,Nf as BlurEffectCreatorBlur_cs,Mf as BlurEffectCreatorSample_cs,Pf as BlurTexture2DBufferCreator,ra as BounceInterpolator,qn as BoundUtil,Ce as BoundingBox,Gr as BoundingSphere,Hr as BoundingVolume,gi as BoxColliderShape,Wa as BoxGeometry,Zl as BrdfLut_frag,sc as BsDF_frag,ic as BxDF_frag,cc as BxdfDebug_frag,Dn as BytesArray,mt as CEvent,Ya as CEventDispatcher,ys as CEventListener,lr as CResizeEvent,na as CSM,ai as Camera3D,Eg as CameraControllerBase,ot as CameraType,gt as CameraUtil,ep as CapsuleColliderShape,d0 as CastPointShadowMaterialPass,f0 as CastShadowMaterialPass,nc as Clearcoat_frag,L0 as ClusterBoundsSource_cs,wt as ClusterConfig,Tl as ClusterDebug_frag,mc as ClusterLight,O0 as ClusterLightingBuffer,z0 as ClusterLightingRender,G0 as ClusterLighting_cs,g0 as CollectInfo,ha as ColliderComponent,pt as ColliderShape,bi as ColliderShapeType,J as Color,Um as ColorGradient,Dm as ColorLitMaterial,zd as ColorLitShader,ig as ColorPassFragmentOutput,V0 as ColorPassRenderer,Fs as ColorUtil,_n as ComData,Md as Combine_cs,Jl as Common_frag,jl as Common_vert,et as ComponentBase,Oe as ComponentCollect,oi as ComputeGPUBuffer,Fe as ComputeShader,Fl as Context3D,io as CubeCamera,Vf as CubeMapFaceEnum,Sn as CubeSky_Shader,rn as CubicBezierCurve,ym as CubicBezierPath,mu as CubicBezierType,Df as CycleInterpolator,ku as CylinderGeometry,sf as DDGIIrradianceComputePass,vs as DDGIIrradianceGPUBufferReader,w0 as DDGIIrradianceVolume,rf as DDGIIrradiance_shader,cf as DDGILightingPass,lf as DDGILighting_shader,of as DDGIMultiBouncePass,ff as DDGIProbeRenderer,_t as DEGREES_TO_RADIANS,vf as DRACO_DECODER_GLTF_JS,bf as DecelerateInterpolator,Nd as Denoising_cs,Z0 as Depth2DTextureArray,J0 as DepthCubeArrayTexture,h0 as DepthMaterialPass,vp as DepthOfFieldPost,_d as DepthOfView_cs,Ti as DirectLight,rs as DoubleArray,qr as EditorInspector,_ as Engine3D,E0 as Entity,p0 as EntityBatchCollect,q as EntityCollect,Yl as EnvMap_frag,Xt as ErpImage2CubeMap,Of as ErpImage2CubeMapCreateCube_cs,Lf as ErpImage2CubeMapRgbe2rgba_cs,sp as ExtrudeGeometry,Br as FAILED,Sa as FASTFLOOR,so as FXAAPost,ef as FXAAShader,Hl as FastMathShader,kh as FatLineGeometry,Hh as FatLineMaterial,Ai as FatLineRenderer,Ki as FatLineShader,Mc as FatLine_FS,Tc as FatLine_VS,Ni as FeatureTable,Rt as FileLoader,wg as FirstPersonCameraController,Ts as Float16ArrayTexture,k0 as Float32ArrayTexture,Ig as FlyCameraController,ad as FontChar,ed as FontInfo,td as FontPage,ir as FontParser,hf as ForwardRenderJob,En as FragmentOutput,ql as FragmentVarying,Lo as FrameCache,On as Frustum,Yc as FrustumCSM,rg as FrustumCulling_cs,fc as FullQuad_vert_wgsl,ve as GBufferFrame,c0 as GBufferPass,xp as GBufferPost,wc as GBufferStand,wn as GBuffer_pass,Do as GILighting,Ch as GIProbeMaterial,jo as GIProbeMaterialType,Wd as GIProbeShader,no as GIRenderCompleteEvent,Ms as GIRenderStartEvent,Qf as GLBChunk,Rf as GLBHeader,_o as GLBParser,qc as GLSLLexer,yi as GLSLLexerToken,$c as GLSLPreprocessor,r0 as GLSLSyntax,Xf as GLTFBinaryExtension,Wp as GLTFMaterial,Ut as GLTFParser,Ps as GLTFSubParser,xf as GLTFSubParserCamera,If as GLTFSubParserConverter,yf as GLTFSubParserMaterial,Uf as GLTFSubParserMesh,Ao as GLTFSubParserSkeleton,Cf as GLTFSubParserSkin,la as GLTFType,lb as GLTF_Accessors,Ns as GLTF_Info,ib as GLTF_Light,ob as GLTF_Mesh,sb as GLTF_Node,nb as GLTF_Primitives,rb as GLTF_Scene,qt as GPUAddressMode,Ju as GPUBlendFactor,Xa as GPUBufferBase,Da as GPUBufferType,nt as GPUCompareFunction,k as GPUContext,Gt as GPUCullMode,hr as GPUFilterMode,Ss as GPUPrimitiveTopology,oe as GPUTextureFormat,Ui as GPUVertexFormat,Yu as GPUVertexStepMode,Di as GSplatFormat,Xn as GSplatGeometry,Yn as GSplatMaterial,si as GSplatRenderer,Fi as GSplatShader,_r as GSplatStreamRenderer,_0 as GSplat_FS,D0 as GSplat_VS,Up as GTAOPost,Bd as GTAO_cs,id as GUIAtlasTexture,ds as GUICanvas,Vr as GUIConfig,ch as GUIGeometry,dh as GUIGeometryRebuild,Wo as GUIMaterial,df as GUIPassRenderer,gh as GUIPick,Ah as GUIPickHelper,ja as GUIQuad,lt as GUIQuadAttrEnum,hh as GUIRenderer,zo as GUIShader,da as GUISpace,fi as GUISprite,kr as GUITexture,Op as GaussianSplatParser,gc as GenerayRandomDir,Gp as GeoJsonParser,zp as GeoJsonUtil,Xs as GeoType,Le as GeometryBase,x0 as GeometryIndicesBuffer,Zm as GeometryUtil,B0 as GeometryVertexBuffer,Et as GeometryVertexType,kl as GetComponentClass,yn as GetCountInstanceID,r2 as GetRepeat,El as GetShader,sg as GlassShader,xe as GlobalBindGroup,Ln as GlobalBindGroupLayout,yp as GlobalFog,Oo as GlobalFog_shader,Yg as GlobalIlluminationComponent,Fn as GlobalUniform,$n as GlobalUniformGroup,Cp as GodRayPost,vd as GodRay_cs,Ym as GridObject,xo as HDRTexture,Os as HDRTextureCube,Ac as Hair_frag,ng as Hair_shader_op,og as Hair_shader_tr,Is as HaltonSeq,Bh as Horizontal,Rg as HoverCameraController,Ea as I3DMLoader,Hf as I3DMLoaderBase,Eo as I3DMParser,Wf as IBLEnvMapCreator,zf as IBLEnvMapCreator_cs,Ra as IESProfiles,ec as IESProfiles_frag,lp as IKDTreeUserData,ui as ImageType,v0 as IndicesGPUBuffer,Wl as Inline_vert,Sl as InputSystem,Xg as InstanceDrawComponent,Xl as InstanceUniform,Kf as InstancedMesh,Fr as Interpolator,oo as InterpolatorEnum,Oh as IrradianceDataReaderCompleteEvent,zl as IrradianceVolumeData_frag,ac as Irradiance_frag,Lu as IsEditorInspector,xn as IsNonSerialize,Sf as Joint,mo as JointPose,mf as JumperInterpolator,fp as KDTreeEntity,Cr as KDTreeNode,wh as KDTreeRange,Ih as KDTreeSpace,gs as KDTreeUUID,po as KHR_draco_mesh_compression,Jp as KHR_lights_punctual,kf as KHR_materials_clearcoat,Ef as KHR_materials_emissive_strength,jp as KHR_materials_ior,wf as KHR_materials_unlit,ud as KMZParser,$o as KV,Xm as KelvinUtil,tt as KeyCode,Na as KeyEvent,Js as Keyframe,as as KeyframeT,Xh as LASLoader,Xp as LASParser,jt as LASUtils,_i as LASVisualizationMode,Gs as LDRTextureCube,Ga as LOADED,al as LOADING,cu as LRUCache,_m as LambertMaterial,_c as Lambert_shader,js as Light,Qi as LightBase,ws as LightData,I0 as LightEntries,ht as LightType,Ml as LightingFunction_frag,yt as Line,ph as LineClassification,pf as LinearInterpolator,aa as LitMaterial,Ks as LitSSSShader,qs as LitShader,oc as Lit_shader,wr as LoaderBase,dp as LoaderEvent,An as LoaderManager,qu as MAX_VALUE,$u as MIN_VALUE,xt as Material,o0 as MaterialDataUniformGPUBuffer,Hs as MaterialUtilities,Nl as MathShader,zt as MathUtil,zr as Matrix3,R as Matrix4,T0 as MatrixBindGroup,Q0 as MatrixGPUBuffer,pc as MatrixShader,cr as MemoryDO,Il as MemoryInfo,bp as MergeRGBACreator,xd as MergeRGBA_cs,mn as MeshColliderShape,Zs as MeshFilter,he as MeshRenderer,km as MinMaxAnimationCurves,Uu as MinMaxCurve,xu as MinMaxCurveState,Em as MinMaxPolyCurves,Ap as MorePassParser,Ph as MorePassShader,Ug as MorphTargetBlender,N0 as MorphTargetData,yg as MorphTargetFrame,nh as MorphTargetTransformKey,Kt as MorphTarget_shader,Ys as MouseCode,nf as MultiBouncePass_cs,Su as Navi3DAstar,is as Navi3DConst,wa as Navi3DEdge,sr as Navi3DFunnel,yr as Navi3DMaskType,Gm as Navi3DMesh,Tt as Navi3DPoint,_l as Navi3DPoint2D,ka as Navi3DPointFat,_e as Navi3DRouter,Fu as Navi3DTriangle,vn as NonSerialize,Kl as NormalMap_frag,Ff as OAnimationEvent,Ds as OBJParser,ne as Object3D,hp as Object3DEvent,Bl as Object3DTransformTools,Hm as Object3DUtil,ih as ObjectAnimClip,ro as OcclusionSystem,Sr as Octree,A0 as OctreeEntity,Qg as OrbitController,Cm as OrderMap,oa as Orientation3D,Ud as OutLineBlendColor_cs,yd as OutlineCalcOutline_cs,lg as OutlinePass,Sp as OutlinePost,Gh as OutlinePostData,zh as OutlinePostManager,Lh as OutlinePostSlot,Cd as Outline_cs,_f as OvershootInterpolator,ou as PARSING,lc as PBRLItShader,Jd as PBRLitSSSShader,cm as PLUGIN_REGISTERED,qh as PNTSLoader,Kh as PNTSLoaderBase,$h as PNTSParser,it as ParserBase,je as ParserFormat,vu as ParticleSystemCurveEvalMode,Au as ParticleSystemRandomnessIds,Ci as PassGenerate,Vh as PassShader,fe as PassType,Pl as PhysicMaterialUniform_frag,Sh as PickCompute,Fh as PickFire,Ct as PickGUIEvent3D,Wh as PickResult,Sd as Picker_cs,In as PingPong,Jn as PipelinePool,yu as Plane3D,Or as PlaneClassification,ni as PlaneGeometry,Ca as PlyMode,Al as PlyParser,Yh as PlyStreamParser,mh as PointClassification,Kn as PointCloudGeometry,F0 as PointCloudMaterial,qa as PointCloudRenderer,Ei as PointCloudShader,S0 as PointCloud_FS,C0 as PointCloud_VS,li as PointLight,j0 as PointLightShadowRenderer,W0 as PointShadowCubeCamera,Z as PointerEvent3D,za as Polynomial,nr as PolynomialCurve,Fm as Polynomials,uh as PoolNode,Jt as PostBase,gd as PostProcessingComponent,K0 as PostRenderer,X0 as PreDepthPassRenderer,q0 as PreFilteredEnvironment_cs,Hb as PreFilteredEnvironment_cs2,Fd as PreIntegratedLut,Nh as PreIntegratedLutCompute,qo as PrefabAvatarData,eu as PrefabAvatarParser,Ko as PrefabBoneData,au as PrefabMaterialParser,ru as PrefabMeshData,iu as PrefabMeshParser,xs as PrefabNode,nu as PrefabParser,tm as PrefabStringUtil,tu as PrefabTextureData,su as PrefabTextureParser,_a as Preprocessor,il as PriorityQueue,yh as Probe,gp as ProbeEntries,af as ProbeGBufferFrame,dt as ProfilerUtil,_g as PropertyAnimClip,sh as PropertyAnimTag,ul as PropertyAnimation,fl as PropertyAnimationClip,ah as PropertyAnimationClipState,Wi as PropertyAnimationEvent,zi as PropertyHelp,Pt as QuadAABB,vc as QuadGlsl_fs,Bc as QuadGlsl_vs,Qh as QuadRoot,wi as QuadShader,Rh as QuadTree,Er as QuadTreeCell,Xu as Quad_depth2dArray_frag_wgsl,uc as Quad_depth2d_frag_wgsl,bc as Quad_depthCube_frag_wgsl,hc as Quad_frag_wgsl,dc as Quad_vert_wgsl,se as Quaternion,Qs as R32UintTexture,ei as RADIANS_TO_DEGREES,Gf as RGBEErrorCode,Uo as RGBEHeader,yo as RGBEParser,Je as RTDescriptor,ct as RTFrame,Va as RTResourceConfig,Nt as RTResourceMap,ns as Rand,i2 as RandomSeed,ba as Ray,vi as RayCastMeshDetail,ri as Reader,ps as Rect,ke as Reference,Kd as Reflection,Rc as ReflectionCG,R0 as ReflectionEntries,$d as ReflectionMaterial,$0 as ReflectionRenderer,qd as ReflectionShader,Ic as ReflectionShader_shader,Lt as RegisterComponent,Pa as RegisterShader,ao as RenderContext,Si as RenderLayer,jn as RenderLayerUtil,va as RenderNode,m0 as RenderShaderCollect,Mh as RenderShaderCompute,qe as RenderShaderPass,Qt as RenderTexture,Oa as RendererBase,tf as RendererJob,H0 as RendererMap,Ne as RendererMask,sa as RendererMaskUtil,P0 as RendererPassState,Rn as RepeatSE,bd as Res,Iu as RotationControlComponents,Qc as SHCommon_frag,ms as SN_ArrayConstant,br as SN_BinaryOperation,T2 as SN_Break,Fa as SN_CodeBlock,ar as SN_Constant,fn as SN_Continue,rt as SN_Declaration,M2 as SN_Discard,Q2 as SN_DoWhileLoop,we as SN_Expression,jr as SN_ForLoop,ln as SN_Function,cn as SN_FunctionArgs,Jr as SN_FunctionCall,Lr as SN_IFBranch,Ha as SN_Identifier,Yr as SN_IndexOperation,cs as SN_Layout,t0 as SN_ParenExpression,dn as SN_Precision,os as SN_Return,ls as SN_SelectOperation,tr as SN_Struct,a0 as SN_TernaryOperation,ii as SN_UnaryOperation,Zr as SN_WhileLoop,Kb as SSAO_cs,kd as SSGI2_cs,Fp as SSGIPost,kp as SSRPost,Ed as SSR_BlendColor_cs,Ep as SSR_IS_Kernel,wd as SSR_IS_cs,Id as SSR_RayTrace_cs,wu as ScaleControlComponents,ap as Scene3D,Dt as Shader,Wn as ShaderAttributeInfo,i0 as ShaderConverter,s0 as ShaderConverterResult,Y as ShaderLib,Cn as ShaderPassBase,Mt as ShaderReflection,Ba as ShaderStage,n0 as ShaderState,zn as ShaderUniformInfo,Ka as ShaderUtil,$l as ShadingInput,Zt as ShadowLightsCollect,Y0 as ShadowMapPassRenderer,tc as ShadowMapping_frag,Cg as Skeleton,hn as SkeletonAnimationClip,th as SkeletonAnimationClipState,mr as SkeletonAnimationComponent,Sg as SkeletonAnimationCompute,$r as SkeletonAnimation_shader,Fg as SkeletonBlendComputeArgs,Ri as SkeletonPose,kg as SkeletonTransformComputeArgs,Yi as SkinnedMeshRenderer,Dr as SkinnedMeshRenderer2,l0 as SkyGBufferPass,xc as SkyGBuffer_pass,Hd as SkyMaterial,Ws as SkyRenderer,Li as SkyShader,Jm as SolidColorSky,tp as SphereColliderShape,Pr as SphereGeometry,eh as SphereReflection,Mi as SpotLight,Tf as StandShader,Ge as StatementNode,Pe as StorageGPUBuffer,Rp as StreamLoader,Lp as StreamingGaussianSplatParser,It as StringUtil,xi as Struct,pp as StructStorageGPUBuffer,U0 as SubGeometry,Rd as TAACopyTex_cs,wp as TAAPost,Qd as TAASharpTex_cs,Td as TAA_cs,Pd as TestComputeLoadBuffer,Dh as TextAnchor,xh as TextFieldLayout,vh as TextFieldLine,ut as Texture,Vs as TextureCube,Co as TextureCubeFaceData,un as TextureCubeStdCreator,vo as TextureCubeUtils,mp as TextureMipmapCompute,Ia as TextureMipmapGenerator,Th as TextureScaleCompute,Mg as ThirdPersonCameraController,rl as Tile,um as TileSet,gm as TileSetChild,pm as TileSetChildContent,mm as TileSetChildContentMetaData,bm as TileSetRoot,hm as TilesRenderer,We as Time,U as TokenType,Eu as TorusGeometry,Cl as TouchData,zm as TrailGeometry,Yt as Transform,P as TransformAxisEnum,on as TransformControllerBaseComponent,At as TransformMode,ua as TransformSpaceMode,Ru as TranslationControlComponents,Gn as TranslatorContext,Wm as TriGeometry,us as Triangle,bl as UIButton,Uh as UIButtonTransition,Jo as UIComponentBase,up as UIEvent,Wr as UIImage,gl as UIImageGroup,pn as UIInteractive,at as UIInteractiveStyle,hs as UIPanel,Zi as UIRenderAble,pl as UIShadow,ml as UITextField,or as UITransform,vr as UNLOADED,Wt as UUID,Dl as UV,Hn as Uint32ArrayTexture,ki as Uint8ArrayTexture,Dc as UnLit,vt as UnLitMaterial,Vl as UnLitMaterialUniform_frag,qi as UnLitShader,vm as UnLitTexArrayMaterial,$i as UnLitTexArrayShader,jd as UnLitTextureArray,Ol as UnLit_frag,St as UniformGPUBuffer,fr as UniformNode,Ft as UniformType,X as ValueEnumType,Lm as ValueOp,Ja as ValueParser,wm as ValueSpread,de as Vector2,b as Vector3,Ji as Vector3Ex,be as Vector4,op as VertexAttribute,Gd as VertexAttributeIndexShader,G as VertexAttributeName,dr as VertexAttributeSize,Eh as VertexAttributeStride,Ll as VertexAttributes_vert,np as VertexBufferLayout,Ql as VertexFormat,Rs as VertexGPUBuffer,_h as Vertical,Gl as VideoUniform_frag,rp as View3D,bn as ViewPanel,to as ViewQuad,Te as VirtualTexture,om as WGS84_FLATTENING,lm as WGS84_HEIGHT,nm as WGS84_RADIUS,e0 as WGSLTranslator,Bs as WayLines3D,_s as WayPoint3D,He as WebGPUDescriptorCreator,kn as WorldMatrixUniform,gn as WorldPanel,pi as WrapMode,Ar as WrapTimeMode,_p as ZCullingCompute,Ld as ZPassShader_cs,kc as ZPassShader_fs,Fc as ZPassShader_vs,u0 as ZSorterUtil,Zc as append,Jf as arrayToString,ju as blendComponent,Rm as buildCurves,ea as byteSizeOfType,Qm as calculateCurveRangesValue,es as calculateMinMax,yc as castPointShadowMap_vert,Be as clamp,C2 as clampRepeat,Zo as computeAABBFromPositions,m2 as cos,x2 as crossProduct,Du as cubicPolynomialRoot,_u as cubicPolynomialRootsGeneric,Im as curvesSupportProcedural,b2 as deg2Rad,Jh as detectGSplatFormat,Sc as directionShadowCastMap_frag,kt as dot,Bu as doubleIntegrateSegment,Ad as downSample,Jc as fastInvSqrt,Wc as floorfToIntPos,di as fonts,U2 as generateRandom,y2 as generateRandom3,Oc as getFloatFromInt,_b as getGLTypeFromTypedArray,Db as getGLTypeFromTypedArrayType,A2 as getGlobalRandomSeed,Bb as getTypedArray,go as getTypedArrayTypeFromGLType,hl as grad1,nn as grad2,ts as grad3,Bi as grad4,Xo as inferSHOrder,dl as integrateSegment,Dp as irradianceDataReader,Sm as kPI,Nr as lerp,a2 as lerpByte,t2 as lerpColor,e2 as lerpVector3,pu as lruPriorityCallback,Tn as magnitude,Eb as makeAloneSprite,rd as makeGUISprite,Es as makeMatrix44,cl as markUsedSetLeaves,en as markUsedTiles,tn as markVisibleTiles,Vn as matrixMultiply,E2 as matrixRotate,k2 as matrixRotateY,Cs as mergeFunctions,jc as multiplyMatrices4x4REF,Cu as normal_distribution,v2 as normalizeFast,Vc as normalizeSafe,B2 as normalizedToByte,_2 as normalizedToWord,ya as outlinePostData,Ip as outlinePostManager,Ho as parsePlyGaussianSplat,Hi as parsePlyHeader,jh as parsePlyMesh,Zh as parsePlyPointCloud,Ue as perm,Dd as post,gu as priorityCallback,sn as quadraticPolynomialRootsGeneric,g2 as rad2Deg,ti as random01,u2 as randomBarycentricCoord,h2 as randomPointBetweenEllipsoid,f2 as randomPointBetweenSphere,l2 as randomPointInsideCube,c2 as randomPointInsideEllipsoid,d2 as randomPointInsideUnitCircle,Gc as randomPointInsideUnitSphere,n2 as randomQuaternion,o2 as randomQuaternionUniformDistribution,zc as randomSeed,ks as randomUnitVector,Lc as randomUnitVector2,Bt as rangedRandomFloat,s2 as rangedRandomInt,pe as readByType,ci as readMagicBytes,Bm as registerMaterial,Pn as repeat,F2 as rotMatrix,Ku as rotateVectorByQuat,Mn as roundfToIntPos,Qn as scale,Cc as shadowCastMap_frag,Uc as shadowCastMap_vert,ta as simplex,p2 as sin,Nm as snoise1,Pm as snoise2,Vm as snoise3,Om as snoise4,Yo as splatColorProperties,Xi as splatProperties,Nn as sqrMagnitude,Pc as sqrtImpl,Zu as stencilStateFace,D2 as swap,Vd as textureCompress,md as threshold,Am as throttle,bt as toHalfFloat,an as toggleTiles,fm as traverseAncestors,fu as traverseSet,ag as tw,Tm as uniform_real_distribution,Mm as uniform_real_distribution2,Vo as upSample,I as webGPUContext,b0 as zSorterUtil};
11859
11859
  //# sourceMappingURL=rings.es.js.map