@jdultra/threedtiles 10.1.0 → 10.1.1

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.
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see threedtiles.min.js.LICENSE.txt */
2
- !function(A,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("three")):"function"==typeof define&&define.amd?define(["three"],e):"object"==typeof exports?exports.threedtiles=e(require("three")):A.threedtiles=e(A.THREE)}(this,(A=>(()=>{var e={649:(A,e,t)=>{const r=t(180),s=t(31),i=t(839);A.exports={Heap:r,Queue:s,LinkedHashMap:i}},180:A=>{A.exports=class{constructor(A,e){if(this._data=[],this._comparator=function(A,e){return A>=e},null!=A){if(!Array.isArray(A))throw Error("Constructor expects data to be an array");this._data=A}if(null!=e){if("function"!=typeof e)throw Error("Constructor expects comparator to be a function");this._comparator=e}}peek(){return this.size()<1?null:this._data[0]}pop(){if(this.size()<1)return null;const A=this._data[0];return this.swap(this.size()-1,0),this._data.pop(),this.heapifyDown(0),A}replaceTop(A){if(this.size()<1)return null;const e=this._data[0];return this._data[0]=A,this.heapifyDown(0),e}push(A){this._data.push(A),this.heapifyUp(this._data.length-1)}size(){return this._data.length}swap(A,e){const t=this._data[A];this._data[A]=this._data[e],this._data[e]=t}heapifyUp(A){if(0===A)return;const e=Math.floor((A-1)/2);this._comparator(this._data[A],this._data[e])||(this.swap(A,e),this.heapifyUp(e))}heapifyDown(A){const e=2*A+1,t=2*A+2;if(e>=this._data.length)return;const r=t<this._data.length&&!this._comparator(this._data[t],this._data[e])?t:e;this._comparator(this._data[A],this._data[r])&&(this.swap(A,r),this.heapifyDown(r))}}},839:A=>{A.exports=class{constructor(){this._data=new Map,this._link=new Map,this._head=void 0,this._tail=void 0}put(A,e,t=!1){this.has(A)?this._data.set(A,e):(this._data.set(A,e),this._link.set(A,{previous:void 0,next:void 0}),null==this._head?(this._head=A,this._tail=A):t?(this._link.get(this._head).previous=A,this._link.get(A).next=this._head,this._head=A):(this._link.get(this._tail).next=A,this._link.get(A).previous=this._tail,this._tail=A))}head(){return{key:this._head,value:this.get(this._head),next:()=>this.next(this._head),previous:()=>null}}tail(){return{key:this._tail,value:this.get(this._tail),next:()=>null,previous:()=>this.previous(this._tail)}}get(A){return this._data.get(A)}previousKey(A){const e=this._link.get(A);return null!=e?e.previous:void 0}previousValue(A){return this.get(this.previousKey(A))}previous(A){const e=this.previousKey(A);return{key:e,value:this.get(e),next:()=>this.next(e),previous:()=>this.previous(e)}}nextKey(A){const e=this._link.get(A);return null!=e?e.next:void 0}nextValue(A){return this.get(this.nextKey(A))}next(A){const e=this.nextKey(A);return{key:e,value:this.get(e),next:()=>this.next(e),previous:()=>this.previous(e)}}remove(A){const e=this._data.get(A);if(null!=e)if(1===this.size())this.reset();else{if(A===this._head){const A=this._link.get(this._head);this._link.get(A.next).previous=null,this._head=A.next}else if(A===this._tail){const A=this._link.get(this._tail);this._link.get(A.previous).next=null,this._tail=A.previous}else{const e=this._link.get(A),t=this._link.get(e.previous),r=this._link.get(e.next);t.next=e.next,r.previous=e.previous}this._link.delete(A),this._data.delete(A)}return e}has(A){return this._data.has(A)}size(){return this._data.size}reset(){this._data.clear(),this._link.clear(),this._head=void 0,this._tail=void 0}keys(){return this._data.keys()}values(){return this._data.values()}entries(){return this._data.entries()}toArray(A="orderByInsert"){if("orderByInsert"!==A){const A=[];let e=this._head;for(;null!=e;)A.push({key:e,value:this.get(e)}),e=this.nextKey(e);return A}return Array.from(this.keys()).map((A=>({key:A,value:this.get(A)})))}}},31:A=>{A.exports=class{constructor(A,e){if(this._data=[],this._head=0,this._cap=null,null!=A){if(!Array.isArray(A))throw Error("Constructor expects data to be an array");this._data=A}if(null!=e){if("number"!=typeof e)throw Error("Constructor expects capacity to be a number");this._cap=e}}enqueue(A){return!(null!=this._cap&&this.size()>=this._cap)&&(this._data.push(A),!0)}dequeue(){if(0===this.size())return null;const A=this._data[this._head];return this._head+=1,2*this._head>=this._data.length&&(this._data=this._data.slice(this._head),this._head=0),A}peek(A=!1){return this.size()>0?A?this._data[this._data.length-1]:this._data[this._head]:null}size(){return this._data.length-this._head}updateCapacity(A){this._cap=A}reset(){this._data=[],this._head=0}forEach(A){for(let e=this._head;e<this._data.length;e+=1)A(this._data[e],e-this._head)}toArray(){return this._data.slice(this._head)}}},975:A=>{"use strict";function e(A){if("string"!=typeof A)throw new TypeError("Path must be a string. Received "+JSON.stringify(A))}function t(A,e){for(var t,r="",s=0,i=-1,o=0,n=0;n<=A.length;++n){if(n<A.length)t=A.charCodeAt(n);else{if(47===t)break;t=47}if(47===t){if(i===n-1||1===o);else if(i!==n-1&&2===o){if(r.length<2||2!==s||46!==r.charCodeAt(r.length-1)||46!==r.charCodeAt(r.length-2))if(r.length>2){var a=r.lastIndexOf("/");if(a!==r.length-1){-1===a?(r="",s=0):s=(r=r.slice(0,a)).length-1-r.lastIndexOf("/"),i=n,o=0;continue}}else if(2===r.length||1===r.length){r="",s=0,i=n,o=0;continue}e&&(r.length>0?r+="/..":r="..",s=2)}else r.length>0?r+="/"+A.slice(i+1,n):r=A.slice(i+1,n),s=n-i-1;i=n,o=0}else 46===t&&-1!==o?++o:o=-1}return r}var r={resolve:function(){for(var A,r="",s=!1,i=arguments.length-1;i>=-1&&!s;i--){var o;i>=0?o=arguments[i]:(void 0===A&&(A=process.cwd()),o=A),e(o),0!==o.length&&(r=o+"/"+r,s=47===o.charCodeAt(0))}return r=t(r,!s),s?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(A){if(e(A),0===A.length)return".";var r=47===A.charCodeAt(0),s=47===A.charCodeAt(A.length-1);return 0!==(A=t(A,!r)).length||r||(A="."),A.length>0&&s&&(A+="/"),r?"/"+A:A},isAbsolute:function(A){return e(A),A.length>0&&47===A.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var A,t=0;t<arguments.length;++t){var s=arguments[t];e(s),s.length>0&&(void 0===A?A=s:A+="/"+s)}return void 0===A?".":r.normalize(A)},relative:function(A,t){if(e(A),e(t),A===t)return"";if((A=r.resolve(A))===(t=r.resolve(t)))return"";for(var s=1;s<A.length&&47===A.charCodeAt(s);++s);for(var i=A.length,o=i-s,n=1;n<t.length&&47===t.charCodeAt(n);++n);for(var a=t.length-n,g=o<a?o:a,l=-1,c=0;c<=g;++c){if(c===g){if(a>g){if(47===t.charCodeAt(n+c))return t.slice(n+c+1);if(0===c)return t.slice(n+c)}else o>g&&(47===A.charCodeAt(s+c)?l=c:0===c&&(l=0));break}var h=A.charCodeAt(s+c);if(h!==t.charCodeAt(n+c))break;47===h&&(l=c)}var I="";for(c=s+l+1;c<=i;++c)c!==i&&47!==A.charCodeAt(c)||(0===I.length?I+="..":I+="/..");return I.length>0?I+t.slice(n+l):(n+=l,47===t.charCodeAt(n)&&++n,t.slice(n))},_makeLong:function(A){return A},dirname:function(A){if(e(A),0===A.length)return".";for(var t=A.charCodeAt(0),r=47===t,s=-1,i=!0,o=A.length-1;o>=1;--o)if(47===(t=A.charCodeAt(o))){if(!i){s=o;break}}else i=!1;return-1===s?r?"/":".":r&&1===s?"//":A.slice(0,s)},basename:function(A,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');e(A);var r,s=0,i=-1,o=!0;if(void 0!==t&&t.length>0&&t.length<=A.length){if(t.length===A.length&&t===A)return"";var n=t.length-1,a=-1;for(r=A.length-1;r>=0;--r){var g=A.charCodeAt(r);if(47===g){if(!o){s=r+1;break}}else-1===a&&(o=!1,a=r+1),n>=0&&(g===t.charCodeAt(n)?-1==--n&&(i=r):(n=-1,i=a))}return s===i?i=a:-1===i&&(i=A.length),A.slice(s,i)}for(r=A.length-1;r>=0;--r)if(47===A.charCodeAt(r)){if(!o){s=r+1;break}}else-1===i&&(o=!1,i=r+1);return-1===i?"":A.slice(s,i)},extname:function(A){e(A);for(var t=-1,r=0,s=-1,i=!0,o=0,n=A.length-1;n>=0;--n){var a=A.charCodeAt(n);if(47!==a)-1===s&&(i=!1,s=n+1),46===a?-1===t?t=n:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){r=n+1;break}}return-1===t||-1===s||0===o||1===o&&t===s-1&&t===r+1?"":A.slice(t,s)},format:function(A){if(null===A||"object"!=typeof A)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof A);return function(A,e){var t=e.dir||e.root,r=e.base||(e.name||"")+(e.ext||"");return t?t===e.root?t+r:t+A+r:r}("/",A)},parse:function(A){e(A);var t={root:"",dir:"",base:"",ext:"",name:""};if(0===A.length)return t;var r,s=A.charCodeAt(0),i=47===s;i?(t.root="/",r=1):r=0;for(var o=-1,n=0,a=-1,g=!0,l=A.length-1,c=0;l>=r;--l)if(47!==(s=A.charCodeAt(l)))-1===a&&(g=!1,a=l+1),46===s?-1===o?o=l:1!==c&&(c=1):-1!==o&&(c=-1);else if(!g){n=l+1;break}return-1===o||-1===a||0===c||1===c&&o===a-1&&o===n+1?-1!==a&&(t.base=t.name=0===n&&i?A.slice(1,a):A.slice(n,a)):(0===n&&i?(t.name=A.slice(1,o),t.base=A.slice(1,a)):(t.name=A.slice(n,o),t.base=A.slice(n,a)),t.ext=A.slice(o,a)),n>0?t.dir=A.slice(0,n-1):i&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};r.posix=r,A.exports=r},818:e=>{"use strict";e.exports=A}},t={};function r(A){var s=t[A];if(void 0!==s)return s.exports;var i=t[A]={exports:{}};return e[A](i,i.exports,r),i.exports}r.d=(A,e)=>{for(var t in e)r.o(e,t)&&!r.o(A,t)&&Object.defineProperty(A,t,{enumerable:!0,get:e[t]})},r.o=(A,e)=>Object.prototype.hasOwnProperty.call(A,e),r.r=A=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var s={};return(()=>{"use strict";r.r(s),r.d(s,{InstancedOGC3DTile:()=>Se,InstancedTileLoader:()=>Fe,OGC3DTile:()=>Ee,OcclusionCullingService:()=>t,TileLoader:()=>ZA});var A=r(818);Math.PI,Math.PI;function e(A,e,t){return Math.max(e,Math.min(t,A))}class t{constructor(){this.cullMap=[],this.cullMaterial=new A.MeshBasicMaterial({vertexColors:!0}),this.cullMaterial.side=A.FrontSide,this.cullTarget=this._createCullTarget(),this.cullPixels=new Uint8Array(4*this.cullTarget.width*this.cullTarget.height)}setSide(A){this.cullMaterial.side=A}_createCullTarget(){const e=new A.WebGLRenderTarget(Math.floor(.05*window.innerWidth),Math.floor(.05*window.innerHeight));return e.texture.format=A.RGBAFormat,e.texture.colorSpace=A.LinearSRGBColorSpace,e.texture.minFilter=A.NearestFilter,e.texture.magFilter=A.NearestFilter,e.texture.generateMipmaps=!1,e.stencilBuffer=!1,e.depthBuffer=!0,e.depthTexture=new A.DepthTexture,e.depthTexture.format=A.DepthFormat,e.depthTexture.type=A.UnsignedShortType,e}update(A,t,r){let s=t.getRenderTarget(),i=A.overrideMaterial;A.overrideMaterial=this.cullMaterial,t.setRenderTarget(this.cullTarget),t.render(A,r),A.overrideMaterial=i,t.setRenderTarget(s),t.readRenderTargetPixels(this.cullTarget,0,0,this.cullTarget.width,this.cullTarget.height,this.cullPixels),this.cullMap=[];for(let A=0;A<this.cullPixels.length;A+=4){const t=e(this.cullPixels[A],0,255)<<16^e(this.cullPixels[A+1],0,255)<<8^e(this.cullPixels[A+2],0,255)<<0;this.cullMap[t]=!0}}hasID(A){return this.cullMap[A]}}class i{constructor(e){this.center=new A.Vector3(e[0],e[1],e[2]);var t=new A.Vector3(e[3],e[4],e[4]),r=new A.Vector3(e[6],e[7],e[8]),s=new A.Vector3(e[9],e[10],e[11]);this.halfWidth=t.length(),this.halfHeight=r.length(),this.halfDepth=s.length(),t.normalize(),r.normalize(),s.normalize(),this.sphere=new A.Sphere(this.center,Math.sqrt(this.halfWidth*this.halfWidth+this.halfHeight*this.halfHeight+this.halfDepth*this.halfDepth)),this.matrixToOBBCoordinateSystem=new A.Matrix3,this.matrixToOBBCoordinateSystem.set(t.x,t.y,t.z,r.x,r.y,r.z,s.x,s.y,s.z)}inFrustum(A){return A.intersectsSphere(this.sphere)}distanceToPoint(A){let e=A.clone();e.sub(this.center),e.applyMatrix3(this.matrixToOBBCoordinateSystem);let t=Math.max(0,Math.max(-this.halfWidth-e.x,e.x-this.halfWidth)),r=Math.max(0,Math.max(-this.halfHeight-e.y,e.y-this.halfHeight)),s=Math.max(0,Math.max(-this.halfDepth-e.z,e.z-this.halfDepth));return Math.sqrt(t*t+r*r+s*s)}}var o=r(649);const n=new TextDecoder;class a{constructor(A,e,t,r){this.buffer=A,this.binOffset=e+t,this.binLength=r;let s=null;if(0!==t)try{const r=new Uint8Array(A,e,t);s=JSON.parse(n.decode(r))}catch(A){s={}}else s={};this.header=s}getKeys(){return Object.keys(this.header)}getData(A,e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const s=this.header;if(!(A in s))return null;const i=s[A];if(i instanceof Object){if(Array.isArray(i))return i;{const{buffer:s,binOffset:o,binLength:n}=this,a=i.byteOffset||0,g=i.type||r,l=i.componentType||t;if("type"in i&&r&&i.type!==r)throw new Error("FeatureTable: Specified type does not match expected type.");let c,h;switch(g){case"SCALAR":c=1;break;case"VEC2":c=2;break;case"VEC3":c=3;break;case"VEC4":c=4;break;default:throw new Error('FeatureTable : Feature type not provided for "'.concat(A,'".'))}const I=o+a,C=e*c;switch(l){case"BYTE":h=new Int8Array(s,I,C);break;case"UNSIGNED_BYTE":h=new Uint8Array(s,I,C);break;case"SHORT":h=new Int16Array(s,I,C);break;case"UNSIGNED_SHORT":h=new Uint16Array(s,I,C);break;case"INT":h=new Int32Array(s,I,C);break;case"UNSIGNED_INT":h=new Uint32Array(s,I,C);break;case"FLOAT":h=new Float32Array(s,I,C);break;case"DOUBLE":h=new Float64Array(s,I,C);break;default:throw new Error('FeatureTable : Feature component type not provided for "'.concat(A,'".'))}if(I+C*h.BYTES_PER_ELEMENT>o+n)throw new Error("FeatureTable: Feature data read outside binary body length.");return h}}return i}}class g extends a{constructor(A,e,t,r,s){super(A,t,r,s),this.batchSize=e}getData(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return super.getData(A,this.batchSize,e,t)}}function l(e){let t,r,s,i=-1,o=0;for(let A=0;A<e.length;++A){const n=e[A];if(void 0===t&&(t=n.array.constructor),t!==n.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(void 0===r&&(r=n.itemSize),r!==n.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(void 0===s&&(s=n.normalized),s!==n.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(-1===i&&(i=n.gpuType),i!==n.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;o+=n.count*r}const n=new t(o),a=new A.BufferAttribute(n,r,s);let g=0;for(let A=0;A<e.length;++A){const t=e[A];if(t.isInterleavedBufferAttribute){const A=g/r;for(let e=0,s=t.count;e<s;e++)for(let s=0;s<r;s++){const r=t.getComponent(e,s);a.setComponent(e+A,s,r)}}else n.set(t.array,g);g+=t.count*r}return void 0!==i&&(a.gpuType=i),a}function c(e,t){if(t===A.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(t===A.TriangleFanDrawMode||t===A.TriangleStripDrawMode){let r=e.getIndex();if(null===r){const A=[],t=e.getAttribute("position");if(void 0===t)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<t.count;e++)A.push(e);e.setIndex(A),r=e.getIndex()}const s=r.count-2,i=[];if(t===A.TriangleFanDrawMode)for(let A=1;A<=s;A++)i.push(r.getX(0)),i.push(r.getX(A)),i.push(r.getX(A+1));else for(let A=0;A<s;A++)A%2==0?(i.push(r.getX(A)),i.push(r.getX(A+1)),i.push(r.getX(A+2))):(i.push(r.getX(A+2)),i.push(r.getX(A+1)),i.push(r.getX(A)));i.length/3!==s&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=e.clone();return o.setIndex(i),o.clearGroups(),o}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),e}function h(A,e,t){return e=function(A){var e=function(A,e){if("object"!=typeof A||!A)return A;var t=A[Symbol.toPrimitive];if(void 0!==t){var r=t.call(A,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}(A,"string");return"symbol"==typeof e?e:String(e)}(e),e in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const I=new A.Matrix4;I.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class C{constructor(e){h(this,"checkLoaderInitialized",(async()=>new Promise((A=>{const e=setInterval((()=>{this.gltfLoader.hasDracoLoader&&!this.gltfLoader.dracoLoader||this.gltfLoader.hasKTX2Loader&&!this.gltfLoader.ktx2Loader||(clearInterval(e),A())}),10)})))),console.log(e),this.gltfLoader=e,this.tempMatrix=new A.Matrix4}parseB3DM(A,e,t,r){const s=new DataView(A),i=String.fromCharCode(s.getUint8(0))+String.fromCharCode(s.getUint8(1))+String.fromCharCode(s.getUint8(2))+String.fromCharCode(s.getUint8(3));console.assert("b3dm"===i);const o=s.getUint32(8,!0);console.assert(o===A.byteLength);const n=s.getUint32(12,!0),l=s.getUint32(16,!0),c=s.getUint32(20,!0),h=s.getUint32(24,!0),C=new a(A,28,n,l),B=28+n+l,d=(new g(A,C.getData("BATCH_LENGTH"),B,c,h),B+c+h),E=new Uint8Array(A,d,o-d).slice().buffer;return new Promise((async(A,s)=>{await this.checkLoaderInitialized(),this.gltfLoader.parse(E,null,(s=>{const i=C.getData("RTC_CENTER");i?(this.tempMatrix.makeTranslation(i[0],i[1],i[2]),s.scene.applyMatrix4(this.tempMatrix)):s.userData.gltfExtensions&&s.userData.gltfExtensions.CESIUM_RTC&&(this.tempMatrix.makeTranslation(s.userData.gltfExtensions.CESIUM_RTC.center[0],s.userData.gltfExtensions.CESIUM_RTC.center[1],s.userData.gltfExtensions.CESIUM_RTC.center[2]),s.scene.applyMatrix4(this.tempMatrix)),t&&s.scene.applyMatrix4(I),s.scene.asset=s.asset,s.scene.traverse((A=>{A.isMesh&&(r&&A.applyMatrix4(I),e&&e(A))})),A(s.scene)}),(A=>{console.error(A)}))}))}parseB3DMInstanced(e,t,r,s,i){return this.parseB3DM(e,t,s,i).then((e=>{let t,s=[],i=[];e.updateWorldMatrix(!1,!0),e.traverse((A=>{A.isMesh&&(A.geometry.applyMatrix4(A.matrixWorld),s.push(A.geometry),i.push(A.material))}));let o=function(e){let t=new Set;e.forEach((A=>{for(let e in A.attributes)t.add(e)})),e.forEach((e=>{t.forEach((t=>{if(!e.attributes[t]){const r=function(A){switch(A){case"position":case"normal":case"color":return 3;case"uv":case"uv2":return 2;default:throw new Error("Unknown attribute ".concat(A))}}(t),s=new Float32Array(r*e.getAttribute("position").count).fill(0);e.setAttribute(t,new A.BufferAttribute(s,r))}}))}));let r=function(e,t=!1){const r=null!==e[0].index,s=new Set(Object.keys(e[0].attributes)),i=new Set(Object.keys(e[0].morphAttributes)),o={},n={},a=e[0].morphTargetsRelative,g=new A.BufferGeometry;let c=0;for(let A=0;A<e.length;++A){const l=e[A];let h=0;if(r!==(null!==l.index))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const e in l.attributes){if(!s.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+'. All geometries must have compatible attributes; make sure "'+e+'" attribute exists among all geometries, or in none of them.'),null;void 0===o[e]&&(o[e]=[]),o[e].push(l.attributes[e]),h++}if(h!==s.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". Make sure all geometries have the same number of attributes."),null;if(a!==l.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const e in l.morphAttributes){if(!i.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphAttributes must be consistent throughout all geometries."),null;void 0===n[e]&&(n[e]=[]),n[e].push(l.morphAttributes[e])}if(t){let e;if(r)e=l.index.count;else{if(void 0===l.attributes.position)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". The geometry must have either an index or a position attribute"),null;e=l.attributes.position.count}g.addGroup(c,e,A),c+=e}}if(r){let A=0;const t=[];for(let r=0;r<e.length;++r){const s=e[r].index;for(let e=0;e<s.count;++e)t.push(s.getX(e)+A);A+=e[r].attributes.position.count}g.setIndex(t)}for(const A in o){const e=l(o[A]);if(!e)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" attribute."),null;g.setAttribute(A,e)}for(const A in n){const e=n[A][0].length;if(0===e)break;g.morphAttributes=g.morphAttributes||{},g.morphAttributes[A]=[];for(let t=0;t<e;++t){const e=[];for(let r=0;r<n[A].length;++r)e.push(n[A][r][t]);const r=l(e);if(!r)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" morphAttribute."),null;g.morphAttributes[A].push(r)}}return g}(e,!0);return r}(s);return t=new A.InstancedMesh(o,i,r),t.baseMatrix=(new A.Matrix4).identity(),t}))}}class B extends A.Loader{constructor(A){super(A),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(A){return new f(A)})),this.register((function(A){return new L(A)})),this.register((function(A){return new M(A)})),this.register((function(A){return new b(A)})),this.register((function(A){return new y(A)})),this.register((function(A){return new w(A)})),this.register((function(A){return new D(A)})),this.register((function(A){return new x(A)})),this.register((function(A){return new p(A)})),this.register((function(A){return new R(A)})),this.register((function(A){return new m(A)})),this.register((function(A){return new T(A)})),this.register((function(A){return new S(A)})),this.register((function(A){return new u(A)})),this.register((function(A){return new F(A)})),this.register((function(A){return new G(A)}))}load(e,t,r,s){const i=this;let o;if(""!==this.resourcePath)o=this.resourcePath;else if(""!==this.path){const t=A.LoaderUtils.extractUrlBase(e);o=A.LoaderUtils.resolveURL(t,this.path)}else o=A.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);const n=function(A){s?s(A):console.error(A),i.manager.itemError(e),i.manager.itemEnd(e)},a=new A.FileLoader(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(A){try{i.parse(A,o,(function(A){t(A),i.manager.itemEnd(e)}),n)}catch(A){n(A)}}),r,n)}setDRACOLoader(A){return this.dracoLoader=A,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(A){return this.ktx2Loader=A,this}setMeshoptDecoder(A){return this.meshoptDecoder=A,this}register(A){return-1===this.pluginCallbacks.indexOf(A)&&this.pluginCallbacks.push(A),this}unregister(A){return-1!==this.pluginCallbacks.indexOf(A)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(A),1),this}parse(A,e,t,r){let s;const i={},o={},n=new TextDecoder;if("string"==typeof A)s=JSON.parse(A);else if(A instanceof ArrayBuffer){if(n.decode(new Uint8Array(A,0,4))===_){try{i[E.KHR_BINARY_GLTF]=new N(A)}catch(A){return void(r&&r(A))}s=JSON.parse(i[E.KHR_BINARY_GLTF].content)}else s=JSON.parse(n.decode(A))}else s=A;if(void 0===s.asset||s.asset.version[0]<2)return void(r&&r(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const a=new lA(s,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});a.fileLoader.setRequestHeader(this.requestHeader);for(let A=0;A<this.pluginCallbacks.length;A++){const e=this.pluginCallbacks[A](a);e.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[e.name]=e,i[e.name]=!0}if(s.extensionsUsed)for(let A=0;A<s.extensionsUsed.length;++A){const e=s.extensionsUsed[A],t=s.extensionsRequired||[];switch(e){case E.KHR_MATERIALS_UNLIT:i[e]=new Q;break;case E.KHR_DRACO_MESH_COMPRESSION:i[e]=new v(s,this.dracoLoader);break;case E.KHR_TEXTURE_TRANSFORM:i[e]=new H;break;case E.KHR_MESH_QUANTIZATION:i[e]=new q;break;default:t.indexOf(e)>=0&&void 0===o[e]&&console.warn('THREE.GLTFLoader: Unknown extension "'+e+'".')}}a.setExtensions(i),a.setPlugins(o),a.parse(t,r)}parseAsync(A,e){const t=this;return new Promise((function(r,s){t.parse(A,e,r,s)}))}}function d(){let A={};return{get:function(e){return A[e]},add:function(e,t){A[e]=t},remove:function(e){delete A[e]},removeAll:function(){A={}}}}const E={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_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class u{constructor(A){this.parser=A,this.name=E.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const A=this.parser,e=this.parser.json.nodes||[];for(let t=0,r=e.length;t<r;t++){const r=e[t];r.extensions&&r.extensions[this.name]&&void 0!==r.extensions[this.name].light&&A._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(e){const t=this.parser,r="light:"+e;let s=t.cache.get(r);if(s)return s;const i=t.json,o=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e];let n;const a=new A.Color(16777215);void 0!==o.color&&a.setRGB(o.color[0],o.color[1],o.color[2],A.LinearSRGBColorSpace);const g=void 0!==o.range?o.range:0;switch(o.type){case"directional":n=new A.DirectionalLight(a),n.target.position.set(0,0,-1),n.add(n.target);break;case"point":n=new A.PointLight(a),n.distance=g;break;case"spot":n=new A.SpotLight(a),n.distance=g,o.spot=o.spot||{},o.spot.innerConeAngle=void 0!==o.spot.innerConeAngle?o.spot.innerConeAngle:0,o.spot.outerConeAngle=void 0!==o.spot.outerConeAngle?o.spot.outerConeAngle:Math.PI/4,n.angle=o.spot.outerConeAngle,n.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,n.target.position.set(0,0,-1),n.add(n.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return n.position.set(0,0,0),n.decay=2,sA(n,o),void 0!==o.intensity&&(n.intensity=o.intensity),n.name=t.createUniqueName(o.name||"light_"+e),s=Promise.resolve(n),t.cache.add(r,s),s}getDependency(A,e){if("light"===A)return this._loadLight(e)}createNodeAttachment(A){const e=this,t=this.parser,r=t.json.nodes[A],s=(r.extensions&&r.extensions[this.name]||{}).light;return void 0===s?null:this._loadLight(s).then((function(A){return t._getNodeRef(e.cache,s,A)}))}}class Q{constructor(){this.name=E.KHR_MATERIALS_UNLIT}getMaterialType(){return A.MeshBasicMaterial}extendParams(e,t,r){const s=[];e.color=new A.Color(1,1,1),e.opacity=1;const i=t.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const t=i.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],A.LinearSRGBColorSpace),e.opacity=t[3]}void 0!==i.baseColorTexture&&s.push(r.assignTexture(e,"map",i.baseColorTexture,A.SRGBColorSpace))}return Promise.all(s)}}class p{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(A,e){const t=this.parser.json.materials[A];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const r=t.extensions[this.name].emissiveStrength;return void 0!==r&&(e.emissiveIntensity=r),Promise.resolve()}}class f{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const r=this.parser,s=r.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const i=[],o=s.extensions[this.name];if(void 0!==o.clearcoatFactor&&(t.clearcoat=o.clearcoatFactor),void 0!==o.clearcoatTexture&&i.push(r.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),void 0!==o.clearcoatRoughnessFactor&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),void 0!==o.clearcoatRoughnessTexture&&i.push(r.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),void 0!==o.clearcoatNormalTexture&&(i.push(r.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),void 0!==o.clearcoatNormalTexture.scale)){const e=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new A.Vector2(e,e)}return Promise.all(i)}}class m{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,r=t.json.materials[A];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const s=[],i=r.extensions[this.name];return void 0!==i.iridescenceFactor&&(e.iridescence=i.iridescenceFactor),void 0!==i.iridescenceTexture&&s.push(t.assignTexture(e,"iridescenceMap",i.iridescenceTexture)),void 0!==i.iridescenceIor&&(e.iridescenceIOR=i.iridescenceIor),void 0===e.iridescenceThicknessRange&&(e.iridescenceThicknessRange=[100,400]),void 0!==i.iridescenceThicknessMinimum&&(e.iridescenceThicknessRange[0]=i.iridescenceThicknessMinimum),void 0!==i.iridescenceThicknessMaximum&&(e.iridescenceThicknessRange[1]=i.iridescenceThicknessMaximum),void 0!==i.iridescenceThicknessTexture&&s.push(t.assignTexture(e,"iridescenceThicknessMap",i.iridescenceThicknessTexture)),Promise.all(s)}}class y{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const r=this.parser,s=r.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const i=[];t.sheenColor=new A.Color(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=s.extensions[this.name];if(void 0!==o.sheenColorFactor){const e=o.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],A.LinearSRGBColorSpace)}return void 0!==o.sheenRoughnessFactor&&(t.sheenRoughness=o.sheenRoughnessFactor),void 0!==o.sheenColorTexture&&i.push(r.assignTexture(t,"sheenColorMap",o.sheenColorTexture,A.SRGBColorSpace)),void 0!==o.sheenRoughnessTexture&&i.push(r.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(i)}}class w{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,r=t.json.materials[A];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const s=[],i=r.extensions[this.name];return void 0!==i.transmissionFactor&&(e.transmission=i.transmissionFactor),void 0!==i.transmissionTexture&&s.push(t.assignTexture(e,"transmissionMap",i.transmissionTexture)),Promise.all(s)}}class D{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const r=this.parser,s=r.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const i=[],o=s.extensions[this.name];t.thickness=void 0!==o.thicknessFactor?o.thicknessFactor:0,void 0!==o.thicknessTexture&&i.push(r.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const n=o.attenuationColor||[1,1,1];return t.attenuationColor=(new A.Color).setRGB(n[0],n[1],n[2],A.LinearSRGBColorSpace),Promise.all(i)}}class x{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser.json.materials[A];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const r=t.extensions[this.name];return e.ior=void 0!==r.ior?r.ior:1.5,Promise.resolve()}}class R{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const r=this.parser,s=r.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const i=[],o=s.extensions[this.name];t.specularIntensity=void 0!==o.specularFactor?o.specularFactor:1,void 0!==o.specularTexture&&i.push(r.assignTexture(t,"specularIntensityMap",o.specularTexture));const n=o.specularColorFactor||[1,1,1];return t.specularColor=(new A.Color).setRGB(n[0],n[1],n[2],A.LinearSRGBColorSpace),void 0!==o.specularColorTexture&&i.push(r.assignTexture(t,"specularColorMap",o.specularColorTexture,A.SRGBColorSpace)),Promise.all(i)}}class S{constructor(A){this.parser=A,this.name=E.EXT_MATERIALS_BUMP}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,r=t.json.materials[A];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const s=[],i=r.extensions[this.name];return e.bumpScale=void 0!==i.bumpFactor?i.bumpFactor:1,void 0!==i.bumpTexture&&s.push(t.assignTexture(e,"bumpMap",i.bumpTexture)),Promise.all(s)}}class T{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,r=t.json.materials[A];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const s=[],i=r.extensions[this.name];return void 0!==i.anisotropyStrength&&(e.anisotropy=i.anisotropyStrength),void 0!==i.anisotropyRotation&&(e.anisotropyRotation=i.anisotropyRotation),void 0!==i.anisotropyTexture&&s.push(t.assignTexture(e,"anisotropyMap",i.anisotropyTexture)),Promise.all(s)}}class L{constructor(A){this.parser=A,this.name=E.KHR_TEXTURE_BASISU}loadTexture(A){const e=this.parser,t=e.json,r=t.textures[A];if(!r.extensions||!r.extensions[this.name])return null;const s=r.extensions[this.name],i=e.options.ktx2Loader;if(!i){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return e.loadTextureImage(A,s.source,i)}}class M{constructor(A){this.parser=A,this.name=E.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(A){const e=this.name,t=this.parser,r=t.json,s=r.textures[A];if(!s.extensions||!s.extensions[e])return null;const i=s.extensions[e],o=r.images[i.source];let n=t.textureLoader;if(o.uri){const A=t.options.manager.getHandler(o.uri);null!==A&&(n=A)}return this.detectSupport().then((function(s){if(s)return t.loadTextureImage(A,i.source,n);if(r.extensionsRequired&&r.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return t.loadTexture(A)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(A){const e=new Image;e.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.onload=e.onerror=function(){A(1===e.height)}}))),this.isSupported}}class b{constructor(A){this.parser=A,this.name=E.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(A){const e=this.name,t=this.parser,r=t.json,s=r.textures[A];if(!s.extensions||!s.extensions[e])return null;const i=s.extensions[e],o=r.images[i.source];let n=t.textureLoader;if(o.uri){const A=t.options.manager.getHandler(o.uri);null!==A&&(n=A)}return this.detectSupport().then((function(s){if(s)return t.loadTextureImage(A,i.source,n);if(r.extensionsRequired&&r.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return t.loadTexture(A)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(A){const e=new Image;e.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",e.onload=e.onerror=function(){A(1===e.height)}}))),this.isSupported}}class F{constructor(A){this.name=E.EXT_MESHOPT_COMPRESSION,this.parser=A}loadBufferView(A){const e=this.parser.json,t=e.bufferViews[A];if(t.extensions&&t.extensions[this.name]){const A=t.extensions[this.name],r=this.parser.getDependency("buffer",A.buffer),s=this.parser.options.meshoptDecoder;if(!s||!s.supported){if(e.extensionsRequired&&e.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return r.then((function(e){const t=A.byteOffset||0,r=A.byteLength||0,i=A.count,o=A.byteStride,n=new Uint8Array(e,t,r);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(i,o,n,A.mode,A.filter).then((function(A){return A.buffer})):s.ready.then((function(){const e=new ArrayBuffer(i*o);return s.decodeGltfBuffer(new Uint8Array(e),i,o,n,A.mode,A.filter),e}))}))}return null}}class G{constructor(A){this.name=E.EXT_MESH_GPU_INSTANCING,this.parser=A}createNodeMesh(e){const t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||void 0===r.mesh)return null;const s=t.meshes[r.mesh];for(const A of s.primitives)if(A.mode!==V.TRIANGLES&&A.mode!==V.TRIANGLE_STRIP&&A.mode!==V.TRIANGLE_FAN&&void 0!==A.mode)return null;const i=r.extensions[this.name].attributes,o=[],n={};for(const A in i)o.push(this.parser.getDependency("accessor",i[A]).then((e=>(n[A]=e,n[A]))));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then((e=>{const t=e.pop(),r=t.isGroup?t.children:[t],s=e[0].count,i=[];for(const e of r){const t=new A.Matrix4,r=new A.Vector3,o=new A.Quaternion,a=new A.Vector3(1,1,1),g=new A.InstancedMesh(e.geometry,e.material,s);for(let A=0;A<s;A++)n.TRANSLATION&&r.fromBufferAttribute(n.TRANSLATION,A),n.ROTATION&&o.fromBufferAttribute(n.ROTATION,A),n.SCALE&&a.fromBufferAttribute(n.SCALE,A),g.setMatrixAt(A,t.compose(r,o,a));for(const t in n)if("_COLOR_0"===t){const e=n[t];g.instanceColor=new A.InstancedBufferAttribute(e.array,e.itemSize,e.normalized)}else"TRANSLATION"!==t&&"ROTATION"!==t&&"SCALE"!==t&&e.geometry.setAttribute(t,n[t]);A.Object3D.prototype.copy.call(g,e),this.parser.assignFinalMaterial(g),i.push(g)}return t.isGroup?(t.clear(),t.add(...i),t):i[0]})))}}const _="glTF",k=1313821514,U=5130562;class N{constructor(A){this.name=E.KHR_BINARY_GLTF,this.content=null,this.body=null;const e=new DataView(A,0,12),t=new TextDecoder;if(this.header={magic:t.decode(new Uint8Array(A.slice(0,4))),version:e.getUint32(4,!0),length:e.getUint32(8,!0)},this.header.magic!==_)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const r=this.header.length-12,s=new DataView(A,12);let i=0;for(;i<r;){const e=s.getUint32(i,!0);i+=4;const r=s.getUint32(i,!0);if(i+=4,r===k){const r=new Uint8Array(A,12+i,e);this.content=t.decode(r)}else if(r===U){const t=12+i;this.body=A.slice(t,t+e)}i+=e}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class v{constructor(A,e){if(!e)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=E.KHR_DRACO_MESH_COMPRESSION,this.json=A,this.dracoLoader=e,this.dracoLoader.preload()}decodePrimitive(e,t){const r=this.json,s=this.dracoLoader,i=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,n={},a={},g={};for(const A in o){const e=X[A]||A.toLowerCase();n[e]=o[A]}for(const A in e.attributes){const t=X[A]||A.toLowerCase();if(void 0!==o[A]){const s=r.accessors[e.attributes[A]],i=K[s.componentType];g[t]=i.name,a[t]=!0===s.normalized}}return t.getDependency("bufferView",i).then((function(e){return new Promise((function(t,r){s.decodeDracoFile(e,(function(A){for(const e in A.attributes){const t=A.attributes[e],r=a[e];void 0!==r&&(t.normalized=r)}t(A)}),n,g,A.LinearSRGBColorSpace,r)}))}))}}class H{constructor(){this.name=E.KHR_TEXTURE_TRANSFORM}extendTexture(A,e){return void 0!==e.texCoord&&e.texCoord!==A.channel||void 0!==e.offset||void 0!==e.rotation||void 0!==e.scale?(A=A.clone(),void 0!==e.texCoord&&(A.channel=e.texCoord),void 0!==e.offset&&A.offset.fromArray(e.offset),void 0!==e.rotation&&(A.rotation=e.rotation),void 0!==e.scale&&A.repeat.fromArray(e.scale),A.needsUpdate=!0,A):A}}class q{constructor(){this.name=E.KHR_MESH_QUANTIZATION}}class P extends A.Interpolant{constructor(A,e,t,r){super(A,e,t,r)}copySampleValue_(A){const e=this.resultBuffer,t=this.sampleValues,r=this.valueSize,s=A*r*3+r;for(let A=0;A!==r;A++)e[A]=t[s+A];return e}interpolate_(A,e,t,r){const s=this.resultBuffer,i=this.sampleValues,o=this.valueSize,n=2*o,a=3*o,g=r-e,l=(t-e)/g,c=l*l,h=c*l,I=A*a,C=I-a,B=-2*h+3*c,d=h-c,E=1-B,u=d-c+l;for(let A=0;A!==o;A++){const e=i[C+A+o],t=i[C+A+n]*g,r=i[I+A+o],a=i[I+A]*g;s[A]=E*e+u*t+B*r+d*a}return s}}const O=new A.Quaternion;class J extends P{interpolate_(A,e,t,r){const s=super.interpolate_(A,e,t,r);return O.fromArray(s).normalize().toArray(s),s}}const V={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},K={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},j={9728:A.NearestFilter,9729:A.LinearFilter,9984:A.NearestMipmapNearestFilter,9985:A.LinearMipmapNearestFilter,9986:A.NearestMipmapLinearFilter,9987:A.LinearMipmapLinearFilter},Y={33071:A.ClampToEdgeWrapping,33648:A.MirroredRepeatWrapping,10497:A.RepeatWrapping},W={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},X={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},Z={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},$={CUBICSPLINE:void 0,LINEAR:A.InterpolateLinear,STEP:A.InterpolateDiscrete},AA="OPAQUE",eA="MASK",tA="BLEND";function rA(A,e,t){for(const r in t.extensions)void 0===A[r]&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[r]=t.extensions[r])}function sA(A,e){void 0!==e.extras&&("object"==typeof e.extras?Object.assign(A.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function iA(A,e){if(A.updateMorphTargets(),void 0!==e.weights)for(let t=0,r=e.weights.length;t<r;t++)A.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(A.morphTargetInfluences.length===t.length){A.morphTargetDictionary={};for(let e=0,r=t.length;e<r;e++)A.morphTargetDictionary[t[e]]=e}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function oA(A){let e;const t=A.extensions&&A.extensions[E.KHR_DRACO_MESH_COMPRESSION];if(e=t?"draco:"+t.bufferView+":"+t.indices+":"+nA(t.attributes):A.indices+":"+nA(A.attributes)+":"+A.mode,void 0!==A.targets)for(let t=0,r=A.targets.length;t<r;t++)e+=":"+nA(A.targets[t]);return e}function nA(A){let e="";const t=Object.keys(A).sort();for(let r=0,s=t.length;r<s;r++)e+=t[r]+":"+A[t[r]]+";";return e}function aA(A){switch(A){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const gA=new A.Matrix4;class lA{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new d,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let r=!1,s=!1,i=-1;"undefined"!=typeof navigator&&(r=!0===/^((?!chrome|android).)*safari/i.test(navigator.userAgent),s=navigator.userAgent.indexOf("Firefox")>-1,i=s?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),"undefined"==typeof createImageBitmap||r||s&&i<98?this.textureLoader=new A.TextureLoader(this.options.manager):this.textureLoader=new A.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new A.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(A){this.extensions=A}setPlugins(A){this.plugins=A}parse(A,e){const t=this,r=this.json,s=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(A){return A._markDefs&&A._markDefs()})),Promise.all(this._invokeAll((function(A){return A.beforeRoot&&A.beforeRoot()}))).then((function(){return Promise.all([t.getDependencies("scene"),t.getDependencies("animation"),t.getDependencies("camera")])})).then((function(e){const i={scene:e[0][r.scene||0],scenes:e[0],animations:e[1],cameras:e[2],asset:r.asset,parser:t,userData:{}};return rA(s,i,r),sA(i,r),Promise.all(t._invokeAll((function(A){return A.afterRoot&&A.afterRoot(i)}))).then((function(){A(i)}))})).catch(e)}_markDefs(){const A=this.json.nodes||[],e=this.json.skins||[],t=this.json.meshes||[];for(let t=0,r=e.length;t<r;t++){const r=e[t].joints;for(let e=0,t=r.length;e<t;e++)A[r[e]].isBone=!0}for(let e=0,r=A.length;e<r;e++){const r=A[e];void 0!==r.mesh&&(this._addNodeRef(this.meshCache,r.mesh),void 0!==r.skin&&(t[r.mesh].isSkinnedMesh=!0)),void 0!==r.camera&&this._addNodeRef(this.cameraCache,r.camera)}}_addNodeRef(A,e){void 0!==e&&(void 0===A.refs[e]&&(A.refs[e]=A.uses[e]=0),A.refs[e]++)}_getNodeRef(A,e,t){if(A.refs[e]<=1)return t;const r=t.clone(),s=(A,e)=>{const t=this.associations.get(A);null!=t&&this.associations.set(e,t);for(const[t,r]of A.children.entries())s(r,e.children[t])};return s(t,r),r.name+="_instance_"+A.uses[e]++,r}_invokeOne(A){const e=Object.values(this.plugins);e.push(this);for(let t=0;t<e.length;t++){const r=A(e[t]);if(r)return r}return null}_invokeAll(A){const e=Object.values(this.plugins);e.unshift(this);const t=[];for(let r=0;r<e.length;r++){const s=A(e[r]);s&&t.push(s)}return t}getDependency(A,e){const t=A+":"+e;let r=this.cache.get(t);if(!r){switch(A){case"scene":r=this.loadScene(e);break;case"node":r=this._invokeOne((function(A){return A.loadNode&&A.loadNode(e)}));break;case"mesh":r=this._invokeOne((function(A){return A.loadMesh&&A.loadMesh(e)}));break;case"accessor":r=this.loadAccessor(e);break;case"bufferView":r=this._invokeOne((function(A){return A.loadBufferView&&A.loadBufferView(e)}));break;case"buffer":r=this.loadBuffer(e);break;case"material":r=this._invokeOne((function(A){return A.loadMaterial&&A.loadMaterial(e)}));break;case"texture":r=this._invokeOne((function(A){return A.loadTexture&&A.loadTexture(e)}));break;case"skin":r=this.loadSkin(e);break;case"animation":r=this._invokeOne((function(A){return A.loadAnimation&&A.loadAnimation(e)}));break;case"camera":r=this.loadCamera(e);break;default:if(r=this._invokeOne((function(t){return t!=this&&t.getDependency&&t.getDependency(A,e)})),!r)throw new Error("Unknown type: "+A)}this.cache.add(t,r)}return r}getDependencies(A){let e=this.cache.get(A);if(!e){const t=this,r=this.json[A+("mesh"===A?"es":"s")]||[];e=Promise.all(r.map((function(e,r){return t.getDependency(A,r)}))),this.cache.add(A,e)}return e}loadBuffer(e){const t=this.json.buffers[e],r=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[E.KHR_BINARY_GLTF].body);const s=this.options;return new Promise((function(e,i){r.load(A.LoaderUtils.resolveURL(t.uri,s.path),e,void 0,(function(){i(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(A){const e=this.json.bufferViews[A];return this.getDependency("buffer",e.buffer).then((function(A){const t=e.byteLength||0,r=e.byteOffset||0;return A.slice(r,r+t)}))}loadAccessor(e){const t=this,r=this.json,s=this.json.accessors[e];if(void 0===s.bufferView&&void 0===s.sparse){const e=W[s.type],t=K[s.componentType],r=!0===s.normalized,i=new t(s.count*e);return Promise.resolve(new A.BufferAttribute(i,e,r))}const i=[];return void 0!==s.bufferView?i.push(this.getDependency("bufferView",s.bufferView)):i.push(null),void 0!==s.sparse&&(i.push(this.getDependency("bufferView",s.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",s.sparse.values.bufferView))),Promise.all(i).then((function(e){const i=e[0],o=W[s.type],n=K[s.componentType],a=n.BYTES_PER_ELEMENT,g=a*o,l=s.byteOffset||0,c=void 0!==s.bufferView?r.bufferViews[s.bufferView].byteStride:void 0,h=!0===s.normalized;let I,C;if(c&&c!==g){const e=Math.floor(l/c),r="InterleavedBuffer:"+s.bufferView+":"+s.componentType+":"+e+":"+s.count;let g=t.cache.get(r);g||(I=new n(i,e*c,s.count*c/a),g=new A.InterleavedBuffer(I,c/a),t.cache.add(r,g)),C=new A.InterleavedBufferAttribute(g,o,l%c/a,h)}else I=null===i?new n(s.count*o):new n(i,l,s.count*o),C=new A.BufferAttribute(I,o,h);if(void 0!==s.sparse){const t=W.SCALAR,r=K[s.sparse.indices.componentType],a=s.sparse.indices.byteOffset||0,g=s.sparse.values.byteOffset||0,l=new r(e[1],a,s.sparse.count*t),c=new n(e[2],g,s.sparse.count*o);null!==i&&(C=new A.BufferAttribute(C.array.slice(),C.itemSize,C.normalized));for(let A=0,e=l.length;A<e;A++){const e=l[A];if(C.setX(e,c[A*o]),o>=2&&C.setY(e,c[A*o+1]),o>=3&&C.setZ(e,c[A*o+2]),o>=4&&C.setW(e,c[A*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return C}))}loadTexture(A){const e=this.json,t=this.options,r=e.textures[A].source,s=e.images[r];let i=this.textureLoader;if(s.uri){const A=t.manager.getHandler(s.uri);null!==A&&(i=A)}return this.loadTextureImage(A,r,i)}loadTextureImage(e,t,r){const s=this,i=this.json,o=i.textures[e],n=i.images[t],a=(n.uri||n.bufferView)+":"+o.sampler;if(this.textureCache[a])return this.textureCache[a];const g=this.loadImageSource(t,r).then((function(t){t.flipY=!1,t.name=o.name||n.name||"",""===t.name&&"string"==typeof n.uri&&!1===n.uri.startsWith("data:image/")&&(t.name=n.uri);const r=(i.samplers||{})[o.sampler]||{};return t.magFilter=j[r.magFilter]||A.LinearFilter,t.minFilter=j[r.minFilter]||A.LinearMipmapLinearFilter,t.wrapS=Y[r.wrapS]||A.RepeatWrapping,t.wrapT=Y[r.wrapT]||A.RepeatWrapping,s.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[a]=g,g}loadImageSource(e,t){const r=this,s=this.json,i=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((A=>A.clone()));const o=s.images[e],n=self.URL||self.webkitURL;let a=o.uri||"",g=!1;if(void 0!==o.bufferView)a=r.getDependency("bufferView",o.bufferView).then((function(A){g=!0;const e=new Blob([A],{type:o.mimeType});return a=n.createObjectURL(e),a}));else if(void 0===o.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(a).then((function(e){return new Promise((function(r,s){let o=r;!0===t.isImageBitmapLoader&&(o=function(e){const t=new A.Texture(e);t.needsUpdate=!0,r(t)}),t.load(A.LoaderUtils.resolveURL(e,i.path),o,void 0,s)}))})).then((function(A){var e;return!0===g&&n.revokeObjectURL(a),A.userData.mimeType=o.mimeType||((e=o.uri).search(/\.jpe?g($|\?)/i)>0||0===e.search(/^data\:image\/jpeg/)?"image/jpeg":e.search(/\.webp($|\?)/i)>0||0===e.search(/^data\:image\/webp/)?"image/webp":"image/png"),A})).catch((function(A){throw console.error("THREE.GLTFLoader: Couldn't load texture",a),A}));return this.sourceCache[e]=l,l}assignTexture(A,e,t,r){const s=this;return this.getDependency("texture",t.index).then((function(i){if(!i)return null;if(void 0!==t.texCoord&&t.texCoord>0&&((i=i.clone()).channel=t.texCoord),s.extensions[E.KHR_TEXTURE_TRANSFORM]){const A=void 0!==t.extensions?t.extensions[E.KHR_TEXTURE_TRANSFORM]:void 0;if(A){const e=s.associations.get(i);i=s.extensions[E.KHR_TEXTURE_TRANSFORM].extendTexture(i,A),s.associations.set(i,e)}}return void 0!==r&&(i.colorSpace=r),A[e]=i,i}))}assignFinalMaterial(e){const t=e.geometry;let r=e.material;const s=void 0===t.attributes.tangent,i=void 0!==t.attributes.color,o=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+r.uuid;let t=this.cache.get(e);t||(t=new A.PointsMaterial,A.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,t.sizeAttenuation=!1,this.cache.add(e,t)),r=t}else if(e.isLine){const e="LineBasicMaterial:"+r.uuid;let t=this.cache.get(e);t||(t=new A.LineBasicMaterial,A.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,this.cache.add(e,t)),r=t}if(s||i||o){let A="ClonedMaterial:"+r.uuid+":";s&&(A+="derivative-tangents:"),i&&(A+="vertex-colors:"),o&&(A+="flat-shading:");let e=this.cache.get(A);e||(e=r.clone(),i&&(e.vertexColors=!0),o&&(e.flatShading=!0),s&&(e.normalScale&&(e.normalScale.y*=-1),e.clearcoatNormalScale&&(e.clearcoatNormalScale.y*=-1)),this.cache.add(A,e),this.associations.set(e,this.associations.get(r))),r=e}e.material=r}getMaterialType(){return A.MeshStandardMaterial}loadMaterial(e){const t=this,r=this.json,s=this.extensions,i=r.materials[e];let o;const n={},a=[];if((i.extensions||{})[E.KHR_MATERIALS_UNLIT]){const A=s[E.KHR_MATERIALS_UNLIT];o=A.getMaterialType(),a.push(A.extendParams(n,i,t))}else{const r=i.pbrMetallicRoughness||{};if(n.color=new A.Color(1,1,1),n.opacity=1,Array.isArray(r.baseColorFactor)){const e=r.baseColorFactor;n.color.setRGB(e[0],e[1],e[2],A.LinearSRGBColorSpace),n.opacity=e[3]}void 0!==r.baseColorTexture&&a.push(t.assignTexture(n,"map",r.baseColorTexture,A.SRGBColorSpace)),n.metalness=void 0!==r.metallicFactor?r.metallicFactor:1,n.roughness=void 0!==r.roughnessFactor?r.roughnessFactor:1,void 0!==r.metallicRoughnessTexture&&(a.push(t.assignTexture(n,"metalnessMap",r.metallicRoughnessTexture)),a.push(t.assignTexture(n,"roughnessMap",r.metallicRoughnessTexture))),o=this._invokeOne((function(A){return A.getMaterialType&&A.getMaterialType(e)})),a.push(Promise.all(this._invokeAll((function(A){return A.extendMaterialParams&&A.extendMaterialParams(e,n)}))))}!0===i.doubleSided&&(n.side=A.DoubleSide);const g=i.alphaMode||AA;if(g===tA?(n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,g===eA&&(n.alphaTest=void 0!==i.alphaCutoff?i.alphaCutoff:.5)),void 0!==i.normalTexture&&o!==A.MeshBasicMaterial&&(a.push(t.assignTexture(n,"normalMap",i.normalTexture)),n.normalScale=new A.Vector2(1,1),void 0!==i.normalTexture.scale)){const A=i.normalTexture.scale;n.normalScale.set(A,A)}if(void 0!==i.occlusionTexture&&o!==A.MeshBasicMaterial&&(a.push(t.assignTexture(n,"aoMap",i.occlusionTexture)),void 0!==i.occlusionTexture.strength&&(n.aoMapIntensity=i.occlusionTexture.strength)),void 0!==i.emissiveFactor&&o!==A.MeshBasicMaterial){const e=i.emissiveFactor;n.emissive=(new A.Color).setRGB(e[0],e[1],e[2],A.LinearSRGBColorSpace)}return void 0!==i.emissiveTexture&&o!==A.MeshBasicMaterial&&a.push(t.assignTexture(n,"emissiveMap",i.emissiveTexture,A.SRGBColorSpace)),Promise.all(a).then((function(){const A=new o(n);return i.name&&(A.name=i.name),sA(A,i),t.associations.set(A,{materials:e}),i.extensions&&rA(s,A,i),A}))}createUniqueName(e){const t=A.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,r=this.extensions,s=this.primitiveCache;function i(A){return r[E.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(A,t).then((function(e){return cA(e,A,t)}))}const o=[];for(let r=0,n=e.length;r<n;r++){const n=e[r],a=oA(n),g=s[a];if(g)o.push(g.promise);else{let e;e=n.extensions&&n.extensions[E.KHR_DRACO_MESH_COMPRESSION]?i(n):cA(new A.BufferGeometry,n,t),s[a]={primitive:n,promise:e},o.push(e)}}return Promise.all(o)}loadMesh(e){const t=this,r=this.json,s=this.extensions,i=r.meshes[e],o=i.primitives,n=[];for(let e=0,t=o.length;e<t;e++){const t=void 0===o[e].material?(void 0===(a=this.cache).DefaultMaterial&&(a.DefaultMaterial=new A.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:A.FrontSide})),a.DefaultMaterial):this.getDependency("material",o[e].material);n.push(t)}var a;return n.push(t.loadGeometries(o)),Promise.all(n).then((function(r){const n=r.slice(0,r.length-1),a=r[r.length-1],g=[];for(let r=0,l=a.length;r<l;r++){const l=a[r],h=o[r];let I;const C=n[r];if(h.mode===V.TRIANGLES||h.mode===V.TRIANGLE_STRIP||h.mode===V.TRIANGLE_FAN||void 0===h.mode)I=!0===i.isSkinnedMesh?new A.SkinnedMesh(l,C):new A.Mesh(l,C),!0===I.isSkinnedMesh&&I.normalizeSkinWeights(),h.mode===V.TRIANGLE_STRIP?I.geometry=c(I.geometry,A.TriangleStripDrawMode):h.mode===V.TRIANGLE_FAN&&(I.geometry=c(I.geometry,A.TriangleFanDrawMode));else if(h.mode===V.LINES)I=new A.LineSegments(l,C);else if(h.mode===V.LINE_STRIP)I=new A.Line(l,C);else if(h.mode===V.LINE_LOOP)I=new A.LineLoop(l,C);else{if(h.mode!==V.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+h.mode);I=new A.Points(l,C)}Object.keys(I.geometry.morphAttributes).length>0&&iA(I,i),I.name=t.createUniqueName(i.name||"mesh_"+e),sA(I,i),h.extensions&&rA(s,I,h),t.assignFinalMaterial(I),g.push(I)}for(let A=0,r=g.length;A<r;A++)t.associations.set(g[A],{meshes:e,primitives:A});if(1===g.length)return i.extensions&&rA(s,g[0],i),g[0];const l=new A.Group;i.extensions&&rA(s,l,i),t.associations.set(l,{meshes:e});for(let A=0,e=g.length;A<e;A++)l.add(g[A]);return l}))}loadCamera(e){let t;const r=this.json.cameras[e],s=r[r.type];if(s)return"perspective"===r.type?t=new A.PerspectiveCamera(A.MathUtils.radToDeg(s.yfov),s.aspectRatio||1,s.znear||1,s.zfar||2e6):"orthographic"===r.type&&(t=new A.OrthographicCamera(-s.xmag,s.xmag,s.ymag,-s.ymag,s.znear,s.zfar)),r.name&&(t.name=this.createUniqueName(r.name)),sA(t,r),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],r=[];for(let A=0,e=t.joints.length;A<e;A++)r.push(this._loadNodeShallow(t.joints[A]));return void 0!==t.inverseBindMatrices?r.push(this.getDependency("accessor",t.inverseBindMatrices)):r.push(null),Promise.all(r).then((function(e){const r=e.pop(),s=e,i=[],o=[];for(let e=0,n=s.length;e<n;e++){const n=s[e];if(n){i.push(n);const t=new A.Matrix4;null!==r&&t.fromArray(r.array,16*e),o.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new A.Skeleton(i,o)}))}loadAnimation(e){const t=this.json,r=this,s=t.animations[e],i=s.name?s.name:"animation_"+e,o=[],n=[],a=[],g=[],l=[];for(let A=0,e=s.channels.length;A<e;A++){const e=s.channels[A],t=s.samplers[e.sampler],r=e.target,i=r.node,c=void 0!==s.parameters?s.parameters[t.input]:t.input,h=void 0!==s.parameters?s.parameters[t.output]:t.output;void 0!==r.node&&(o.push(this.getDependency("node",i)),n.push(this.getDependency("accessor",c)),a.push(this.getDependency("accessor",h)),g.push(t),l.push(r))}return Promise.all([Promise.all(o),Promise.all(n),Promise.all(a),Promise.all(g),Promise.all(l)]).then((function(e){const t=e[0],s=e[1],o=e[2],n=e[3],a=e[4],g=[];for(let A=0,e=t.length;A<e;A++){const e=t[A],i=s[A],l=o[A],c=n[A],h=a[A];if(void 0===e)continue;e.updateMatrix&&e.updateMatrix();const I=r._createAnimationTracks(e,i,l,c,h);if(I)for(let A=0;A<I.length;A++)g.push(I[A])}return new A.AnimationClip(i,void 0,g)}))}createNodeMesh(A){const e=this.json,t=this,r=e.nodes[A];return void 0===r.mesh?null:t.getDependency("mesh",r.mesh).then((function(A){const e=t._getNodeRef(t.meshCache,r.mesh,A);return void 0!==r.weights&&e.traverse((function(A){if(A.isMesh)for(let e=0,t=r.weights.length;e<t;e++)A.morphTargetInfluences[e]=r.weights[e]})),e}))}loadNode(A){const e=this,t=this.json.nodes[A],r=e._loadNodeShallow(A),s=[],i=t.children||[];for(let A=0,t=i.length;A<t;A++)s.push(e.getDependency("node",i[A]));const o=void 0===t.skin?Promise.resolve(null):e.getDependency("skin",t.skin);return Promise.all([r,Promise.all(s),o]).then((function(A){const e=A[0],t=A[1],r=A[2];null!==r&&e.traverse((function(A){A.isSkinnedMesh&&A.bind(r,gA)}));for(let A=0,r=t.length;A<r;A++)e.add(t[A]);return e}))}_loadNodeShallow(e){const t=this.json,r=this.extensions,s=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const i=t.nodes[e],o=i.name?s.createUniqueName(i.name):"",n=[],a=s._invokeOne((function(A){return A.createNodeMesh&&A.createNodeMesh(e)}));return a&&n.push(a),void 0!==i.camera&&n.push(s.getDependency("camera",i.camera).then((function(A){return s._getNodeRef(s.cameraCache,i.camera,A)}))),s._invokeAll((function(A){return A.createNodeAttachment&&A.createNodeAttachment(e)})).forEach((function(A){n.push(A)})),this.nodeCache[e]=Promise.all(n).then((function(t){let n;if(n=!0===i.isBone?new A.Bone:t.length>1?new A.Group:1===t.length?t[0]:new A.Object3D,n!==t[0])for(let A=0,e=t.length;A<e;A++)n.add(t[A]);if(i.name&&(n.userData.name=i.name,n.name=o),sA(n,i),i.extensions&&rA(r,n,i),void 0!==i.matrix){const e=new A.Matrix4;e.fromArray(i.matrix),n.applyMatrix4(e)}else void 0!==i.translation&&n.position.fromArray(i.translation),void 0!==i.rotation&&n.quaternion.fromArray(i.rotation),void 0!==i.scale&&n.scale.fromArray(i.scale);return s.associations.has(n)||s.associations.set(n,{}),s.associations.get(n).nodes=e,n})),this.nodeCache[e]}loadScene(e){const t=this.extensions,r=this.json.scenes[e],s=this,i=new A.Group;r.name&&(i.name=s.createUniqueName(r.name)),sA(i,r),r.extensions&&rA(t,i,r);const o=r.nodes||[],n=[];for(let A=0,e=o.length;A<e;A++)n.push(s.getDependency("node",o[A]));return Promise.all(n).then((function(e){for(let A=0,t=e.length;A<t;A++)i.add(e[A]);return s.associations=(e=>{const t=new Map;for(const[e,r]of s.associations)(e instanceof A.Material||e instanceof A.Texture)&&t.set(e,r);return e.traverse((A=>{const e=s.associations.get(A);null!=e&&t.set(A,e)})),t})(i),i}))}_createAnimationTracks(e,t,r,s,i){const o=[],n=e.name?e.name:e.uuid,a=[];let g;switch(Z[i.path]===Z.weights?e.traverse((function(A){A.morphTargetInfluences&&a.push(A.name?A.name:A.uuid)})):a.push(n),Z[i.path]){case Z.weights:g=A.NumberKeyframeTrack;break;case Z.rotation:g=A.QuaternionKeyframeTrack;break;case Z.position:case Z.scale:g=A.VectorKeyframeTrack;break;default:if(1===r.itemSize)g=A.NumberKeyframeTrack;else g=A.VectorKeyframeTrack}const l=void 0!==s.interpolation?$[s.interpolation]:A.InterpolateLinear,c=this._getArrayFromAccessor(r);for(let A=0,e=a.length;A<e;A++){const e=new g(a[A]+"."+Z[i.path],t.array,c,l);"CUBICSPLINE"===s.interpolation&&this._createCubicSplineTrackInterpolant(e),o.push(e)}return o}_getArrayFromAccessor(A){let e=A.array;if(A.normalized){const A=aA(e.constructor),t=new Float32Array(e.length);for(let r=0,s=e.length;r<s;r++)t[r]=e[r]*A;e=t}return e}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(e){return new(this instanceof A.QuaternionKeyframeTrack?J:P)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function cA(e,t,r){const s=t.attributes,i=[];function o(A,t){return r.getDependency("accessor",A).then((function(A){e.setAttribute(t,A)}))}for(const A in s){const t=X[A]||A.toLowerCase();t in e.attributes||i.push(o(s[A],t))}if(void 0!==t.indices&&!e.index){const A=r.getDependency("accessor",t.indices).then((function(A){e.setIndex(A)}));i.push(A)}return A.ColorManagement.workingColorSpace!==A.LinearSRGBColorSpace&&"COLOR_0"in s&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${A.ColorManagement.workingColorSpace}" not supported.`),sA(e,t),function(e,t,r){const s=t.attributes,i=new A.Box3;if(void 0===s.POSITION)return;{const e=r.json.accessors[s.POSITION],t=e.min,o=e.max;if(void 0===t||void 0===o)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(i.set(new A.Vector3(t[0],t[1],t[2]),new A.Vector3(o[0],o[1],o[2])),e.normalized){const A=aA(K[e.componentType]);i.min.multiplyScalar(A),i.max.multiplyScalar(A)}}const o=t.targets;if(void 0!==o){const e=new A.Vector3,t=new A.Vector3;for(let A=0,s=o.length;A<s;A++){const s=o[A];if(void 0!==s.POSITION){const A=r.json.accessors[s.POSITION],i=A.min,o=A.max;if(void 0!==i&&void 0!==o){if(t.setX(Math.max(Math.abs(i[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(i[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(i[2]),Math.abs(o[2]))),A.normalized){const e=aA(K[A.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}i.expandByVector(e)}e.boundingBox=i;const n=new A.Sphere;i.getCenter(n.center),n.radius=i.min.distanceTo(i.max)/2,e.boundingSphere=n}(e,t,r),Promise.all(i).then((function(){return void 0!==t.targets?function(A,e,t){let r=!1,s=!1,i=!1;for(let A=0,t=e.length;A<t;A++){const t=e[A];if(void 0!==t.POSITION&&(r=!0),void 0!==t.NORMAL&&(s=!0),void 0!==t.COLOR_0&&(i=!0),r&&s&&i)break}if(!r&&!s&&!i)return Promise.resolve(A);const o=[],n=[],a=[];for(let g=0,l=e.length;g<l;g++){const l=e[g];if(r){const e=void 0!==l.POSITION?t.getDependency("accessor",l.POSITION):A.attributes.position;o.push(e)}if(s){const e=void 0!==l.NORMAL?t.getDependency("accessor",l.NORMAL):A.attributes.normal;n.push(e)}if(i){const e=void 0!==l.COLOR_0?t.getDependency("accessor",l.COLOR_0):A.attributes.color;a.push(e)}}return Promise.all([Promise.all(o),Promise.all(n),Promise.all(a)]).then((function(e){const t=e[0],o=e[1],n=e[2];return r&&(A.morphAttributes.position=t),s&&(A.morphAttributes.normal=o),i&&(A.morphAttributes.color=n),A.morphTargetsRelative=!0,A}))}(e,t.targets,r):e}))}const hA=new WeakMap;class IA extends A.Loader{constructor(A){super(A),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(A){return this.decoderPath=A,this}setDecoderConfig(A){return this.decoderConfig=A,this}setWorkerLimit(A){return this.workerLimit=A,this}load(e,t,r,s){const i=new A.FileLoader(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,(A=>{this.parse(A,t,s)}),r,s)}parse(e,t,r=(()=>{})){this.decodeDracoFile(e,t,null,null,A.SRGBColorSpace).catch(r)}decodeDracoFile(e,t,r,s,i=A.LinearSRGBColorSpace,o=(()=>{})){const n={attributeIDs:r||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!r,vertexColorSpace:i};return this.decodeGeometry(e,n).then(t).catch(o)}decodeGeometry(A,e){const t=JSON.stringify(e);if(hA.has(A)){const e=hA.get(A);if(e.key===t)return e.promise;if(0===A.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r;const s=this.workerNextTaskID++,i=A.byteLength,o=this._getWorker(s,i).then((t=>(r=t,new Promise(((t,i)=>{r._callbacks[s]={resolve:t,reject:i},r.postMessage({type:"decode",id:s,taskConfig:e,buffer:A},[A])}))))).then((A=>this._createGeometry(A.geometry)));return o.catch((()=>!0)).then((()=>{r&&s&&this._releaseTask(r,s)})),hA.set(A,{key:t,promise:o}),o}_createGeometry(e){const t=new A.BufferGeometry;e.index&&t.setIndex(new A.BufferAttribute(e.index.array,1));for(let r=0;r<e.attributes.length;r++){const s=e.attributes[r],i=s.name,o=s.array,n=s.itemSize,a=new A.BufferAttribute(o,n);"color"===i&&(this._assignVertexColorSpace(a,s.vertexColorSpace),a.normalized=o instanceof Float32Array==!1),t.setAttribute(i,a)}return t}_assignVertexColorSpace(e,t){if(t!==A.SRGBColorSpace)return;const r=new A.Color;for(let A=0,t=e.count;A<t;A++)r.fromBufferAttribute(e,A).convertSRGBToLinear(),e.setXYZ(A,r.r,r.g,r.b)}_loadLibrary(e,t){const r=new A.FileLoader(this.manager);return r.setPath(this.decoderPath),r.setResponseType(t),r.setWithCredentials(this.withCredentials),new Promise(((A,t)=>{r.load(e,A,void 0,t)}))}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const A="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,e=[];return A?e.push(this._loadLibrary("draco_decoder.js","text")):(e.push(this._loadLibrary("draco_wasm_wrapper.js","text")),e.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(e).then((e=>{const t=e[0];A||(this.decoderConfig.wasmBinary=e[1]);const r=CA.toString(),s=["/* draco decoder */",t,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([s]))})),this.decoderPending}_getWorker(A,e){return this._initDecoder().then((()=>{if(this.workerPool.length<this.workerLimit){const A=new Worker(this.workerSourceURL);A._callbacks={},A._taskCosts={},A._taskLoad=0,A.postMessage({type:"init",decoderConfig:this.decoderConfig}),A.onmessage=function(e){const t=e.data;switch(t.type){case"decode":A._callbacks[t.id].resolve(t);break;case"error":A._callbacks[t.id].reject(t);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+t.type+'"')}},this.workerPool.push(A)}else this.workerPool.sort((function(A,e){return A._taskLoad>e._taskLoad?-1:1}));const t=this.workerPool[this.workerPool.length-1];return t._taskCosts[A]=e,t._taskLoad+=e,t}))}_releaseTask(A,e){A._taskLoad-=A._taskCosts[e],delete A._callbacks[e],delete A._taskCosts[e]}debug(){console.log("Task load: ",this.workerPool.map((A=>A._taskLoad)))}dispose(){for(let A=0;A<this.workerPool.length;++A)this.workerPool[A].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function CA(){let A,e;function t(A,e,t,r,s,i){const o=i.num_components(),n=t.num_points()*o,a=n*s.BYTES_PER_ELEMENT,g=function(A,e){switch(e){case Float32Array:return A.DT_FLOAT32;case Int8Array:return A.DT_INT8;case Int16Array:return A.DT_INT16;case Int32Array:return A.DT_INT32;case Uint8Array:return A.DT_UINT8;case Uint16Array:return A.DT_UINT16;case Uint32Array:return A.DT_UINT32}}(A,s),l=A._malloc(a);e.GetAttributeDataArrayForAllPoints(t,i,g,a,l);const c=new s(A.HEAPF32.buffer,l,n).slice();return A._free(l),{name:r,array:c,itemSize:o}}onmessage=function(r){const s=r.data;switch(s.type){case"init":A=s.decoderConfig,e=new Promise((function(e){A.onModuleLoaded=function(A){e({draco:A})},DracoDecoderModule(A)}));break;case"decode":const r=s.buffer,i=s.taskConfig;e.then((A=>{const e=A.draco,o=new e.Decoder;try{const A=function(A,e,r,s){const i=s.attributeIDs,o=s.attributeTypes;let n,a;const g=e.GetEncodedGeometryType(r);if(g===A.TRIANGULAR_MESH)n=new A.Mesh,a=e.DecodeArrayToMesh(r,r.byteLength,n);else{if(g!==A.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");n=new A.PointCloud,a=e.DecodeArrayToPointCloud(r,r.byteLength,n)}if(!a.ok()||0===n.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+a.error_msg());const l={index:null,attributes:[]};for(const r in i){const a=self[o[r]];let g,c;if(s.useUniqueIDs)c=i[r],g=e.GetAttributeByUniqueId(n,c);else{if(c=e.GetAttributeId(n,A[i[r]]),-1===c)continue;g=e.GetAttribute(n,c)}const h=t(A,e,n,r,a,g);"color"===r&&(h.vertexColorSpace=s.vertexColorSpace),l.attributes.push(h)}g===A.TRIANGULAR_MESH&&(l.index=function(A,e,t){const r=t.num_faces(),s=3*r,i=4*s,o=A._malloc(i);e.GetTrianglesUInt32Array(t,i,o);const n=new Uint32Array(A.HEAPF32.buffer,o,s).slice();return A._free(o),{array:n,itemSize:1}}(A,e,n));return A.destroy(n),l}(e,o,new Int8Array(r),i),n=A.attributes.map((A=>A.array.buffer));A.index&&n.push(A.index.array.buffer),self.postMessage({type:"decode",id:s.id,geometry:A},n)}catch(A){console.error(A),self.postMessage({type:"error",id:s.id,error:A.message})}finally{e.destroy(o)}}))}}}class BA{constructor(A=4){this.pool=A,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(A){if(!this.workers[A]){const e=this.workerCreator();e.addEventListener("message",this._onMessage.bind(this,A)),this.workers[A]=e}}_getIdleWorker(){for(let A=0;A<this.pool;A++)if(!(this.workerStatus&1<<A))return A;return-1}_onMessage(A,e){const t=this.workersResolve[A];if(t&&t(e),this.queue.length){const{resolve:e,msg:t,transfer:r}=this.queue.shift();this.workersResolve[A]=e,this.workers[A].postMessage(t,r)}else this.workerStatus^=1<<A}setWorkerCreator(A){this.workerCreator=A}setWorkerLimit(A){this.pool=A}postMessage(A,e){return new Promise((t=>{const r=this._getIdleWorker();-1!==r?(this._initWorker(r),this.workerStatus|=1<<r,this.workersResolve[r]=t,this.workers[r].postMessage(A,e)):this.queue.push({resolve:t,msg:A,transfer:e})}))}dispose(){this.workers.forEach((A=>A.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const dA=2,EA=0,uA=1,QA=10;class pA{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class fA{constructor(A,e,t,r){this._dataView=new DataView(A.buffer,A.byteOffset+e,t),this._littleEndian=r,this._offset=0}_nextUint8(){const A=this._dataView.getUint8(this._offset);return this._offset+=1,A}_nextUint16(){const A=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,A}_nextUint32(){const A=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,A}_nextUint64(){const A=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,A}_nextInt32(){const A=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,A}_skip(A){return this._offset+=A,this}_scan(A,e=0){const t=this._offset;let r=0;for(;this._dataView.getUint8(this._offset)!==e&&r<A;)r++,this._offset++;return r<A&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+t,r)}}new Uint8Array([0]);const mA=[171,75,84,88,32,50,48,187,13,10,26,10];function yA(A){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(A):Buffer.from(A).toString("utf8")}let wA,DA,xA;const RA={env:{emscripten_notify_memory_growth:function(A){xA=new Uint8Array(DA.exports.memory.buffer)}}};class SA{init(){return wA||(wA="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+TA).then((A=>A.arrayBuffer())).then((A=>WebAssembly.instantiate(A,RA))).then(this._init):WebAssembly.instantiate(Buffer.from(TA,"base64"),RA).then(this._init),wA)}_init(A){DA=A.instance,RA.env.emscripten_notify_memory_growth(0)}decode(A,e=0){if(!DA)throw new Error("ZSTDDecoder: Await .init() before decoding.");const t=A.byteLength,r=DA.exports.malloc(t);xA.set(A,r),e=e||Number(DA.exports.ZSTD_findDecompressedSize(r,t));const s=DA.exports.malloc(e),i=DA.exports.ZSTD_decompress(s,e,r,t),o=xA.slice(s,s+i);return DA.exports.free(r),DA.exports.free(s),o}}const TA="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",LA=new WeakMap;let MA,bA=0;class FA extends A.Loader{constructor(A){super(A),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new BA,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(A){return this.transcoderPath=A,this}setWorkerLimit(A){return this.workerPool.setWorkerLimit(A),this}async detectSupportAsync(A){return this.workerConfig={astcSupported:await A.hasFeatureAsync("texture-compression-astc"),etc1Supported:await A.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await A.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await A.hasFeatureAsync("texture-compression-bc"),bptcSupported:await A.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await A.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(A){return!0===A.isWebGPURenderer?this.workerConfig={astcSupported:A.hasFeature("texture-compression-astc"),etc1Supported:A.hasFeature("texture-compression-etc1"),etc2Supported:A.hasFeature("texture-compression-etc2"),dxtSupported:A.hasFeature("texture-compression-bc"),bptcSupported:A.hasFeature("texture-compression-bptc"),pvrtcSupported:A.hasFeature("texture-compression-pvrtc")}:(this.workerConfig={astcSupported:A.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:A.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:A.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:A.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:A.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:A.extensions.has("WEBGL_compressed_texture_pvrtc")||A.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},A.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1)),this}init(){if(!this.transcoderPending){const e=new A.FileLoader(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),r=new A.FileLoader(this.manager);r.setPath(this.transcoderPath),r.setResponseType("arraybuffer"),r.setWithCredentials(this.withCredentials);const s=r.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,s]).then((([A,e])=>{const t=FA.BasisWorker.toString(),r=["/* constants */","let _EngineFormat = "+JSON.stringify(FA.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(FA.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(FA.BasisFormat),"/* basis_transcoder.js */",A,"/* worker */",t.substring(t.indexOf("{")+1,t.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([r])),this.transcoderBinary=e,this.workerPool.setWorkerCreator((()=>{const A=new Worker(this.workerSourceURL),e=this.transcoderBinary.slice(0);return A.postMessage({type:"init",config:this.workerConfig,transcoderBinary:e},[e]),A}))})),bA>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),bA++}return this.transcoderPending}load(e,t,r,s){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const i=new A.FileLoader(this.manager);i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials),i.load(e,(A=>{if(LA.has(A)){return LA.get(A).promise.then(t).catch(s)}this._createTexture(A).then((A=>t?t(A):null)).catch(s)}),r,s)}_createTextureFrom(e,t){const{faces:r,width:s,height:i,format:o,type:n,error:a,dfdFlags:g}=e;if("error"===n)return Promise.reject(a);let l;if(6===t.faceCount)l=new A.CompressedCubeTexture(r,o,A.UnsignedByteType);else{const e=r[0].mipmaps;l=t.layerCount>1?new A.CompressedArrayTexture(e,s,i,t.layerCount,o,A.UnsignedByteType):new A.CompressedTexture(e,s,i,o,A.UnsignedByteType)}return l.minFilter=1===r[0].mipmaps.length?A.LinearFilter:A.LinearMipmapLinearFilter,l.magFilter=A.LinearFilter,l.generateMipmaps=!1,l.needsUpdate=!0,l.colorSpace=UA(t),l.premultiplyAlpha=!!(1&g),l}async _createTexture(e,t={}){const r=function(A){const e=new Uint8Array(A.buffer,A.byteOffset,mA.length);if(e[0]!==mA[0]||e[1]!==mA[1]||e[2]!==mA[2]||e[3]!==mA[3]||e[4]!==mA[4]||e[5]!==mA[5]||e[6]!==mA[6]||e[7]!==mA[7]||e[8]!==mA[8]||e[9]!==mA[9]||e[10]!==mA[10]||e[11]!==mA[11])throw new Error("Missing KTX 2.0 identifier.");const t=new pA,r=17*Uint32Array.BYTES_PER_ELEMENT,s=new fA(A,mA.length,r,!0);t.vkFormat=s._nextUint32(),t.typeSize=s._nextUint32(),t.pixelWidth=s._nextUint32(),t.pixelHeight=s._nextUint32(),t.pixelDepth=s._nextUint32(),t.layerCount=s._nextUint32(),t.faceCount=s._nextUint32();const i=s._nextUint32();t.supercompressionScheme=s._nextUint32();const o=s._nextUint32(),n=s._nextUint32(),a=s._nextUint32(),g=s._nextUint32(),l=s._nextUint64(),c=s._nextUint64(),h=new fA(A,mA.length+r,3*i*8,!0);for(let e=0;e<i;e++)t.levels.push({levelData:new Uint8Array(A.buffer,A.byteOffset+h._nextUint64(),h._nextUint64()),uncompressedByteLength:h._nextUint64()});const I=new fA(A,o,n,!0),C={vendorId:I._skip(4)._nextUint16(),descriptorType:I._nextUint16(),versionNumber:I._nextUint16(),descriptorBlockSize:I._nextUint16(),colorModel:I._nextUint8(),colorPrimaries:I._nextUint8(),transferFunction:I._nextUint8(),flags:I._nextUint8(),texelBlockDimension:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],bytesPlane:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],samples:[]},B=(C.descriptorBlockSize/4-6)/4;for(let A=0;A<B;A++){const e={bitOffset:I._nextUint16(),bitLength:I._nextUint8(),channelType:I._nextUint8(),samplePosition:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&e.channelType?(e.sampleLower=I._nextInt32(),e.sampleUpper=I._nextInt32()):(e.sampleLower=I._nextUint32(),e.sampleUpper=I._nextUint32()),C.samples[A]=e}t.dataFormatDescriptor.length=0,t.dataFormatDescriptor.push(C);const d=new fA(A,a,g,!0);for(;d._offset<g;){const A=d._nextUint32(),e=d._scan(A),r=yA(e),s=d._scan(A-e.byteLength);t.keyValue[r]=r.match(/^ktx/i)?yA(s):s,d._offset%4&&d._skip(4-d._offset%4)}if(c<=0)return t;const E=new fA(A,l,c,!0),u=E._nextUint16(),Q=E._nextUint16(),p=E._nextUint32(),f=E._nextUint32(),m=E._nextUint32(),y=E._nextUint32(),w=[];for(let A=0;A<i;A++)w.push({imageFlags:E._nextUint32(),rgbSliceByteOffset:E._nextUint32(),rgbSliceByteLength:E._nextUint32(),alphaSliceByteOffset:E._nextUint32(),alphaSliceByteLength:E._nextUint32()});const D=l+E._offset,x=D+p,R=x+f,S=R+m,T=new Uint8Array(A.buffer,A.byteOffset+D,p),L=new Uint8Array(A.buffer,A.byteOffset+x,f),M=new Uint8Array(A.buffer,A.byteOffset+R,m),b=new Uint8Array(A.buffer,A.byteOffset+S,y);return t.globalData={endpointCount:u,selectorCount:Q,imageDescs:w,endpointsData:T,selectorsData:L,tablesData:M,extendedData:b},t}(new Uint8Array(e));if(0!==r.vkFormat)return async function(e){const{vkFormat:t}=e;if(void 0===_A[t])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let r;2===e.supercompressionScheme&&(MA||(MA=new Promise((async A=>{const e=new SA;await e.init(),A(e)}))),r=await MA);const s=[];for(let i=0;i<e.levels.length;i++){const o=Math.max(1,e.pixelWidth>>i),n=Math.max(1,e.pixelHeight>>i),a=e.pixelDepth?Math.max(1,e.pixelDepth>>i):0,g=e.levels[i];let l,c;if(0===e.supercompressionScheme)l=g.levelData;else{if(2!==e.supercompressionScheme)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");l=r.decode(g.levelData,g.uncompressedByteLength)}c=kA[t]===A.FloatType?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):kA[t]===A.HalfFloatType?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):l,s.push({data:c,width:o,height:n,depth:a})}let i;if(GA.has(_A[t]))i=0===e.pixelDepth?new A.DataTexture(s[0].data,e.pixelWidth,e.pixelHeight):new A.Data3DTexture(s[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth);else{if(e.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");i=new A.CompressedTexture(s,e.pixelWidth,e.pixelHeight)}return i.mipmaps=s,i.type=kA[t],i.format=_A[t],i.colorSpace=UA(e),i.needsUpdate=!0,Promise.resolve(i)}(r);const s=t,i=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:s},[e]))).then((A=>this._createTextureFrom(A.data,r)));return LA.set(e,{promise:i}),i}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),bA--,this}}FA.BasisFormat={ETC1S:0,UASTC_4x4:1},FA.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},FA.EngineFormat={RGBAFormat:A.RGBAFormat,RGBA_ASTC_4x4_Format:A.RGBA_ASTC_4x4_Format,RGBA_BPTC_Format:A.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:A.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:A.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:A.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:A.RGB_ETC1_Format,RGB_ETC2_Format:A.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:A.RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format:A.RGB_S3TC_DXT1_Format},FA.BasisWorker=function(){let A,e,t;const r=_EngineFormat,s=_TranscoderFormat,i=_BasisFormat;self.addEventListener("message",(function(o){const c=o.data;switch(c.type){case"init":A=c.config,h=c.transcoderBinary,e=new Promise((A=>{t={wasmBinary:h,onRuntimeInitialized:A},BASIS(t)})).then((()=>{t.initializeBasis(),void 0===t.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")}));break;case"transcode":e.then((()=>{try{const{faces:e,buffers:o,width:h,height:I,hasAlpha:C,format:B,dfdFlags:d}=function(e){const o=new t.KTX2File(new Uint8Array(e));function c(){o.close(),o.delete()}if(!o.isValid())throw c(),new Error("THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file");const h=o.isUASTC()?i.UASTC_4x4:i.ETC1S,I=o.getWidth(),C=o.getHeight(),B=o.getLayers()||1,d=o.getLevels(),E=o.getFaces(),u=o.getHasAlpha(),Q=o.getDFDFlags(),{transcoderFormat:p,engineFormat:f}=function(e,t,o,l){let c,h;const I=e===i.ETC1S?n:a;for(let r=0;r<I.length;r++){const s=I[r];if(A[s.if]&&(s.basisFormat.includes(e)&&!(l&&s.transcoderFormat.length<2)&&(!s.needsPowerOfTwo||g(t)&&g(o))))return c=s.transcoderFormat[l?1:0],h=s.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:h}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=s.RGBA32,h=r.RGBAFormat,{transcoderFormat:c,engineFormat:h}}(h,I,C,u);if(!I||!C||!d)throw c(),new Error("THREE.KTX2Loader:\tInvalid texture");if(!o.startTranscoding())throw c(),new Error("THREE.KTX2Loader: .startTranscoding failed");const m=[],y=[];for(let A=0;A<E;A++){const e=[];for(let t=0;t<d;t++){const r=[];let s,i;for(let e=0;e<B;e++){const n=o.getImageLevelInfo(t,e,A);0!==A||0!==t||0!==e||n.origWidth%4==0&&n.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),d>1?(s=n.origWidth,i=n.origHeight):(s=n.width,i=n.height);const a=new Uint8Array(o.getImageTranscodedSizeInBytes(t,e,0,p));if(!o.transcodeImage(a,t,e,A,p,0,-1,-1))throw c(),new Error("THREE.KTX2Loader: .transcodeImage failed.");r.push(a)}const n=l(r);e.push({data:n,width:s,height:i}),y.push(n.buffer)}m.push({mipmaps:e,width:I,height:C,format:f})}return c(),{faces:m,buffers:y,width:I,height:C,hasAlpha:u,format:f,dfdFlags:Q}}(c.buffer);self.postMessage({type:"transcode",id:c.id,faces:e,width:h,height:I,hasAlpha:C,format:B,dfdFlags:d},o)}catch(A){console.error(A),self.postMessage({type:"error",id:c.id,error:A.message})}}))}var h}));const o=[{if:"astcSupported",basisFormat:[i.UASTC_4x4],transcoderFormat:[s.ASTC_4x4,s.ASTC_4x4],engineFormat:[r.RGBA_ASTC_4x4_Format,r.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.BC7_M5,s.BC7_M5],engineFormat:[r.RGBA_BPTC_Format,r.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.BC1,s.BC3],engineFormat:[r.RGB_S3TC_DXT1_Format,r.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.ETC1,s.ETC2],engineFormat:[r.RGB_ETC2_Format,r.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.ETC1],engineFormat:[r.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.PVRTC1_4_RGB,s.PVRTC1_4_RGBA],engineFormat:[r.RGB_PVRTC_4BPPV1_Format,r.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],n=o.sort((function(A,e){return A.priorityETC1S-e.priorityETC1S})),a=o.sort((function(A,e){return A.priorityUASTC-e.priorityUASTC}));function g(A){return A<=2||0==(A&A-1)&&0!==A}function l(A){if(1===A.length)return A[0];let e=0;for(let t=0;t<A.length;t++){e+=A[t].byteLength}const t=new Uint8Array(e);let r=0;for(let e=0;e<A.length;e++){const s=A[e];t.set(s,r),r+=s.byteLength}return t}};const GA=new Set([A.RGBAFormat,A.RGFormat,A.RedFormat]),_A={109:A.RGBAFormat,97:A.RGBAFormat,37:A.RGBAFormat,43:A.RGBAFormat,103:A.RGFormat,83:A.RGFormat,16:A.RGFormat,22:A.RGFormat,100:A.RedFormat,76:A.RedFormat,15:A.RedFormat,9:A.RedFormat,166:A.RGBA_ASTC_6x6_Format,165:A.RGBA_ASTC_6x6_Format},kA={109:A.FloatType,97:A.HalfFloatType,37:A.UnsignedByteType,43:A.UnsignedByteType,103:A.FloatType,83:A.HalfFloatType,16:A.UnsignedByteType,22:A.UnsignedByteType,100:A.FloatType,76:A.HalfFloatType,15:A.UnsignedByteType,9:A.UnsignedByteType,166:A.UnsignedByteType,165:A.UnsignedByteType};function UA(e){const t=e.dataFormatDescriptor[0];return t.colorPrimaries===uA?t.transferFunction===dA?A.SRGBColorSpace:A.LinearSRGBColorSpace:t.colorPrimaries===QA?t.transferFunction===dA?A.DisplayP3ColorSpace:A.LinearDisplayP3ColorSpace:(t.colorPrimaries===EA||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),A.NoColorSpace)}async function NA(A){const e=A.split("?")[0].split(".").pop(),t=await fetch(A);if(!t.ok)throw new Error("Failed to fetch ".concat(A,": ").concat(t.statusText));if("json"===e){const e=await t.json();return handleJSONSubtree(e,vA(A))}if("subtree"===e){return async function(A,e){const t=new DataView(A),r=t.getBigUint64(8,!0),s=t.getBigUint64(16,!0),i=24,o=i+Number(r),n=o+(8-o%8)%8,a=n+Number(s),g=A.slice(i,o),l=(new TextDecoder).decode(g).trim(),c=JSON.parse(l);if(!c.buffers)throw new Error("subtree has no buffers");const h=c.buffers.map((async t=>{if(t.uri){const A=new URL(t.uri,e).href,r=await fetch(A);if(!r.ok)throw new Error("Failed to fetch binary file ".concat(A,": ").concat(r.statusText));return new Uint8Array(await r.arrayBuffer())}return new Uint8Array(A.slice(n,a))})),I=await Promise.all(h);return HA(c,I)}(await t.arrayBuffer(),vA(A))}throw new Error("Unsupported file extension: ".concat(e))}function vA(A){const e=A.split("?")[0];return e.substring(0,e.lastIndexOf("/")+1)}function HA(A,e){function t(t,r){if(!t)throw new Error("incomplete json subtree");if(t.constant){if(0==t.constant)return!1;if(1==t.constant)return!0}if(null==t.bitstream)throw new Error('json subtree "tileAvailability" does not specify a bitstream');if(!A.bufferViews||!A.bufferViews[t.bitstream])throw new Error('json subtree "bufferViews" does not specify a bitstream');const s=A.bufferViews[t.bitstream];return function(A,e,t){const r=e+Math.floor(t/8),s=t%8;return A[r]>>s&!0}(e[s.buffer],s.byteOffset,r)}return{isTileAvailable:function(e){let r=0;return r=null==e.z?PA(e.x,e.y,e.level):JA(e.x,e.y,e.z,e.level),t(A.tileAvailability,r)},isContentAvailable:function(e){let r=0;r=null==e.z?PA(e.x,e.y,e.level):JA(e.x,e.y,e.z,e.level);const s=[];return A.contentAvailability.forEach((A=>{s.push(t(A,r))})),s},isChildSubtreeAvailable:function(e){let r=0;return r=null==e.z?PA(e.x,e.y):JA(e.x,e.y,e.z),t(A.childSubtreeAvailability,r)}}}function qA(A){return A=1431655765&((A=858993459&((A=252645135&((A=16711935&((A&=65535)^A<<8))^A<<4))^A<<2))^A<<1)}function PA(A,e,t){let r=0;return t&&(r=(Math.pow(4,t)-1)/3),r+(qA(A)|qA(e)<<1)}function OA(A){return A=153391689&((A=51130563&((A=50393103&((A=4278190335&((A&=1023)^A<<16))^A<<8))^A<<4))^A<<2)}function JA(A,e,t,r){let s=0;return r&&(s=(Math.pow(8,r)-1)/7),s+(OA(A)|OA(e)<<1|OA(t)<<2)}const VA=new Map;async function KA(A,e){if(!A.root||!A.root.implicitTiling)return A;if(!A.root.content&&!A.root.contents)throw new Error("implicit tiling requires a Template URI");let t=!0;A.root.implicitTiling.subdivisionScheme&&(t="QUADTREE"===A.root.implicitTiling.subdivisionScheme.toUpperCase());let r="";A.root.implicitTiling.subtrees&&(A.root.implicitTiling.subtrees.uri?r=A.root.implicitTiling.subtrees.uri:A.root.implicitTiling.subtrees.url&&(r=A.root.implicitTiling.subtrees.url));let s=[];A.root.content?A.root.content.uri?s.push(A.root.content.uri):A.root.content.url&&s.push(A.root.content.url):A.root.contents&&A.root.contents.forEach((A=>{A.uri?s.push(A.uri):A.url&&s.push(A.url)}));const i=function(A){const e=A.split("?")[0];return e.substring(0,e.lastIndexOf("/")+1)}(e);let o;t&&(o=r.replace("{level}",0).replace("{x}",0).replace("{y}",0)),t||(o=r.replace("{level}",0).replace("{x}",0).replace("{y}",0).replace("{z}",0));const n={level:0,x:0,y:0},a={level:0,x:0,y:0};t||(n.z=0,a.z=0),VA.set(o,await NA(i+o));const g=VA.get(o),l=[];g.isContentAvailable(a)&&s.forEach((A=>{let e;t&&(e=A.replace("{level}",n.level).replace("{x}",n.x).replace("{y}",n.y)),t||(e=A.replace("{level}",n.level).replace("{x}",n.x).replace("{y}",n.y).replace("{z}",n.z)),l.push({uri:e})}));const c={geometricError:A.root.geometricError,boundingVolume:A.root.boundingVolume,refine:A.root.refine,globalAddress:n,localAddress:a,subtree:g,contents:l,getChildren:async()=>h(c)};return{root:c};async function h(e){const n=[];if(e.localAddress.level==A.root.implicitTiling.availableLevels-1)return n;if((e.localAddress.level+1)%A.root.implicitTiling.subtreeLevels==0){const a=jA(e.localAddress),g=jA(e.globalAddress),l=YA(t,A.root.boundingVolume,g);for(let c=0;c<a.length;c++){const I=a[c],C=g[c];if(e.subtree.isChildSubtreeAvailable(I)){let A;t&&(A=r.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y)),t||(A=r.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y).replace("{z}",C.z))}VA.has(o)||VA.set(o,await NA(i+o));const B=VA.get(o),d={level:0,x:0,y:0};t||(d.z=0);const E=[];B.isContentAvailable(d)&&s.forEach((A=>{let e;if(t&&(e=A.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y)),!t){Math.floor(z/factor);e=A.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y).replace("{z}",C.z)}E.push({uri:e})}));const u={geometricError:e.geometricError/2,boundingVolume:l[c],refine:A.root.refine,globalAddress:C,localAddress:d,subtree:B,contents:E,getChildren:async()=>h(u)};n.push(u)}}else{const r=jA(e.localAddress),i=jA(e.globalAddress),o=YA(t,A.root.boundingVolume,i);for(let a=0;a<r.length;a++){const g=r[a],l=i[a];if(!e.subtree.isTileAvailable(g))continue;const c=[],I=e.subtree.isContentAvailable(g);for(let A=0;A<s.length;A++){if(!I[A])continue;const e=s[A];let r;t&&(r=e.replace("{level}",l.level).replace("{x}",l.x).replace("{y}",l.y)),t||(r=e.replace("{level}",l.level).replace("{x}",l.x).replace("{y}",l.y).replace("{z}",l.z)),c.push({uri:r})}const C={geometricError:e.geometricError/2,boundingVolume:o[a],refine:A.root.refine,globalAddress:l,localAddress:g,subtree:e.subtree,contents:c,getChildren:async()=>h(C)};n.push(C)}}return n.length>0?n:void 0}}function jA(A){const{level:e,x:t,y:r,z:s}=A,i=e+1;let o=[];return o=void 0===s?[{level:i,x:2*t,y:2*r},{level:i,x:2*t+1,y:2*r},{level:i,x:2*t,y:2*r+1},{level:i,x:2*t+1,y:2*r+1}]:[{level:i,x:2*t,y:2*r,z:2*s},{level:i,x:2*t+1,y:2*r,z:2*s},{level:i,x:2*t,y:2*r+1,z:2*s},{level:i,x:2*t+1,y:2*r+1,z:2*s},{level:i,x:2*t,y:2*r,z:2*s+1},{level:i,x:2*t+1,y:2*r,z:2*s+1},{level:i,x:2*t,y:2*r+1,z:2*s+1},{level:i,x:2*t+1,y:2*r+1,z:2*s+1}],o}function YA(A,e,t){const r=[];for(let s=0;s<t.length;s++)r.push(WA(A,e,t[s]));return r}function WA(A,e,t){if(e.region)return function(A,e,t){const[r,s,i,o,n,a]=e,g=(i-r)/2**t.level,l=(o-s)/2**t.level,c=A?0:(a-n)/2**t.level,h=r+g*t.x,I=s+l*t.y,C=h+g,B=I+l,d=A?n:n+c*t.z,E=A?a:d+c;return{region:[h,I,C,B,d,E]}}(A,e.region,t);if(e.box)return function(A,e,t){const r=e.slice(0,3),s=[e.slice(3,6),e.slice(6,9),e.slice(9,12)],i=1/Math.pow(2,t.level),o=[i,i,A?1:i],n=s.map(((A,e)=>A.map((A=>A*o[e])))),a=[r[0]-s[0][0]-s[1][0]-s[2][0],r[1]-s[0][1]-s[1][1]-s[2][1],r[2]-s[0][2]-s[1][2]-s[2][2]],g=[a[0]+(2*t.x+1)*(n[0][0]+n[1][0]+n[2][0]),a[1]+(2*t.y+1)*(n[0][1]+n[1][1]+n[2][1]),A?r[2]:a[2]+(2*t.z+1)*(n[0][2]+n[1][2]+n[2][2])];return{box:g.concat(...n)}}(A,e.box,t);throw new Error("Unsupported bounding volume type")}let XA=0;const zA=new A.Matrix4;zA.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class ZA{constructor(A){if(this.maxCachedItems=100,this.proxy=A.proxy,A&&(this.meshCallback=A.meshCallback,this.pointsCallback=A.pointsCallback,A.maxCachedItems&&(this.maxCachedItems=A.maxCachedItems)),this.gltfLoader=new B,A&&A.dracoLoader)this.gltfLoader.setDRACOLoader(A.dracoLoader),this.hasDracoLoader=!0;else{const A=new IA;A.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),this.gltfLoader.setDRACOLoader(A),this.gltfLoader.hasDracoLoader=!0}if(A&&A.ktx2Loader)this.gltfLoader.setKTX2Loader(A.ktx2Loader),this.hasKTX2Loader=!0;else if(A&&A.renderer){const e=new FA;e.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(A.renderer),this.gltfLoader.setKTX2Loader(e),this.gltfLoader.hasKTX2Loader=!0}this.b3dmDecoder=new C(this.gltfLoader),this.cache=new o.LinkedHashMap,this.register={},this.ready=[],this.downloads=[],this.nextReady=[],this.nextDownloads=[]}update(){const A=this;XA<8&&A._download(),A._loadBatch()}_scheduleDownload(A){this.downloads.unshift(A)}_download(){if(0!=this.nextDownloads.length||(this._getNextDownloads(),0!=this.nextDownloads.length))for(;this.nextDownloads.length>0;){const A=this.nextDownloads.shift();A&&A.shouldDoDownload()&&A.doDownload()}}_meshReceived(A,e,t,r,s,i,o){this.ready.unshift([A,e,t,r,s,i,o])}_loadBatch(){if(0==this.nextReady.length&&(this._getNextReady(),0==this.nextReady.length))return 0;const A=this.nextReady.shift();if(!A)return 0;const e=A[0],t=A[1],r=A[2],s=e.get(r);return s&&t[r]&&Object.keys(t[r]).forEach((A=>{const e=t[r][A];e&&(e(s),t[r][A]=null)})),1}_getNextDownloads(){let A=Number.MAX_VALUE,e=-1;for(let A=this.downloads.length-1;A>=0;A--)this.downloads[A].shouldDoDownload()?this.downloads[A].distanceFunction||this.nextDownloads.push(this.downloads.splice(A,1)[0]):this.downloads.splice(A,1);if(!(this.nextDownloads.length>0)){for(let t=this.downloads.length-1;t>=0;t--){const r=this.downloads[t].distanceFunction()*this.downloads[t].level;r<A&&(A=r,e=t)}if(e>=0){const A=this.downloads.splice(e,1).pop();this.nextDownloads.push(A);const t=A.getSiblings();for(let A=this.downloads.length-1;A>=0;A--)t.map((A=>A.uuid)).includes(this.downloads[A].uuid)&&this.nextDownloads.push(this.downloads.splice(A,1).pop())}}}_getNextReady(){let A=Number.MAX_VALUE,e=-1;for(let A=this.ready.length-1;A>=0;A--)this.ready[A][3]||this.nextReady.push(this.ready.splice(A,1)[0]);if(!(this.nextReady.length>0)){for(let t=this.ready.length-1;t>=0;t--){const r=this.ready[t][3]()*this.ready[t][5];r<A&&(A=r,e=t)}if(e>=0){const A=this.ready.splice(e,1).pop();this.nextReady.push(A)}}}get(A,e,t,r,s,i,o,n,a,g){const l=this,c=$A(t),h=new AbortController;if(A.signal.addEventListener("abort",(()=>{l.register[c]&&0!=Object.keys(l.register[c]).length||h.abort()})),!(t.includes(".b3dm")||t.includes(".json")||t.includes(".gltf")||t.includes(".glb")))return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");l.register[c]||(l.register[c]={}),l.register[c][e]&&console.error(" a tile should only be loaded once"),l.register[c][e]=r;if(l.cache.get(c))this._meshReceived(l.cache,l.register,c,s,i,o,e);else if(1==Object.keys(l.register[c]).length){let r;t.includes(".b3dm")?r=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((A=>this.b3dmDecoder.parseB3DM(A,l.meshCallback,n,a))).then((A=>{l.cache.put(c,A),l._checkSize(),this._meshReceived(l.cache,l.register,c,s,i,o,e)})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}:t.includes(".glb")||t.includes(".gltf")?r=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((async A=>{await async function(A){return new Promise((e=>{const t=setInterval((()=>{A.hasDracoLoader&&!A.dracoLoader||A.hasKTX2Loader&&!A.ktx2Loader||(clearInterval(t),e())}),10)}))}(this.gltfLoader),this.gltfLoader.parse(A,null,(A=>{A.scene.asset=A.asset,n&&A.scene.applyMatrix4(zA),A.scene.traverse((A=>{A.isMesh&&(a&&A.applyMatrix4(zA),l.meshCallback&&l.meshCallback(A,g)),A.isPoints&&l.pointsCallback&&l.pointsCallback(A,g)})),l.cache.put(c,A.scene),l._checkSize(),l._meshReceived(l.cache,l.register,c,s,i,o,e)}))})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}:t.includes(".json")&&(r=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.json()})).then((A=>KA(A,t))).then((A=>{l.cache.put(c,A),l._checkSize(),l._meshReceived(l.cache,l.register,c)})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}),this._scheduleDownload({shouldDoDownload:()=>!A.signal.aborted&&!!l.register[c]&&Object.keys(l.register[c]).length>0,doDownload:r,distanceFunction:s,getSiblings:i,level:o,uuid:e})}}invalidate(A,e){const t=$A(A);this.register[t]&&delete this.register[t][e]}_checkSize(){const A=this;let e=0;for(;A.cache.size()>A.maxCachedItems&&e<A.cache.size();){e++;const t=A.cache.head(),r=A.register[t.key];r&&(Object.keys(r).length>0?(A.cache.remove(t.key),A.cache.put(t.key,t.value)):(A.cache.remove(t.key),delete A.register[t.key],t.value.traverse((A=>{if(A.material)if(A.material.length)for(let e=0;e<A.material.length;++e)A.material[e].dispose();else A.material.dispose();A.geometry&&A.geometry.dispose()}))))}}}function $A(A){for(var e=A.split("/"),t=[],r=0,s=0;s<e.length;s++){var i=e[s];"."!==i&&""!==i&&".."!==i?t[r++]=i:".."===i&&r>0&&r--}if(0===r)return"/";var o="";for(s=0;s<r;s++)o+="/"+t[s];return o}var Ae,ee=new Uint8Array(16);function te(){if(!Ae&&!(Ae="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ae(ee)}const re=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const se=function(A){return"string"==typeof A&&re.test(A)};for(var ie=[],oe=0;oe<256;++oe)ie.push((oe+256).toString(16).substr(1));const ne=function(A){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(ie[A[e+0]]+ie[A[e+1]]+ie[A[e+2]]+ie[A[e+3]]+"-"+ie[A[e+4]]+ie[A[e+5]]+"-"+ie[A[e+6]]+ie[A[e+7]]+"-"+ie[A[e+8]]+ie[A[e+9]]+"-"+ie[A[e+10]]+ie[A[e+11]]+ie[A[e+12]]+ie[A[e+13]]+ie[A[e+14]]+ie[A[e+15]]).toLowerCase();if(!se(t))throw TypeError("Stringified UUID is invalid");return t};const ae=function(A,e,t){var r=(A=A||{}).random||(A.rng||te)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){t=t||0;for(var s=0;s<16;++s)e[t+s]=r[s];return e}return ne(r)};var ge,le=r(975);const ce=new A.Sphere(new A.Vector3(0,0,0),1),he=new A.Vector3(0,0,0),Ie=new A.Vector3(0,0,0),Ce=new A.Vector3(0,1,0),Be=new A.Quaternion,de={};class Ee extends A.Object3D{constructor(t){super();const r=this;if(t.domWidth&&t.domHeight?this.rendererSize=new A.Vector2(t.domWidth,t.domHeight):this.rendererSize=new A.Vector2(1e3,1e3),this.proxy=t.proxy,this.displayErrors=t.displayErrors,this.displayCopyright=t.displayCopyright,t.queryParams&&(this.queryParams={...t.queryParams}),this.uuid=ae(),t.tileLoader)this.tileLoader=t.tileLoader;else{const e={};e.meshCallback=t.meshCallback?t.meshCallback:(e,t)=>{e.material.wireframe=!1,e.material.side=A.DoubleSide},e.pointsCallback=t.pointsCallback?t.pointsCallback:(A,e)=>{A.material.size=Math.pow(e,.33),A.material.sizeAttenuation=!0},e.proxy=this.proxy,e.renderer=t.renderer,e.dracoLoader=t.dracoLoader,e.ktx2Loader=t.ktx2Loader,this.tileLoader=new ZA(e),this.update=A=>{this.update(A),this.tileLoader.update()}}if(this.displayCopyright=!!t.displayCopyright,this.geometricErrorMultiplier=t.geometricErrorMultiplier?t.geometricErrorMultiplier:1,this.renderer=t.renderer,this.meshCallback=t.meshCallback,this.loadOutsideView=t.loadOutsideView,this.cameraOnLoad=t.cameraOnLoad,this.parentTile=t.parentTile,this.occlusionCullingService=t.occlusionCullingService,this.static=t.static,this.occlusionCullingService&&(this.color=new A.Color,this.color.setHex(16777215*Math.random()),this.colorID=e(255*r.color.r,0,255)<<16^e(255*r.color.g,0,255)<<8^e(255*r.color.b,0,255)<<0),this.static&&(this.matrixAutoUpdate=!1,this.matrixWorldAutoUpdate=!1),this.childrenTiles=[],this.meshContent=[],this.tileContent,this.refine,this.rootPath,this.geometricError,this.boundingVolume,this.json,this.materialVisibility=!1,this.inFrustum=!0,this.level=t.level?t.level:0,this.hasMeshContent=0,this.hasUnloadedJSONContent=0,this.centerModel=t.centerModel,this.abortController=new AbortController,t.json)r._setup(t);else if(t.url){var s=t.url;if(r.queryParams){var i="";for(let A in r.queryParams)r.queryParams.hasOwnProperty(A)&&(i+="&"+A+"="+r.queryParams[A]);s.includes("?")?s+=i:s+="?"+i.substring(1)}(r.proxy?()=>fetch(r.proxy,{method:"POST",body:s,signal:r.abortController.signal}):()=>fetch(s,{signal:r.abortController.signal}))().then((A=>{if(!A.ok)throw new Error("couldn't load \"".concat(t.url,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));A.json().then((A=>KA(A,s))).then((A=>{r._setup({rootPath:le.dirname(t.url),json:A,onLoadCallback:t.onLoadCallback})}))})).catch((A=>{r.displayErrors&&ue(A)}))}}setCanvasSize(A,e){this.rendererSize.set(A,e)}async _setup(e){const t=this;if(e.json.root?(t.json=e.json.root,t.json.refine||(t.json.refine=e.json.refine),t.json.geometricError||(t.json.geometricError=e.json.geometricError),t.json.transform||(t.json.transform=e.json.transform),t.json.boundingVolume||(t.json.boundingVolume=e.json.boundingVolume)):t.json=e.json,t.json.children||(t.json.getChildren?t.json.children=await t.json.getChildren():t.json.children=[]),t.rootPath=e.json.rootPath?e.json.rootPath:e.rootPath,t.json.refine?t.refine=t.json.refine:t.refine=e.parentRefine,t.json.geometricError?t.geometricError=t.json.geometricError:t.geometricError=e.parentGeometricError,t.json.transform&&!t.centerModel){let e=new A.Matrix4;e.elements=t.json.transform,t.applyMatrix4(e)}if(t.json.boundingVolume)if(t.json.boundingVolume.box)t.boundingVolume=new i(t.json.boundingVolume.box);else if(t.json.boundingVolume.region){const e=t.json.boundingVolume.region;t._transformWGS84ToCartesian(e[0],e[1],e[4],he),t._transformWGS84ToCartesian(e[2],e[3],e[5],Ie),he.lerp(Ie,.5),t.boundingVolume=new A.Sphere(new A.Vector3(he.x,he.y,he.z),he.distanceTo(Ie))}else if(t.json.boundingVolume.sphere){const e=t.json.boundingVolume.sphere;t.boundingVolume=new A.Sphere(new A.Vector3(e[0],e[1],e[2]),e[3])}else t.boundingVolume=e.parentBoundingVolume;else t.boundingVolume=e.parentBoundingVolume;function r(A){A.uri&&A.uri.includes("json")||A.url&&A.url.includes("json")?t.hasUnloadedJSONContent++:t.hasMeshContent++}if(t.json.content?(r(t.json.content),t._load()):t.json.contents&&(t.json.contents.forEach((A=>r(A))),t._load()),t.centerModel){const e=new A.Sphere;t.boundingVolume instanceof i?e.copy(t.boundingVolume.sphere):t.boundingVolume instanceof A.Sphere&&e.copy(t.boundingVolume),this.json.boundingVolume.region&&(this._transformWGS84ToCartesian(.5*(this.json.boundingVolume.region[0]+this.json.boundingVolume.region[2]),.5*(this.json.boundingVolume.region[1]+this.json.boundingVolume.region[3]),.5*(this.json.boundingVolume.region[4]+this.json.boundingVolume.region[5]),he),Be.setFromUnitVectors(he.normalize(),Ce.normalize()),t.applyQuaternion(Be)),t.translateX(-e.center.x*t.scale.x),t.translateY(-e.center.y*t.scale.y),t.translateZ(-e.center.z*t.scale.z)}e.onLoadCallback&&e.onLoadCallback(t),t.isSetup=!0}_assembleURL(A,e){A.endsWith("/")||(A+="/");const t=new URL(A);let r=t.pathname.split("/").filter((A=>""!==A)),s=e.split("/").filter((A=>""!==A));for(let A=1;A<=r.length&&!(A>=s.length);A++){if(r.slice(r.length-A,r.length).join("/")===s.slice(0,A).join("/")){for(let e=0;e<A;e++)r.pop();break}}for(;s.length>0&&".."===s[0];)r.pop(),s.shift();return"".concat(t.protocol,"//").concat(t.host,"/").concat([...r,...s].join("/"))}_extractQueryParams(A,e){const t=new URL(A);for(let[A,r]of t.searchParams)e[A]=r;return t.search="",t.toString()}async _load(){var e=this;if(!e.deleted)if(e.json.content)await t(e.json.content,null);else if(e.json.contents){let A=e.json.contents.map(((A,e)=>t(A,e)));Promise.all(A)}async function t(t,r){let s;t.uri?s=t.uri:t.url&&(s=t.url);const i=/^(?:http|https|ftp|tcp|udp):\/\/\S+/;if(i.test(e.rootPath)?i.test(s)||(s=e._assembleURL(e.rootPath,s)):le.isAbsolute(e.rootPath)&&(s=e.rootPath+le.sep+s),s=e._extractQueryParams(s,e.queryParams),e.queryParams){var o="";for(let A in e.queryParams)e.queryParams.hasOwnProperty(A)&&(o+="&"+A+"="+e.queryParams[A]);s.includes("?")?s+=o:s+="?"+o.substring(1)}if(s)if(s.includes(".b3dm")||s.includes(".glb")||s.includes(".gltf")){e.contentURL=s;try{e.tileLoader.get(e.abortController,e.uuid,s,(t=>{if(e.deleted)return;t.asset&&t.asset.copyright&&(t.asset.copyright.split(";").forEach((A=>{de[A]?de[A]++:de[A]=1})),e.displayCopyright&&Qe()),t.traverse((t=>{if((t.isMesh||t.isPoints)&&(t.layers.disable(0),e.static&&(t.matrixAutoUpdate=!1)),t.isMesh&&e.occlusionCullingService){const r=t.geometry.attributes.position,s=[];for(let A=0;A<r.count;A++)s.push(e.color.r,e.color.g,e.color.b);t.geometry.setAttribute("color",new A.Float32BufferAttribute(s,3))}}));Date.now();e.add(t),e.static&&(e.matrixWorldNeedsUpdate=!0,e.updateMatrix(),e.parentTile&&e.parentTile.updateMatrixWorld(!0)),e.meshContent.push(t)}),e.cameraOnLoad?()=>e._calculateDistanceToCamera(e.cameraOnLoad):()=>0,(()=>e._getSiblings()),e.level,!e.json.boundingVolume.region,!!e.json.boundingVolume.region,e.geometricError)}catch(A){e.displayErrors&&ue(A)}}else s.includes(".json")&&e.tileLoader.get(e.abortController,e.uuid,s,(async A=>{e.deleted||(A.rootPath=le.dirname(s),e.json.children.push(A),null==r?delete e.json.content:e.json.contents.splice(r,1),e.hasUnloadedJSONContent--)}))}}dispose(){const A=this;A.meshContent.forEach((e=>{e&&e.asset&&e.asset.copyright&&(e.asset.copyright.split(";").forEach((A=>{de[A]&&de[A]--})),A.displayCopyright&&Qe())})),A.childrenTiles.forEach((A=>A.dispose())),A.deleted=!0,this.traverse((function(e){e.contentURL&&A.tileLoader.invalidate(e.contentURL,e.uuid),e.abortController&&e.abortController.abort()})),this.parent=null,this.parentTile=null,this.dispatchEvent({type:"removed"})}_disposeChildren(){var A=this;A.childrenTiles.forEach((A=>A.dispose())),A.childrenTiles=[],A.children=[],A.meshContent.length>0&&A.meshContent.forEach((e=>{A.children.push(e)}))}update(e){const t=new A.Frustum;t.setFromProjectionMatrix((new A.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this._update(e,t)}_update(A,e){const t=this;if(!t.isSetup)return;const r=t.materialVisibility;function s(A){if(t.hasMeshContent&&!(t.meshContent<t.hasMeshContent)){if(A<0)return t.inFrustum=!1,void t._changeContentVisibility(!!t.loadOutsideView);if(t.inFrustum=!0,0!=t.childrenTiles.length){if(A>=t.geometricErrorMultiplier*t.geometricError)t._changeContentVisibility(!0);else if(A<t.geometricErrorMultiplier*t.geometricError&&"REPLACE"==t.refine){let A=!0;t.childrenTiles.every((e=>!!e._isReady()||(A=!1,!1))),A&&t._changeContentVisibility(!1)}}else t._changeContentVisibility(!0)}}t.boundingVolume&&t.geometricError&&(t.metric=t._calculateUpdateMetric(A,e)),t.childrenTiles.forEach((t=>t._update(A,e))),s(t.metric),function(e){if(e<0&&t.hasMeshContent)return;if(t.occlusionCullingService&&t.hasMeshContent&&!t.occlusionCullingService.hasID(t.colorID))return;if((!t.hasMeshContent||e<t.geometricErrorMultiplier*t.geometricError&&t.meshContent.length>0)&&t.json&&t.json.children&&t.childrenTiles.length!=t.json.children.length)!function(){for(let A=t.json.children.length-1;A>=0;A--)t.json.children[A].root||t.json.children[A].children||t.json.children[A].getChildren||t.json.children[A].content||t.json.children[A].contents||t.json.children.splice(A,1);t.json.children.forEach((e=>{let r=new Ee({parentTile:t,queryParams:t.queryParams,parentGeometricError:t.geometricError,parentBoundingVolume:t.boundingVolume,parentRefine:t.refine,json:e,rootPath:t.rootPath,geometricErrorMultiplier:t.geometricErrorMultiplier,loadOutsideView:t.loadOutsideView,level:t.level+1,tileLoader:t.tileLoader,cameraOnLoad:A,occlusionCullingService:t.occlusionCullingService,renderer:t.renderer,static:t.static,centerModel:!1,displayErrors:t.displayErrors,displayCopyright:t.displayCopyright});t.childrenTiles.push(r),t.add(r)}))}()}(t.metric),function(A,e){if(!t.hasMeshContent)return;if(!t.inFrustum)return t._disposeChildren(),void s(A);if(t.occlusionCullingService&&!e&&t.hasMeshContent&&t.meshContent.length>0&&t.meshDisplayed&&t._areAllChildrenLoadedAndHidden())return t._disposeChildren(),void s(A);if(A>=t.geometricErrorMultiplier*t.geometricError)t._disposeChildren(),s(A)}(t.metric,r)}_areAllChildrenLoadedAndHidden(){let A=!0;const e=this;return this.childrenTiles.every((t=>{if(t.hasMeshContent){if(t.childrenTiles.length>0)return A=!1,!1;if(!t.inFrustum)return!0;if(!t.materialVisibility||t.meshDisplayed)return A=!1,!1;if(e.occlusionCullingService.hasID(t.colorID))return A=!1,!1}else if(!t._areAllChildrenLoadedAndHidden())return A=!1,!1;return!0})),A}_isReady(){if(!this.inFrustum)return!0;if(this.hasUnloadedJSONContent)return!1;if(!this.hasMeshContent||0==this.meshContent.length||!this.materialVisibility){if(this.children.length>0){var A=!0;return this.childrenTiles.every((e=>!!e._isReady()||(A=!1,!1))),A}return!1}return!this.hasMeshContent||!(this.meshContent.length<this.hasMeshContent)&&(!!this.materialVisibility&&!!this.meshDisplayed)}_changeContentVisibility(A){const e=this;e.hasMeshContent&&e.meshContent.length>0&&(A?e.meshContent.forEach((A=>{A.traverse((A=>{(A.isMesh||A.isPoints)&&A.layers.enable(0)}))})):e.meshContent.forEach((A=>{A.traverse((A=>{(A.isMesh||A.isPoints)&&A.layers.disable(0)}))}))),e.materialVisibility!=A&&(e.materialVisibility=A,e.meshDisplayed=!0)}_calculateUpdateMetric(e,t){if(this.boundingVolume instanceof i){if(ce.copy(this.boundingVolume.sphere),ce.applyMatrix4(this.matrixWorld),!t.intersectsSphere(ce))return-1}else{if(!(this.boundingVolume instanceof A.Sphere))return console.error("unsupported shape"),-1;if(ce.copy(this.boundingVolume),ce.applyMatrix4(this.matrixWorld),!t.intersectsSphere(ce))return-1}const r=Math.max(0,e.position.distanceTo(ce.center)-ce.radius);if(0==r)return 0;const s=this.matrixWorld.getMaxScaleOnAxis();this.renderer&&this.renderer.getDrawingBufferSize(this.rendererSize);let o=this.rendererSize.y,n=e.fov;e.aspect<1&&(n*=e.aspect,o=this.rendererSize.x);let a=2*Math.tan(.5*n*.017453292519943295)*r;return 16*window.devicePixelRatio*a/(o*s)}_getSiblings(){const A=this,e=[];if(!A.parentTile)return e;let t=A.parentTile;for(;!t.hasMeshContent&&t.parentTile;)t=t.parentTile;return t.childrenTiles.forEach((t=>{if(t&&t!=A){for(;!t.hasMeshContent&&t.childrenTiles[0];)t=t.childrenTiles[0];e.push(t)}})),e}_calculateDistanceToCamera(e){return this.boundingVolume instanceof i?(ce.copy(this.boundingVolume.sphere),ce.applyMatrix4(this.matrixWorld)):this.boundingVolume instanceof A.Sphere?(ce.copy(this.boundingVolume),ce.applyMatrix4(this.matrixWorld)):console.error("unsupported shape"),Math.max(0,e.position.distanceTo(ce.center)-ce.radius)}setGeometricErrorMultiplier(A){this.geometricErrorMultiplier=A,this.childrenTiles.forEach((e=>e.setGeometricErrorMultiplier(A)))}_transformWGS84ToCartesian(A,e,t,r){const s=6378137/Math.sqrt(1-.006694384442042*Math.pow(Math.sin(e),2)),i=Math.cos(e),o=Math.cos(A),n=Math.sin(e),a=s+t,g=a*i*o,l=a*i*Math.sin(A),c=(.993305615557957*s+t)*n;r.set(g,l,c)}}function ue(A){var e=document.createElement("div");e.textContent=A,e.style.position="fixed",e.style.top="10px",e.style.left="50%",e.style.transform="translateX(-50%)",e.style.padding="10px",e.style.backgroundColor="#ff8800",e.style.color="#ffffff",e.style.zIndex="9999",document.body.appendChild(e),setTimeout((function(){e.remove()}),8e3)}function Qe(){ge||(ge=document.createElement("div"));var A="";for(let e in de)de.hasOwnProperty(e)&&de[e]>0&&(A+=e+", ");ge.textContent=A,ge.style.position="fixed",ge.style.bottom="20px",ge.style.left="20px",ge.style.color="white",ge.style.textShadow="2px 2px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000",ge.style.padding="10px",ge.style.backgroundColor="rgba(0, 0, 0, 0.1)",document.body.appendChild(ge)}const pe=new A.Sphere(new A.Vector3(0,0,0),1),fe=new A.Vector3(0,0,0),me=new A.Vector3(0,0,0),ye=new A.Vector3(0,1,0),we=new A.Vector2,De=new A.Quaternion,xe=new A.Matrix4;class Re extends A.Object3D{constructor(A){super();const e=this;if(A.queryParams&&(this.queryParams={...A.queryParams}),this.uuid=ae(),A.tileLoader?this.tileLoader=A.tileLoader:console.error("an instanced tileset must be provided an InstancedTilesetLoader"),this.master=A.master,this.meshCallback=A.meshCallback,this.loadOutsideView=A.loadOutsideView,this.cameraOnLoad=A.cameraOnLoad,this.parentTile=A.parentTile,this.childrenTiles=[],this.jsonChildren=[],this.meshContent=new Set,this.static=A.static,this.static&&(this.matrixAutoUpdate=!1,this.matrixWorldAutoUpdate=!1),this.tileContent,this.refinement,this.rootPath,this.geometricError,this.boundingVolume,this.json,this.materialVisibility=!1,this.inFrustum=!0,this.level=A.level?A.level:0,this.hasMeshContent=0,this.hasUnloadedJSONContent=0,this.centerModel=A.centerModel,this.deleted=!1,this.abortController=new AbortController,A.json)this.rootPath=A.json.rootPath?A.json.rootPath:A.rootPath,A.json.children&&(this.jsonChildren=A.json.children),e.setup(A);else if(A.url){this.loadJson=(t,r)=>{const s=le.dirname(r);e.setup({rootPath:s,json:t,onLoadCallback:A.onLoadCallback})};var t=A.url;if(e.queryParams){var r="";for(let A in e.queryParams)e.queryParams.hasOwnProperty(A)&&(r+="&"+A+"="+e.queryParams[A]);t.includes("?")?t+=r:t+="?"+r.substring(1)}e.tileLoader.get(e.abortController,t,e.uuid,e)}}async setup(e){const t=this;if(e.json.root?(t.json=e.json.root,!t.json.children&&t.json.getChildren&&(t.json.children=await t.json.getChildren()),t.jsonChildren=t.json.children,t.json.refinement||(t.json.refinement=e.json.refinement),t.json.geometricError||(t.json.geometricError=e.json.geometricError),t.json.transform||(t.json.transform=e.json.transform),t.json.boundingVolume||(t.json.boundingVolume=e.json.boundingVolume)):(t.json=e.json,!t.json.children&&t.json.getChildren&&(t.json.children=await t.json.getChildren(),t.jsonChildren=t.json.children)),t.rootPath=e.json.rootPath?e.json.rootPath:e.rootPath,t.json.refinement?t.refinement=t.json.refinement:t.refinement=e.parentRefinement,t.json.geometricError?t.geometricError=t.json.geometricError:t.geometricError=e.parentGeometricError,t.json.transform&&!t.centerModel){let e=new A.Matrix4;e.elements=t.json.transform,t.master.applyMatrix4(e)}if(t.json.boundingVolume)if(t.json.boundingVolume.box)t.boundingVolume=new i(t.json.boundingVolume.box);else if(t.json.boundingVolume.region){const e=t.json.boundingVolume.region;t.transformWGS84ToCartesian(e[0],e[1],e[4],fe),t.transformWGS84ToCartesian(e[2],e[3],e[5],me),fe.lerp(me,.5),t.boundingVolume=new A.Sphere(new A.Vector3(fe.x,fe.y,fe.z),fe.distanceTo(me))}else if(t.json.boundingVolume.sphere){const e=t.json.boundingVolume.sphere;t.boundingVolume=new A.Sphere(new A.Vector3(e[0],e[1],e[2]),e[3])}else t.boundingVolume=e.parentBoundingVolume;else t.boundingVolume=e.parentBoundingVolume;function r(A){A.uri&&A.uri.includes("json")||A.url&&A.url.includes("json")?t.hasUnloadedJSONContent++:t.hasMeshContent++}if(t.json.content?(r(t.json.content),t.load()):t.json.contents&&(t.json.contents.forEach((A=>r(A))),t.load()),t.centerModel){const e=new A.Sphere;t.boundingVolume instanceof i?e.copy(t.boundingVolume.sphere):t.boundingVolume instanceof A.Sphere&&e.copy(t.boundingVolume),this.json.boundingVolume.region&&(t.transformWGS84ToCartesian(.5*(t.json.boundingVolume.region[0]+t.json.boundingVolume.region[2]),.5*(t.json.boundingVolume.region[1]+t.json.boundingVolume.region[3]),.5*(t.json.boundingVolume.region[4]+t.json.boundingVolume.region[5]),fe),De.setFromUnitVectors(fe.normalize(),ye.normalize()),t.master.applyQuaternion(De),t.master.updateWorldMatrix(!1,!1)),xe.makeTranslation(-e.center.x*t.scale.x,-e.center.y*t.scale.y,-e.center.z*t.scale.z),t.master.matrix.multiply(xe),t.master.matrix.decompose(t.master.position,t.master.quaternion,t.master.scale)}t.isSetup=!0,e.onLoadCallback&&e.onLoadCallback(t)}isAbsolutePathOrURL(A){const e=/^(?:http|https|ftp|tcp|udp):\/\/\S+/.test(A),t=A.startsWith("/")&&!A.startsWith("//");return e||t}assembleURL(A,e){A.endsWith("/")||(A+="/");const t=new URL(A);let r=t.pathname.split("/").filter((A=>""!==A)),s=e.split("/").filter((A=>""!==A));for(let A=1;A<=r.length&&!(A>=s.length);A++){if(r.slice(r.length-A,r.length).join("/")===s.slice(0,A).join("/")){for(let e=0;e<A;e++)r.pop();break}}for(;s.length>0&&".."===s[0];)r.pop(),s.shift();return"".concat(t.protocol,"//").concat(t.host,"/").concat([...r,...s].join("/"))}extractQueryParams(A,e){const t=new URL(A);for(let[A,r]of t.searchParams)e[A]=r;return t.search="",t.toString()}load(){var A=this;function e(e){let t;e.uri?t=e.uri:e.url&&(t=e.url);const r=/^(?:http|https|ftp|tcp|udp):\/\/\S+/;if(r.test(A.rootPath)?r.test(t)||(t=A.assembleURL(A.rootPath,t)):le.isAbsolute(A.rootPath)&&(t=A.rootPath+le.sep+t),t=A.extractQueryParams(t,A.queryParams),A.queryParams){var s="";for(let e in A.queryParams)A.queryParams.hasOwnProperty(e)&&(s+="&"+e+"="+A.queryParams[e]);t.includes("?")?t+=s:t+="?"+s.substring(1)}t&&(t.includes(".b3dm")||t.includes(".glb")||t.includes(".gltf")?(A.contentURL=t,A.tileLoader.get(A.abortController,t,A.uuid,A,A.cameraOnLoad?()=>A.calculateDistanceToCamera(A.cameraOnLoad):()=>0,(()=>A.getSiblings()),A.level,!A.json.boundingVolume.region,!!A.json.boundingVolume.region,A.geometricError)):t.includes(".json")&&A.tileLoader.get(A.abortController,t,A.uuid,A))}A.deleted||(A.json.content?e(A.json.content):A.json.contents&&A.json.contents.forEach((A=>e(A))),A.matrixWorldNeedsUpdate=!0,A.updateWorldMatrix(!0,!0))}loadMesh(A){this.deleted||this.meshContent.add(A)}loadJson(A,e){this.deleted||(this.json.children&&(this.jsonChildren=this.json.children),A.rootPath=le.dirname(e),this.jsonChildren.push(A),this.hasUnloadedJSONContent--)}dispose(){const A=this;A.childrenTiles.forEach((A=>A.dispose())),A.deleted=!0,A.abortController&&A.abortController.abort(),this.parent=null,this.parentTile=null,this.dispatchEvent({type:"removed"})}disposeChildren(){this.childrenTiles.forEach((A=>A.dispose())),this.childrenTiles=[]}_update(A,e){const t=this;if(!t.isSetup)return;t.materialVisibility;function r(A){if(t.hasMeshContent&&!(t.meshContent.size<t.hasMeshContent)){if(A<0)return t.inFrustum=!1,void t.changeContentVisibility(!!t.loadOutsideView);if(t.inFrustum=!0,0!=t.childrenTiles.length){if(A>=t.master.geometricErrorMultiplier*t.geometricError)t.changeContentVisibility(!0);else if(A<t.master.geometricErrorMultiplier*t.geometricError){let A=!0;t.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A&&t.changeContentVisibility(!1)}}else t.changeContentVisibility(!0)}}t.boundingVolume&&t.geometricError&&(t.metric=t.calculateUpdateMetric(A,e)),t.childrenTiles.forEach((t=>t._update(A,e))),r(t.metric),function(e){if(e<0&&t.hasMeshContent)return;if((!t.hasMeshContent&&t.rootPath||e<t.master.geometricErrorMultiplier*t.geometricError&&t.meshContent.size>0)&&t.json&&t.jsonChildren&&t.childrenTiles.length!=t.jsonChildren.length)t.jsonChildren.forEach((e=>{if(!(e.root||e.children||e.getChildren||e.content||e.contents))return;let r=new Re({parentTile:t,queryParams:t.queryParams,parentGeometricError:t.geometricError,parentBoundingVolume:t.boundingVolume,parentRefinement:t.refinement,json:e,rootPath:t.rootPath,loadOutsideView:t.loadOutsideView,level:t.level+1,tileLoader:t.tileLoader,cameraOnLoad:A,master:t.master,centerModel:!1});t.childrenTiles.push(r)}))}(t.metric),function(A,e){if(!t.hasMeshContent)return;if(!t.inFrustum)return t.disposeChildren(),void r(A);if(A>=t.master.geometricErrorMultiplier*t.geometricError)t.disposeChildren(),r(A)}(t.metric)}areAllChildrenLoadedAndHidden(){let A=!0;return this.childrenTiles.every((e=>{if(e.hasMeshContent){if(e.childrenTiles.length>0)return A=!1,!1;if(!e.inFrustum)return!0;if(!e.materialVisibility||e.meshesToDisplay!=e.meshesDisplayed)return A=!1,!1}else if(!e.areAllChildrenLoadedAndHidden())return A=!1,!1;return!0})),A}isReady(){if(!this.inFrustum)return!0;if(this.hasUnloadedJSONContent)return!1;if(!this.hasMeshContent||0==this.meshContent.size||!this.materialVisibility){if(this.childrenTiles.length>0){var A=!0;return this.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A}return!1}return!this.hasMeshContent||!(this.meshContent.size<this.hasMeshContent)&&!!this.materialVisibility}changeContentVisibility(A){this.materialVisibility=A}calculateUpdateMetric(e,t){if(this.boundingVolume instanceof i){if(pe.copy(this.boundingVolume.sphere),pe.applyMatrix4(this.master.matrixWorld),!t.intersectsSphere(pe))return-1}else{if(!(this.boundingVolume instanceof A.Sphere))return console.error("unsupported shape"),-1;if(pe.copy(this.boundingVolume),pe.applyMatrix4(this.master.matrixWorld),!t.intersectsSphere(pe))return-1}const r=Math.max(0,e.position.distanceTo(pe.center)-pe.radius);if(0==r)return 0;const s=this.master.matrixWorld.getMaxScaleOnAxis();this.master._renderSize(we);let o=we.y,n=e.fov;e.aspect<1&&(n*=e.aspect,o=we.x);let a=2*Math.tan(.5*n*.017453292519943295)*r;return 16*window.devicePixelRatio*a/(o*s)}getSiblings(){const A=this,e=[];if(!A.parentTile)return e;let t=A.parentTile;for(;!t.hasMeshContent&&t.parentTile;)t=t.parentTile;return t.childrenTiles.forEach((t=>{if(t&&t!=A){for(;!t.hasMeshContent&&t.childrenTiles[0];)t=t.childrenTiles[0];e.push(t)}})),e}calculateDistanceToCamera(e){return this.boundingVolume instanceof i?(pe.copy(this.boundingVolume.sphere),pe.applyMatrix4(this.master.matrixWorld)):this.boundingVolume instanceof A.Sphere?(pe.copy(this.boundingVolume),pe.applyMatrix4(this.master.matrixWorld)):console.error("unsupported shape"),Math.max(0,e.position.distanceTo(pe.center)-pe.radius)}getWorldMatrix(){return this.master.matrixWorld}transformWGS84ToCartesian(A,e,t,r){const s=6378137/Math.sqrt(1-.006694384442042*Math.pow(Math.sin(e),2)),i=Math.cos(e),o=Math.cos(A),n=Math.sin(e),a=s+t,g=a*i*o,l=a*i*Math.sin(A),c=(.993305615557957*s+t)*n;r.set(g,l,c)}}class Se extends A.Object3D{constructor(e){super(),e.master=this,e.domWidth&&e.domHeight?this.rendererSize=new A.Vector2(e.domWidth,e.domHeight):this.rendererSize=new A.Vector2(1e3,1e3),this.renderer=e.renderer,this.geometricErrorMultiplier=e.geometricErrorMultiplier?e.geometricErrorMultiplier:1,this.tileset=new Re(e),e.static&&(this.matrixAutoUpdate=!1),this.tileLoader=e.tileLoader}_renderSize(A){this.renderer?this.renderer.getDrawingBufferSize(A):A.copy(this.rendererSize)}setCanvasSize(A,e){this.rendererSize.set(A,e)}update(e,t){if(t)this.tileset._update(e,t);else{const t=new A.Frustum;t.setFromProjectionMatrix((new A.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this.tileset._update(e,t)}}setGeometricErrorMultiplier(A){this.geometricErrorMultiplier=A||1}}class Te{constructor(e){const t=this;t.scene=e,t.instancedTiles=[],t.instancedMesh,t.reuseableMatrix=new A.Matrix4}addInstance(A){const e=this;A.added=!0,A.listOMesh=e.instancedTiles,e.instancedTiles.push(A),e.instancedMesh&&A.loadMesh(e.instancedMesh)}addToScene(){const e=this;e.instancedMesh.setMatrixAt(0,new A.Matrix4),e.instancedMesh.instanceMatrix.needsUpdate=!0,e.instancedMesh.count=1,e.scene.add(e.instancedMesh),e.instancedMesh.onAfterRender=()=>{delete e.instancedMesh.onAfterRender,e.instancedMesh.displayedOnce=!0}}setObject(A){const e=this;e.instancedMesh=A,e.instancedMesh.matrixAutoUpdate=!1,e.instancedMesh.matrixWorldAutoUpdate=!1,e.scene.children.includes(A)||this.addToScene();for(let A=0;A<e.instancedTiles.length;A++)e.instancedTiles[A].loadMesh(e.instancedMesh)}update(){const A=this;for(let e=A.instancedTiles.length-1;e>=0;e--)A.instancedTiles[e].deleted&&A.instancedTiles.splice(e,1);if(A.instancedMesh){A.instancedMesh.count=0,A.instancedMesh.instancedTiles=[];for(let e=0;e<A.instancedTiles.length;e++)A.instancedTiles[e].meshContent.add(A.instancedMesh),A.instancedTiles[e].materialVisibility&&(A.instancedMesh.count++,A.reuseableMatrix.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),A.reuseableMatrix.multiply(A.instancedTiles[e].master.matrixWorld),A.reuseableMatrix.multiply(A.instancedMesh.baseMatrix),A.instancedMesh.setMatrixAt(A.instancedMesh.count-1,A.reuseableMatrix),A.instancedMesh.instancedTiles.push(A.instancedTiles[e]));A.instancedMesh.instanceMatrix.needsUpdate=!0,A.instancedMesh.needsUpdate=!0,A.instancedMesh.computeBoundingSphere()}}getCount(){return this.instancedTiles.length}dispose(){const A=this;return!(A.instancedTiles.length>0)&&(!!A.instancedMesh&&(A.scene.remove(A.instancedMesh),A.instancedMesh.traverse((A=>{if(A.dispose&&A.dispose(),A.material)if(A.material.length)for(let e=0;e<A.material.length;++e)A.material[e].dispose();else A.material.dispose();A.geometry&&A.geometry.dispose()})),A.instancedMesh.dispose(),!0))}}class Le{constructor(){const A=this;A.count=0,A.json,A.instancedTiles=[]}addInstance(A){this.instancedTiles.push(A),this.json&&A.loadJson(this.json,this.url)}setObject(A,e){const t=this;t.json=A,t.url=e;for(let A=0;A<t.instancedTiles.length;A++)t.instancedTiles[A].loadJson(t.json,t.url)}getCount(){return this.instancedTiles.length}update(){const A=this;for(let e=A.instancedTiles.length-1;e>=0;e--)A.instancedTiles[e].deleted&&A.instancedTiles.splice(e,1)}dispose(){return!(!this.json||0!=this.instancedTiles.length)}}let Me=0;const be=new A.Matrix4;be.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class Fe{constructor(A,e){if(this.maxCachedItems=100,this.maxInstances=1,this.proxy=e.proxy,e&&(this.meshCallback=e.meshCallback,this.pointsCallback=e.pointsCallback,e.maxCachedItems&&(this.maxCachedItems=e.maxCachedItems),e.maxInstances&&(this.maxInstances=e.maxInstances)),this.gltfLoader=new B,e&&e.dracoLoader)this.gltfLoader.setDRACOLoader(e.dracoLoader),this.hasDracoLoader=!0;else{const A=new IA;A.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),this.gltfLoader.setDRACOLoader(A),this.gltfLoader.hasDracoLoader=!0}if(e&&e.ktx2Loader)this.gltfLoader.setKTX2Loader(e.ktx2Loader),this.hasKTX2Loader=!0;else if(e&&e.renderer){const A=new FA;A.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(e.renderer),this.gltfLoader.setKTX2Loader(A),this.gltfLoader.hasKTX2Loader=!0}this.b3dmDecoder=new C(this.gltfLoader),this.cache=new o.LinkedHashMap,this.scene=A,this.ready=[],this.downloads=[],this.nextReady=[],this.nextDownloads=[]}update(){const A=this;A._checkSize(),A.cache._data.forEach((A=>{A.update()})),Me<8&&A._download(),A._loadBatch()}_download(){const e=this;if(0!=e.nextDownloads.length||(e._getNextDownloads(),0!=e.nextDownloads.length))for(;e.nextDownloads.length>0;){const r=e.nextDownloads.shift();if(r){if(r.path.includes(".b3dm"))t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:r.path}):()=>fetch(r.path),Me++,t().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+r.path),new Error("couldn't load \"".concat(r.path,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((A=>this.b3dmDecoder.parseB3DMInstanced(A,e.meshCallback,e.maxInstances,r.sceneZupToYup,r.meshZupToYup))).then((A=>{A.frustumCulled=!1,r.tile.setObject(A),e.ready.unshift(r)})).catch((A=>console.error(A))).finally((()=>{Me--}));if(r.path.includes(".glb")||r.path.includes(".gltf"))t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:r.path}):()=>fetch(r.path),Me++,t().then((A=>{if(!A.ok)throw new Error("missing content");return A.arrayBuffer()})).then((async t=>{await Ge(this.gltfLoader),this.gltfLoader.parse(t,null,(t=>{let s;t.scene.asset=t.asset,r.sceneZupToYup&&t.scene.applyMatrix4(be),t.scene.traverse((A=>{A.geometricError=r.geometricError,A.isMesh&&(r.meshZupToYup&&A.applyMatrix4(be),e.meshCallback&&e.meshCallback(A,A.geometricError)),A.isPoints&&console.error("instanced point cloud is not supported")})),t.scene.updateWorldMatrix(!1,!0),t.scene.traverse((t=>{t.isMesh&&(s=new A.InstancedMesh(t.geometry,t.material,e.maxInstances),s.baseMatrix=t.matrixWorld)})),e.ready.unshift(r),s?(s.frustumCulled=!1,r.tile.setObject(s)):t.scene.traverse((A=>{A.dispose&&A.dispose(),A.material&&A.material.dispose()}))}))}),(A=>{console.error("could not load tile : "+r.path)})).finally((()=>{Me--}));else if(r.path.includes(".json")){var t;t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:r.path}):()=>fetch(r.path),Me++,t().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+r.path),new Error("couldn't load \"".concat(r.path,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.json()})).then((A=>KA(A,r.path))).then((A=>{r.tile.setObject(A,r.path),e.ready.unshift(r)})).catch((A=>console.error(A))).finally((()=>{Me--}))}}}}_loadBatch(){if(0==this.nextReady.length&&(this._getNextReady(),0==this.nextReady.length))return 0;return this.nextReady.shift()?1:0}_getNextReady(){let A=Number.MAX_VALUE,e=-1;for(let A=this.ready.length-1;A>=0;A--)this.ready[A].distanceFunction||this.nextReady.push(this.ready.splice(A,1)[0]);if(!(this.nextReady.length>0)){for(let t=this.ready.length-1;t>=0;t--){const r=this.ready[t].distanceFunction()*this.ready[t].level;r<A&&(A=r,e=t)}if(e>=0){const A=this.ready.splice(e,1).pop();this.nextReady.push(A);const t=A.getSiblings();for(let A=this.ready.length-1;A>=0;A--)t.includes(this.ready[A].uuid)&&this.nextready.push(this.ready.splice(A,1).pop())}}}get(A,e,t,r,s,i,o,n,a,g){const l=this,c=function(A){for(var e=A.split("/"),t=[],r=0,s=0;s<e.length;s++){var i=e[s];"."!==i&&""!==i&&".."!==i?t[r++]=i:".."===i&&r>0&&r--}if(0===r)return"/";var o="";for(s=0;s<r;s++)o+="/"+t[s];return o}(e);if(!(e.includes(".b3dm")||e.includes(".json")||e.includes(".glb")||e.includes(".gltf")))return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");const h=l.cache.get(c);if(h)h.addInstance(r);else if(e.includes(".b3dm")||e.includes(".glb")||e.includes(".gltf")){const h=new Te(l.scene);h.addInstance(r),l.cache.put(c,h);const I=new AbortController;A.signal.addEventListener("abort",(()=>{0==h.getCount()&&I.abort()})),this.downloads.push({abortController:I,tile:h,key:c,path:e,distanceFunction:s,getSiblings:i,level:o,uuid:t,sceneZupToYup:n,meshZupToYup:a,geometricError:g,shouldDoDownload:()=>!0})}else if(e.includes(".json")){const t=new Le;t.addInstance(r),l.cache.put(c,t);const n=new AbortController;A.signal.addEventListener("abort",(()=>{0==t.getCount()&&n.abort()})),this.downloads.push({abortController:n,tile:t,key:c,path:e,distanceFunction:s,getSiblings:i,level:o,shouldDoDownload:()=>!0})}}_getNextDownloads(){let A=Number.MAX_VALUE,e=-1;for(let A=this.downloads.length-1;A>=0;A--){const e=this.downloads[A];e.shouldDoDownload()?e.distanceFunction||this.nextDownloads.push(this.downloads.splice(A,1)[0]):this.downloads.splice(A,1)}if(!(this.nextDownloads.length>0)){for(let t=this.downloads.length-1;t>=0;t--){const r=this.downloads[t],s=r.distanceFunction()*r.level;s<A&&(A=s,e=t)}if(e>=0){const A=this.downloads.splice(e,1).pop();this.nextDownloads.push(A);const t=A.getSiblings();for(let A=this.downloads.length-1;A>=0;A--)t.includes(this.downloads[A].uuid)&&this.nextDownloads.push(this.downloads.splice(A,1).pop())}}}_checkSize(){const A=this;let e=0;for(;A.cache.size()>A.maxCachedItems&&e<A.cache.size();){e++;const t=A.cache.head();A.cache.remove(t.key),t.value.dispose()||A.cache.put(t.key,t.value)}}}async function Ge(A){return new Promise((e=>{const t=setInterval((()=>{A.hasDracoLoader&&!A.dracoLoader||A.hasKTX2Loader&&!A.ktx2Loader||(clearInterval(t),e())}),10)}))}})(),s})()));
2
+ !function(A,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("three")):"function"==typeof define&&define.amd?define(["three"],e):"object"==typeof exports?exports.threedtiles=e(require("three")):A.threedtiles=e(A.THREE)}(this,(A=>(()=>{var e={649:(A,e,t)=>{const r=t(180),s=t(31),i=t(839);A.exports={Heap:r,Queue:s,LinkedHashMap:i}},180:A=>{A.exports=class{constructor(A,e){if(this._data=[],this._comparator=function(A,e){return A>=e},null!=A){if(!Array.isArray(A))throw Error("Constructor expects data to be an array");this._data=A}if(null!=e){if("function"!=typeof e)throw Error("Constructor expects comparator to be a function");this._comparator=e}}peek(){return this.size()<1?null:this._data[0]}pop(){if(this.size()<1)return null;const A=this._data[0];return this.swap(this.size()-1,0),this._data.pop(),this.heapifyDown(0),A}replaceTop(A){if(this.size()<1)return null;const e=this._data[0];return this._data[0]=A,this.heapifyDown(0),e}push(A){this._data.push(A),this.heapifyUp(this._data.length-1)}size(){return this._data.length}swap(A,e){const t=this._data[A];this._data[A]=this._data[e],this._data[e]=t}heapifyUp(A){if(0===A)return;const e=Math.floor((A-1)/2);this._comparator(this._data[A],this._data[e])||(this.swap(A,e),this.heapifyUp(e))}heapifyDown(A){const e=2*A+1,t=2*A+2;if(e>=this._data.length)return;const r=t<this._data.length&&!this._comparator(this._data[t],this._data[e])?t:e;this._comparator(this._data[A],this._data[r])&&(this.swap(A,r),this.heapifyDown(r))}}},839:A=>{A.exports=class{constructor(){this._data=new Map,this._link=new Map,this._head=void 0,this._tail=void 0}put(A,e,t=!1){this.has(A)?this._data.set(A,e):(this._data.set(A,e),this._link.set(A,{previous:void 0,next:void 0}),null==this._head?(this._head=A,this._tail=A):t?(this._link.get(this._head).previous=A,this._link.get(A).next=this._head,this._head=A):(this._link.get(this._tail).next=A,this._link.get(A).previous=this._tail,this._tail=A))}head(){return{key:this._head,value:this.get(this._head),next:()=>this.next(this._head),previous:()=>null}}tail(){return{key:this._tail,value:this.get(this._tail),next:()=>null,previous:()=>this.previous(this._tail)}}get(A){return this._data.get(A)}previousKey(A){const e=this._link.get(A);return null!=e?e.previous:void 0}previousValue(A){return this.get(this.previousKey(A))}previous(A){const e=this.previousKey(A);return{key:e,value:this.get(e),next:()=>this.next(e),previous:()=>this.previous(e)}}nextKey(A){const e=this._link.get(A);return null!=e?e.next:void 0}nextValue(A){return this.get(this.nextKey(A))}next(A){const e=this.nextKey(A);return{key:e,value:this.get(e),next:()=>this.next(e),previous:()=>this.previous(e)}}remove(A){const e=this._data.get(A);if(null!=e)if(1===this.size())this.reset();else{if(A===this._head){const A=this._link.get(this._head);this._link.get(A.next).previous=null,this._head=A.next}else if(A===this._tail){const A=this._link.get(this._tail);this._link.get(A.previous).next=null,this._tail=A.previous}else{const e=this._link.get(A),t=this._link.get(e.previous),r=this._link.get(e.next);t.next=e.next,r.previous=e.previous}this._link.delete(A),this._data.delete(A)}return e}has(A){return this._data.has(A)}size(){return this._data.size}reset(){this._data.clear(),this._link.clear(),this._head=void 0,this._tail=void 0}keys(){return this._data.keys()}values(){return this._data.values()}entries(){return this._data.entries()}toArray(A="orderByInsert"){if("orderByInsert"!==A){const A=[];let e=this._head;for(;null!=e;)A.push({key:e,value:this.get(e)}),e=this.nextKey(e);return A}return Array.from(this.keys()).map((A=>({key:A,value:this.get(A)})))}}},31:A=>{A.exports=class{constructor(A,e){if(this._data=[],this._head=0,this._cap=null,null!=A){if(!Array.isArray(A))throw Error("Constructor expects data to be an array");this._data=A}if(null!=e){if("number"!=typeof e)throw Error("Constructor expects capacity to be a number");this._cap=e}}enqueue(A){return!(null!=this._cap&&this.size()>=this._cap)&&(this._data.push(A),!0)}dequeue(){if(0===this.size())return null;const A=this._data[this._head];return this._head+=1,2*this._head>=this._data.length&&(this._data=this._data.slice(this._head),this._head=0),A}peek(A=!1){return this.size()>0?A?this._data[this._data.length-1]:this._data[this._head]:null}size(){return this._data.length-this._head}updateCapacity(A){this._cap=A}reset(){this._data=[],this._head=0}forEach(A){for(let e=this._head;e<this._data.length;e+=1)A(this._data[e],e-this._head)}toArray(){return this._data.slice(this._head)}}},975:A=>{"use strict";function e(A){if("string"!=typeof A)throw new TypeError("Path must be a string. Received "+JSON.stringify(A))}function t(A,e){for(var t,r="",s=0,i=-1,o=0,n=0;n<=A.length;++n){if(n<A.length)t=A.charCodeAt(n);else{if(47===t)break;t=47}if(47===t){if(i===n-1||1===o);else if(i!==n-1&&2===o){if(r.length<2||2!==s||46!==r.charCodeAt(r.length-1)||46!==r.charCodeAt(r.length-2))if(r.length>2){var a=r.lastIndexOf("/");if(a!==r.length-1){-1===a?(r="",s=0):s=(r=r.slice(0,a)).length-1-r.lastIndexOf("/"),i=n,o=0;continue}}else if(2===r.length||1===r.length){r="",s=0,i=n,o=0;continue}e&&(r.length>0?r+="/..":r="..",s=2)}else r.length>0?r+="/"+A.slice(i+1,n):r=A.slice(i+1,n),s=n-i-1;i=n,o=0}else 46===t&&-1!==o?++o:o=-1}return r}var r={resolve:function(){for(var A,r="",s=!1,i=arguments.length-1;i>=-1&&!s;i--){var o;i>=0?o=arguments[i]:(void 0===A&&(A=process.cwd()),o=A),e(o),0!==o.length&&(r=o+"/"+r,s=47===o.charCodeAt(0))}return r=t(r,!s),s?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(A){if(e(A),0===A.length)return".";var r=47===A.charCodeAt(0),s=47===A.charCodeAt(A.length-1);return 0!==(A=t(A,!r)).length||r||(A="."),A.length>0&&s&&(A+="/"),r?"/"+A:A},isAbsolute:function(A){return e(A),A.length>0&&47===A.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var A,t=0;t<arguments.length;++t){var s=arguments[t];e(s),s.length>0&&(void 0===A?A=s:A+="/"+s)}return void 0===A?".":r.normalize(A)},relative:function(A,t){if(e(A),e(t),A===t)return"";if((A=r.resolve(A))===(t=r.resolve(t)))return"";for(var s=1;s<A.length&&47===A.charCodeAt(s);++s);for(var i=A.length,o=i-s,n=1;n<t.length&&47===t.charCodeAt(n);++n);for(var a=t.length-n,g=o<a?o:a,l=-1,c=0;c<=g;++c){if(c===g){if(a>g){if(47===t.charCodeAt(n+c))return t.slice(n+c+1);if(0===c)return t.slice(n+c)}else o>g&&(47===A.charCodeAt(s+c)?l=c:0===c&&(l=0));break}var h=A.charCodeAt(s+c);if(h!==t.charCodeAt(n+c))break;47===h&&(l=c)}var I="";for(c=s+l+1;c<=i;++c)c!==i&&47!==A.charCodeAt(c)||(0===I.length?I+="..":I+="/..");return I.length>0?I+t.slice(n+l):(n+=l,47===t.charCodeAt(n)&&++n,t.slice(n))},_makeLong:function(A){return A},dirname:function(A){if(e(A),0===A.length)return".";for(var t=A.charCodeAt(0),r=47===t,s=-1,i=!0,o=A.length-1;o>=1;--o)if(47===(t=A.charCodeAt(o))){if(!i){s=o;break}}else i=!1;return-1===s?r?"/":".":r&&1===s?"//":A.slice(0,s)},basename:function(A,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');e(A);var r,s=0,i=-1,o=!0;if(void 0!==t&&t.length>0&&t.length<=A.length){if(t.length===A.length&&t===A)return"";var n=t.length-1,a=-1;for(r=A.length-1;r>=0;--r){var g=A.charCodeAt(r);if(47===g){if(!o){s=r+1;break}}else-1===a&&(o=!1,a=r+1),n>=0&&(g===t.charCodeAt(n)?-1==--n&&(i=r):(n=-1,i=a))}return s===i?i=a:-1===i&&(i=A.length),A.slice(s,i)}for(r=A.length-1;r>=0;--r)if(47===A.charCodeAt(r)){if(!o){s=r+1;break}}else-1===i&&(o=!1,i=r+1);return-1===i?"":A.slice(s,i)},extname:function(A){e(A);for(var t=-1,r=0,s=-1,i=!0,o=0,n=A.length-1;n>=0;--n){var a=A.charCodeAt(n);if(47!==a)-1===s&&(i=!1,s=n+1),46===a?-1===t?t=n:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){r=n+1;break}}return-1===t||-1===s||0===o||1===o&&t===s-1&&t===r+1?"":A.slice(t,s)},format:function(A){if(null===A||"object"!=typeof A)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof A);return function(A,e){var t=e.dir||e.root,r=e.base||(e.name||"")+(e.ext||"");return t?t===e.root?t+r:t+A+r:r}("/",A)},parse:function(A){e(A);var t={root:"",dir:"",base:"",ext:"",name:""};if(0===A.length)return t;var r,s=A.charCodeAt(0),i=47===s;i?(t.root="/",r=1):r=0;for(var o=-1,n=0,a=-1,g=!0,l=A.length-1,c=0;l>=r;--l)if(47!==(s=A.charCodeAt(l)))-1===a&&(g=!1,a=l+1),46===s?-1===o?o=l:1!==c&&(c=1):-1!==o&&(c=-1);else if(!g){n=l+1;break}return-1===o||-1===a||0===c||1===c&&o===a-1&&o===n+1?-1!==a&&(t.base=t.name=0===n&&i?A.slice(1,a):A.slice(n,a)):(0===n&&i?(t.name=A.slice(1,o),t.base=A.slice(1,a)):(t.name=A.slice(n,o),t.base=A.slice(n,a)),t.ext=A.slice(o,a)),n>0?t.dir=A.slice(0,n-1):i&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};r.posix=r,A.exports=r},818:e=>{"use strict";e.exports=A}},t={};function r(A){var s=t[A];if(void 0!==s)return s.exports;var i=t[A]={exports:{}};return e[A](i,i.exports,r),i.exports}r.d=(A,e)=>{for(var t in e)r.o(e,t)&&!r.o(A,t)&&Object.defineProperty(A,t,{enumerable:!0,get:e[t]})},r.o=(A,e)=>Object.prototype.hasOwnProperty.call(A,e),r.r=A=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var s={};return(()=>{"use strict";r.r(s),r.d(s,{InstancedOGC3DTile:()=>Se,InstancedTileLoader:()=>Fe,OGC3DTile:()=>Ee,OcclusionCullingService:()=>t,TileLoader:()=>ZA});var A=r(818);Math.PI,Math.PI;function e(A,e,t){return Math.max(e,Math.min(t,A))}class t{constructor(){this.cullMap=[],this.cullMaterial=new A.MeshBasicMaterial({vertexColors:!0}),this.cullMaterial.side=A.FrontSide,this.cullTarget=this._createCullTarget(),this.cullPixels=new Uint8Array(4*this.cullTarget.width*this.cullTarget.height)}setSide(A){this.cullMaterial.side=A}_createCullTarget(){const e=new A.WebGLRenderTarget(Math.floor(.05*window.innerWidth),Math.floor(.05*window.innerHeight));return e.texture.format=A.RGBAFormat,e.texture.colorSpace=A.LinearSRGBColorSpace,e.texture.minFilter=A.NearestFilter,e.texture.magFilter=A.NearestFilter,e.texture.generateMipmaps=!1,e.stencilBuffer=!1,e.depthBuffer=!0,e.depthTexture=new A.DepthTexture,e.depthTexture.format=A.DepthFormat,e.depthTexture.type=A.UnsignedShortType,e}update(A,t,r){let s=t.getRenderTarget(),i=A.overrideMaterial;A.overrideMaterial=this.cullMaterial,t.setRenderTarget(this.cullTarget),t.render(A,r),A.overrideMaterial=i,t.setRenderTarget(s),t.readRenderTargetPixels(this.cullTarget,0,0,this.cullTarget.width,this.cullTarget.height,this.cullPixels),this.cullMap=[];for(let A=0;A<this.cullPixels.length;A+=4){const t=e(this.cullPixels[A],0,255)<<16^e(this.cullPixels[A+1],0,255)<<8^e(this.cullPixels[A+2],0,255)<<0;this.cullMap[t]=!0}}hasID(A){return this.cullMap[A]}}class i{constructor(e){this.center=new A.Vector3(e[0],e[1],e[2]);var t=new A.Vector3(e[3],e[4],e[4]),r=new A.Vector3(e[6],e[7],e[8]),s=new A.Vector3(e[9],e[10],e[11]);this.halfWidth=t.length(),this.halfHeight=r.length(),this.halfDepth=s.length(),t.normalize(),r.normalize(),s.normalize(),this.sphere=new A.Sphere(this.center,Math.sqrt(this.halfWidth*this.halfWidth+this.halfHeight*this.halfHeight+this.halfDepth*this.halfDepth)),this.matrixToOBBCoordinateSystem=new A.Matrix3,this.matrixToOBBCoordinateSystem.set(t.x,t.y,t.z,r.x,r.y,r.z,s.x,s.y,s.z)}inFrustum(A){return A.intersectsSphere(this.sphere)}distanceToPoint(A){let e=A.clone();e.sub(this.center),e.applyMatrix3(this.matrixToOBBCoordinateSystem);let t=Math.max(0,Math.max(-this.halfWidth-e.x,e.x-this.halfWidth)),r=Math.max(0,Math.max(-this.halfHeight-e.y,e.y-this.halfHeight)),s=Math.max(0,Math.max(-this.halfDepth-e.z,e.z-this.halfDepth));return Math.sqrt(t*t+r*r+s*s)}}var o=r(649);const n=new TextDecoder;class a{constructor(A,e,t,r){this.buffer=A,this.binOffset=e+t,this.binLength=r;let s=null;if(0!==t)try{const r=new Uint8Array(A,e,t);s=JSON.parse(n.decode(r))}catch(A){s={}}else s={};this.header=s}getKeys(){return Object.keys(this.header)}getData(A,e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const s=this.header;if(!(A in s))return null;const i=s[A];if(i instanceof Object){if(Array.isArray(i))return i;{const{buffer:s,binOffset:o,binLength:n}=this,a=i.byteOffset||0,g=i.type||r,l=i.componentType||t;if("type"in i&&r&&i.type!==r)throw new Error("FeatureTable: Specified type does not match expected type.");let c,h;switch(g){case"SCALAR":c=1;break;case"VEC2":c=2;break;case"VEC3":c=3;break;case"VEC4":c=4;break;default:throw new Error('FeatureTable : Feature type not provided for "'.concat(A,'".'))}const I=o+a,C=e*c;switch(l){case"BYTE":h=new Int8Array(s,I,C);break;case"UNSIGNED_BYTE":h=new Uint8Array(s,I,C);break;case"SHORT":h=new Int16Array(s,I,C);break;case"UNSIGNED_SHORT":h=new Uint16Array(s,I,C);break;case"INT":h=new Int32Array(s,I,C);break;case"UNSIGNED_INT":h=new Uint32Array(s,I,C);break;case"FLOAT":h=new Float32Array(s,I,C);break;case"DOUBLE":h=new Float64Array(s,I,C);break;default:throw new Error('FeatureTable : Feature component type not provided for "'.concat(A,'".'))}if(I+C*h.BYTES_PER_ELEMENT>o+n)throw new Error("FeatureTable: Feature data read outside binary body length.");return h}}return i}}class g extends a{constructor(A,e,t,r,s){super(A,t,r,s),this.batchSize=e}getData(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return super.getData(A,this.batchSize,e,t)}}function l(e){let t,r,s,i=-1,o=0;for(let A=0;A<e.length;++A){const n=e[A];if(void 0===t&&(t=n.array.constructor),t!==n.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(void 0===r&&(r=n.itemSize),r!==n.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(void 0===s&&(s=n.normalized),s!==n.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(-1===i&&(i=n.gpuType),i!==n.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;o+=n.count*r}const n=new t(o),a=new A.BufferAttribute(n,r,s);let g=0;for(let A=0;A<e.length;++A){const t=e[A];if(t.isInterleavedBufferAttribute){const A=g/r;for(let e=0,s=t.count;e<s;e++)for(let s=0;s<r;s++){const r=t.getComponent(e,s);a.setComponent(e+A,s,r)}}else n.set(t.array,g);g+=t.count*r}return void 0!==i&&(a.gpuType=i),a}function c(e,t){if(t===A.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(t===A.TriangleFanDrawMode||t===A.TriangleStripDrawMode){let r=e.getIndex();if(null===r){const A=[],t=e.getAttribute("position");if(void 0===t)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<t.count;e++)A.push(e);e.setIndex(A),r=e.getIndex()}const s=r.count-2,i=[];if(t===A.TriangleFanDrawMode)for(let A=1;A<=s;A++)i.push(r.getX(0)),i.push(r.getX(A)),i.push(r.getX(A+1));else for(let A=0;A<s;A++)A%2==0?(i.push(r.getX(A)),i.push(r.getX(A+1)),i.push(r.getX(A+2))):(i.push(r.getX(A+2)),i.push(r.getX(A+1)),i.push(r.getX(A)));i.length/3!==s&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=e.clone();return o.setIndex(i),o.clearGroups(),o}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),e}function h(A,e,t){return e=function(A){var e=function(A,e){if("object"!=typeof A||!A)return A;var t=A[Symbol.toPrimitive];if(void 0!==t){var r=t.call(A,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(A)}(A,"string");return"symbol"==typeof e?e:String(e)}(e),e in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}const I=new A.Matrix4;I.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class C{constructor(e){h(this,"checkLoaderInitialized",(async()=>new Promise((A=>{const e=setInterval((()=>{this.gltfLoader.hasDracoLoader&&!this.gltfLoader.dracoLoader||this.gltfLoader.hasKTX2Loader&&!this.gltfLoader.ktx2Loader||(clearInterval(e),A())}),10)})))),this.gltfLoader=e,this.tempMatrix=new A.Matrix4}parseB3DM(A,e,t,r){const s=new DataView(A),i=String.fromCharCode(s.getUint8(0))+String.fromCharCode(s.getUint8(1))+String.fromCharCode(s.getUint8(2))+String.fromCharCode(s.getUint8(3));console.assert("b3dm"===i);const o=s.getUint32(8,!0);console.assert(o===A.byteLength);const n=s.getUint32(12,!0),l=s.getUint32(16,!0),c=s.getUint32(20,!0),h=s.getUint32(24,!0),C=new a(A,28,n,l),B=28+n+l,d=(new g(A,C.getData("BATCH_LENGTH"),B,c,h),B+c+h),E=new Uint8Array(A,d,o-d).slice().buffer;return new Promise((async(A,s)=>{await this.checkLoaderInitialized(),this.gltfLoader.parse(E,null,(s=>{const i=C.getData("RTC_CENTER");i?(this.tempMatrix.makeTranslation(i[0],i[1],i[2]),s.scene.applyMatrix4(this.tempMatrix)):s.userData.gltfExtensions&&s.userData.gltfExtensions.CESIUM_RTC&&(this.tempMatrix.makeTranslation(s.userData.gltfExtensions.CESIUM_RTC.center[0],s.userData.gltfExtensions.CESIUM_RTC.center[1],s.userData.gltfExtensions.CESIUM_RTC.center[2]),s.scene.applyMatrix4(this.tempMatrix)),t&&s.scene.applyMatrix4(I),s.scene.asset=s.asset,s.scene.traverse((A=>{A.isMesh&&(r&&A.applyMatrix4(I),e&&e(A))})),A(s.scene)}),(A=>{console.error(A)}))}))}parseB3DMInstanced(e,t,r,s,i){return this.parseB3DM(e,t,s,i).then((e=>{let t,s=[],i=[];e.updateWorldMatrix(!1,!0),e.traverse((A=>{A.isMesh&&(A.geometry.applyMatrix4(A.matrixWorld),s.push(A.geometry),i.push(A.material))}));let o=function(e){let t=new Set;e.forEach((A=>{for(let e in A.attributes)t.add(e)})),e.forEach((e=>{t.forEach((t=>{if(!e.attributes[t]){const r=function(A){switch(A){case"position":case"normal":case"color":return 3;case"uv":case"uv2":return 2;default:throw new Error("Unknown attribute ".concat(A))}}(t),s=new Float32Array(r*e.getAttribute("position").count).fill(0);e.setAttribute(t,new A.BufferAttribute(s,r))}}))}));let r=function(e,t=!1){const r=null!==e[0].index,s=new Set(Object.keys(e[0].attributes)),i=new Set(Object.keys(e[0].morphAttributes)),o={},n={},a=e[0].morphTargetsRelative,g=new A.BufferGeometry;let c=0;for(let A=0;A<e.length;++A){const l=e[A];let h=0;if(r!==(null!==l.index))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const e in l.attributes){if(!s.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+'. All geometries must have compatible attributes; make sure "'+e+'" attribute exists among all geometries, or in none of them.'),null;void 0===o[e]&&(o[e]=[]),o[e].push(l.attributes[e]),h++}if(h!==s.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". Make sure all geometries have the same number of attributes."),null;if(a!==l.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const e in l.morphAttributes){if(!i.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". .morphAttributes must be consistent throughout all geometries."),null;void 0===n[e]&&(n[e]=[]),n[e].push(l.morphAttributes[e])}if(t){let e;if(r)e=l.index.count;else{if(void 0===l.attributes.position)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+A+". The geometry must have either an index or a position attribute"),null;e=l.attributes.position.count}g.addGroup(c,e,A),c+=e}}if(r){let A=0;const t=[];for(let r=0;r<e.length;++r){const s=e[r].index;for(let e=0;e<s.count;++e)t.push(s.getX(e)+A);A+=e[r].attributes.position.count}g.setIndex(t)}for(const A in o){const e=l(o[A]);if(!e)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" attribute."),null;g.setAttribute(A,e)}for(const A in n){const e=n[A][0].length;if(0===e)break;g.morphAttributes=g.morphAttributes||{},g.morphAttributes[A]=[];for(let t=0;t<e;++t){const e=[];for(let r=0;r<n[A].length;++r)e.push(n[A][r][t]);const r=l(e);if(!r)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+A+" morphAttribute."),null;g.morphAttributes[A].push(r)}}return g}(e,!0);return r}(s);return t=new A.InstancedMesh(o,i,r),t.baseMatrix=(new A.Matrix4).identity(),t}))}}class B extends A.Loader{constructor(A){super(A),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(A){return new f(A)})),this.register((function(A){return new L(A)})),this.register((function(A){return new M(A)})),this.register((function(A){return new b(A)})),this.register((function(A){return new y(A)})),this.register((function(A){return new w(A)})),this.register((function(A){return new D(A)})),this.register((function(A){return new x(A)})),this.register((function(A){return new p(A)})),this.register((function(A){return new R(A)})),this.register((function(A){return new m(A)})),this.register((function(A){return new T(A)})),this.register((function(A){return new S(A)})),this.register((function(A){return new u(A)})),this.register((function(A){return new F(A)})),this.register((function(A){return new G(A)}))}load(e,t,r,s){const i=this;let o;if(""!==this.resourcePath)o=this.resourcePath;else if(""!==this.path){const t=A.LoaderUtils.extractUrlBase(e);o=A.LoaderUtils.resolveURL(t,this.path)}else o=A.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);const n=function(A){s?s(A):console.error(A),i.manager.itemError(e),i.manager.itemEnd(e)},a=new A.FileLoader(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,(function(A){try{i.parse(A,o,(function(A){t(A),i.manager.itemEnd(e)}),n)}catch(A){n(A)}}),r,n)}setDRACOLoader(A){return this.dracoLoader=A,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(A){return this.ktx2Loader=A,this}setMeshoptDecoder(A){return this.meshoptDecoder=A,this}register(A){return-1===this.pluginCallbacks.indexOf(A)&&this.pluginCallbacks.push(A),this}unregister(A){return-1!==this.pluginCallbacks.indexOf(A)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(A),1),this}parse(A,e,t,r){let s;const i={},o={},n=new TextDecoder;if("string"==typeof A)s=JSON.parse(A);else if(A instanceof ArrayBuffer){if(n.decode(new Uint8Array(A,0,4))===_){try{i[E.KHR_BINARY_GLTF]=new N(A)}catch(A){return void(r&&r(A))}s=JSON.parse(i[E.KHR_BINARY_GLTF].content)}else s=JSON.parse(n.decode(A))}else s=A;if(void 0===s.asset||s.asset.version[0]<2)return void(r&&r(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const a=new lA(s,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});a.fileLoader.setRequestHeader(this.requestHeader);for(let A=0;A<this.pluginCallbacks.length;A++){const e=this.pluginCallbacks[A](a);e.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[e.name]=e,i[e.name]=!0}if(s.extensionsUsed)for(let A=0;A<s.extensionsUsed.length;++A){const e=s.extensionsUsed[A],t=s.extensionsRequired||[];switch(e){case E.KHR_MATERIALS_UNLIT:i[e]=new Q;break;case E.KHR_DRACO_MESH_COMPRESSION:i[e]=new v(s,this.dracoLoader);break;case E.KHR_TEXTURE_TRANSFORM:i[e]=new H;break;case E.KHR_MESH_QUANTIZATION:i[e]=new q;break;default:t.indexOf(e)>=0&&void 0===o[e]&&console.warn('THREE.GLTFLoader: Unknown extension "'+e+'".')}}a.setExtensions(i),a.setPlugins(o),a.parse(t,r)}parseAsync(A,e){const t=this;return new Promise((function(r,s){t.parse(A,e,r,s)}))}}function d(){let A={};return{get:function(e){return A[e]},add:function(e,t){A[e]=t},remove:function(e){delete A[e]},removeAll:function(){A={}}}}const E={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_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class u{constructor(A){this.parser=A,this.name=E.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const A=this.parser,e=this.parser.json.nodes||[];for(let t=0,r=e.length;t<r;t++){const r=e[t];r.extensions&&r.extensions[this.name]&&void 0!==r.extensions[this.name].light&&A._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(e){const t=this.parser,r="light:"+e;let s=t.cache.get(r);if(s)return s;const i=t.json,o=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e];let n;const a=new A.Color(16777215);void 0!==o.color&&a.setRGB(o.color[0],o.color[1],o.color[2],A.LinearSRGBColorSpace);const g=void 0!==o.range?o.range:0;switch(o.type){case"directional":n=new A.DirectionalLight(a),n.target.position.set(0,0,-1),n.add(n.target);break;case"point":n=new A.PointLight(a),n.distance=g;break;case"spot":n=new A.SpotLight(a),n.distance=g,o.spot=o.spot||{},o.spot.innerConeAngle=void 0!==o.spot.innerConeAngle?o.spot.innerConeAngle:0,o.spot.outerConeAngle=void 0!==o.spot.outerConeAngle?o.spot.outerConeAngle:Math.PI/4,n.angle=o.spot.outerConeAngle,n.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,n.target.position.set(0,0,-1),n.add(n.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return n.position.set(0,0,0),n.decay=2,sA(n,o),void 0!==o.intensity&&(n.intensity=o.intensity),n.name=t.createUniqueName(o.name||"light_"+e),s=Promise.resolve(n),t.cache.add(r,s),s}getDependency(A,e){if("light"===A)return this._loadLight(e)}createNodeAttachment(A){const e=this,t=this.parser,r=t.json.nodes[A],s=(r.extensions&&r.extensions[this.name]||{}).light;return void 0===s?null:this._loadLight(s).then((function(A){return t._getNodeRef(e.cache,s,A)}))}}class Q{constructor(){this.name=E.KHR_MATERIALS_UNLIT}getMaterialType(){return A.MeshBasicMaterial}extendParams(e,t,r){const s=[];e.color=new A.Color(1,1,1),e.opacity=1;const i=t.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const t=i.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],A.LinearSRGBColorSpace),e.opacity=t[3]}void 0!==i.baseColorTexture&&s.push(r.assignTexture(e,"map",i.baseColorTexture,A.SRGBColorSpace))}return Promise.all(s)}}class p{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(A,e){const t=this.parser.json.materials[A];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const r=t.extensions[this.name].emissiveStrength;return void 0!==r&&(e.emissiveIntensity=r),Promise.resolve()}}class f{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const r=this.parser,s=r.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const i=[],o=s.extensions[this.name];if(void 0!==o.clearcoatFactor&&(t.clearcoat=o.clearcoatFactor),void 0!==o.clearcoatTexture&&i.push(r.assignTexture(t,"clearcoatMap",o.clearcoatTexture)),void 0!==o.clearcoatRoughnessFactor&&(t.clearcoatRoughness=o.clearcoatRoughnessFactor),void 0!==o.clearcoatRoughnessTexture&&i.push(r.assignTexture(t,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),void 0!==o.clearcoatNormalTexture&&(i.push(r.assignTexture(t,"clearcoatNormalMap",o.clearcoatNormalTexture)),void 0!==o.clearcoatNormalTexture.scale)){const e=o.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new A.Vector2(e,e)}return Promise.all(i)}}class m{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,r=t.json.materials[A];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const s=[],i=r.extensions[this.name];return void 0!==i.iridescenceFactor&&(e.iridescence=i.iridescenceFactor),void 0!==i.iridescenceTexture&&s.push(t.assignTexture(e,"iridescenceMap",i.iridescenceTexture)),void 0!==i.iridescenceIor&&(e.iridescenceIOR=i.iridescenceIor),void 0===e.iridescenceThicknessRange&&(e.iridescenceThicknessRange=[100,400]),void 0!==i.iridescenceThicknessMinimum&&(e.iridescenceThicknessRange[0]=i.iridescenceThicknessMinimum),void 0!==i.iridescenceThicknessMaximum&&(e.iridescenceThicknessRange[1]=i.iridescenceThicknessMaximum),void 0!==i.iridescenceThicknessTexture&&s.push(t.assignTexture(e,"iridescenceThicknessMap",i.iridescenceThicknessTexture)),Promise.all(s)}}class y{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const r=this.parser,s=r.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const i=[];t.sheenColor=new A.Color(0,0,0),t.sheenRoughness=0,t.sheen=1;const o=s.extensions[this.name];if(void 0!==o.sheenColorFactor){const e=o.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],A.LinearSRGBColorSpace)}return void 0!==o.sheenRoughnessFactor&&(t.sheenRoughness=o.sheenRoughnessFactor),void 0!==o.sheenColorTexture&&i.push(r.assignTexture(t,"sheenColorMap",o.sheenColorTexture,A.SRGBColorSpace)),void 0!==o.sheenRoughnessTexture&&i.push(r.assignTexture(t,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(i)}}class w{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,r=t.json.materials[A];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const s=[],i=r.extensions[this.name];return void 0!==i.transmissionFactor&&(e.transmission=i.transmissionFactor),void 0!==i.transmissionTexture&&s.push(t.assignTexture(e,"transmissionMap",i.transmissionTexture)),Promise.all(s)}}class D{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const r=this.parser,s=r.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const i=[],o=s.extensions[this.name];t.thickness=void 0!==o.thicknessFactor?o.thicknessFactor:0,void 0!==o.thicknessTexture&&i.push(r.assignTexture(t,"thicknessMap",o.thicknessTexture)),t.attenuationDistance=o.attenuationDistance||1/0;const n=o.attenuationColor||[1,1,1];return t.attenuationColor=(new A.Color).setRGB(n[0],n[1],n[2],A.LinearSRGBColorSpace),Promise.all(i)}}class x{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser.json.materials[A];if(!t.extensions||!t.extensions[this.name])return Promise.resolve();const r=t.extensions[this.name];return e.ior=void 0!==r.ior?r.ior:1.5,Promise.resolve()}}class R{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const r=this.parser,s=r.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const i=[],o=s.extensions[this.name];t.specularIntensity=void 0!==o.specularFactor?o.specularFactor:1,void 0!==o.specularTexture&&i.push(r.assignTexture(t,"specularIntensityMap",o.specularTexture));const n=o.specularColorFactor||[1,1,1];return t.specularColor=(new A.Color).setRGB(n[0],n[1],n[2],A.LinearSRGBColorSpace),void 0!==o.specularColorTexture&&i.push(r.assignTexture(t,"specularColorMap",o.specularColorTexture,A.SRGBColorSpace)),Promise.all(i)}}class S{constructor(A){this.parser=A,this.name=E.EXT_MATERIALS_BUMP}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,r=t.json.materials[A];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const s=[],i=r.extensions[this.name];return e.bumpScale=void 0!==i.bumpFactor?i.bumpFactor:1,void 0!==i.bumpTexture&&s.push(t.assignTexture(e,"bumpMap",i.bumpTexture)),Promise.all(s)}}class T{constructor(A){this.parser=A,this.name=E.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?A.MeshPhysicalMaterial:null}extendMaterialParams(A,e){const t=this.parser,r=t.json.materials[A];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const s=[],i=r.extensions[this.name];return void 0!==i.anisotropyStrength&&(e.anisotropy=i.anisotropyStrength),void 0!==i.anisotropyRotation&&(e.anisotropyRotation=i.anisotropyRotation),void 0!==i.anisotropyTexture&&s.push(t.assignTexture(e,"anisotropyMap",i.anisotropyTexture)),Promise.all(s)}}class L{constructor(A){this.parser=A,this.name=E.KHR_TEXTURE_BASISU}loadTexture(A){const e=this.parser,t=e.json,r=t.textures[A];if(!r.extensions||!r.extensions[this.name])return null;const s=r.extensions[this.name],i=e.options.ktx2Loader;if(!i){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return e.loadTextureImage(A,s.source,i)}}class M{constructor(A){this.parser=A,this.name=E.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(A){const e=this.name,t=this.parser,r=t.json,s=r.textures[A];if(!s.extensions||!s.extensions[e])return null;const i=s.extensions[e],o=r.images[i.source];let n=t.textureLoader;if(o.uri){const A=t.options.manager.getHandler(o.uri);null!==A&&(n=A)}return this.detectSupport().then((function(s){if(s)return t.loadTextureImage(A,i.source,n);if(r.extensionsRequired&&r.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return t.loadTexture(A)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(A){const e=new Image;e.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.onload=e.onerror=function(){A(1===e.height)}}))),this.isSupported}}class b{constructor(A){this.parser=A,this.name=E.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(A){const e=this.name,t=this.parser,r=t.json,s=r.textures[A];if(!s.extensions||!s.extensions[e])return null;const i=s.extensions[e],o=r.images[i.source];let n=t.textureLoader;if(o.uri){const A=t.options.manager.getHandler(o.uri);null!==A&&(n=A)}return this.detectSupport().then((function(s){if(s)return t.loadTextureImage(A,i.source,n);if(r.extensionsRequired&&r.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return t.loadTexture(A)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(A){const e=new Image;e.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",e.onload=e.onerror=function(){A(1===e.height)}}))),this.isSupported}}class F{constructor(A){this.name=E.EXT_MESHOPT_COMPRESSION,this.parser=A}loadBufferView(A){const e=this.parser.json,t=e.bufferViews[A];if(t.extensions&&t.extensions[this.name]){const A=t.extensions[this.name],r=this.parser.getDependency("buffer",A.buffer),s=this.parser.options.meshoptDecoder;if(!s||!s.supported){if(e.extensionsRequired&&e.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return r.then((function(e){const t=A.byteOffset||0,r=A.byteLength||0,i=A.count,o=A.byteStride,n=new Uint8Array(e,t,r);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(i,o,n,A.mode,A.filter).then((function(A){return A.buffer})):s.ready.then((function(){const e=new ArrayBuffer(i*o);return s.decodeGltfBuffer(new Uint8Array(e),i,o,n,A.mode,A.filter),e}))}))}return null}}class G{constructor(A){this.name=E.EXT_MESH_GPU_INSTANCING,this.parser=A}createNodeMesh(e){const t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||void 0===r.mesh)return null;const s=t.meshes[r.mesh];for(const A of s.primitives)if(A.mode!==V.TRIANGLES&&A.mode!==V.TRIANGLE_STRIP&&A.mode!==V.TRIANGLE_FAN&&void 0!==A.mode)return null;const i=r.extensions[this.name].attributes,o=[],n={};for(const A in i)o.push(this.parser.getDependency("accessor",i[A]).then((e=>(n[A]=e,n[A]))));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then((e=>{const t=e.pop(),r=t.isGroup?t.children:[t],s=e[0].count,i=[];for(const e of r){const t=new A.Matrix4,r=new A.Vector3,o=new A.Quaternion,a=new A.Vector3(1,1,1),g=new A.InstancedMesh(e.geometry,e.material,s);for(let A=0;A<s;A++)n.TRANSLATION&&r.fromBufferAttribute(n.TRANSLATION,A),n.ROTATION&&o.fromBufferAttribute(n.ROTATION,A),n.SCALE&&a.fromBufferAttribute(n.SCALE,A),g.setMatrixAt(A,t.compose(r,o,a));for(const t in n)if("_COLOR_0"===t){const e=n[t];g.instanceColor=new A.InstancedBufferAttribute(e.array,e.itemSize,e.normalized)}else"TRANSLATION"!==t&&"ROTATION"!==t&&"SCALE"!==t&&e.geometry.setAttribute(t,n[t]);A.Object3D.prototype.copy.call(g,e),this.parser.assignFinalMaterial(g),i.push(g)}return t.isGroup?(t.clear(),t.add(...i),t):i[0]})))}}const _="glTF",k=1313821514,U=5130562;class N{constructor(A){this.name=E.KHR_BINARY_GLTF,this.content=null,this.body=null;const e=new DataView(A,0,12),t=new TextDecoder;if(this.header={magic:t.decode(new Uint8Array(A.slice(0,4))),version:e.getUint32(4,!0),length:e.getUint32(8,!0)},this.header.magic!==_)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const r=this.header.length-12,s=new DataView(A,12);let i=0;for(;i<r;){const e=s.getUint32(i,!0);i+=4;const r=s.getUint32(i,!0);if(i+=4,r===k){const r=new Uint8Array(A,12+i,e);this.content=t.decode(r)}else if(r===U){const t=12+i;this.body=A.slice(t,t+e)}i+=e}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class v{constructor(A,e){if(!e)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=E.KHR_DRACO_MESH_COMPRESSION,this.json=A,this.dracoLoader=e,this.dracoLoader.preload()}decodePrimitive(e,t){const r=this.json,s=this.dracoLoader,i=e.extensions[this.name].bufferView,o=e.extensions[this.name].attributes,n={},a={},g={};for(const A in o){const e=X[A]||A.toLowerCase();n[e]=o[A]}for(const A in e.attributes){const t=X[A]||A.toLowerCase();if(void 0!==o[A]){const s=r.accessors[e.attributes[A]],i=K[s.componentType];g[t]=i.name,a[t]=!0===s.normalized}}return t.getDependency("bufferView",i).then((function(e){return new Promise((function(t,r){s.decodeDracoFile(e,(function(A){for(const e in A.attributes){const t=A.attributes[e],r=a[e];void 0!==r&&(t.normalized=r)}t(A)}),n,g,A.LinearSRGBColorSpace,r)}))}))}}class H{constructor(){this.name=E.KHR_TEXTURE_TRANSFORM}extendTexture(A,e){return void 0!==e.texCoord&&e.texCoord!==A.channel||void 0!==e.offset||void 0!==e.rotation||void 0!==e.scale?(A=A.clone(),void 0!==e.texCoord&&(A.channel=e.texCoord),void 0!==e.offset&&A.offset.fromArray(e.offset),void 0!==e.rotation&&(A.rotation=e.rotation),void 0!==e.scale&&A.repeat.fromArray(e.scale),A.needsUpdate=!0,A):A}}class q{constructor(){this.name=E.KHR_MESH_QUANTIZATION}}class P extends A.Interpolant{constructor(A,e,t,r){super(A,e,t,r)}copySampleValue_(A){const e=this.resultBuffer,t=this.sampleValues,r=this.valueSize,s=A*r*3+r;for(let A=0;A!==r;A++)e[A]=t[s+A];return e}interpolate_(A,e,t,r){const s=this.resultBuffer,i=this.sampleValues,o=this.valueSize,n=2*o,a=3*o,g=r-e,l=(t-e)/g,c=l*l,h=c*l,I=A*a,C=I-a,B=-2*h+3*c,d=h-c,E=1-B,u=d-c+l;for(let A=0;A!==o;A++){const e=i[C+A+o],t=i[C+A+n]*g,r=i[I+A+o],a=i[I+A]*g;s[A]=E*e+u*t+B*r+d*a}return s}}const O=new A.Quaternion;class J extends P{interpolate_(A,e,t,r){const s=super.interpolate_(A,e,t,r);return O.fromArray(s).normalize().toArray(s),s}}const V={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},K={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},j={9728:A.NearestFilter,9729:A.LinearFilter,9984:A.NearestMipmapNearestFilter,9985:A.LinearMipmapNearestFilter,9986:A.NearestMipmapLinearFilter,9987:A.LinearMipmapLinearFilter},Y={33071:A.ClampToEdgeWrapping,33648:A.MirroredRepeatWrapping,10497:A.RepeatWrapping},W={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},X={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},Z={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},$={CUBICSPLINE:void 0,LINEAR:A.InterpolateLinear,STEP:A.InterpolateDiscrete},AA="OPAQUE",eA="MASK",tA="BLEND";function rA(A,e,t){for(const r in t.extensions)void 0===A[r]&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[r]=t.extensions[r])}function sA(A,e){void 0!==e.extras&&("object"==typeof e.extras?Object.assign(A.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function iA(A,e){if(A.updateMorphTargets(),void 0!==e.weights)for(let t=0,r=e.weights.length;t<r;t++)A.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(A.morphTargetInfluences.length===t.length){A.morphTargetDictionary={};for(let e=0,r=t.length;e<r;e++)A.morphTargetDictionary[t[e]]=e}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function oA(A){let e;const t=A.extensions&&A.extensions[E.KHR_DRACO_MESH_COMPRESSION];if(e=t?"draco:"+t.bufferView+":"+t.indices+":"+nA(t.attributes):A.indices+":"+nA(A.attributes)+":"+A.mode,void 0!==A.targets)for(let t=0,r=A.targets.length;t<r;t++)e+=":"+nA(A.targets[t]);return e}function nA(A){let e="";const t=Object.keys(A).sort();for(let r=0,s=t.length;r<s;r++)e+=t[r]+":"+A[t[r]]+";";return e}function aA(A){switch(A){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const gA=new A.Matrix4;class lA{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new d,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let r=!1,s=!1,i=-1;"undefined"!=typeof navigator&&(r=!0===/^((?!chrome|android).)*safari/i.test(navigator.userAgent),s=navigator.userAgent.indexOf("Firefox")>-1,i=s?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),"undefined"==typeof createImageBitmap||r||s&&i<98?this.textureLoader=new A.TextureLoader(this.options.manager):this.textureLoader=new A.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new A.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(A){this.extensions=A}setPlugins(A){this.plugins=A}parse(A,e){const t=this,r=this.json,s=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(A){return A._markDefs&&A._markDefs()})),Promise.all(this._invokeAll((function(A){return A.beforeRoot&&A.beforeRoot()}))).then((function(){return Promise.all([t.getDependencies("scene"),t.getDependencies("animation"),t.getDependencies("camera")])})).then((function(e){const i={scene:e[0][r.scene||0],scenes:e[0],animations:e[1],cameras:e[2],asset:r.asset,parser:t,userData:{}};return rA(s,i,r),sA(i,r),Promise.all(t._invokeAll((function(A){return A.afterRoot&&A.afterRoot(i)}))).then((function(){A(i)}))})).catch(e)}_markDefs(){const A=this.json.nodes||[],e=this.json.skins||[],t=this.json.meshes||[];for(let t=0,r=e.length;t<r;t++){const r=e[t].joints;for(let e=0,t=r.length;e<t;e++)A[r[e]].isBone=!0}for(let e=0,r=A.length;e<r;e++){const r=A[e];void 0!==r.mesh&&(this._addNodeRef(this.meshCache,r.mesh),void 0!==r.skin&&(t[r.mesh].isSkinnedMesh=!0)),void 0!==r.camera&&this._addNodeRef(this.cameraCache,r.camera)}}_addNodeRef(A,e){void 0!==e&&(void 0===A.refs[e]&&(A.refs[e]=A.uses[e]=0),A.refs[e]++)}_getNodeRef(A,e,t){if(A.refs[e]<=1)return t;const r=t.clone(),s=(A,e)=>{const t=this.associations.get(A);null!=t&&this.associations.set(e,t);for(const[t,r]of A.children.entries())s(r,e.children[t])};return s(t,r),r.name+="_instance_"+A.uses[e]++,r}_invokeOne(A){const e=Object.values(this.plugins);e.push(this);for(let t=0;t<e.length;t++){const r=A(e[t]);if(r)return r}return null}_invokeAll(A){const e=Object.values(this.plugins);e.unshift(this);const t=[];for(let r=0;r<e.length;r++){const s=A(e[r]);s&&t.push(s)}return t}getDependency(A,e){const t=A+":"+e;let r=this.cache.get(t);if(!r){switch(A){case"scene":r=this.loadScene(e);break;case"node":r=this._invokeOne((function(A){return A.loadNode&&A.loadNode(e)}));break;case"mesh":r=this._invokeOne((function(A){return A.loadMesh&&A.loadMesh(e)}));break;case"accessor":r=this.loadAccessor(e);break;case"bufferView":r=this._invokeOne((function(A){return A.loadBufferView&&A.loadBufferView(e)}));break;case"buffer":r=this.loadBuffer(e);break;case"material":r=this._invokeOne((function(A){return A.loadMaterial&&A.loadMaterial(e)}));break;case"texture":r=this._invokeOne((function(A){return A.loadTexture&&A.loadTexture(e)}));break;case"skin":r=this.loadSkin(e);break;case"animation":r=this._invokeOne((function(A){return A.loadAnimation&&A.loadAnimation(e)}));break;case"camera":r=this.loadCamera(e);break;default:if(r=this._invokeOne((function(t){return t!=this&&t.getDependency&&t.getDependency(A,e)})),!r)throw new Error("Unknown type: "+A)}this.cache.add(t,r)}return r}getDependencies(A){let e=this.cache.get(A);if(!e){const t=this,r=this.json[A+("mesh"===A?"es":"s")]||[];e=Promise.all(r.map((function(e,r){return t.getDependency(A,r)}))),this.cache.add(A,e)}return e}loadBuffer(e){const t=this.json.buffers[e],r=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[E.KHR_BINARY_GLTF].body);const s=this.options;return new Promise((function(e,i){r.load(A.LoaderUtils.resolveURL(t.uri,s.path),e,void 0,(function(){i(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(A){const e=this.json.bufferViews[A];return this.getDependency("buffer",e.buffer).then((function(A){const t=e.byteLength||0,r=e.byteOffset||0;return A.slice(r,r+t)}))}loadAccessor(e){const t=this,r=this.json,s=this.json.accessors[e];if(void 0===s.bufferView&&void 0===s.sparse){const e=W[s.type],t=K[s.componentType],r=!0===s.normalized,i=new t(s.count*e);return Promise.resolve(new A.BufferAttribute(i,e,r))}const i=[];return void 0!==s.bufferView?i.push(this.getDependency("bufferView",s.bufferView)):i.push(null),void 0!==s.sparse&&(i.push(this.getDependency("bufferView",s.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",s.sparse.values.bufferView))),Promise.all(i).then((function(e){const i=e[0],o=W[s.type],n=K[s.componentType],a=n.BYTES_PER_ELEMENT,g=a*o,l=s.byteOffset||0,c=void 0!==s.bufferView?r.bufferViews[s.bufferView].byteStride:void 0,h=!0===s.normalized;let I,C;if(c&&c!==g){const e=Math.floor(l/c),r="InterleavedBuffer:"+s.bufferView+":"+s.componentType+":"+e+":"+s.count;let g=t.cache.get(r);g||(I=new n(i,e*c,s.count*c/a),g=new A.InterleavedBuffer(I,c/a),t.cache.add(r,g)),C=new A.InterleavedBufferAttribute(g,o,l%c/a,h)}else I=null===i?new n(s.count*o):new n(i,l,s.count*o),C=new A.BufferAttribute(I,o,h);if(void 0!==s.sparse){const t=W.SCALAR,r=K[s.sparse.indices.componentType],a=s.sparse.indices.byteOffset||0,g=s.sparse.values.byteOffset||0,l=new r(e[1],a,s.sparse.count*t),c=new n(e[2],g,s.sparse.count*o);null!==i&&(C=new A.BufferAttribute(C.array.slice(),C.itemSize,C.normalized));for(let A=0,e=l.length;A<e;A++){const e=l[A];if(C.setX(e,c[A*o]),o>=2&&C.setY(e,c[A*o+1]),o>=3&&C.setZ(e,c[A*o+2]),o>=4&&C.setW(e,c[A*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return C}))}loadTexture(A){const e=this.json,t=this.options,r=e.textures[A].source,s=e.images[r];let i=this.textureLoader;if(s.uri){const A=t.manager.getHandler(s.uri);null!==A&&(i=A)}return this.loadTextureImage(A,r,i)}loadTextureImage(e,t,r){const s=this,i=this.json,o=i.textures[e],n=i.images[t],a=(n.uri||n.bufferView)+":"+o.sampler;if(this.textureCache[a])return this.textureCache[a];const g=this.loadImageSource(t,r).then((function(t){t.flipY=!1,t.name=o.name||n.name||"",""===t.name&&"string"==typeof n.uri&&!1===n.uri.startsWith("data:image/")&&(t.name=n.uri);const r=(i.samplers||{})[o.sampler]||{};return t.magFilter=j[r.magFilter]||A.LinearFilter,t.minFilter=j[r.minFilter]||A.LinearMipmapLinearFilter,t.wrapS=Y[r.wrapS]||A.RepeatWrapping,t.wrapT=Y[r.wrapT]||A.RepeatWrapping,s.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[a]=g,g}loadImageSource(e,t){const r=this,s=this.json,i=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then((A=>A.clone()));const o=s.images[e],n=self.URL||self.webkitURL;let a=o.uri||"",g=!1;if(void 0!==o.bufferView)a=r.getDependency("bufferView",o.bufferView).then((function(A){g=!0;const e=new Blob([A],{type:o.mimeType});return a=n.createObjectURL(e),a}));else if(void 0===o.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(a).then((function(e){return new Promise((function(r,s){let o=r;!0===t.isImageBitmapLoader&&(o=function(e){const t=new A.Texture(e);t.needsUpdate=!0,r(t)}),t.load(A.LoaderUtils.resolveURL(e,i.path),o,void 0,s)}))})).then((function(A){var e;return!0===g&&n.revokeObjectURL(a),A.userData.mimeType=o.mimeType||((e=o.uri).search(/\.jpe?g($|\?)/i)>0||0===e.search(/^data\:image\/jpeg/)?"image/jpeg":e.search(/\.webp($|\?)/i)>0||0===e.search(/^data\:image\/webp/)?"image/webp":"image/png"),A})).catch((function(A){throw console.error("THREE.GLTFLoader: Couldn't load texture",a),A}));return this.sourceCache[e]=l,l}assignTexture(A,e,t,r){const s=this;return this.getDependency("texture",t.index).then((function(i){if(!i)return null;if(void 0!==t.texCoord&&t.texCoord>0&&((i=i.clone()).channel=t.texCoord),s.extensions[E.KHR_TEXTURE_TRANSFORM]){const A=void 0!==t.extensions?t.extensions[E.KHR_TEXTURE_TRANSFORM]:void 0;if(A){const e=s.associations.get(i);i=s.extensions[E.KHR_TEXTURE_TRANSFORM].extendTexture(i,A),s.associations.set(i,e)}}return void 0!==r&&(i.colorSpace=r),A[e]=i,i}))}assignFinalMaterial(e){const t=e.geometry;let r=e.material;const s=void 0===t.attributes.tangent,i=void 0!==t.attributes.color,o=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+r.uuid;let t=this.cache.get(e);t||(t=new A.PointsMaterial,A.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,t.sizeAttenuation=!1,this.cache.add(e,t)),r=t}else if(e.isLine){const e="LineBasicMaterial:"+r.uuid;let t=this.cache.get(e);t||(t=new A.LineBasicMaterial,A.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,this.cache.add(e,t)),r=t}if(s||i||o){let A="ClonedMaterial:"+r.uuid+":";s&&(A+="derivative-tangents:"),i&&(A+="vertex-colors:"),o&&(A+="flat-shading:");let e=this.cache.get(A);e||(e=r.clone(),i&&(e.vertexColors=!0),o&&(e.flatShading=!0),s&&(e.normalScale&&(e.normalScale.y*=-1),e.clearcoatNormalScale&&(e.clearcoatNormalScale.y*=-1)),this.cache.add(A,e),this.associations.set(e,this.associations.get(r))),r=e}e.material=r}getMaterialType(){return A.MeshStandardMaterial}loadMaterial(e){const t=this,r=this.json,s=this.extensions,i=r.materials[e];let o;const n={},a=[];if((i.extensions||{})[E.KHR_MATERIALS_UNLIT]){const A=s[E.KHR_MATERIALS_UNLIT];o=A.getMaterialType(),a.push(A.extendParams(n,i,t))}else{const r=i.pbrMetallicRoughness||{};if(n.color=new A.Color(1,1,1),n.opacity=1,Array.isArray(r.baseColorFactor)){const e=r.baseColorFactor;n.color.setRGB(e[0],e[1],e[2],A.LinearSRGBColorSpace),n.opacity=e[3]}void 0!==r.baseColorTexture&&a.push(t.assignTexture(n,"map",r.baseColorTexture,A.SRGBColorSpace)),n.metalness=void 0!==r.metallicFactor?r.metallicFactor:1,n.roughness=void 0!==r.roughnessFactor?r.roughnessFactor:1,void 0!==r.metallicRoughnessTexture&&(a.push(t.assignTexture(n,"metalnessMap",r.metallicRoughnessTexture)),a.push(t.assignTexture(n,"roughnessMap",r.metallicRoughnessTexture))),o=this._invokeOne((function(A){return A.getMaterialType&&A.getMaterialType(e)})),a.push(Promise.all(this._invokeAll((function(A){return A.extendMaterialParams&&A.extendMaterialParams(e,n)}))))}!0===i.doubleSided&&(n.side=A.DoubleSide);const g=i.alphaMode||AA;if(g===tA?(n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,g===eA&&(n.alphaTest=void 0!==i.alphaCutoff?i.alphaCutoff:.5)),void 0!==i.normalTexture&&o!==A.MeshBasicMaterial&&(a.push(t.assignTexture(n,"normalMap",i.normalTexture)),n.normalScale=new A.Vector2(1,1),void 0!==i.normalTexture.scale)){const A=i.normalTexture.scale;n.normalScale.set(A,A)}if(void 0!==i.occlusionTexture&&o!==A.MeshBasicMaterial&&(a.push(t.assignTexture(n,"aoMap",i.occlusionTexture)),void 0!==i.occlusionTexture.strength&&(n.aoMapIntensity=i.occlusionTexture.strength)),void 0!==i.emissiveFactor&&o!==A.MeshBasicMaterial){const e=i.emissiveFactor;n.emissive=(new A.Color).setRGB(e[0],e[1],e[2],A.LinearSRGBColorSpace)}return void 0!==i.emissiveTexture&&o!==A.MeshBasicMaterial&&a.push(t.assignTexture(n,"emissiveMap",i.emissiveTexture,A.SRGBColorSpace)),Promise.all(a).then((function(){const A=new o(n);return i.name&&(A.name=i.name),sA(A,i),t.associations.set(A,{materials:e}),i.extensions&&rA(s,A,i),A}))}createUniqueName(e){const t=A.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,r=this.extensions,s=this.primitiveCache;function i(A){return r[E.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(A,t).then((function(e){return cA(e,A,t)}))}const o=[];for(let r=0,n=e.length;r<n;r++){const n=e[r],a=oA(n),g=s[a];if(g)o.push(g.promise);else{let e;e=n.extensions&&n.extensions[E.KHR_DRACO_MESH_COMPRESSION]?i(n):cA(new A.BufferGeometry,n,t),s[a]={primitive:n,promise:e},o.push(e)}}return Promise.all(o)}loadMesh(e){const t=this,r=this.json,s=this.extensions,i=r.meshes[e],o=i.primitives,n=[];for(let e=0,t=o.length;e<t;e++){const t=void 0===o[e].material?(void 0===(a=this.cache).DefaultMaterial&&(a.DefaultMaterial=new A.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:A.FrontSide})),a.DefaultMaterial):this.getDependency("material",o[e].material);n.push(t)}var a;return n.push(t.loadGeometries(o)),Promise.all(n).then((function(r){const n=r.slice(0,r.length-1),a=r[r.length-1],g=[];for(let r=0,l=a.length;r<l;r++){const l=a[r],h=o[r];let I;const C=n[r];if(h.mode===V.TRIANGLES||h.mode===V.TRIANGLE_STRIP||h.mode===V.TRIANGLE_FAN||void 0===h.mode)I=!0===i.isSkinnedMesh?new A.SkinnedMesh(l,C):new A.Mesh(l,C),!0===I.isSkinnedMesh&&I.normalizeSkinWeights(),h.mode===V.TRIANGLE_STRIP?I.geometry=c(I.geometry,A.TriangleStripDrawMode):h.mode===V.TRIANGLE_FAN&&(I.geometry=c(I.geometry,A.TriangleFanDrawMode));else if(h.mode===V.LINES)I=new A.LineSegments(l,C);else if(h.mode===V.LINE_STRIP)I=new A.Line(l,C);else if(h.mode===V.LINE_LOOP)I=new A.LineLoop(l,C);else{if(h.mode!==V.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+h.mode);I=new A.Points(l,C)}Object.keys(I.geometry.morphAttributes).length>0&&iA(I,i),I.name=t.createUniqueName(i.name||"mesh_"+e),sA(I,i),h.extensions&&rA(s,I,h),t.assignFinalMaterial(I),g.push(I)}for(let A=0,r=g.length;A<r;A++)t.associations.set(g[A],{meshes:e,primitives:A});if(1===g.length)return i.extensions&&rA(s,g[0],i),g[0];const l=new A.Group;i.extensions&&rA(s,l,i),t.associations.set(l,{meshes:e});for(let A=0,e=g.length;A<e;A++)l.add(g[A]);return l}))}loadCamera(e){let t;const r=this.json.cameras[e],s=r[r.type];if(s)return"perspective"===r.type?t=new A.PerspectiveCamera(A.MathUtils.radToDeg(s.yfov),s.aspectRatio||1,s.znear||1,s.zfar||2e6):"orthographic"===r.type&&(t=new A.OrthographicCamera(-s.xmag,s.xmag,s.ymag,-s.ymag,s.znear,s.zfar)),r.name&&(t.name=this.createUniqueName(r.name)),sA(t,r),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],r=[];for(let A=0,e=t.joints.length;A<e;A++)r.push(this._loadNodeShallow(t.joints[A]));return void 0!==t.inverseBindMatrices?r.push(this.getDependency("accessor",t.inverseBindMatrices)):r.push(null),Promise.all(r).then((function(e){const r=e.pop(),s=e,i=[],o=[];for(let e=0,n=s.length;e<n;e++){const n=s[e];if(n){i.push(n);const t=new A.Matrix4;null!==r&&t.fromArray(r.array,16*e),o.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new A.Skeleton(i,o)}))}loadAnimation(e){const t=this.json,r=this,s=t.animations[e],i=s.name?s.name:"animation_"+e,o=[],n=[],a=[],g=[],l=[];for(let A=0,e=s.channels.length;A<e;A++){const e=s.channels[A],t=s.samplers[e.sampler],r=e.target,i=r.node,c=void 0!==s.parameters?s.parameters[t.input]:t.input,h=void 0!==s.parameters?s.parameters[t.output]:t.output;void 0!==r.node&&(o.push(this.getDependency("node",i)),n.push(this.getDependency("accessor",c)),a.push(this.getDependency("accessor",h)),g.push(t),l.push(r))}return Promise.all([Promise.all(o),Promise.all(n),Promise.all(a),Promise.all(g),Promise.all(l)]).then((function(e){const t=e[0],s=e[1],o=e[2],n=e[3],a=e[4],g=[];for(let A=0,e=t.length;A<e;A++){const e=t[A],i=s[A],l=o[A],c=n[A],h=a[A];if(void 0===e)continue;e.updateMatrix&&e.updateMatrix();const I=r._createAnimationTracks(e,i,l,c,h);if(I)for(let A=0;A<I.length;A++)g.push(I[A])}return new A.AnimationClip(i,void 0,g)}))}createNodeMesh(A){const e=this.json,t=this,r=e.nodes[A];return void 0===r.mesh?null:t.getDependency("mesh",r.mesh).then((function(A){const e=t._getNodeRef(t.meshCache,r.mesh,A);return void 0!==r.weights&&e.traverse((function(A){if(A.isMesh)for(let e=0,t=r.weights.length;e<t;e++)A.morphTargetInfluences[e]=r.weights[e]})),e}))}loadNode(A){const e=this,t=this.json.nodes[A],r=e._loadNodeShallow(A),s=[],i=t.children||[];for(let A=0,t=i.length;A<t;A++)s.push(e.getDependency("node",i[A]));const o=void 0===t.skin?Promise.resolve(null):e.getDependency("skin",t.skin);return Promise.all([r,Promise.all(s),o]).then((function(A){const e=A[0],t=A[1],r=A[2];null!==r&&e.traverse((function(A){A.isSkinnedMesh&&A.bind(r,gA)}));for(let A=0,r=t.length;A<r;A++)e.add(t[A]);return e}))}_loadNodeShallow(e){const t=this.json,r=this.extensions,s=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const i=t.nodes[e],o=i.name?s.createUniqueName(i.name):"",n=[],a=s._invokeOne((function(A){return A.createNodeMesh&&A.createNodeMesh(e)}));return a&&n.push(a),void 0!==i.camera&&n.push(s.getDependency("camera",i.camera).then((function(A){return s._getNodeRef(s.cameraCache,i.camera,A)}))),s._invokeAll((function(A){return A.createNodeAttachment&&A.createNodeAttachment(e)})).forEach((function(A){n.push(A)})),this.nodeCache[e]=Promise.all(n).then((function(t){let n;if(n=!0===i.isBone?new A.Bone:t.length>1?new A.Group:1===t.length?t[0]:new A.Object3D,n!==t[0])for(let A=0,e=t.length;A<e;A++)n.add(t[A]);if(i.name&&(n.userData.name=i.name,n.name=o),sA(n,i),i.extensions&&rA(r,n,i),void 0!==i.matrix){const e=new A.Matrix4;e.fromArray(i.matrix),n.applyMatrix4(e)}else void 0!==i.translation&&n.position.fromArray(i.translation),void 0!==i.rotation&&n.quaternion.fromArray(i.rotation),void 0!==i.scale&&n.scale.fromArray(i.scale);return s.associations.has(n)||s.associations.set(n,{}),s.associations.get(n).nodes=e,n})),this.nodeCache[e]}loadScene(e){const t=this.extensions,r=this.json.scenes[e],s=this,i=new A.Group;r.name&&(i.name=s.createUniqueName(r.name)),sA(i,r),r.extensions&&rA(t,i,r);const o=r.nodes||[],n=[];for(let A=0,e=o.length;A<e;A++)n.push(s.getDependency("node",o[A]));return Promise.all(n).then((function(e){for(let A=0,t=e.length;A<t;A++)i.add(e[A]);return s.associations=(e=>{const t=new Map;for(const[e,r]of s.associations)(e instanceof A.Material||e instanceof A.Texture)&&t.set(e,r);return e.traverse((A=>{const e=s.associations.get(A);null!=e&&t.set(A,e)})),t})(i),i}))}_createAnimationTracks(e,t,r,s,i){const o=[],n=e.name?e.name:e.uuid,a=[];let g;switch(Z[i.path]===Z.weights?e.traverse((function(A){A.morphTargetInfluences&&a.push(A.name?A.name:A.uuid)})):a.push(n),Z[i.path]){case Z.weights:g=A.NumberKeyframeTrack;break;case Z.rotation:g=A.QuaternionKeyframeTrack;break;case Z.position:case Z.scale:g=A.VectorKeyframeTrack;break;default:if(1===r.itemSize)g=A.NumberKeyframeTrack;else g=A.VectorKeyframeTrack}const l=void 0!==s.interpolation?$[s.interpolation]:A.InterpolateLinear,c=this._getArrayFromAccessor(r);for(let A=0,e=a.length;A<e;A++){const e=new g(a[A]+"."+Z[i.path],t.array,c,l);"CUBICSPLINE"===s.interpolation&&this._createCubicSplineTrackInterpolant(e),o.push(e)}return o}_getArrayFromAccessor(A){let e=A.array;if(A.normalized){const A=aA(e.constructor),t=new Float32Array(e.length);for(let r=0,s=e.length;r<s;r++)t[r]=e[r]*A;e=t}return e}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(e){return new(this instanceof A.QuaternionKeyframeTrack?J:P)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function cA(e,t,r){const s=t.attributes,i=[];function o(A,t){return r.getDependency("accessor",A).then((function(A){e.setAttribute(t,A)}))}for(const A in s){const t=X[A]||A.toLowerCase();t in e.attributes||i.push(o(s[A],t))}if(void 0!==t.indices&&!e.index){const A=r.getDependency("accessor",t.indices).then((function(A){e.setIndex(A)}));i.push(A)}return A.ColorManagement.workingColorSpace!==A.LinearSRGBColorSpace&&"COLOR_0"in s&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${A.ColorManagement.workingColorSpace}" not supported.`),sA(e,t),function(e,t,r){const s=t.attributes,i=new A.Box3;if(void 0===s.POSITION)return;{const e=r.json.accessors[s.POSITION],t=e.min,o=e.max;if(void 0===t||void 0===o)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(i.set(new A.Vector3(t[0],t[1],t[2]),new A.Vector3(o[0],o[1],o[2])),e.normalized){const A=aA(K[e.componentType]);i.min.multiplyScalar(A),i.max.multiplyScalar(A)}}const o=t.targets;if(void 0!==o){const e=new A.Vector3,t=new A.Vector3;for(let A=0,s=o.length;A<s;A++){const s=o[A];if(void 0!==s.POSITION){const A=r.json.accessors[s.POSITION],i=A.min,o=A.max;if(void 0!==i&&void 0!==o){if(t.setX(Math.max(Math.abs(i[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(i[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(i[2]),Math.abs(o[2]))),A.normalized){const e=aA(K[A.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}i.expandByVector(e)}e.boundingBox=i;const n=new A.Sphere;i.getCenter(n.center),n.radius=i.min.distanceTo(i.max)/2,e.boundingSphere=n}(e,t,r),Promise.all(i).then((function(){return void 0!==t.targets?function(A,e,t){let r=!1,s=!1,i=!1;for(let A=0,t=e.length;A<t;A++){const t=e[A];if(void 0!==t.POSITION&&(r=!0),void 0!==t.NORMAL&&(s=!0),void 0!==t.COLOR_0&&(i=!0),r&&s&&i)break}if(!r&&!s&&!i)return Promise.resolve(A);const o=[],n=[],a=[];for(let g=0,l=e.length;g<l;g++){const l=e[g];if(r){const e=void 0!==l.POSITION?t.getDependency("accessor",l.POSITION):A.attributes.position;o.push(e)}if(s){const e=void 0!==l.NORMAL?t.getDependency("accessor",l.NORMAL):A.attributes.normal;n.push(e)}if(i){const e=void 0!==l.COLOR_0?t.getDependency("accessor",l.COLOR_0):A.attributes.color;a.push(e)}}return Promise.all([Promise.all(o),Promise.all(n),Promise.all(a)]).then((function(e){const t=e[0],o=e[1],n=e[2];return r&&(A.morphAttributes.position=t),s&&(A.morphAttributes.normal=o),i&&(A.morphAttributes.color=n),A.morphTargetsRelative=!0,A}))}(e,t.targets,r):e}))}const hA=new WeakMap;class IA extends A.Loader{constructor(A){super(A),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(A){return this.decoderPath=A,this}setDecoderConfig(A){return this.decoderConfig=A,this}setWorkerLimit(A){return this.workerLimit=A,this}load(e,t,r,s){const i=new A.FileLoader(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,(A=>{this.parse(A,t,s)}),r,s)}parse(e,t,r=(()=>{})){this.decodeDracoFile(e,t,null,null,A.SRGBColorSpace).catch(r)}decodeDracoFile(e,t,r,s,i=A.LinearSRGBColorSpace,o=(()=>{})){const n={attributeIDs:r||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!r,vertexColorSpace:i};return this.decodeGeometry(e,n).then(t).catch(o)}decodeGeometry(A,e){const t=JSON.stringify(e);if(hA.has(A)){const e=hA.get(A);if(e.key===t)return e.promise;if(0===A.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r;const s=this.workerNextTaskID++,i=A.byteLength,o=this._getWorker(s,i).then((t=>(r=t,new Promise(((t,i)=>{r._callbacks[s]={resolve:t,reject:i},r.postMessage({type:"decode",id:s,taskConfig:e,buffer:A},[A])}))))).then((A=>this._createGeometry(A.geometry)));return o.catch((()=>!0)).then((()=>{r&&s&&this._releaseTask(r,s)})),hA.set(A,{key:t,promise:o}),o}_createGeometry(e){const t=new A.BufferGeometry;e.index&&t.setIndex(new A.BufferAttribute(e.index.array,1));for(let r=0;r<e.attributes.length;r++){const s=e.attributes[r],i=s.name,o=s.array,n=s.itemSize,a=new A.BufferAttribute(o,n);"color"===i&&(this._assignVertexColorSpace(a,s.vertexColorSpace),a.normalized=o instanceof Float32Array==!1),t.setAttribute(i,a)}return t}_assignVertexColorSpace(e,t){if(t!==A.SRGBColorSpace)return;const r=new A.Color;for(let A=0,t=e.count;A<t;A++)r.fromBufferAttribute(e,A).convertSRGBToLinear(),e.setXYZ(A,r.r,r.g,r.b)}_loadLibrary(e,t){const r=new A.FileLoader(this.manager);return r.setPath(this.decoderPath),r.setResponseType(t),r.setWithCredentials(this.withCredentials),new Promise(((A,t)=>{r.load(e,A,void 0,t)}))}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const A="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,e=[];return A?e.push(this._loadLibrary("draco_decoder.js","text")):(e.push(this._loadLibrary("draco_wasm_wrapper.js","text")),e.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(e).then((e=>{const t=e[0];A||(this.decoderConfig.wasmBinary=e[1]);const r=CA.toString(),s=["/* draco decoder */",t,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([s]))})),this.decoderPending}_getWorker(A,e){return this._initDecoder().then((()=>{if(this.workerPool.length<this.workerLimit){const A=new Worker(this.workerSourceURL);A._callbacks={},A._taskCosts={},A._taskLoad=0,A.postMessage({type:"init",decoderConfig:this.decoderConfig}),A.onmessage=function(e){const t=e.data;switch(t.type){case"decode":A._callbacks[t.id].resolve(t);break;case"error":A._callbacks[t.id].reject(t);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+t.type+'"')}},this.workerPool.push(A)}else this.workerPool.sort((function(A,e){return A._taskLoad>e._taskLoad?-1:1}));const t=this.workerPool[this.workerPool.length-1];return t._taskCosts[A]=e,t._taskLoad+=e,t}))}_releaseTask(A,e){A._taskLoad-=A._taskCosts[e],delete A._callbacks[e],delete A._taskCosts[e]}debug(){console.log("Task load: ",this.workerPool.map((A=>A._taskLoad)))}dispose(){for(let A=0;A<this.workerPool.length;++A)this.workerPool[A].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function CA(){let A,e;function t(A,e,t,r,s,i){const o=i.num_components(),n=t.num_points()*o,a=n*s.BYTES_PER_ELEMENT,g=function(A,e){switch(e){case Float32Array:return A.DT_FLOAT32;case Int8Array:return A.DT_INT8;case Int16Array:return A.DT_INT16;case Int32Array:return A.DT_INT32;case Uint8Array:return A.DT_UINT8;case Uint16Array:return A.DT_UINT16;case Uint32Array:return A.DT_UINT32}}(A,s),l=A._malloc(a);e.GetAttributeDataArrayForAllPoints(t,i,g,a,l);const c=new s(A.HEAPF32.buffer,l,n).slice();return A._free(l),{name:r,array:c,itemSize:o}}onmessage=function(r){const s=r.data;switch(s.type){case"init":A=s.decoderConfig,e=new Promise((function(e){A.onModuleLoaded=function(A){e({draco:A})},DracoDecoderModule(A)}));break;case"decode":const r=s.buffer,i=s.taskConfig;e.then((A=>{const e=A.draco,o=new e.Decoder;try{const A=function(A,e,r,s){const i=s.attributeIDs,o=s.attributeTypes;let n,a;const g=e.GetEncodedGeometryType(r);if(g===A.TRIANGULAR_MESH)n=new A.Mesh,a=e.DecodeArrayToMesh(r,r.byteLength,n);else{if(g!==A.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");n=new A.PointCloud,a=e.DecodeArrayToPointCloud(r,r.byteLength,n)}if(!a.ok()||0===n.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+a.error_msg());const l={index:null,attributes:[]};for(const r in i){const a=self[o[r]];let g,c;if(s.useUniqueIDs)c=i[r],g=e.GetAttributeByUniqueId(n,c);else{if(c=e.GetAttributeId(n,A[i[r]]),-1===c)continue;g=e.GetAttribute(n,c)}const h=t(A,e,n,r,a,g);"color"===r&&(h.vertexColorSpace=s.vertexColorSpace),l.attributes.push(h)}g===A.TRIANGULAR_MESH&&(l.index=function(A,e,t){const r=t.num_faces(),s=3*r,i=4*s,o=A._malloc(i);e.GetTrianglesUInt32Array(t,i,o);const n=new Uint32Array(A.HEAPF32.buffer,o,s).slice();return A._free(o),{array:n,itemSize:1}}(A,e,n));return A.destroy(n),l}(e,o,new Int8Array(r),i),n=A.attributes.map((A=>A.array.buffer));A.index&&n.push(A.index.array.buffer),self.postMessage({type:"decode",id:s.id,geometry:A},n)}catch(A){console.error(A),self.postMessage({type:"error",id:s.id,error:A.message})}finally{e.destroy(o)}}))}}}class BA{constructor(A=4){this.pool=A,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(A){if(!this.workers[A]){const e=this.workerCreator();e.addEventListener("message",this._onMessage.bind(this,A)),this.workers[A]=e}}_getIdleWorker(){for(let A=0;A<this.pool;A++)if(!(this.workerStatus&1<<A))return A;return-1}_onMessage(A,e){const t=this.workersResolve[A];if(t&&t(e),this.queue.length){const{resolve:e,msg:t,transfer:r}=this.queue.shift();this.workersResolve[A]=e,this.workers[A].postMessage(t,r)}else this.workerStatus^=1<<A}setWorkerCreator(A){this.workerCreator=A}setWorkerLimit(A){this.pool=A}postMessage(A,e){return new Promise((t=>{const r=this._getIdleWorker();-1!==r?(this._initWorker(r),this.workerStatus|=1<<r,this.workersResolve[r]=t,this.workers[r].postMessage(A,e)):this.queue.push({resolve:t,msg:A,transfer:e})}))}dispose(){this.workers.forEach((A=>A.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const dA=2,EA=0,uA=1,QA=10;class pA{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class fA{constructor(A,e,t,r){this._dataView=new DataView(A.buffer,A.byteOffset+e,t),this._littleEndian=r,this._offset=0}_nextUint8(){const A=this._dataView.getUint8(this._offset);return this._offset+=1,A}_nextUint16(){const A=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,A}_nextUint32(){const A=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,A}_nextUint64(){const A=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,A}_nextInt32(){const A=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,A}_skip(A){return this._offset+=A,this}_scan(A,e=0){const t=this._offset;let r=0;for(;this._dataView.getUint8(this._offset)!==e&&r<A;)r++,this._offset++;return r<A&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+t,r)}}new Uint8Array([0]);const mA=[171,75,84,88,32,50,48,187,13,10,26,10];function yA(A){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(A):Buffer.from(A).toString("utf8")}let wA,DA,xA;const RA={env:{emscripten_notify_memory_growth:function(A){xA=new Uint8Array(DA.exports.memory.buffer)}}};class SA{init(){return wA||(wA="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+TA).then((A=>A.arrayBuffer())).then((A=>WebAssembly.instantiate(A,RA))).then(this._init):WebAssembly.instantiate(Buffer.from(TA,"base64"),RA).then(this._init),wA)}_init(A){DA=A.instance,RA.env.emscripten_notify_memory_growth(0)}decode(A,e=0){if(!DA)throw new Error("ZSTDDecoder: Await .init() before decoding.");const t=A.byteLength,r=DA.exports.malloc(t);xA.set(A,r),e=e||Number(DA.exports.ZSTD_findDecompressedSize(r,t));const s=DA.exports.malloc(e),i=DA.exports.ZSTD_decompress(s,e,r,t),o=xA.slice(s,s+i);return DA.exports.free(r),DA.exports.free(s),o}}const TA="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdBKGogACgCBBATQQAhBCAHQeAAaiEMIAdB5ABqIQoDQCAHQShqEARBAksgBCAXTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEJIAcoAkggBygCREEDdGopAgAiH0IgiKchCCAeQiCIISAgHUIgiKchAgJAIB9CEIinQf8BcSIDQQJPBEACQCAGRSADQRlJckUEQCAIIAdBKGogA0EgIAcoAixrIg0gDSADSxsiDRAFIAMgDWsiA3RqIQggB0EoahAEGiADRQ0BIAdBKGogAxAFIAhqIQgMAQsgB0EoaiADEAUgCGohCCAHQShqEAQaCyAHKQJUISEgByAINgJUIAcgITcDWAwBCwJAIANFBEAgAgRAIAcoAlQhCAwDCyAHKAJYIQgMAQsCQAJAIAdBKGpBARAFIAggAkVqaiIDQQNGBEAgBygCVEF/aiIDIANFaiEIDAELIANBAnQgB2ooAlQiCCAIRWohCCADQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAg2AlQLICCnIQMgCQRAIAdBKGogCRAFIANqIQMLIAkgC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgAmohAgsgB0EoahAEGiAHIAcoAmggAmoiCSADajYCaCAKIAwgCCAJSxsoAgAhDSAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogB0EoaiAfQhiIp0H/AXEQCCEOIAdB8ABqIARBBHRqIgsgCSANaiAIazYCDCALIAg2AgggCyADNgIEIAsgAjYCACAHIA4gH6dB//8DcWo2AkQgBEEBaiEEDAELCyAEIBdIDQEgEkFgaiEYIAdB4ABqIRogB0HkAGohGyABIQMDQCAHQShqEARBAksgBCAFTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEIIAcoAkggBygCREEDdGopAgAiH0IgiKchCSAeQiCIISAgHUIgiKchDAJAIB9CEIinQf8BcSICQQJPBEACQCAGRSACQRlJckUEQCAJIAdBKGogAkEgIAcoAixrIgogCiACSxsiChAFIAIgCmsiAnRqIQkgB0EoahAEGiACRQ0BIAdBKGogAhAFIAlqIQkMAQsgB0EoaiACEAUgCWohCSAHQShqEAQaCyAHKQJUISEgByAJNgJUIAcgITcDWAwBCwJAIAJFBEAgDARAIAcoAlQhCQwDCyAHKAJYIQkMAQsCQAJAIAdBKGpBARAFIAkgDEVqaiICQQNGBEAgBygCVEF/aiICIAJFaiEJDAELIAJBAnQgB2ooAlQiCSAJRWohCSACQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAk2AlQLICCnIRQgCARAIAdBKGogCBAFIBRqIRQLIAggC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgDGohDAsgB0EoahAEGiAHIAcoAmggDGoiGSAUajYCaCAbIBogCSAZSxsoAgAhHCAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogByAHQShqIB9CGIinQf8BcRAIIB+nQf//A3FqNgJEIAcgB0HwAGogBEEDcUEEdGoiDSkDCCIdNwPIASAHIA0pAwAiHjcDwAECQAJAAkAgBygCvAEiDiAepyICaiIWIBNLDQAgAyAHKALEASIKIAJqIgtqIBhLDQAgEiADayALQSBqTw0BCyAHIAcpA8gBNwMQIAcgBykDwAE3AwggAyASIAdBCGogB0G8AWogEyAPIBUgERAeIQsMAQsgAiADaiEIIAMgDhAHIAJBEU8EQCADQRBqIQIDQCACIA5BEGoiDhAHIAJBEGoiAiAISQ0ACwsgCCAdpyIOayECIAcgFjYCvAEgDiAIIA9rSwRAIA4gCCAVa0sEQEFsIQsMAgsgESACIA9rIgJqIhYgCmogEU0EQCAIIBYgChAPGgwCCyAIIBZBACACaxAPIQggByACIApqIgo2AsQBIAggAmshCCAPIQILIA5BEE8EQCAIIApqIQoDQCAIIAIQByACQRBqIQIgCEEQaiIIIApJDQALDAELAkAgDkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgDkECdCIKQcAeaigCAGoiAhAXIAIgCkHgHmooAgBrIQIgBygCxAEhCgwBCyAIIAIQDAsgCkEJSQ0AIAggCmohCiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAKSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAKSQ0ACwsgCxADBEAgCyEQDAQFIA0gDDYCACANIBkgHGogCWs2AgwgDSAJNgIIIA0gFDYCBCAEQQFqIQQgAyALaiEDDAILAAsLIAQgBUgNASAEIBdrIQtBACEEA0AgCyAFSARAIAcgB0HwAGogC0EDcUEEdGoiAikDCCIdNwPIASAHIAIpAwAiHjcDwAECQAJAAkAgBygCvAEiDCAepyICaiIKIBNLDQAgAyAHKALEASIJIAJqIhBqIBhLDQAgEiADayAQQSBqTw0BCyAHIAcpA8gBNwMgIAcgBykDwAE3AxggAyASIAdBGGogB0G8AWogEyAPIBUgERAeIRAMAQsgAiADaiEIIAMgDBAHIAJBEU8EQCADQRBqIQIDQCACIAxBEGoiDBAHIAJBEGoiAiAISQ0ACwsgCCAdpyIGayECIAcgCjYCvAEgBiAIIA9rSwRAIAYgCCAVa0sEQEFsIRAMAgsgESACIA9rIgJqIgwgCWogEU0EQCAIIAwgCRAPGgwCCyAIIAxBACACaxAPIQggByACIAlqIgk2AsQBIAggAmshCCAPIQILIAZBEE8EQCAIIAlqIQYDQCAIIAIQByACQRBqIQIgCEEQaiIIIAZJDQALDAELAkAgBkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgBkECdCIGQcAeaigCAGoiAhAXIAIgBkHgHmooAgBrIQIgBygCxAEhCQwBCyAIIAIQDAsgCUEJSQ0AIAggCWohBiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAGSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAGSQ0ACwsgEBADDQMgC0EBaiELIAMgEGohAwwBCwsDQCAEQQNHBEAgACAEQQJ0IgJqQazQAWogAiAHaigCVDYCACAEQQFqIQQMAQsLIAcoArwBIQgLQbp/IRAgEyAIayIAIBIgA2tLDQAgAwR/IAMgCCAAEAsgAGoFQQALIAFrIRALIAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",LA=new WeakMap;let MA,bA=0;class FA extends A.Loader{constructor(A){super(A),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new BA,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(A){return this.transcoderPath=A,this}setWorkerLimit(A){return this.workerPool.setWorkerLimit(A),this}async detectSupportAsync(A){return this.workerConfig={astcSupported:await A.hasFeatureAsync("texture-compression-astc"),etc1Supported:await A.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await A.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await A.hasFeatureAsync("texture-compression-bc"),bptcSupported:await A.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await A.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(A){return!0===A.isWebGPURenderer?this.workerConfig={astcSupported:A.hasFeature("texture-compression-astc"),etc1Supported:A.hasFeature("texture-compression-etc1"),etc2Supported:A.hasFeature("texture-compression-etc2"),dxtSupported:A.hasFeature("texture-compression-bc"),bptcSupported:A.hasFeature("texture-compression-bptc"),pvrtcSupported:A.hasFeature("texture-compression-pvrtc")}:(this.workerConfig={astcSupported:A.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:A.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:A.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:A.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:A.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:A.extensions.has("WEBGL_compressed_texture_pvrtc")||A.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},A.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1)),this}init(){if(!this.transcoderPending){const e=new A.FileLoader(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);const t=e.loadAsync("basis_transcoder.js"),r=new A.FileLoader(this.manager);r.setPath(this.transcoderPath),r.setResponseType("arraybuffer"),r.setWithCredentials(this.withCredentials);const s=r.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,s]).then((([A,e])=>{const t=FA.BasisWorker.toString(),r=["/* constants */","let _EngineFormat = "+JSON.stringify(FA.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(FA.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(FA.BasisFormat),"/* basis_transcoder.js */",A,"/* worker */",t.substring(t.indexOf("{")+1,t.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([r])),this.transcoderBinary=e,this.workerPool.setWorkerCreator((()=>{const A=new Worker(this.workerSourceURL),e=this.transcoderBinary.slice(0);return A.postMessage({type:"init",config:this.workerConfig,transcoderBinary:e},[e]),A}))})),bA>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),bA++}return this.transcoderPending}load(e,t,r,s){if(null===this.workerConfig)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const i=new A.FileLoader(this.manager);i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials),i.load(e,(A=>{if(LA.has(A)){return LA.get(A).promise.then(t).catch(s)}this._createTexture(A).then((A=>t?t(A):null)).catch(s)}),r,s)}_createTextureFrom(e,t){const{faces:r,width:s,height:i,format:o,type:n,error:a,dfdFlags:g}=e;if("error"===n)return Promise.reject(a);let l;if(6===t.faceCount)l=new A.CompressedCubeTexture(r,o,A.UnsignedByteType);else{const e=r[0].mipmaps;l=t.layerCount>1?new A.CompressedArrayTexture(e,s,i,t.layerCount,o,A.UnsignedByteType):new A.CompressedTexture(e,s,i,o,A.UnsignedByteType)}return l.minFilter=1===r[0].mipmaps.length?A.LinearFilter:A.LinearMipmapLinearFilter,l.magFilter=A.LinearFilter,l.generateMipmaps=!1,l.needsUpdate=!0,l.colorSpace=UA(t),l.premultiplyAlpha=!!(1&g),l}async _createTexture(e,t={}){const r=function(A){const e=new Uint8Array(A.buffer,A.byteOffset,mA.length);if(e[0]!==mA[0]||e[1]!==mA[1]||e[2]!==mA[2]||e[3]!==mA[3]||e[4]!==mA[4]||e[5]!==mA[5]||e[6]!==mA[6]||e[7]!==mA[7]||e[8]!==mA[8]||e[9]!==mA[9]||e[10]!==mA[10]||e[11]!==mA[11])throw new Error("Missing KTX 2.0 identifier.");const t=new pA,r=17*Uint32Array.BYTES_PER_ELEMENT,s=new fA(A,mA.length,r,!0);t.vkFormat=s._nextUint32(),t.typeSize=s._nextUint32(),t.pixelWidth=s._nextUint32(),t.pixelHeight=s._nextUint32(),t.pixelDepth=s._nextUint32(),t.layerCount=s._nextUint32(),t.faceCount=s._nextUint32();const i=s._nextUint32();t.supercompressionScheme=s._nextUint32();const o=s._nextUint32(),n=s._nextUint32(),a=s._nextUint32(),g=s._nextUint32(),l=s._nextUint64(),c=s._nextUint64(),h=new fA(A,mA.length+r,3*i*8,!0);for(let e=0;e<i;e++)t.levels.push({levelData:new Uint8Array(A.buffer,A.byteOffset+h._nextUint64(),h._nextUint64()),uncompressedByteLength:h._nextUint64()});const I=new fA(A,o,n,!0),C={vendorId:I._skip(4)._nextUint16(),descriptorType:I._nextUint16(),versionNumber:I._nextUint16(),descriptorBlockSize:I._nextUint16(),colorModel:I._nextUint8(),colorPrimaries:I._nextUint8(),transferFunction:I._nextUint8(),flags:I._nextUint8(),texelBlockDimension:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],bytesPlane:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],samples:[]},B=(C.descriptorBlockSize/4-6)/4;for(let A=0;A<B;A++){const e={bitOffset:I._nextUint16(),bitLength:I._nextUint8(),channelType:I._nextUint8(),samplePosition:[I._nextUint8(),I._nextUint8(),I._nextUint8(),I._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&e.channelType?(e.sampleLower=I._nextInt32(),e.sampleUpper=I._nextInt32()):(e.sampleLower=I._nextUint32(),e.sampleUpper=I._nextUint32()),C.samples[A]=e}t.dataFormatDescriptor.length=0,t.dataFormatDescriptor.push(C);const d=new fA(A,a,g,!0);for(;d._offset<g;){const A=d._nextUint32(),e=d._scan(A),r=yA(e),s=d._scan(A-e.byteLength);t.keyValue[r]=r.match(/^ktx/i)?yA(s):s,d._offset%4&&d._skip(4-d._offset%4)}if(c<=0)return t;const E=new fA(A,l,c,!0),u=E._nextUint16(),Q=E._nextUint16(),p=E._nextUint32(),f=E._nextUint32(),m=E._nextUint32(),y=E._nextUint32(),w=[];for(let A=0;A<i;A++)w.push({imageFlags:E._nextUint32(),rgbSliceByteOffset:E._nextUint32(),rgbSliceByteLength:E._nextUint32(),alphaSliceByteOffset:E._nextUint32(),alphaSliceByteLength:E._nextUint32()});const D=l+E._offset,x=D+p,R=x+f,S=R+m,T=new Uint8Array(A.buffer,A.byteOffset+D,p),L=new Uint8Array(A.buffer,A.byteOffset+x,f),M=new Uint8Array(A.buffer,A.byteOffset+R,m),b=new Uint8Array(A.buffer,A.byteOffset+S,y);return t.globalData={endpointCount:u,selectorCount:Q,imageDescs:w,endpointsData:T,selectorsData:L,tablesData:M,extendedData:b},t}(new Uint8Array(e));if(0!==r.vkFormat)return async function(e){const{vkFormat:t}=e;if(void 0===_A[t])throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let r;2===e.supercompressionScheme&&(MA||(MA=new Promise((async A=>{const e=new SA;await e.init(),A(e)}))),r=await MA);const s=[];for(let i=0;i<e.levels.length;i++){const o=Math.max(1,e.pixelWidth>>i),n=Math.max(1,e.pixelHeight>>i),a=e.pixelDepth?Math.max(1,e.pixelDepth>>i):0,g=e.levels[i];let l,c;if(0===e.supercompressionScheme)l=g.levelData;else{if(2!==e.supercompressionScheme)throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");l=r.decode(g.levelData,g.uncompressedByteLength)}c=kA[t]===A.FloatType?new Float32Array(l.buffer,l.byteOffset,l.byteLength/Float32Array.BYTES_PER_ELEMENT):kA[t]===A.HalfFloatType?new Uint16Array(l.buffer,l.byteOffset,l.byteLength/Uint16Array.BYTES_PER_ELEMENT):l,s.push({data:c,width:o,height:n,depth:a})}let i;if(GA.has(_A[t]))i=0===e.pixelDepth?new A.DataTexture(s[0].data,e.pixelWidth,e.pixelHeight):new A.Data3DTexture(s[0].data,e.pixelWidth,e.pixelHeight,e.pixelDepth);else{if(e.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");i=new A.CompressedTexture(s,e.pixelWidth,e.pixelHeight)}return i.mipmaps=s,i.type=kA[t],i.format=_A[t],i.colorSpace=UA(e),i.needsUpdate=!0,Promise.resolve(i)}(r);const s=t,i=this.init().then((()=>this.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:s},[e]))).then((A=>this._createTextureFrom(A.data,r)));return LA.set(e,{promise:i}),i}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),bA--,this}}FA.BasisFormat={ETC1S:0,UASTC_4x4:1},FA.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},FA.EngineFormat={RGBAFormat:A.RGBAFormat,RGBA_ASTC_4x4_Format:A.RGBA_ASTC_4x4_Format,RGBA_BPTC_Format:A.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:A.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:A.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:A.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:A.RGB_ETC1_Format,RGB_ETC2_Format:A.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:A.RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format:A.RGB_S3TC_DXT1_Format},FA.BasisWorker=function(){let A,e,t;const r=_EngineFormat,s=_TranscoderFormat,i=_BasisFormat;self.addEventListener("message",(function(o){const c=o.data;switch(c.type){case"init":A=c.config,h=c.transcoderBinary,e=new Promise((A=>{t={wasmBinary:h,onRuntimeInitialized:A},BASIS(t)})).then((()=>{t.initializeBasis(),void 0===t.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")}));break;case"transcode":e.then((()=>{try{const{faces:e,buffers:o,width:h,height:I,hasAlpha:C,format:B,dfdFlags:d}=function(e){const o=new t.KTX2File(new Uint8Array(e));function c(){o.close(),o.delete()}if(!o.isValid())throw c(),new Error("THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file");const h=o.isUASTC()?i.UASTC_4x4:i.ETC1S,I=o.getWidth(),C=o.getHeight(),B=o.getLayers()||1,d=o.getLevels(),E=o.getFaces(),u=o.getHasAlpha(),Q=o.getDFDFlags(),{transcoderFormat:p,engineFormat:f}=function(e,t,o,l){let c,h;const I=e===i.ETC1S?n:a;for(let r=0;r<I.length;r++){const s=I[r];if(A[s.if]&&(s.basisFormat.includes(e)&&!(l&&s.transcoderFormat.length<2)&&(!s.needsPowerOfTwo||g(t)&&g(o))))return c=s.transcoderFormat[l?1:0],h=s.engineFormat[l?1:0],{transcoderFormat:c,engineFormat:h}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),c=s.RGBA32,h=r.RGBAFormat,{transcoderFormat:c,engineFormat:h}}(h,I,C,u);if(!I||!C||!d)throw c(),new Error("THREE.KTX2Loader:\tInvalid texture");if(!o.startTranscoding())throw c(),new Error("THREE.KTX2Loader: .startTranscoding failed");const m=[],y=[];for(let A=0;A<E;A++){const e=[];for(let t=0;t<d;t++){const r=[];let s,i;for(let e=0;e<B;e++){const n=o.getImageLevelInfo(t,e,A);0!==A||0!==t||0!==e||n.origWidth%4==0&&n.origHeight%4==0||console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),d>1?(s=n.origWidth,i=n.origHeight):(s=n.width,i=n.height);const a=new Uint8Array(o.getImageTranscodedSizeInBytes(t,e,0,p));if(!o.transcodeImage(a,t,e,A,p,0,-1,-1))throw c(),new Error("THREE.KTX2Loader: .transcodeImage failed.");r.push(a)}const n=l(r);e.push({data:n,width:s,height:i}),y.push(n.buffer)}m.push({mipmaps:e,width:I,height:C,format:f})}return c(),{faces:m,buffers:y,width:I,height:C,hasAlpha:u,format:f,dfdFlags:Q}}(c.buffer);self.postMessage({type:"transcode",id:c.id,faces:e,width:h,height:I,hasAlpha:C,format:B,dfdFlags:d},o)}catch(A){console.error(A),self.postMessage({type:"error",id:c.id,error:A.message})}}))}var h}));const o=[{if:"astcSupported",basisFormat:[i.UASTC_4x4],transcoderFormat:[s.ASTC_4x4,s.ASTC_4x4],engineFormat:[r.RGBA_ASTC_4x4_Format,r.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.BC7_M5,s.BC7_M5],engineFormat:[r.RGBA_BPTC_Format,r.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.BC1,s.BC3],engineFormat:[r.RGB_S3TC_DXT1_Format,r.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.ETC1,s.ETC2],engineFormat:[r.RGB_ETC2_Format,r.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.ETC1],engineFormat:[r.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[i.ETC1S,i.UASTC_4x4],transcoderFormat:[s.PVRTC1_4_RGB,s.PVRTC1_4_RGBA],engineFormat:[r.RGB_PVRTC_4BPPV1_Format,r.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],n=o.sort((function(A,e){return A.priorityETC1S-e.priorityETC1S})),a=o.sort((function(A,e){return A.priorityUASTC-e.priorityUASTC}));function g(A){return A<=2||0==(A&A-1)&&0!==A}function l(A){if(1===A.length)return A[0];let e=0;for(let t=0;t<A.length;t++){e+=A[t].byteLength}const t=new Uint8Array(e);let r=0;for(let e=0;e<A.length;e++){const s=A[e];t.set(s,r),r+=s.byteLength}return t}};const GA=new Set([A.RGBAFormat,A.RGFormat,A.RedFormat]),_A={109:A.RGBAFormat,97:A.RGBAFormat,37:A.RGBAFormat,43:A.RGBAFormat,103:A.RGFormat,83:A.RGFormat,16:A.RGFormat,22:A.RGFormat,100:A.RedFormat,76:A.RedFormat,15:A.RedFormat,9:A.RedFormat,166:A.RGBA_ASTC_6x6_Format,165:A.RGBA_ASTC_6x6_Format},kA={109:A.FloatType,97:A.HalfFloatType,37:A.UnsignedByteType,43:A.UnsignedByteType,103:A.FloatType,83:A.HalfFloatType,16:A.UnsignedByteType,22:A.UnsignedByteType,100:A.FloatType,76:A.HalfFloatType,15:A.UnsignedByteType,9:A.UnsignedByteType,166:A.UnsignedByteType,165:A.UnsignedByteType};function UA(e){const t=e.dataFormatDescriptor[0];return t.colorPrimaries===uA?t.transferFunction===dA?A.SRGBColorSpace:A.LinearSRGBColorSpace:t.colorPrimaries===QA?t.transferFunction===dA?A.DisplayP3ColorSpace:A.LinearDisplayP3ColorSpace:(t.colorPrimaries===EA||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${t.colorPrimaries}"`),A.NoColorSpace)}async function NA(A){const e=A.split("?")[0].split(".").pop(),t=await fetch(A);if(!t.ok)throw new Error("Failed to fetch ".concat(A,": ").concat(t.statusText));if("json"===e){const e=await t.json();return handleJSONSubtree(e,vA(A))}if("subtree"===e){return async function(A,e){const t=new DataView(A),r=t.getBigUint64(8,!0),s=t.getBigUint64(16,!0),i=24,o=i+Number(r),n=o+(8-o%8)%8,a=n+Number(s),g=A.slice(i,o),l=(new TextDecoder).decode(g).trim(),c=JSON.parse(l);if(!c.buffers)throw new Error("subtree has no buffers");const h=c.buffers.map((async t=>{if(t.uri){const A=new URL(t.uri,e).href,r=await fetch(A);if(!r.ok)throw new Error("Failed to fetch binary file ".concat(A,": ").concat(r.statusText));return new Uint8Array(await r.arrayBuffer())}return new Uint8Array(A.slice(n,a))})),I=await Promise.all(h);return HA(c,I)}(await t.arrayBuffer(),vA(A))}throw new Error("Unsupported file extension: ".concat(e))}function vA(A){const e=A.split("?")[0];return e.substring(0,e.lastIndexOf("/")+1)}function HA(A,e){function t(t,r){if(!t)throw new Error("incomplete json subtree");if(t.constant){if(0==t.constant)return!1;if(1==t.constant)return!0}if(null==t.bitstream)throw new Error('json subtree "tileAvailability" does not specify a bitstream');if(!A.bufferViews||!A.bufferViews[t.bitstream])throw new Error('json subtree "bufferViews" does not specify a bitstream');const s=A.bufferViews[t.bitstream];return function(A,e,t){const r=e+Math.floor(t/8),s=t%8;return A[r]>>s&!0}(e[s.buffer],s.byteOffset,r)}return{isTileAvailable:function(e){let r=0;return r=null==e.z?PA(e.x,e.y,e.level):JA(e.x,e.y,e.z,e.level),t(A.tileAvailability,r)},isContentAvailable:function(e){let r=0;r=null==e.z?PA(e.x,e.y,e.level):JA(e.x,e.y,e.z,e.level);const s=[];return A.contentAvailability.forEach((A=>{s.push(t(A,r))})),s},isChildSubtreeAvailable:function(e){let r=0;return r=null==e.z?PA(e.x,e.y):JA(e.x,e.y,e.z),t(A.childSubtreeAvailability,r)}}}function qA(A){return A=1431655765&((A=858993459&((A=252645135&((A=16711935&((A&=65535)^A<<8))^A<<4))^A<<2))^A<<1)}function PA(A,e,t){let r=0;return t&&(r=(Math.pow(4,t)-1)/3),r+(qA(A)|qA(e)<<1)}function OA(A){return A=153391689&((A=51130563&((A=50393103&((A=4278190335&((A&=1023)^A<<16))^A<<8))^A<<4))^A<<2)}function JA(A,e,t,r){let s=0;return r&&(s=(Math.pow(8,r)-1)/7),s+(OA(A)|OA(e)<<1|OA(t)<<2)}const VA=new Map;async function KA(A,e){if(!A.root||!A.root.implicitTiling)return A;if(!A.root.content&&!A.root.contents)throw new Error("implicit tiling requires a Template URI");let t=!0;A.root.implicitTiling.subdivisionScheme&&(t="QUADTREE"===A.root.implicitTiling.subdivisionScheme.toUpperCase());let r="";A.root.implicitTiling.subtrees&&(A.root.implicitTiling.subtrees.uri?r=A.root.implicitTiling.subtrees.uri:A.root.implicitTiling.subtrees.url&&(r=A.root.implicitTiling.subtrees.url));let s=[];A.root.content?A.root.content.uri?s.push(A.root.content.uri):A.root.content.url&&s.push(A.root.content.url):A.root.contents&&A.root.contents.forEach((A=>{A.uri?s.push(A.uri):A.url&&s.push(A.url)}));const i=function(A){const e=A.split("?")[0];return e.substring(0,e.lastIndexOf("/")+1)}(e);let o;t&&(o=r.replace("{level}",0).replace("{x}",0).replace("{y}",0)),t||(o=r.replace("{level}",0).replace("{x}",0).replace("{y}",0).replace("{z}",0));const n={level:0,x:0,y:0},a={level:0,x:0,y:0};t||(n.z=0,a.z=0),VA.set(o,await NA(i+o));const g=VA.get(o),l=[];g.isContentAvailable(a)&&s.forEach((A=>{let e;t&&(e=A.replace("{level}",n.level).replace("{x}",n.x).replace("{y}",n.y)),t||(e=A.replace("{level}",n.level).replace("{x}",n.x).replace("{y}",n.y).replace("{z}",n.z)),l.push({uri:e})}));const c={geometricError:A.root.geometricError,boundingVolume:A.root.boundingVolume,refine:A.root.refine,globalAddress:n,localAddress:a,subtree:g,contents:l,getChildren:async()=>h(c)};return{root:c};async function h(e){const n=[];if(e.localAddress.level==A.root.implicitTiling.availableLevels-1)return n;if((e.localAddress.level+1)%A.root.implicitTiling.subtreeLevels==0){const a=jA(e.localAddress),g=jA(e.globalAddress),l=YA(t,A.root.boundingVolume,g);for(let c=0;c<a.length;c++){const I=a[c],C=g[c];if(e.subtree.isChildSubtreeAvailable(I)){let A;t&&(A=r.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y)),t||(A=r.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y).replace("{z}",C.z))}VA.has(o)||VA.set(o,await NA(i+o));const B=VA.get(o),d={level:0,x:0,y:0};t||(d.z=0);const E=[];B.isContentAvailable(d)&&s.forEach((A=>{let e;if(t&&(e=A.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y)),!t){Math.floor(z/factor);e=A.replace("{level}",C.level).replace("{x}",C.x).replace("{y}",C.y).replace("{z}",C.z)}E.push({uri:e})}));const u={geometricError:e.geometricError/2,boundingVolume:l[c],refine:A.root.refine,globalAddress:C,localAddress:d,subtree:B,contents:E,getChildren:async()=>h(u)};n.push(u)}}else{const r=jA(e.localAddress),i=jA(e.globalAddress),o=YA(t,A.root.boundingVolume,i);for(let a=0;a<r.length;a++){const g=r[a],l=i[a];if(!e.subtree.isTileAvailable(g))continue;const c=[],I=e.subtree.isContentAvailable(g);for(let A=0;A<s.length;A++){if(!I[A])continue;const e=s[A];let r;t&&(r=e.replace("{level}",l.level).replace("{x}",l.x).replace("{y}",l.y)),t||(r=e.replace("{level}",l.level).replace("{x}",l.x).replace("{y}",l.y).replace("{z}",l.z)),c.push({uri:r})}const C={geometricError:e.geometricError/2,boundingVolume:o[a],refine:A.root.refine,globalAddress:l,localAddress:g,subtree:e.subtree,contents:c,getChildren:async()=>h(C)};n.push(C)}}return n.length>0?n:void 0}}function jA(A){const{level:e,x:t,y:r,z:s}=A,i=e+1;let o=[];return o=void 0===s?[{level:i,x:2*t,y:2*r},{level:i,x:2*t+1,y:2*r},{level:i,x:2*t,y:2*r+1},{level:i,x:2*t+1,y:2*r+1}]:[{level:i,x:2*t,y:2*r,z:2*s},{level:i,x:2*t+1,y:2*r,z:2*s},{level:i,x:2*t,y:2*r+1,z:2*s},{level:i,x:2*t+1,y:2*r+1,z:2*s},{level:i,x:2*t,y:2*r,z:2*s+1},{level:i,x:2*t+1,y:2*r,z:2*s+1},{level:i,x:2*t,y:2*r+1,z:2*s+1},{level:i,x:2*t+1,y:2*r+1,z:2*s+1}],o}function YA(A,e,t){const r=[];for(let s=0;s<t.length;s++)r.push(WA(A,e,t[s]));return r}function WA(A,e,t){if(e.region)return function(A,e,t){const[r,s,i,o,n,a]=e,g=(i-r)/2**t.level,l=(o-s)/2**t.level,c=A?0:(a-n)/2**t.level,h=r+g*t.x,I=s+l*t.y,C=h+g,B=I+l,d=A?n:n+c*t.z,E=A?a:d+c;return{region:[h,I,C,B,d,E]}}(A,e.region,t);if(e.box)return function(A,e,t){const r=e.slice(0,3),s=[e.slice(3,6),e.slice(6,9),e.slice(9,12)],i=1/Math.pow(2,t.level),o=[i,i,A?1:i],n=s.map(((A,e)=>A.map((A=>A*o[e])))),a=[r[0]-s[0][0]-s[1][0]-s[2][0],r[1]-s[0][1]-s[1][1]-s[2][1],r[2]-s[0][2]-s[1][2]-s[2][2]],g=[a[0]+(2*t.x+1)*(n[0][0]+n[1][0]+n[2][0]),a[1]+(2*t.y+1)*(n[0][1]+n[1][1]+n[2][1]),A?r[2]:a[2]+(2*t.z+1)*(n[0][2]+n[1][2]+n[2][2])];return{box:g.concat(...n)}}(A,e.box,t);throw new Error("Unsupported bounding volume type")}let XA=0;const zA=new A.Matrix4;zA.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class ZA{constructor(A){if(this.maxCachedItems=100,this.proxy=A.proxy,A&&(this.meshCallback=A.meshCallback,this.pointsCallback=A.pointsCallback,A.maxCachedItems&&(this.maxCachedItems=A.maxCachedItems)),this.gltfLoader=new B,A&&A.dracoLoader)this.gltfLoader.setDRACOLoader(A.dracoLoader),this.hasDracoLoader=!0;else{const A=new IA;A.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),this.gltfLoader.setDRACOLoader(A),this.gltfLoader.hasDracoLoader=!0}if(A&&A.ktx2Loader)this.gltfLoader.setKTX2Loader(A.ktx2Loader),this.hasKTX2Loader=!0;else if(A&&A.renderer){const e=new FA;e.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(A.renderer),this.gltfLoader.setKTX2Loader(e),this.gltfLoader.hasKTX2Loader=!0}this.b3dmDecoder=new C(this.gltfLoader),this.cache=new o.LinkedHashMap,this.register={},this.ready=[],this.downloads=[],this.nextReady=[],this.nextDownloads=[]}update(){const A=this;XA<8&&A._download(),A._loadBatch()}_scheduleDownload(A){this.downloads.unshift(A)}_download(){if(0!=this.nextDownloads.length||(this._getNextDownloads(),0!=this.nextDownloads.length))for(;this.nextDownloads.length>0;){const A=this.nextDownloads.shift();A&&A.shouldDoDownload()&&A.doDownload()}}_meshReceived(A,e,t,r,s,i,o){this.ready.unshift([A,e,t,r,s,i,o])}_loadBatch(){if(0==this.nextReady.length&&(this._getNextReady(),0==this.nextReady.length))return 0;const A=this.nextReady.shift();if(!A)return 0;const e=A[0],t=A[1],r=A[2],s=e.get(r);return s&&t[r]&&Object.keys(t[r]).forEach((A=>{const e=t[r][A];e&&(e(s),t[r][A]=null)})),1}_getNextDownloads(){let A=Number.MAX_VALUE,e=-1;for(let A=this.downloads.length-1;A>=0;A--)this.downloads[A].shouldDoDownload()?this.downloads[A].distanceFunction||this.nextDownloads.push(this.downloads.splice(A,1)[0]):this.downloads.splice(A,1);if(!(this.nextDownloads.length>0)){for(let t=this.downloads.length-1;t>=0;t--){const r=this.downloads[t].distanceFunction()*this.downloads[t].level;r<A&&(A=r,e=t)}if(e>=0){const A=this.downloads.splice(e,1).pop();this.nextDownloads.push(A);const t=A.getSiblings();for(let A=this.downloads.length-1;A>=0;A--)t.map((A=>A.uuid)).includes(this.downloads[A].uuid)&&this.nextDownloads.push(this.downloads.splice(A,1).pop())}}}_getNextReady(){let A=Number.MAX_VALUE,e=-1;for(let A=this.ready.length-1;A>=0;A--)this.ready[A][3]||this.nextReady.push(this.ready.splice(A,1)[0]);if(!(this.nextReady.length>0)){for(let t=this.ready.length-1;t>=0;t--){const r=this.ready[t][3]()*this.ready[t][5];r<A&&(A=r,e=t)}if(e>=0){const A=this.ready.splice(e,1).pop();this.nextReady.push(A)}}}get(A,e,t,r,s,i,o,n,a,g){const l=this,c=$A(t),h=new AbortController;if(A.signal.addEventListener("abort",(()=>{l.register[c]&&0!=Object.keys(l.register[c]).length||h.abort()})),!(t.includes(".b3dm")||t.includes(".json")||t.includes(".gltf")||t.includes(".glb")))return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");l.register[c]||(l.register[c]={}),l.register[c][e]&&console.error(" a tile should only be loaded once"),l.register[c][e]=r;if(l.cache.get(c))this._meshReceived(l.cache,l.register,c,s,i,o,e);else if(1==Object.keys(l.register[c]).length){let r;t.includes(".b3dm")?r=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((A=>this.b3dmDecoder.parseB3DM(A,l.meshCallback,n,a))).then((A=>{l.cache.put(c,A),l._checkSize(),this._meshReceived(l.cache,l.register,c,s,i,o,e)})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}:t.includes(".glb")||t.includes(".gltf")?r=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((async A=>{await async function(A){return new Promise((e=>{const t=setInterval((()=>{A.hasDracoLoader&&!A.dracoLoader||A.hasKTX2Loader&&!A.ktx2Loader||(clearInterval(t),e())}),10)}))}(this.gltfLoader),this.gltfLoader.parse(A,null,(A=>{A.scene.asset=A.asset,n&&A.scene.applyMatrix4(zA),A.scene.traverse((A=>{A.isMesh&&(a&&A.applyMatrix4(zA),l.meshCallback&&l.meshCallback(A,g)),A.isPoints&&l.pointsCallback&&l.pointsCallback(A,g)})),l.cache.put(c,A.scene),l._checkSize(),l._meshReceived(l.cache,l.register,c,s,i,o,e)}))})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}:t.includes(".json")&&(r=()=>{var A;A=l.proxy?()=>fetch(l.proxy,{method:"POST",body:t,signal:h.signal}):()=>fetch(t,{signal:h.signal}),XA++,A().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+t),new Error("couldn't load \"".concat(t,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.json()})).then((A=>KA(A,t))).then((A=>{l.cache.put(c,A),l._checkSize(),l._meshReceived(l.cache,l.register,c)})).catch((A=>{console.error(A)})).finally((()=>{XA--}))}),this._scheduleDownload({shouldDoDownload:()=>!A.signal.aborted&&!!l.register[c]&&Object.keys(l.register[c]).length>0,doDownload:r,distanceFunction:s,getSiblings:i,level:o,uuid:e})}}invalidate(A,e){const t=$A(A);this.register[t]&&delete this.register[t][e]}_checkSize(){const A=this;let e=0;for(;A.cache.size()>A.maxCachedItems&&e<A.cache.size();){e++;const t=A.cache.head(),r=A.register[t.key];r&&(Object.keys(r).length>0?(A.cache.remove(t.key),A.cache.put(t.key,t.value)):(A.cache.remove(t.key),delete A.register[t.key],t.value.traverse((A=>{if(A.material)if(A.material.length)for(let e=0;e<A.material.length;++e)A.material[e].dispose();else A.material.dispose();A.geometry&&A.geometry.dispose()}))))}}}function $A(A){for(var e=A.split("/"),t=[],r=0,s=0;s<e.length;s++){var i=e[s];"."!==i&&""!==i&&".."!==i?t[r++]=i:".."===i&&r>0&&r--}if(0===r)return"/";var o="";for(s=0;s<r;s++)o+="/"+t[s];return o}var Ae,ee=new Uint8Array(16);function te(){if(!Ae&&!(Ae="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ae(ee)}const re=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const se=function(A){return"string"==typeof A&&re.test(A)};for(var ie=[],oe=0;oe<256;++oe)ie.push((oe+256).toString(16).substr(1));const ne=function(A){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(ie[A[e+0]]+ie[A[e+1]]+ie[A[e+2]]+ie[A[e+3]]+"-"+ie[A[e+4]]+ie[A[e+5]]+"-"+ie[A[e+6]]+ie[A[e+7]]+"-"+ie[A[e+8]]+ie[A[e+9]]+"-"+ie[A[e+10]]+ie[A[e+11]]+ie[A[e+12]]+ie[A[e+13]]+ie[A[e+14]]+ie[A[e+15]]).toLowerCase();if(!se(t))throw TypeError("Stringified UUID is invalid");return t};const ae=function(A,e,t){var r=(A=A||{}).random||(A.rng||te)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){t=t||0;for(var s=0;s<16;++s)e[t+s]=r[s];return e}return ne(r)};var ge,le=r(975);const ce=new A.Sphere(new A.Vector3(0,0,0),1),he=new A.Vector3(0,0,0),Ie=new A.Vector3(0,0,0),Ce=new A.Vector3(0,1,0),Be=new A.Quaternion,de={};class Ee extends A.Object3D{constructor(t){super();const r=this;if(t.domWidth&&t.domHeight?this.rendererSize=new A.Vector2(t.domWidth,t.domHeight):this.rendererSize=new A.Vector2(1e3,1e3),this.proxy=t.proxy,this.displayErrors=t.displayErrors,this.displayCopyright=t.displayCopyright,t.queryParams&&(this.queryParams={...t.queryParams}),this.uuid=ae(),t.tileLoader)this.tileLoader=t.tileLoader;else{const e={};e.meshCallback=t.meshCallback?t.meshCallback:(e,t)=>{e.material.wireframe=!1,e.material.side=A.DoubleSide},e.pointsCallback=t.pointsCallback?t.pointsCallback:(A,e)=>{A.material.size=Math.pow(e,.33),A.material.sizeAttenuation=!0},e.proxy=this.proxy,e.renderer=t.renderer,e.dracoLoader=t.dracoLoader,e.ktx2Loader=t.ktx2Loader,this.tileLoader=new ZA(e),this.update=A=>{this.update(A),this.tileLoader.update()}}if(this.displayCopyright=!!t.displayCopyright,this.geometricErrorMultiplier=t.geometricErrorMultiplier?t.geometricErrorMultiplier:1,this.renderer=t.renderer,this.meshCallback=t.meshCallback,this.loadOutsideView=t.loadOutsideView,this.cameraOnLoad=t.cameraOnLoad,this.parentTile=t.parentTile,this.occlusionCullingService=t.occlusionCullingService,this.static=t.static,this.occlusionCullingService&&(this.color=new A.Color,this.color.setHex(16777215*Math.random()),this.colorID=e(255*r.color.r,0,255)<<16^e(255*r.color.g,0,255)<<8^e(255*r.color.b,0,255)<<0),this.static&&(this.matrixAutoUpdate=!1,this.matrixWorldAutoUpdate=!1),this.childrenTiles=[],this.meshContent=[],this.tileContent,this.refine,this.rootPath,this.geometricError,this.boundingVolume,this.json,this.materialVisibility=!1,this.inFrustum=!0,this.level=t.level?t.level:0,this.hasMeshContent=0,this.hasUnloadedJSONContent=0,this.centerModel=t.centerModel,this.abortController=new AbortController,t.json)r._setup(t);else if(t.url){var s=t.url;if(r.queryParams){var i="";for(let A in r.queryParams)r.queryParams.hasOwnProperty(A)&&(i+="&"+A+"="+r.queryParams[A]);s.includes("?")?s+=i:s+="?"+i.substring(1)}(r.proxy?()=>fetch(r.proxy,{method:"POST",body:s,signal:r.abortController.signal}):()=>fetch(s,{signal:r.abortController.signal}))().then((A=>{if(!A.ok)throw new Error("couldn't load \"".concat(t.url,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));A.json().then((A=>KA(A,s))).then((A=>{r._setup({rootPath:le.dirname(t.url),json:A,onLoadCallback:t.onLoadCallback})}))})).catch((A=>{r.displayErrors&&ue(A)}))}}setCanvasSize(A,e){this.rendererSize.set(A,e)}async _setup(e){const t=this;if(e.json.root?(t.json=e.json.root,t.json.refine||(t.json.refine=e.json.refine),t.json.geometricError||(t.json.geometricError=e.json.geometricError),t.json.transform||(t.json.transform=e.json.transform),t.json.boundingVolume||(t.json.boundingVolume=e.json.boundingVolume)):t.json=e.json,t.json.children||(t.json.getChildren?t.json.children=await t.json.getChildren():t.json.children=[]),t.rootPath=e.json.rootPath?e.json.rootPath:e.rootPath,t.json.refine?t.refine=t.json.refine:t.refine=e.parentRefine,t.json.geometricError?t.geometricError=t.json.geometricError:t.geometricError=e.parentGeometricError,t.json.transform&&!t.centerModel){let e=new A.Matrix4;e.elements=t.json.transform,t.applyMatrix4(e)}if(t.json.boundingVolume)if(t.json.boundingVolume.box)t.boundingVolume=new i(t.json.boundingVolume.box);else if(t.json.boundingVolume.region){const e=t.json.boundingVolume.region;t._transformWGS84ToCartesian(e[0],e[1],e[4],he),t._transformWGS84ToCartesian(e[2],e[3],e[5],Ie),he.lerp(Ie,.5),t.boundingVolume=new A.Sphere(new A.Vector3(he.x,he.y,he.z),he.distanceTo(Ie))}else if(t.json.boundingVolume.sphere){const e=t.json.boundingVolume.sphere;t.boundingVolume=new A.Sphere(new A.Vector3(e[0],e[1],e[2]),e[3])}else t.boundingVolume=e.parentBoundingVolume;else t.boundingVolume=e.parentBoundingVolume;function r(A){A.uri&&A.uri.includes("json")||A.url&&A.url.includes("json")?t.hasUnloadedJSONContent++:t.hasMeshContent++}if(t.json.content?(r(t.json.content),t._load()):t.json.contents&&(t.json.contents.forEach((A=>r(A))),t._load()),t.centerModel){const e=new A.Sphere;t.boundingVolume instanceof i?e.copy(t.boundingVolume.sphere):t.boundingVolume instanceof A.Sphere&&e.copy(t.boundingVolume),this.json.boundingVolume.region&&(this._transformWGS84ToCartesian(.5*(this.json.boundingVolume.region[0]+this.json.boundingVolume.region[2]),.5*(this.json.boundingVolume.region[1]+this.json.boundingVolume.region[3]),.5*(this.json.boundingVolume.region[4]+this.json.boundingVolume.region[5]),he),Be.setFromUnitVectors(he.normalize(),Ce.normalize()),t.applyQuaternion(Be)),t.translateX(-e.center.x*t.scale.x),t.translateY(-e.center.y*t.scale.y),t.translateZ(-e.center.z*t.scale.z)}e.onLoadCallback&&e.onLoadCallback(t),t.isSetup=!0}_assembleURL(A,e){A.endsWith("/")||(A+="/");const t=new URL(A);let r=t.pathname.split("/").filter((A=>""!==A)),s=e.split("/").filter((A=>""!==A));for(let A=1;A<=r.length&&!(A>=s.length);A++){if(r.slice(r.length-A,r.length).join("/")===s.slice(0,A).join("/")){for(let e=0;e<A;e++)r.pop();break}}for(;s.length>0&&".."===s[0];)r.pop(),s.shift();return"".concat(t.protocol,"//").concat(t.host,"/").concat([...r,...s].join("/"))}_extractQueryParams(A,e){const t=new URL(A);for(let[A,r]of t.searchParams)e[A]=r;return t.search="",t.toString()}async _load(){var e=this;if(!e.deleted)if(e.json.content)await t(e.json.content,null);else if(e.json.contents){let A=e.json.contents.map(((A,e)=>t(A,e)));Promise.all(A)}async function t(t,r){let s;t.uri?s=t.uri:t.url&&(s=t.url);const i=/^(?:http|https|ftp|tcp|udp):\/\/\S+/;if(i.test(e.rootPath)?i.test(s)||(s=e._assembleURL(e.rootPath,s)):le.isAbsolute(e.rootPath)&&(s=e.rootPath+le.sep+s),s=e._extractQueryParams(s,e.queryParams),e.queryParams){var o="";for(let A in e.queryParams)e.queryParams.hasOwnProperty(A)&&(o+="&"+A+"="+e.queryParams[A]);s.includes("?")?s+=o:s+="?"+o.substring(1)}if(s)if(s.includes(".b3dm")||s.includes(".glb")||s.includes(".gltf")){e.contentURL=s;try{e.tileLoader.get(e.abortController,e.uuid,s,(t=>{if(e.deleted)return;t.asset&&t.asset.copyright&&(t.asset.copyright.split(";").forEach((A=>{de[A]?de[A]++:de[A]=1})),e.displayCopyright&&Qe()),t.traverse((t=>{if((t.isMesh||t.isPoints)&&(t.layers.disable(0),e.static&&(t.matrixAutoUpdate=!1)),t.isMesh&&e.occlusionCullingService){const r=t.geometry.attributes.position,s=[];for(let A=0;A<r.count;A++)s.push(e.color.r,e.color.g,e.color.b);t.geometry.setAttribute("color",new A.Float32BufferAttribute(s,3))}}));Date.now();e.add(t),e.static&&(e.matrixWorldNeedsUpdate=!0,e.updateMatrix(),e.parentTile&&e.parentTile.updateMatrixWorld(!0)),e.meshContent.push(t)}),e.cameraOnLoad?()=>e._calculateDistanceToCamera(e.cameraOnLoad):()=>0,(()=>e._getSiblings()),e.level,!e.json.boundingVolume.region,!!e.json.boundingVolume.region,e.geometricError)}catch(A){e.displayErrors&&ue(A)}}else s.includes(".json")&&e.tileLoader.get(e.abortController,e.uuid,s,(async A=>{e.deleted||(A.rootPath=le.dirname(s),e.json.children.push(A),null==r?delete e.json.content:e.json.contents.splice(r,1),e.hasUnloadedJSONContent--)}))}}dispose(){const A=this;A.meshContent.forEach((e=>{e&&e.asset&&e.asset.copyright&&(e.asset.copyright.split(";").forEach((A=>{de[A]&&de[A]--})),A.displayCopyright&&Qe())})),A.childrenTiles.forEach((A=>A.dispose())),A.deleted=!0,this.traverse((function(e){e.contentURL&&A.tileLoader.invalidate(e.contentURL,e.uuid),e.abortController&&e.abortController.abort()})),this.parent=null,this.parentTile=null,this.dispatchEvent({type:"removed"})}_disposeChildren(){var A=this;A.childrenTiles.forEach((A=>A.dispose())),A.childrenTiles=[],A.children=[],A.meshContent.length>0&&A.meshContent.forEach((e=>{A.children.push(e)}))}update(e){const t=new A.Frustum;t.setFromProjectionMatrix((new A.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this._update(e,t)}_update(A,e){const t=this;if(!t.isSetup)return;const r=t.materialVisibility;function s(A){if(t.hasMeshContent&&!(t.meshContent<t.hasMeshContent)){if(A<0)return t.inFrustum=!1,void t._changeContentVisibility(!!t.loadOutsideView);if(t.inFrustum=!0,0!=t.childrenTiles.length){if(A>=t.geometricErrorMultiplier*t.geometricError)t._changeContentVisibility(!0);else if(A<t.geometricErrorMultiplier*t.geometricError&&"REPLACE"==t.refine){let A=!0;t.childrenTiles.every((e=>!!e._isReady()||(A=!1,!1))),A&&t._changeContentVisibility(!1)}}else t._changeContentVisibility(!0)}}t.boundingVolume&&t.geometricError&&(t.metric=t._calculateUpdateMetric(A,e)),t.childrenTiles.forEach((t=>t._update(A,e))),s(t.metric),function(e){if(e<0&&t.hasMeshContent)return;if(t.occlusionCullingService&&t.hasMeshContent&&!t.occlusionCullingService.hasID(t.colorID))return;if((!t.hasMeshContent||e<t.geometricErrorMultiplier*t.geometricError&&t.meshContent.length>0)&&t.json&&t.json.children&&t.childrenTiles.length!=t.json.children.length)!function(){for(let A=t.json.children.length-1;A>=0;A--)t.json.children[A].root||t.json.children[A].children||t.json.children[A].getChildren||t.json.children[A].content||t.json.children[A].contents||t.json.children.splice(A,1);t.json.children.forEach((e=>{let r=new Ee({parentTile:t,queryParams:t.queryParams,parentGeometricError:t.geometricError,parentBoundingVolume:t.boundingVolume,parentRefine:t.refine,json:e,rootPath:t.rootPath,geometricErrorMultiplier:t.geometricErrorMultiplier,loadOutsideView:t.loadOutsideView,level:t.level+1,tileLoader:t.tileLoader,cameraOnLoad:A,occlusionCullingService:t.occlusionCullingService,renderer:t.renderer,static:t.static,centerModel:!1,displayErrors:t.displayErrors,displayCopyright:t.displayCopyright});t.childrenTiles.push(r),t.add(r)}))}()}(t.metric),function(A,e){if(!t.hasMeshContent)return;if(!t.inFrustum)return t._disposeChildren(),void s(A);if(t.occlusionCullingService&&!e&&t.hasMeshContent&&t.meshContent.length>0&&t.meshDisplayed&&t._areAllChildrenLoadedAndHidden())return t._disposeChildren(),void s(A);if(A>=t.geometricErrorMultiplier*t.geometricError)t._disposeChildren(),s(A)}(t.metric,r)}_areAllChildrenLoadedAndHidden(){let A=!0;const e=this;return this.childrenTiles.every((t=>{if(t.hasMeshContent){if(t.childrenTiles.length>0)return A=!1,!1;if(!t.inFrustum)return!0;if(!t.materialVisibility||t.meshDisplayed)return A=!1,!1;if(e.occlusionCullingService.hasID(t.colorID))return A=!1,!1}else if(!t._areAllChildrenLoadedAndHidden())return A=!1,!1;return!0})),A}_isReady(){if(!this.inFrustum)return!0;if(this.hasUnloadedJSONContent)return!1;if(!this.hasMeshContent||0==this.meshContent.length||!this.materialVisibility){if(this.children.length>0){var A=!0;return this.childrenTiles.every((e=>!!e._isReady()||(A=!1,!1))),A}return!1}return!this.hasMeshContent||!(this.meshContent.length<this.hasMeshContent)&&(!!this.materialVisibility&&!!this.meshDisplayed)}_changeContentVisibility(A){const e=this;e.hasMeshContent&&e.meshContent.length>0&&(A?e.meshContent.forEach((A=>{A.traverse((A=>{(A.isMesh||A.isPoints)&&A.layers.enable(0)}))})):e.meshContent.forEach((A=>{A.traverse((A=>{(A.isMesh||A.isPoints)&&A.layers.disable(0)}))}))),e.materialVisibility!=A&&(e.materialVisibility=A,e.meshDisplayed=!0)}_calculateUpdateMetric(e,t){if(this.boundingVolume instanceof i){if(ce.copy(this.boundingVolume.sphere),ce.applyMatrix4(this.matrixWorld),!t.intersectsSphere(ce))return-1}else{if(!(this.boundingVolume instanceof A.Sphere))return console.error("unsupported shape"),-1;if(ce.copy(this.boundingVolume),ce.applyMatrix4(this.matrixWorld),!t.intersectsSphere(ce))return-1}const r=Math.max(0,e.position.distanceTo(ce.center)-ce.radius);if(0==r)return 0;const s=this.matrixWorld.getMaxScaleOnAxis();this.renderer&&this.renderer.getDrawingBufferSize(this.rendererSize);let o=this.rendererSize.y,n=e.fov;e.aspect<1&&(n*=e.aspect,o=this.rendererSize.x);let a=2*Math.tan(.5*n*.017453292519943295)*r;return 16*window.devicePixelRatio*a/(o*s)}_getSiblings(){const A=this,e=[];if(!A.parentTile)return e;let t=A.parentTile;for(;!t.hasMeshContent&&t.parentTile;)t=t.parentTile;return t.childrenTiles.forEach((t=>{if(t&&t!=A){for(;!t.hasMeshContent&&t.childrenTiles[0];)t=t.childrenTiles[0];e.push(t)}})),e}_calculateDistanceToCamera(e){return this.boundingVolume instanceof i?(ce.copy(this.boundingVolume.sphere),ce.applyMatrix4(this.matrixWorld)):this.boundingVolume instanceof A.Sphere?(ce.copy(this.boundingVolume),ce.applyMatrix4(this.matrixWorld)):console.error("unsupported shape"),Math.max(0,e.position.distanceTo(ce.center)-ce.radius)}setGeometricErrorMultiplier(A){this.geometricErrorMultiplier=A,this.childrenTiles.forEach((e=>e.setGeometricErrorMultiplier(A)))}_transformWGS84ToCartesian(A,e,t,r){const s=6378137/Math.sqrt(1-.006694384442042*Math.pow(Math.sin(e),2)),i=Math.cos(e),o=Math.cos(A),n=Math.sin(e),a=s+t,g=a*i*o,l=a*i*Math.sin(A),c=(.993305615557957*s+t)*n;r.set(g,l,c)}}function ue(A){var e=document.createElement("div");e.textContent=A,e.style.position="fixed",e.style.top="10px",e.style.left="50%",e.style.transform="translateX(-50%)",e.style.padding="10px",e.style.backgroundColor="#ff8800",e.style.color="#ffffff",e.style.zIndex="9999",document.body.appendChild(e),setTimeout((function(){e.remove()}),8e3)}function Qe(){ge||(ge=document.createElement("div"));var A="";for(let e in de)de.hasOwnProperty(e)&&de[e]>0&&(A+=e+", ");ge.textContent=A,ge.style.position="fixed",ge.style.bottom="20px",ge.style.left="20px",ge.style.color="white",ge.style.textShadow="2px 2px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000",ge.style.padding="10px",ge.style.backgroundColor="rgba(0, 0, 0, 0.1)",document.body.appendChild(ge)}const pe=new A.Sphere(new A.Vector3(0,0,0),1),fe=new A.Vector3(0,0,0),me=new A.Vector3(0,0,0),ye=new A.Vector3(0,1,0),we=new A.Vector2,De=new A.Quaternion,xe=new A.Matrix4;class Re extends A.Object3D{constructor(A){super();const e=this;if(A.queryParams&&(this.queryParams={...A.queryParams}),this.uuid=ae(),A.tileLoader?this.tileLoader=A.tileLoader:console.error("an instanced tileset must be provided an InstancedTilesetLoader"),this.master=A.master,this.meshCallback=A.meshCallback,this.loadOutsideView=A.loadOutsideView,this.cameraOnLoad=A.cameraOnLoad,this.parentTile=A.parentTile,this.childrenTiles=[],this.jsonChildren=[],this.meshContent=new Set,this.static=A.static,this.static&&(this.matrixAutoUpdate=!1,this.matrixWorldAutoUpdate=!1),this.tileContent,this.refinement,this.rootPath,this.geometricError,this.boundingVolume,this.json,this.materialVisibility=!1,this.inFrustum=!0,this.level=A.level?A.level:0,this.hasMeshContent=0,this.hasUnloadedJSONContent=0,this.centerModel=A.centerModel,this.deleted=!1,this.abortController=new AbortController,A.json)this.rootPath=A.json.rootPath?A.json.rootPath:A.rootPath,A.json.children&&(this.jsonChildren=A.json.children),e.setup(A);else if(A.url){this.loadJson=(t,r)=>{const s=le.dirname(r);e.setup({rootPath:s,json:t,onLoadCallback:A.onLoadCallback})};var t=A.url;if(e.queryParams){var r="";for(let A in e.queryParams)e.queryParams.hasOwnProperty(A)&&(r+="&"+A+"="+e.queryParams[A]);t.includes("?")?t+=r:t+="?"+r.substring(1)}e.tileLoader.get(e.abortController,t,e.uuid,e)}}async setup(e){const t=this;if(e.json.root?(t.json=e.json.root,!t.json.children&&t.json.getChildren&&(t.json.children=await t.json.getChildren()),t.jsonChildren=t.json.children,t.json.refinement||(t.json.refinement=e.json.refinement),t.json.geometricError||(t.json.geometricError=e.json.geometricError),t.json.transform||(t.json.transform=e.json.transform),t.json.boundingVolume||(t.json.boundingVolume=e.json.boundingVolume)):(t.json=e.json,!t.json.children&&t.json.getChildren&&(t.json.children=await t.json.getChildren(),t.jsonChildren=t.json.children)),t.rootPath=e.json.rootPath?e.json.rootPath:e.rootPath,t.json.refinement?t.refinement=t.json.refinement:t.refinement=e.parentRefinement,t.json.geometricError?t.geometricError=t.json.geometricError:t.geometricError=e.parentGeometricError,t.json.transform&&!t.centerModel){let e=new A.Matrix4;e.elements=t.json.transform,t.master.applyMatrix4(e)}if(t.json.boundingVolume)if(t.json.boundingVolume.box)t.boundingVolume=new i(t.json.boundingVolume.box);else if(t.json.boundingVolume.region){const e=t.json.boundingVolume.region;t.transformWGS84ToCartesian(e[0],e[1],e[4],fe),t.transformWGS84ToCartesian(e[2],e[3],e[5],me),fe.lerp(me,.5),t.boundingVolume=new A.Sphere(new A.Vector3(fe.x,fe.y,fe.z),fe.distanceTo(me))}else if(t.json.boundingVolume.sphere){const e=t.json.boundingVolume.sphere;t.boundingVolume=new A.Sphere(new A.Vector3(e[0],e[1],e[2]),e[3])}else t.boundingVolume=e.parentBoundingVolume;else t.boundingVolume=e.parentBoundingVolume;function r(A){A.uri&&A.uri.includes("json")||A.url&&A.url.includes("json")?t.hasUnloadedJSONContent++:t.hasMeshContent++}if(t.json.content?(r(t.json.content),t.load()):t.json.contents&&(t.json.contents.forEach((A=>r(A))),t.load()),t.centerModel){const e=new A.Sphere;t.boundingVolume instanceof i?e.copy(t.boundingVolume.sphere):t.boundingVolume instanceof A.Sphere&&e.copy(t.boundingVolume),this.json.boundingVolume.region&&(t.transformWGS84ToCartesian(.5*(t.json.boundingVolume.region[0]+t.json.boundingVolume.region[2]),.5*(t.json.boundingVolume.region[1]+t.json.boundingVolume.region[3]),.5*(t.json.boundingVolume.region[4]+t.json.boundingVolume.region[5]),fe),De.setFromUnitVectors(fe.normalize(),ye.normalize()),t.master.applyQuaternion(De),t.master.updateWorldMatrix(!1,!1)),xe.makeTranslation(-e.center.x*t.scale.x,-e.center.y*t.scale.y,-e.center.z*t.scale.z),t.master.matrix.multiply(xe),t.master.matrix.decompose(t.master.position,t.master.quaternion,t.master.scale)}t.isSetup=!0,e.onLoadCallback&&e.onLoadCallback(t)}isAbsolutePathOrURL(A){const e=/^(?:http|https|ftp|tcp|udp):\/\/\S+/.test(A),t=A.startsWith("/")&&!A.startsWith("//");return e||t}assembleURL(A,e){A.endsWith("/")||(A+="/");const t=new URL(A);let r=t.pathname.split("/").filter((A=>""!==A)),s=e.split("/").filter((A=>""!==A));for(let A=1;A<=r.length&&!(A>=s.length);A++){if(r.slice(r.length-A,r.length).join("/")===s.slice(0,A).join("/")){for(let e=0;e<A;e++)r.pop();break}}for(;s.length>0&&".."===s[0];)r.pop(),s.shift();return"".concat(t.protocol,"//").concat(t.host,"/").concat([...r,...s].join("/"))}extractQueryParams(A,e){const t=new URL(A);for(let[A,r]of t.searchParams)e[A]=r;return t.search="",t.toString()}load(){var A=this;function e(e){let t;e.uri?t=e.uri:e.url&&(t=e.url);const r=/^(?:http|https|ftp|tcp|udp):\/\/\S+/;if(r.test(A.rootPath)?r.test(t)||(t=A.assembleURL(A.rootPath,t)):le.isAbsolute(A.rootPath)&&(t=A.rootPath+le.sep+t),t=A.extractQueryParams(t,A.queryParams),A.queryParams){var s="";for(let e in A.queryParams)A.queryParams.hasOwnProperty(e)&&(s+="&"+e+"="+A.queryParams[e]);t.includes("?")?t+=s:t+="?"+s.substring(1)}t&&(t.includes(".b3dm")||t.includes(".glb")||t.includes(".gltf")?(A.contentURL=t,A.tileLoader.get(A.abortController,t,A.uuid,A,A.cameraOnLoad?()=>A.calculateDistanceToCamera(A.cameraOnLoad):()=>0,(()=>A.getSiblings()),A.level,!A.json.boundingVolume.region,!!A.json.boundingVolume.region,A.geometricError)):t.includes(".json")&&A.tileLoader.get(A.abortController,t,A.uuid,A))}A.deleted||(A.json.content?e(A.json.content):A.json.contents&&A.json.contents.forEach((A=>e(A))),A.matrixWorldNeedsUpdate=!0,A.updateWorldMatrix(!0,!0))}loadMesh(A){this.deleted||this.meshContent.add(A)}loadJson(A,e){this.deleted||(this.json.children&&(this.jsonChildren=this.json.children),A.rootPath=le.dirname(e),this.jsonChildren.push(A),this.hasUnloadedJSONContent--)}dispose(){const A=this;A.childrenTiles.forEach((A=>A.dispose())),A.deleted=!0,A.abortController&&A.abortController.abort(),this.parent=null,this.parentTile=null,this.dispatchEvent({type:"removed"})}disposeChildren(){this.childrenTiles.forEach((A=>A.dispose())),this.childrenTiles=[]}_update(A,e){const t=this;if(!t.isSetup)return;t.materialVisibility;function r(A){if(t.hasMeshContent&&!(t.meshContent.size<t.hasMeshContent)){if(A<0)return t.inFrustum=!1,void t.changeContentVisibility(!!t.loadOutsideView);if(t.inFrustum=!0,0!=t.childrenTiles.length){if(A>=t.master.geometricErrorMultiplier*t.geometricError)t.changeContentVisibility(!0);else if(A<t.master.geometricErrorMultiplier*t.geometricError){let A=!0;t.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A&&t.changeContentVisibility(!1)}}else t.changeContentVisibility(!0)}}t.boundingVolume&&t.geometricError&&(t.metric=t.calculateUpdateMetric(A,e)),t.childrenTiles.forEach((t=>t._update(A,e))),r(t.metric),function(e){if(e<0&&t.hasMeshContent)return;if((!t.hasMeshContent&&t.rootPath||e<t.master.geometricErrorMultiplier*t.geometricError&&t.meshContent.size>0)&&t.json&&t.jsonChildren&&t.childrenTiles.length!=t.jsonChildren.length)t.jsonChildren.forEach((e=>{if(!(e.root||e.children||e.getChildren||e.content||e.contents))return;let r=new Re({parentTile:t,queryParams:t.queryParams,parentGeometricError:t.geometricError,parentBoundingVolume:t.boundingVolume,parentRefinement:t.refinement,json:e,rootPath:t.rootPath,loadOutsideView:t.loadOutsideView,level:t.level+1,tileLoader:t.tileLoader,cameraOnLoad:A,master:t.master,centerModel:!1});t.childrenTiles.push(r)}))}(t.metric),function(A,e){if(!t.hasMeshContent)return;if(!t.inFrustum)return t.disposeChildren(),void r(A);if(A>=t.master.geometricErrorMultiplier*t.geometricError)t.disposeChildren(),r(A)}(t.metric)}areAllChildrenLoadedAndHidden(){let A=!0;return this.childrenTiles.every((e=>{if(e.hasMeshContent){if(e.childrenTiles.length>0)return A=!1,!1;if(!e.inFrustum)return!0;if(!e.materialVisibility||e.meshesToDisplay!=e.meshesDisplayed)return A=!1,!1}else if(!e.areAllChildrenLoadedAndHidden())return A=!1,!1;return!0})),A}isReady(){if(!this.inFrustum)return!0;if(this.hasUnloadedJSONContent)return!1;if(!this.hasMeshContent||0==this.meshContent.size||!this.materialVisibility){if(this.childrenTiles.length>0){var A=!0;return this.childrenTiles.every((e=>!!e.isReady()||(A=!1,!1))),A}return!1}return!this.hasMeshContent||!(this.meshContent.size<this.hasMeshContent)&&!!this.materialVisibility}changeContentVisibility(A){this.materialVisibility=A}calculateUpdateMetric(e,t){if(this.boundingVolume instanceof i){if(pe.copy(this.boundingVolume.sphere),pe.applyMatrix4(this.master.matrixWorld),!t.intersectsSphere(pe))return-1}else{if(!(this.boundingVolume instanceof A.Sphere))return console.error("unsupported shape"),-1;if(pe.copy(this.boundingVolume),pe.applyMatrix4(this.master.matrixWorld),!t.intersectsSphere(pe))return-1}const r=Math.max(0,e.position.distanceTo(pe.center)-pe.radius);if(0==r)return 0;const s=this.master.matrixWorld.getMaxScaleOnAxis();this.master._renderSize(we);let o=we.y,n=e.fov;e.aspect<1&&(n*=e.aspect,o=we.x);let a=2*Math.tan(.5*n*.017453292519943295)*r;return 16*window.devicePixelRatio*a/(o*s)}getSiblings(){const A=this,e=[];if(!A.parentTile)return e;let t=A.parentTile;for(;!t.hasMeshContent&&t.parentTile;)t=t.parentTile;return t.childrenTiles.forEach((t=>{if(t&&t!=A){for(;!t.hasMeshContent&&t.childrenTiles[0];)t=t.childrenTiles[0];e.push(t)}})),e}calculateDistanceToCamera(e){return this.boundingVolume instanceof i?(pe.copy(this.boundingVolume.sphere),pe.applyMatrix4(this.master.matrixWorld)):this.boundingVolume instanceof A.Sphere?(pe.copy(this.boundingVolume),pe.applyMatrix4(this.master.matrixWorld)):console.error("unsupported shape"),Math.max(0,e.position.distanceTo(pe.center)-pe.radius)}getWorldMatrix(){return this.master.matrixWorld}transformWGS84ToCartesian(A,e,t,r){const s=6378137/Math.sqrt(1-.006694384442042*Math.pow(Math.sin(e),2)),i=Math.cos(e),o=Math.cos(A),n=Math.sin(e),a=s+t,g=a*i*o,l=a*i*Math.sin(A),c=(.993305615557957*s+t)*n;r.set(g,l,c)}}class Se extends A.Object3D{constructor(e){super(),e.master=this,e.domWidth&&e.domHeight?this.rendererSize=new A.Vector2(e.domWidth,e.domHeight):this.rendererSize=new A.Vector2(1e3,1e3),this.renderer=e.renderer,this.geometricErrorMultiplier=e.geometricErrorMultiplier?e.geometricErrorMultiplier:1,this.tileset=new Re(e),e.static&&(this.matrixAutoUpdate=!1),this.tileLoader=e.tileLoader}_renderSize(A){this.renderer?this.renderer.getDrawingBufferSize(A):A.copy(this.rendererSize)}setCanvasSize(A,e){this.rendererSize.set(A,e)}update(e,t){if(t)this.tileset._update(e,t);else{const t=new A.Frustum;t.setFromProjectionMatrix((new A.Matrix4).multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse)),this.tileset._update(e,t)}}setGeometricErrorMultiplier(A){this.geometricErrorMultiplier=A||1}}class Te{constructor(e){const t=this;t.scene=e,t.instancedTiles=[],t.instancedMesh,t.reuseableMatrix=new A.Matrix4}addInstance(A){const e=this;A.added=!0,A.listOMesh=e.instancedTiles,e.instancedTiles.push(A),e.instancedMesh&&A.loadMesh(e.instancedMesh)}addToScene(){const e=this;e.instancedMesh.setMatrixAt(0,new A.Matrix4),e.instancedMesh.instanceMatrix.needsUpdate=!0,e.instancedMesh.count=1,e.scene.add(e.instancedMesh),e.instancedMesh.onAfterRender=()=>{delete e.instancedMesh.onAfterRender,e.instancedMesh.displayedOnce=!0}}setObject(A){const e=this;e.instancedMesh=A,e.instancedMesh.matrixAutoUpdate=!1,e.instancedMesh.matrixWorldAutoUpdate=!1,e.scene.children.includes(A)||this.addToScene();for(let A=0;A<e.instancedTiles.length;A++)e.instancedTiles[A].loadMesh(e.instancedMesh)}update(){const A=this;for(let e=A.instancedTiles.length-1;e>=0;e--)A.instancedTiles[e].deleted&&A.instancedTiles.splice(e,1);if(A.instancedMesh){A.instancedMesh.count=0,A.instancedMesh.instancedTiles=[];for(let e=0;e<A.instancedTiles.length;e++)A.instancedTiles[e].meshContent.add(A.instancedMesh),A.instancedTiles[e].materialVisibility&&(A.instancedMesh.count++,A.reuseableMatrix.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),A.reuseableMatrix.multiply(A.instancedTiles[e].master.matrixWorld),A.reuseableMatrix.multiply(A.instancedMesh.baseMatrix),A.instancedMesh.setMatrixAt(A.instancedMesh.count-1,A.reuseableMatrix),A.instancedMesh.instancedTiles.push(A.instancedTiles[e]));A.instancedMesh.instanceMatrix.needsUpdate=!0,A.instancedMesh.needsUpdate=!0,A.instancedMesh.computeBoundingSphere()}}getCount(){return this.instancedTiles.length}dispose(){const A=this;return!(A.instancedTiles.length>0)&&(!!A.instancedMesh&&(A.scene.remove(A.instancedMesh),A.instancedMesh.traverse((A=>{if(A.dispose&&A.dispose(),A.material)if(A.material.length)for(let e=0;e<A.material.length;++e)A.material[e].dispose();else A.material.dispose();A.geometry&&A.geometry.dispose()})),A.instancedMesh.dispose(),!0))}}class Le{constructor(){const A=this;A.count=0,A.json,A.instancedTiles=[]}addInstance(A){this.instancedTiles.push(A),this.json&&A.loadJson(this.json,this.url)}setObject(A,e){const t=this;t.json=A,t.url=e;for(let A=0;A<t.instancedTiles.length;A++)t.instancedTiles[A].loadJson(t.json,t.url)}getCount(){return this.instancedTiles.length}update(){const A=this;for(let e=A.instancedTiles.length-1;e>=0;e--)A.instancedTiles[e].deleted&&A.instancedTiles.splice(e,1)}dispose(){return!(!this.json||0!=this.instancedTiles.length)}}let Me=0;const be=new A.Matrix4;be.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1);class Fe{constructor(A,e){if(this.maxCachedItems=100,this.maxInstances=1,this.proxy=e.proxy,e&&(this.meshCallback=e.meshCallback,this.pointsCallback=e.pointsCallback,e.maxCachedItems&&(this.maxCachedItems=e.maxCachedItems),e.maxInstances&&(this.maxInstances=e.maxInstances)),this.gltfLoader=new B,e&&e.dracoLoader)this.gltfLoader.setDRACOLoader(e.dracoLoader),this.hasDracoLoader=!0;else{const A=new IA;A.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"),this.gltfLoader.setDRACOLoader(A),this.gltfLoader.hasDracoLoader=!0}if(e&&e.ktx2Loader)this.gltfLoader.setKTX2Loader(e.ktx2Loader),this.hasKTX2Loader=!0;else if(e&&e.renderer){const A=new FA;A.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(e.renderer),this.gltfLoader.setKTX2Loader(A),this.gltfLoader.hasKTX2Loader=!0}this.b3dmDecoder=new C(this.gltfLoader),this.cache=new o.LinkedHashMap,this.scene=A,this.ready=[],this.downloads=[],this.nextReady=[],this.nextDownloads=[]}update(){const A=this;A._checkSize(),A.cache._data.forEach((A=>{A.update()})),Me<8&&A._download(),A._loadBatch()}_download(){const e=this;if(0!=e.nextDownloads.length||(e._getNextDownloads(),0!=e.nextDownloads.length))for(;e.nextDownloads.length>0;){const r=e.nextDownloads.shift();if(r){if(r.path.includes(".b3dm"))t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:r.path}):()=>fetch(r.path),Me++,t().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+r.path),new Error("couldn't load \"".concat(r.path,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.arrayBuffer()})).then((A=>this.b3dmDecoder.parseB3DMInstanced(A,e.meshCallback,e.maxInstances,r.sceneZupToYup,r.meshZupToYup))).then((A=>{A.frustumCulled=!1,r.tile.setObject(A),e.ready.unshift(r)})).catch((A=>console.error(A))).finally((()=>{Me--}));if(r.path.includes(".glb")||r.path.includes(".gltf"))t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:r.path}):()=>fetch(r.path),Me++,t().then((A=>{if(!A.ok)throw new Error("missing content");return A.arrayBuffer()})).then((async t=>{await Ge(this.gltfLoader),this.gltfLoader.parse(t,null,(t=>{let s;t.scene.asset=t.asset,r.sceneZupToYup&&t.scene.applyMatrix4(be),t.scene.traverse((A=>{A.geometricError=r.geometricError,A.isMesh&&(r.meshZupToYup&&A.applyMatrix4(be),e.meshCallback&&e.meshCallback(A,A.geometricError)),A.isPoints&&console.error("instanced point cloud is not supported")})),t.scene.updateWorldMatrix(!1,!0),t.scene.traverse((t=>{t.isMesh&&(s=new A.InstancedMesh(t.geometry,t.material,e.maxInstances),s.baseMatrix=t.matrixWorld)})),e.ready.unshift(r),s?(s.frustumCulled=!1,r.tile.setObject(s)):t.scene.traverse((A=>{A.dispose&&A.dispose(),A.material&&A.material.dispose()}))}))}),(A=>{console.error("could not load tile : "+r.path)})).finally((()=>{Me--}));else if(r.path.includes(".json")){var t;t=e.proxy?()=>fetch(e.proxy,{method:"POST",body:r.path}):()=>fetch(r.path),Me++,t().then((A=>{if(!A.ok)throw console.error("could not load tile with path : "+r.path),new Error("couldn't load \"".concat(r.path,'". Request failed with status ').concat(A.status," : ").concat(A.statusText));return A.json()})).then((A=>KA(A,r.path))).then((A=>{r.tile.setObject(A,r.path),e.ready.unshift(r)})).catch((A=>console.error(A))).finally((()=>{Me--}))}}}}_loadBatch(){if(0==this.nextReady.length&&(this._getNextReady(),0==this.nextReady.length))return 0;return this.nextReady.shift()?1:0}_getNextReady(){let A=Number.MAX_VALUE,e=-1;for(let A=this.ready.length-1;A>=0;A--)this.ready[A].distanceFunction||this.nextReady.push(this.ready.splice(A,1)[0]);if(!(this.nextReady.length>0)){for(let t=this.ready.length-1;t>=0;t--){const r=this.ready[t].distanceFunction()*this.ready[t].level;r<A&&(A=r,e=t)}if(e>=0){const A=this.ready.splice(e,1).pop();this.nextReady.push(A);const t=A.getSiblings();for(let A=this.ready.length-1;A>=0;A--)t.includes(this.ready[A].uuid)&&this.nextready.push(this.ready.splice(A,1).pop())}}}get(A,e,t,r,s,i,o,n,a,g){const l=this,c=function(A){for(var e=A.split("/"),t=[],r=0,s=0;s<e.length;s++){var i=e[s];"."!==i&&""!==i&&".."!==i?t[r++]=i:".."===i&&r>0&&r--}if(0===r)return"/";var o="";for(s=0;s<r;s++)o+="/"+t[s];return o}(e);if(!(e.includes(".b3dm")||e.includes(".json")||e.includes(".glb")||e.includes(".gltf")))return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");const h=l.cache.get(c);if(h)h.addInstance(r);else if(e.includes(".b3dm")||e.includes(".glb")||e.includes(".gltf")){const h=new Te(l.scene);h.addInstance(r),l.cache.put(c,h);const I=new AbortController;A.signal.addEventListener("abort",(()=>{0==h.getCount()&&I.abort()})),this.downloads.push({abortController:I,tile:h,key:c,path:e,distanceFunction:s,getSiblings:i,level:o,uuid:t,sceneZupToYup:n,meshZupToYup:a,geometricError:g,shouldDoDownload:()=>!0})}else if(e.includes(".json")){const t=new Le;t.addInstance(r),l.cache.put(c,t);const n=new AbortController;A.signal.addEventListener("abort",(()=>{0==t.getCount()&&n.abort()})),this.downloads.push({abortController:n,tile:t,key:c,path:e,distanceFunction:s,getSiblings:i,level:o,shouldDoDownload:()=>!0})}}_getNextDownloads(){let A=Number.MAX_VALUE,e=-1;for(let A=this.downloads.length-1;A>=0;A--){const e=this.downloads[A];e.shouldDoDownload()?e.distanceFunction||this.nextDownloads.push(this.downloads.splice(A,1)[0]):this.downloads.splice(A,1)}if(!(this.nextDownloads.length>0)){for(let t=this.downloads.length-1;t>=0;t--){const r=this.downloads[t],s=r.distanceFunction()*r.level;s<A&&(A=s,e=t)}if(e>=0){const A=this.downloads.splice(e,1).pop();this.nextDownloads.push(A);const t=A.getSiblings();for(let A=this.downloads.length-1;A>=0;A--)t.includes(this.downloads[A].uuid)&&this.nextDownloads.push(this.downloads.splice(A,1).pop())}}}_checkSize(){const A=this;let e=0;for(;A.cache.size()>A.maxCachedItems&&e<A.cache.size();){e++;const t=A.cache.head();A.cache.remove(t.key),t.value.dispose()||A.cache.put(t.key,t.value)}}}async function Ge(A){return new Promise((e=>{const t=setInterval((()=>{A.hasDracoLoader&&!A.dracoLoader||A.hasKTX2Loader&&!A.ktx2Loader||(clearInterval(t),e())}),10)}))}})(),s})()));
3
3
  //# sourceMappingURL=threedtiles.min.js.map